Date: Wed, 11 Sep 2024 08:05:26 +0200
From: Johan Hovold <johan@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] USB-serial updates for 6.12-rc1

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git tags/usb-serial-6.12-rc1

for you to fetch changes up to 4c0d9477ba69a417c698aec1d3012e188cf97add:

  USB: serial: kobil_sct: restore initial terminal settings (2024-08-26 15:29:27 +0200)

----------------------------------------------------------------
USB-serial updates for 6.12-rc1

Here are the USB-serial updates for 6.12-rc1, including:

 - fix kobil_sct initial terminal settings
 - set driver owner when registering drivers

All have been in linux-next with no reported issues.

----------------------------------------------------------------
Johan Hovold (1):
      USB: serial: kobil_sct: restore initial terminal settings

Krzysztof Kozlowski (2):
      USB: serial: set driver owner when registering drivers
      USB: serial: drop driver owner initialization

 drivers/usb/serial/aircable.c          |  1 -
 drivers/usb/serial/ark3116.c           |  1 -
 drivers/usb/serial/belkin_sa.c         |  1 -
 drivers/usb/serial/ch341.c             |  1 -
 drivers/usb/serial/cp210x.c            |  1 -
 drivers/usb/serial/cyberjack.c         |  1 -
 drivers/usb/serial/cypress_m8.c        |  3 ---
 drivers/usb/serial/digi_acceleport.c   |  2 --
 drivers/usb/serial/empeg.c             |  1 -
 drivers/usb/serial/f81232.c            |  2 --
 drivers/usb/serial/f81534.c            |  1 -
 drivers/usb/serial/ftdi_sio.c          |  1 -
 drivers/usb/serial/garmin_gps.c        |  1 -
 drivers/usb/serial/generic.c           |  1 -
 drivers/usb/serial/io_edgeport.c       |  4 ----
 drivers/usb/serial/io_ti.c             |  2 --
 drivers/usb/serial/ipaq.c              |  1 -
 drivers/usb/serial/ipw.c               |  1 -
 drivers/usb/serial/ir-usb.c            |  1 -
 drivers/usb/serial/iuu_phoenix.c       |  1 -
 drivers/usb/serial/keyspan.c           |  4 ----
 drivers/usb/serial/keyspan_pda.c       |  2 --
 drivers/usb/serial/kl5kusb105.c        |  1 -
 drivers/usb/serial/kobil_sct.c         |  4 +---
 drivers/usb/serial/mct_u232.c          |  1 -
 drivers/usb/serial/metro-usb.c         |  1 -
 drivers/usb/serial/mos7720.c           |  1 -
 drivers/usb/serial/mos7840.c           |  1 -
 drivers/usb/serial/mxuport.c           |  1 -
 drivers/usb/serial/navman.c            |  1 -
 drivers/usb/serial/omninet.c           |  1 -
 drivers/usb/serial/opticon.c           |  1 -
 drivers/usb/serial/option.c            |  1 -
 drivers/usb/serial/oti6858.c           |  1 -
 drivers/usb/serial/pl2303.c            |  1 -
 drivers/usb/serial/qcaux.c             |  1 -
 drivers/usb/serial/qcserial.c          |  1 -
 drivers/usb/serial/quatech2.c          |  1 -
 drivers/usb/serial/safe_serial.c       |  1 -
 drivers/usb/serial/sierra.c            |  1 -
 drivers/usb/serial/spcp8x5.c           |  1 -
 drivers/usb/serial/ssu100.c            |  1 -
 drivers/usb/serial/symbolserial.c      |  1 -
 drivers/usb/serial/ti_usb_3410_5052.c  |  2 --
 drivers/usb/serial/upd78f0730.c        |  1 -
 drivers/usb/serial/usb-serial-simple.c |  1 -
 drivers/usb/serial/usb-serial.c        | 12 +++++++-----
 drivers/usb/serial/usb_debug.c         |  2 --
 drivers/usb/serial/visor.c             |  3 ---
 drivers/usb/serial/whiteheat.c         |  2 --
 drivers/usb/serial/wishbone-serial.c   |  1 -
 drivers/usb/serial/xr_serial.c         |  1 -
 drivers/usb/serial/xsens_mt.c          |  1 -
 include/linux/usb/serial.h             |  7 +++++--
 54 files changed, 13 insertions(+), 78 deletions(-)

.
Date: Wed, 11 Sep 2024 08:08:43 +0200
From: Johan Hovold <johan@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] USB-serial fixes for 6.12-rc1-2

The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6:

  Linux 6.11-rc6 (2024-09-01 19:46:02 +1200)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git tags/usb-serial-6.12-rc1-2

for you to fetch changes up to 7d47d22444bb7dc1b6d768904a22070ef35e1fc0:

  USB: serial: pl2303: add device id for Macrosilicon MS3020 (2024-09-06 17:11:13 +0200)

----------------------------------------------------------------
USB-serial device id for 6.12-rc1

Here's a new pl2303 device id.

This one has been in linux-next with no reported issues.

----------------------------------------------------------------
Junhao Xie (1):
      USB: serial: pl2303: add device id for Macrosilicon MS3020

 drivers/usb/serial/pl2303.c | 1 +
 drivers/usb/serial/pl2303.h | 4 ++++
 2 files changed, 5 insertions(+)

.
Date: Wed, 11 Sep 2024 09:58:49 +0200
From: Petr Mladek <pmladek@suse.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	John Ogness <john.ogness@linutronix.de>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Thomas Gleixner <tglx@linutronix.de>, Jan Kara <jack@suse.cz>,
	Peter Zijlstra <peterz@infradead.org>,
	Petr Mladek <pmladek@suse.com>, linux-kernel@vger.kernel.org,
	Tony Lindgren <tony.lindgren@linux.intel.com>,
	Yu Liao <liaoyu15@huawei.com>
Subject: [GIT PULL] printk build fixup for 6.11

Hi Linus,

please pull a printk related build fix for 6.11 from

  git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.11-fixup

=====================================

- Fix build of serial_core as a module.

----------------------------------------------------------------
Petr Mladek (1):
      Merge branch 'for-6.11-fixup' into for-linus

Yu Liao (1):
      printk: Export match_devname_and_update_preferred_console()

 kernel/printk/printk.c | 1 +
 1 file changed, 1 insertion(+)

.
Date: Wed, 11 Sep 2024 15:08:02 +0000
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Linus Torvalds" <torvalds@linux-foundation.org>
Cc: soc@kernel.org, linux-kernel@vger.kernel.org,
 linux-arm-kernel@lists.infradead.org
Subject: [GIT PULL] ARM: SoC fixes for 6.11, part 3

The following changes since commit 9cc7b1705141d1a077493dc107ed626e8dc84681:

  Merge tag 'at91-fixes-6.11' of https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux into arm/fixes (2024-08-30 19:52:28 +0000)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git tags/arm-fixes-6.11-3

for you to fetch changes up to 0e7af99aef5f58b4bae00e45fd1c2626a987f7bb:

  Merge tag 'riscv-soc-fixes-for-v6.11-final' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into arm/fixes (2024-09-11 08:54:37 +0000)

----------------------------------------------------------------
ARM: SoC fixes for 6.11, part 3

The bulk of the changes this time are for device tree files in the
rockchips platform, addressing correctness issues on individual
boards, plus one change in the rk356x SoC file to make it match
the binding.

The only other changes that came in are

 - a CPU frequencey scaling fix for JH7110 (RISC-V)
 - a build fix for the cznic hwrandom driver
 - a fix for a deadlock in qualcomm uefi secure
   application firmware driver

----------------------------------------------------------------
Alexander Shiyan (1):
      arm64: dts: rockchip: Remove broken tsadc pinctrl binding for rk356x

Arnd Bergmann (4):
      Merge tag 'qcom-drivers-fixes-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into arm/fixes
      Merge tag 'v6.11-rockchip-dtsfixes' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/fixes
      platform: cznic: turris-omnia-mcu: fix HW_RANDOM dependency
      Merge tag 'riscv-soc-fixes-for-v6.11-final' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into arm/fixes

Cristian Ciocaltea (2):
      dt-bindings: soc: rockchip: Fix compatibles for RK3588 VO{0,1}_GRF
      arm64: dts: rockchip: Fix compatibles for RK3588 VO{0,1}_GRF

Dan Carpenter (1):
      firmware: qcom: uefisecapp: Fix deadlock in qcuefi_acquire()

FUKAUMI Naoki (1):
      arm64: dts: rockchip: fix PMIC interrupt pin in pinctrl for ROCK Pi E

Quentin Schulz (2):
      arm64: dts: rockchip: fix eMMC/SPI corruption when audio has been used on RK3399 Puma
      arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma

Xingyu Wu (1):
      riscv: dts: starfive: jh7110-common: Fix lower rate of CPUfreq by setting PLL0 rate to 1.5GHz

 .../devicetree/bindings/soc/rockchip/grf.yaml      | 10 +++++-
 arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts  |  2 +-
 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi      | 36 ++++++++++++++++++++--
 arch/arm64/boot/dts/rockchip/rk356x.dtsi           |  7 ++---
 arch/arm64/boot/dts/rockchip/rk3588-base.dtsi      |  6 ++--
 arch/riscv/boot/dts/starfive/jh7110-common.dtsi    |  6 ++++
 drivers/firmware/qcom/qcom_qseecom_uefisecapp.c    |  4 +++
 drivers/platform/cznic/Kconfig                     |  2 +-
 8 files changed, 60 insertions(+), 13 deletions(-)

.
Date: Wed, 11 Sep 2024 15:02:28 -0700
From: Dave Hansen <dave.hansen@linux.intel.com>
To: torvalds@linux-foundation.org
Cc: x86@kernel.org,
	linux-kernel@vger.kernel.org,
	Dave Hansen <dave.hansen@linux.intel.com>
Subject: [GIT PULL] x86/sgx for 6.12-rc1

Hi Linus,

Please pull some x86/sgx changes for 6.12-rc1. These fix a deadlock
in the SGX NUMA allocator. It's probably only triggerable today on
servers with buggy BIOSes, but it's theoretically possible it can
happen on less goofy systems.

--

The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6:

  Linux 6.11-rc6 (2024-09-01 19:46:02 +1200)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git tags/x86_sgx_for_6.12-rc1

for you to fetch changes up to c8ddc99eeba5f00b65efeae920eec3990bfc34ca:

  x86/sgx: Log information when a node lacks an EPC section (2024-09-05 15:20:47 -0700)

----------------------------------------------------------------
Fix deadlock in SGX NUMA node search

----------------------------------------------------------------
Aaron Lu (2):
      x86/sgx: Fix deadlock in SGX NUMA node search
      x86/sgx: Log information when a node lacks an EPC section

 arch/x86/kernel/cpu/sgx/main.c | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

.
Date: Thu, 12 Sep 2024 12:14:14 +0300
From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, PDx86 <platform-driver-x86@vger.kernel.org>, Hans de Goede <hdegoede@redhat.com>, Andy Shevchenko <andy@kernel.org>
Subject: [GIT PULL] platform-drivers-x86 for v6.11-7

Hi Linus,

Here is a platform-drivers-x86 fixes PR for v6.11.

Fixes:
- asus-wmi: Disable OOBE that interferes with backlight control
- panasonic-laptop: Two fixes to SINF array handling

Regards, i.


The following changes since commit d34af755a533271f39cc7d86e49c0e74fde63a37:

  platform/x86/amd: pmf: Make ASUS GA403 quirk generic (2024-09-03 17:31:08 +0300)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git tags/platform-drivers-x86-v6.11-7

for you to fetch changes up to d6de45e3c6f3713d3825d3e2860c11d24e0f941f:

  platform/x86: asus-wmi: Disable OOBE experience on Zenbook S 16 (2024-09-10 15:43:58 +0300)

----------------------------------------------------------------
platform-drivers-x86 for v6.11-7

Fixes:
- asus-wmi: Disable OOBE that interferes with backlight control
- panasonic-laptop: Two fixes to SINF array handling

The following is an automated shortlog grouped by driver:

asus-wmi:
 -  Disable OOBE experience on Zenbook S 16

panasonic-laptop:
 -  Allocate 1 entry extra in the sinf array
 -  Fix SINF array out of bounds accesses

----------------------------------------------------------------
Bas Nieuwenhuizen (1):
      platform/x86: asus-wmi: Disable OOBE experience on Zenbook S 16

Hans de Goede (2):
      platform/x86: panasonic-laptop: Fix SINF array out of bounds accesses
      platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array

 drivers/platform/x86/asus-wmi.c            | 10 ++++++
 drivers/platform/x86/panasonic-laptop.c    | 58 ++++++++++++++++++++++++------
 include/linux/platform_data/x86/asus-wmi.h |  1 +
 3 files changed, 58 insertions(+), 11 deletions(-)

.
Date: Thu, 12 Sep 2024 11:54:41 +0200
From: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
To: torvalds@linux-foundation.org
Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] MIPS changes for v6.12

The following changes since commit 5be63fc19fcaa4c236b307420483578a56986a37:

  Linux 6.11-rc5 (2024-08-25 19:07:11 +1200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git/ tags/mips_6.12

for you to fetch changes up to 439667fb943cfea46d7bde5c7b29c89efec3cbc7:

  mips: Remove posix_types.h include from sigcontext.h (2024-08-29 10:46:00 +0200)

----------------------------------------------------------------
- use devm_clk_get_enabled() helper
- prototype fixes
- cleanup unused stuff

----------------------------------------------------------------
Gaosheng Cui (6):
      MIPS: Remove unused function dump_au1000_dma_channel() in dma.c
      mips/jazz: remove unused jazz_handle_int() declaration
      MIPS: MT: Remove unused function mips_mt_regdump()
      MIPS: Remove unused declarations in asm/cmp.h
      MIPS: Remove unused mips_display/_scroll_message() declarations
      MIPS: dec: prom: Remove unused unregister_prom_console() declaration

Vincent Legoll (2):
      MIPS: ralink: Fix missing `plat_time_init` prototype
      MIPS: ralink: Fix missing `get_c0_perfcount_int` prototype

Wu Bo (2):
      bus: bt1-axi: change to use devm_clk_get_enabled() helper
      bus: bt1-apb: change to use devm_clk_get_enabled() helper

Xi Ruoyao (1):
      mips: Remove posix_types.h include from sigcontext.h

 arch/mips/alchemy/common/dma.c                 | 23 --------
 arch/mips/include/asm/cmp.h                    |  8 ---
 arch/mips/include/asm/dec/prom.h               |  1 -
 arch/mips/include/asm/mach-au1x00/au1000_dma.h |  1 -
 arch/mips/include/asm/mips-boards/generic.h    |  3 -
 arch/mips/include/asm/mips_mt.h                |  2 -
 arch/mips/include/uapi/asm/sigcontext.h        |  1 -
 arch/mips/jazz/setup.c                         |  2 -
 arch/mips/kernel/mips-mt.c                     | 77 --------------------------
 arch/mips/ralink/irq-gic.c                     |  1 +
 arch/mips/ralink/timer-gic.c                   |  2 +
 drivers/bus/bt1-apb.c                          | 23 +-------
 drivers/bus/bt1-axi.c                          | 23 +-------
 13 files changed, 6 insertions(+), 161 deletions(-)

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

.
Date: Thu, 12 Sep 2024 13:59:35 +0100
From: Will Deacon <will@kernel.org>
To: joro@8bytes.org
Cc: iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, robin.murphy@arm.com,
	kernel-team@android.com
Subject: [GIT PULL] iommu/arm-smmu: Updates for 6.12

Hi Joerg,

Please pull these Arm SMMU updates for v6.12. The big new feature is
support for NVIDIA's virtual command queue implementation for SMMUv3,
but everything is summarised in the tag.

** Please note **: I've already pushed this to the arm/smmu branch for
-next coverage, but I thought sending a pull request was still useful
for the records and the signed tag. If you want to recreate the branch,
please feel free.

See you at LPC!

Cheers,

Will

--->8

The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba:

  Linux 6.11-rc3 (2024-08-11 14:27:14 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git tags/arm-smmu-updates

for you to fetch changes up to f1c6cf8e7ab9d7498ee70c69d5093165952d3595:

  Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates (2024-09-12 12:54:14 +0100)

----------------------------------------------------------------
Arm SMMU updates for 6.12

- SMMUv2:
  * Devicetree binding updates for Qualcomm MMU-500 implementations.
  * Extend workarounds for broken Qualcomm hypervisor to avoid touching
    features that are not available (e.g. 16KiB page support, reserved
    context banks).

- SMMUv3:
  * Support for NVIDIA's custom virtual command queue hardware.
  * Fix Stage-2 stall configuration and extend tests to cover this area.
  * A bunch of driver cleanups, including simplification of the master
    rbtree code.

- Plus minor cleanups and fixes across both drivers.

----------------------------------------------------------------
Dan Carpenter (2):
      iommu/arm-smmu-v3: Fix a NULL vs IS_ERR() check
      iommu/tegra241-cmdqv: Fix ioremap() error handling in probe()

Dmitry Baryshkov (1):
      iommu/arm-smmu-qcom: apply num_context_bank fixes for SDM630 / SDM660

Jason Gunthorpe (10):
      iommu/arm-smmu-v3: Add struct arm_smmu_impl_ops
      iommu/arm-smmu-v3: Use the new rb tree helpers
      iommu/arm-smmu-v3: Add arm_smmu_strtab_l1/2_idx()
      iommu/arm-smmu-v3: Add types for each level of the 2 level stream table
      iommu/arm-smmu-v3: Reorganize struct arm_smmu_strtab_cfg
      iommu/arm-smmu-v3: Remove strtab_base/cfg
      iommu/arm-smmu-v3: Do not use devm for the cd table allocations
      iommu/arm-smmu-v3: Shrink the cdtab l1_desc array
      iommu/arm-smmu-v3: Add types for each level of the CD table
      iommu/arm-smmu-v3: Reorganize struct arm_smmu_ctx_desc_cfg

Konrad Dybcio (1):
      iommu/arm-smmu-qcom: Work around SDM845 Adreno SMMU w/ 16K pages

Marc Gonzalez (1):
      iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux

Mostafa Saleh (2):
      iommu/arm-smmu-v3: Match Stall behaviour for S2
      iommu/arm-smmu-v3-test: Test masters with stall enabled

Nate Watterson (1):
      iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV

Nicolin Chen (11):
      iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq
      iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_build_sync_cmd
      iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_init
      iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV
      iommu/arm-smmu-v3: Add ARM_SMMU_OPT_TEGRA241_CMDQV
      iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl
      iommu/arm-smmu-v3: Start a new batch if new command is not supported
      iommu/tegra241-cmdqv: Limit CMDs for VCMDQs of a guest owned VINTF
      iommu/tegra241-cmdqv: Fix -Wformat-truncation warnings in lvcmdq_error_header
      iommu/tegra241-cmdqv: Drop static at local variable
      iommu/tegra241-cmdqv: Do not allocate vcmdq until dma_set_mask_and_coherent

Nikunj Kela (1):
      dt-bindings: arm-smmu: document the support on SA8255p

Rob Clark (1):
      iommu/arm-smmu: Un-demote unhandled-fault msg

Will Deacon (1):
      Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates

Zhang Zekun (1):
      iommu/arm-smmu-v3: Remove the unused empty definition

Zhenhua Huang (1):
      dt-bindings: arm-smmu: Add compatible for QCS8300 SoC

 .../devicetree/bindings/iommu/arm,smmu.yaml        |   5 +
 MAINTAINERS                                        |   1 +
 drivers/iommu/Kconfig                              |  11 +
 drivers/iommu/arm/arm-smmu-v3/Makefile             |   1 +
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c   |  83 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        | 576 +++++++------
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h        | 137 +++-
 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c     | 909 +++++++++++++++++++++
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c         |  28 +
 drivers/iommu/arm/arm-smmu/arm-smmu.c              |   2 +-
 10 files changed, 1463 insertions(+), 290 deletions(-)
 create mode 100644 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c

.
Date: Thu, 12 Sep 2024 17:22:01 +0200
From: David Sterba <dsterba@suse.com>
To: torvalds@linux-foundation.org
Cc: David Sterba <dsterba@suse.com>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] AFFS updates for 6.12

Hi,

please pull the following cleanups removing unused code and updating
definition of flexible struct array.

Thanks.

----------------------------------------------------------------
The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6:

  Linux 6.11-rc6 (2024-09-01 19:46:02 +1200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/affs-for-6.12-tag

for you to fetch changes up to bf751ad062b58d0750a5b9fb77d1400532a0ea44:

  affs: Replace one-element array with flexible-array member (2024-09-06 17:48:15 +0200)

----------------------------------------------------------------
Thorsten Blum (2):
      affs: Remove unused macros GET_END_PTR, AFFS_GET_HASHENTRY
      affs: Replace one-element array with flexible-array member

 fs/affs/affs.h     | 2 --
 fs/affs/amigaffs.h | 3 ++-
 2 files changed, 2 insertions(+), 3 deletions(-)

.
Date: Thu, 12 Sep 2024 09:25:44 -0700 (PDT)
From: Palmer Dabbelt <palmer@rivosinc.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Subject: [GIT PULL] RISC-V Fixes for 6.11-rc8

The following changes since commit 1ff95eb2bebda50c4c5406caaf201e0fcb24cc8f:

  riscv: Fix RISCV_ALTERNATIVE_EARLY (2024-09-03 07:57:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git tags/riscv-for-linus-6.11-rc8

for you to fetch changes up to 7c1e5b9690b0e14acead4ff98d8a6c40f2dff54b:

  riscv: Disable preemption while handling PR_RISCV_CTX_SW_FENCEI_OFF (2024-09-10 20:38:46 -0700)

----------------------------------------------------------------
RISC-V Fixes for 6.11-rc8

* Two fixes for smp_processor_id() calls in preemptible sections: one if
  the perf driver, and one in the fence.i prctl.

----------------------------------------------------------------
Alexandre Ghiti (1):
      drivers: perf: Fix smp_processor_id() use in preemptible code

Charlie Jenkins (1):
      riscv: Disable preemption while handling PR_RISCV_CTX_SW_FENCEI_OFF

 arch/riscv/mm/cacheflush.c   | 12 ++++++------
 drivers/perf/riscv_pmu_sbi.c |  7 ++++++-
 2 files changed, 12 insertions(+), 7 deletions(-)

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

.
Date: Thu, 12 Sep 2024 18:08:02 +0200
From: David Sterba <dsterba@suse.com>
To: torvalds@linux-foundation.org
Cc: David Sterba <dsterba@suse.com>,
	linux-btrfs@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] Btrfs updates for 6.12

Hi,

this update brings mostly refactoring, cleanups, minor performance
optimizations and usual fixes. The folio API conversions are most
noticeable.

There's one less visible change that could have a high impact. The
extent lock scope for read is reduced, not held for the entire
operation. In the buffered read case it's left to page or inode lock,
some direct io read synchronization is still needed.

This used to prevent deadlocks induced by page faults during direct io,
so there was a 4K limitation on the requests, e.g. for io_uring. In the
future this will allow smoother integration with iomap where the extent
read lock was a major obstacle.

Please pull, thanks.

User visible changes:

- the FSTRIM ioctl updates the processed range even after an error or
  interruption

- cleaner thread is woken up in SYNC ioctl instead of waking the
  transaction thread that can take some delay before waking up the
  cleaner, this can speed up cleaning of deleted subvolumes

- print an error message when opening a device fail, e.g. when it's
  unexpectedly read-only

Core changes:

- improved extent map handling in various ways (locking, iteration, ...)

- new assertions and locking annotations

- raid-stripe-tree locking fixes

- use xarray for tracking dirty qgroup extents, switched from rb-tree

- turn the subpage test to compile-time condition if possible (e.g. on
  x86_64 with 4K pages), this allows to skip a lot of ifs and remove
  dead code

- more preparatory work for compression in subpage mode

Cleanups and refactoring

- folio API conversions, many simple cases where page is passed so
  switch it to folios

- more subpage code refactoring, update page state bitmap processing

- introduce auto free for btrfs_path structure, use for the simple cases

----------------------------------------------------------------
The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-6.12-tag

for you to fetch changes up to bd610c0937aaf03b2835638ada1fab8b0524c61a:

  btrfs: only unlock the to-be-submitted ranges inside a folio (2024-09-10 16:51:22 +0200)

----------------------------------------------------------------
Boris Burkov (1):
      btrfs: add comment about locking in cow_file_range_inline()

David Sterba (14):
      btrfs: rename btrfs_submit_bio() to btrfs_submit_bbio()
      btrfs: rename __btrfs_submit_bio() and drop double underscores
      btrfs: rename __extent_writepage() and drop double underscores
      btrfs: rename __compare_inode_defrag() and drop double underscores
      btrfs: constify arguments of compare_inode_defrag()
      btrfs: rename __need_auto_defrag() and drop double underscores
      btrfs: rename __btrfs_add_inode_defrag() and drop double underscores
      btrfs: rename __btrfs_run_defrag_inode() and drop double underscores
      btrfs: clear defragmented inodes using postorder in btrfs_cleanup_defrag_inodes()
      btrfs: return void from btrfs_add_inode_defrag()
      btrfs: drop transaction parameter from btrfs_add_inode_defrag()
      btrfs: always pass readahead state to defrag
      btrfs: rework BTRFS_I as macro to preserve parameter const
      btrfs: constify more pointer parameters

Filipe Manana (5):
      btrfs: reduce size and overhead of extent_map_block_end()
      btrfs: reschedule when updating chunk maps at the end of a device replace
      btrfs: more efficient chunk map iteration when device replace finishes
      btrfs: directly wake up cleaner kthread in the BTRFS_IOC_SYNC ioctl
      btrfs: add and use helper to verify the calling task has locked the inode

Johannes Thumshirn (8):
      btrfs: update stripe extents for existing logical addresses
      btrfs: update stripe_extent delete loop assumptions
      btrfs: don't dump stripe-tree on lookup error
      btrfs: rename btrfs_io_stripe::is_scrub to rst_search_commit_root
      btrfs: set search_commit_root on stripe io in case of relocation
      btrfs: don't readahead the relocation inode on RST
      btrfs: change RST lookup error message level to debug
      btrfs: reduce chunk_map lookups in btrfs_map_block()

Josef Bacik (49):
      btrfs: convert btrfs_readahead() to only use folio
      btrfs: convert btrfs_read_folio() to only use a folio
      btrfs: convert end_page_read() to take a folio
      btrfs: convert begin_page_folio() to take a folio instead
      btrfs: convert submit_extent_page() to use a folio
      btrfs: convert btrfs_do_readpage() to only use a folio
      btrfs: update the writepage tracepoint to take a folio
      btrfs: convert __extent_writepage_io() to take a folio
      btrfs: convert extent_write_locked_range() to use folios
      btrfs: convert __extent_writepage() to be completely folio based
      btrfs: convert add_ra_bio_pages() to use only folios
      btrfs: utilize folio more in btrfs_page_mkwrite()
      btrfs: convert can_finish_ordered_extent() to use a folio
      btrfs: convert btrfs_finish_ordered_extent() to take a folio
      btrfs: convert btrfs_mark_ordered_io_finished() to take a folio
      btrfs: convert writepage_delalloc() to take a folio
      btrfs: convert find_lock_delalloc_range() to use a folio
      btrfs: convert lock_delalloc_pages() to take a folio
      btrfs: convert __unlock_for_delalloc() to take a folio
      btrfs: convert __process_pages_contig() to take a folio
      btrfs: convert process_one_page() to operate only on folios
      btrfs: convert extent_clear_unlock_delalloc() to take a folio
      btrfs: convert extent_write_locked_range() to take a folio
      btrfs: convert run_delalloc_cow() to take a folio
      btrfs: convert cow_file_range_inline() to take a folio
      btrfs: convert cow_file_range() to take a folio
      btrfs: convert fallback_to_cow() to take a folio
      btrfs: convert run_delalloc_nocow() to take a folio
      btrfs: convert btrfs_cleanup_ordered_extents() to use folios
      btrfs: convert btrfs_cleanup_ordered_extents() to take a folio
      btrfs: convert run_delalloc_compressed() to take a folio
      btrfs: convert btrfs_run_delalloc_range() to take a folio
      btrfs: convert struct async_chunk to hold a folio
      btrfs: convert submit_uncompressed_range() to take a folio
      btrfs: convert btrfs_writepage_fixup_worker() to use a folio
      btrfs: convert btrfs_writepage_cow_fixup() to use folio
      btrfs: convert struct btrfs_writepage_fixup to use a folio
      btrfs: convert uncompress_inline() to take a folio
      btrfs: convert read_inline_extent() to use a folio
      btrfs: convert btrfs_get_extent() to take a folio
      btrfs: convert __get_extent_map() to take a folio
      btrfs: convert find_next_dirty_byte() to take a folio
      btrfs: convert wait_subpage_spinlock() to only use a folio
      btrfs: convert btrfs_set_range_writeback() to use a folio
      btrfs: convert insert_inline_extent() to use a folio
      btrfs: convert extent_range_clear_dirty_for_io() to use a folio
      btrfs: introduce EXTENT_DIO_LOCKED
      btrfs: take the dio extent lock during O_DIRECT operations
      btrfs: do not hold the extent lock for entire read

Junchao Sun (2):
      btrfs: qgroup: use goto style to handle errors in add_delayed_ref()
      btrfs: qgroup: use xarray to track dirty extents in transaction

Leo Martins (3):
      btrfs: DEFINE_FREE for struct btrfs_path
      btrfs: use btrfs_path auto free in zoned.c
      btrfs: BTRFS_PATH_AUTO_FREE in orphan.c

Li Zetao (14):
      btrfs: convert clear_page_extent_mapped() to take a folio
      btrfs: convert get_next_extent_buffer() to take a folio
      btrfs: convert try_release_subpage_extent_buffer() to take a folio
      btrfs: convert try_release_extent_buffer() to take a folio
      btrfs: convert read_key_bytes() to take a folio
      btrfs: convert submit_eb_subpage() to take a folio
      btrfs: convert submit_eb_page() to take a folio
      btrfs: convert try_release_extent_state() to take a folio
      btrfs: convert try_release_extent_mapping() to take a folio
      btrfs: convert zlib_decompress() to take a folio
      btrfs: convert lzo_decompress() to take a folio
      btrfs: convert zstd_decompress() to take a folio
      btrfs: convert btrfs_decompress() to take a folio
      btrfs: convert copy_inline_to_page() to use folio

Li Zhang (1):
      btrfs: print message on device opening error during mount

Luca Stefani (1):
      btrfs: always update fstrim_range on failure in FITRIM ioctl

Qu Wenruo (11):
      btrfs: move uuid tree related code to uuid-tree.[ch]
      btrfs: make btrfs_is_subpage() to return false directly for 4K page size
      btrfs: subpage: fix the bitmap dump which can cause bitmap corruption
      btrfs: refactor __extent_writepage_io() to do sector-by-sector submission
      btrfs: remove the nr_ret parameter from __extent_writepage_io()
      btrfs: subpage: remove btrfs_fs_info::subpage_info member
      btrfs: merge btrfs_orig_bbio_end_io() into btrfs_bio_end_io()
      btrfs: make compression path to be subpage compatible
      btrfs: remove btrfs_folio_end_all_writers()
      btrfs: merge btrfs_folio_unlock_writer() into btrfs_folio_end_writer_lock()
      btrfs: only unlock the to-be-submitted ranges inside a folio

Thorsten Blum (1):
      btrfs: send: fix grammar in comments

 fs/btrfs/backref.c               |   6 +-
 fs/btrfs/bio.c                   |  54 ++-
 fs/btrfs/bio.h                   |   6 +-
 fs/btrfs/block-group.c           |  34 +-
 fs/btrfs/block-group.h           |  11 +-
 fs/btrfs/block-rsv.c             |   2 +-
 fs/btrfs/block-rsv.h             |   2 +-
 fs/btrfs/btrfs_inode.h           |  24 +-
 fs/btrfs/compression.c           |  82 ++--
 fs/btrfs/compression.h           |  16 +-
 fs/btrfs/ctree.c                 |  18 +-
 fs/btrfs/ctree.h                 |  11 +-
 fs/btrfs/defrag.c                |  97 ++---
 fs/btrfs/defrag.h                |   3 +-
 fs/btrfs/delayed-ref.c           |  36 +-
 fs/btrfs/delayed-ref.h           |   4 +-
 fs/btrfs/dev-replace.c           |  43 +-
 fs/btrfs/direct-io.c             |  73 ++--
 fs/btrfs/discard.c               |   4 +-
 fs/btrfs/disk-io.c               |  16 +-
 fs/btrfs/extent-io-tree.c        |  55 ++-
 fs/btrfs/extent-io-tree.h        |  38 +-
 fs/btrfs/extent-tree.c           |   4 +-
 fs/btrfs/extent_io.c             | 865 +++++++++++++++++----------------------
 fs/btrfs/extent_io.h             |  12 +-
 fs/btrfs/extent_map.c            |   9 +-
 fs/btrfs/file-item.c             |   4 +-
 fs/btrfs/file-item.h             |   2 +-
 fs/btrfs/file.c                  |  26 +-
 fs/btrfs/fs.h                    |   2 +-
 fs/btrfs/inode-item.c            |  10 +-
 fs/btrfs/inode-item.h            |   4 +-
 fs/btrfs/inode.c                 | 368 +++++++++--------
 fs/btrfs/ioctl.c                 |  11 +-
 fs/btrfs/lzo.c                   |  12 +-
 fs/btrfs/ordered-data.c          |  30 +-
 fs/btrfs/ordered-data.h          |   6 +-
 fs/btrfs/orphan.c                |  24 +-
 fs/btrfs/qgroup.c                |  66 ++-
 fs/btrfs/qgroup.h                |   1 -
 fs/btrfs/raid-stripe-tree.c      |  46 ++-
 fs/btrfs/reflink.c               |  35 +-
 fs/btrfs/relocation.c            |  22 +-
 fs/btrfs/scrub.c                 |  12 +-
 fs/btrfs/send.c                  |   4 +-
 fs/btrfs/space-info.c            |  25 +-
 fs/btrfs/space-info.h            |  10 +-
 fs/btrfs/subpage.c               | 277 ++++++-------
 fs/btrfs/subpage.h               |  60 ++-
 fs/btrfs/tests/extent-io-tests.c |  10 +-
 fs/btrfs/transaction.c           |   5 +-
 fs/btrfs/tree-log.c              |   2 +-
 fs/btrfs/tree-mod-log.c          |  14 +-
 fs/btrfs/tree-mod-log.h          |   6 +-
 fs/btrfs/uuid-tree.c             | 179 ++++++++
 fs/btrfs/uuid-tree.h             |   2 +
 fs/btrfs/verity.c                |  20 +-
 fs/btrfs/volumes.c               | 228 ++---------
 fs/btrfs/volumes.h               |   4 +-
 fs/btrfs/xattr.c                 |   2 +-
 fs/btrfs/zlib.c                  |  33 +-
 fs/btrfs/zoned.c                 |  36 +-
 fs/btrfs/zoned.h                 |   4 +-
 fs/btrfs/zstd.c                  |  35 +-
 include/trace/events/btrfs.h     |  18 +-
 65 files changed, 1583 insertions(+), 1597 deletions(-)

.
Date: Thu, 12 Sep 2024 20:08:01 +0200
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linux PM <linux-pm@vger.kernel.org>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, 
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>
Subject: [GIT PULL] Power management updates for v6.12-rc1

Hi Linus,

The next week will be all conference travel for me and I'll be traveling in
the week after it too, so here's an early request to pull power management
updates for 6.12-rc1.

To receive them, please pull from the tag

 git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \
 pm-6.12-rc1

with top-most commit 0a06811d664b8695a7612d3e59c1defb4382f4e0

 Merge branches 'pm-sleep', 'pm-opp' and 'pm-tools'

on top of commit da3ea35007d0af457a0afc87e84fddaebc4e0b63

 Linux 6.11-rc7

By the number of new lines of code, the most visible change here is the
addition of hybrid CPU capacity scaling support to the intel_pstate
driver.  Next are the amd-pstate driver changes related to the
calculation of the AMD boost numerator and preferred core detection.

As far as new hardware support is concerned, the intel_idle driver will
now handle Granite Rapids Xeon processors natively, the intel_rapl power
capping driver will recognize family 1Ah of AMD processors and Intel
ArrowLake-U chipos, and intel_pstate will handle Granite Rapids and
Sierra Forest chips in the out-of-band (OOB) mode.

Apart from the above, there is a usual collection of assorted fixes
and code cleanups in many places and there are tooling updates.

Specifics:

 - Remove LATENCY_MULTIPLIER from cpufreq (Qais Yousef).

 - Add support for Granite Rapids and Sierra Forest in OOB mode to the
   intel_pstate cpufreq driver (Srinivas Pandruvada).

 - Add basic support for CPU capacity scaling on x86 and make the
   intel_pstate driver set asymmetric CPU capacity on hybrid systems
   without SMT (Rafael Wysocki).

 - Add missing MODULE_DESCRIPTION() macros to the powerpc cpufreq
   driver (Jeff Johnson).

 - Several OF related cleanups in cpufreq drivers (Rob Herring).

 - Enable COMPILE_TEST for ARM drivers (Rob Herring).

 - Introduce quirks for syscon failures and use socinfo to get revision
   for TI cpufreq driver (Dhruva Gole, Nishanth Menon).

 - Minor cleanups in amd-pstate driver (Anastasia Belova, Dhananjay
   Ugwekar).

 - Minor cleanups for loongson, cpufreq-dt and powernv cpufreq drivers
   (Danila Tikhonov, Huacai Chen, and Liu Jing).

 - Make amd-pstate validate return of any attempt to update EPP limits,
   which fixes the masking hardware problems (Mario Limonciello).

 - Move the calculation of the AMD boost numerator outside of amd-pstate,
   correcting acpi-cpufreq on systems with preferred cores (Mario
   Limonciello).

 - Harden preferred core detection in amd-pstate to avoid potential
   false positives (Mario Limonciello).

 - Add extra unit test coverage for mode state machine (Mario
   Limonciello).

 - Fix an "Uninitialized variables" issue in amd-pstate (Qianqiang Liu).

 - Add Granite Rapids Xeon support to intel_idle (Artem Bityutskiy).

 - Disable promotion to C1E on Jasper Lake and Elkhart Lake in
   intel_idle (Kai-Heng Feng).

 - Use scoped device node handling to fix missing of_node_put() and
   simplify walking OF children in the riscv-sbi cpuidle driver (Krzysztof
   Kozlowski).

 - Remove dead code from cpuidle_enter_state() (Dhruva Gole).

 - Change an error pointer to NULL to fix error handling in the
   intel_rapl power capping driver (Dan Carpenter).

 - Fix off by one in get_rpi() in the intel_rapl power capping
   driver (Dan Carpenter).

 - Add support for ArrowLake-U to the intel_rapl power capping
   driver (Sumeet Pawnikar).

 - Fix the energy-pkg event for AMD CPUs in the intel_rapl power capping
   driver (Dhananjay Ugwekar).

 - Add support for AMD family 1Ah processors to the intel_rapl power
   capping driver (Dhananjay Ugwekar).

 - Remove unused stub for saveable_highmem_page() and remove deprecated
   macros from power management documentation (Andy Shevchenko).

 - Use ysfs_emit() and sysfs_emit_at() in "show" functions in the PM
   sysfs interface (Xueqin Luo).

 - Update the maintainers information for the operating-points-v2-ti-cpu DT
   binding (Dhruva Gole).

 - Drop unnecessary of_match_ptr() from ti-opp-supply (Rob Herring).

 - Add missing MODULE_DESCRIPTION() macros to devfreq governors (Jeff
   Johnson).

 - Use devm_clk_get_enabled() in the exynos-bus devfreq driver (Anand
   Moon).

 - Use of_property_present() instead of of_get_property() in the imx-bus
   devfreq driver (Rob Herring).

 - Update directory handling and installation process in the pm-graph
   Makefile and add .gitignore to ignore sleepgraph.py artifacts to
   pm-graph (Amit Vadhavana, Yo-Jung Lin).

 - Make cpupower display residency value in idle-info (Aboorva
   Devarajan).

 - Add missing powercap_set_enabled() stub function to cpupower (John
   B. Wyatt IV).

 - Add SWIG support to cpupower (John B. Wyatt IV).

Thanks!


---------------

Aboorva Devarajan (1):
      tools/cpupower: display residency value in idle-info

Amit Vadhavana (1):
      pm-graph: Update directory handling and installation process in Makefile

Anand Moon (1):
      PM / devfreq: exynos: Use Use devm_clk_get_enabled() helpers

Anastasia Belova (1):
      cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value

Andy Shevchenko (2):
      Documentation: PM: Discourage use of deprecated macros
      PM: hibernate: Remove unused stub for saveable_highmem_page()

Artem Bityutskiy (1):
      intel_idle: add Granite Rapids Xeon support

Dan Carpenter (2):
      powercap: intel_rapl: Fix off by one in get_rpi()
      powercap: intel_rapl: Change an error pointer to NULL

Danila Tikhonov (1):
      cpufreq: Add SM7325 to cpufreq-dt-platdev blocklist

Dhananjay Ugwekar (3):
      powercap/intel_rapl: Add support for AMD family 1Ah
      powercap/intel_rapl: Fix the energy-pkg event for AMD CPUs
      cpufreq/amd-pstate: Add the missing cpufreq_cpu_put()

Dhruva Gole (3):
      cpuidle: remove dead code from cpuidle_enter_state()
      dt-bindings: opp: operating-points-v2-ti-cpu: Update maintainers
      cpufreq: ti-cpufreq: Use socinfo to get revision in AM62 family

Huacai Chen (1):
      cpufreq: loongson3: Use raw_smp_processor_id() in do_service_request()

Jeff Johnson (2):
      cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros
      PM/devfreq: governor: add missing MODULE_DESCRIPTION() macros

John B. Wyatt IV (5):
      pm:cpupower: Add missing powercap_set_enabled() stub function
      pm:cpupower: Add SWIG bindings files for libcpupower
      pm:cpupower: Include test_raw_pylibcpupower.py
      MAINTAINERS: Add Maintainers for SWIG Python bindings
      pm:cpupower: Add error warning when SWIG is not installed

Kai-Heng Feng (1):
      intel_idle: Disable promotion to C1E on Jasper Lake and Elkhart Lake

Krzysztof Kozlowski (2):
      cpuidle: riscv-sbi: Use scoped device node handling to fix
missing of_node_put
      cpuidle: riscv-sbi: Simplify with scoped for each OF child loop

Liu Jing (1):
      cpufreq: Fix the cacography in powernv-cpufreq.c

Mario Limonciello (14):
      cpufreq/amd-pstate: Catch failures for amd_pstate_epp_update_limit()
      x86/amd: Move amd_get_highest_perf() from amd.c to cppc.c
      ACPI: CPPC: Adjust return code for inline functions in
!CONFIG_ACPI_CPPC_LIB
      x86/amd: Rename amd_get_highest_perf() to amd_get_boost_ratio_numerator()
      ACPI: CPPC: Drop check for non zero perf ratio
      ACPI: CPPC: Adjust debug messages in amd_set_max_freq_ratio() to warn
      x86/amd: Move amd_get_highest_perf() out of amd-pstate
      x86/amd: Detect preferred cores in amd_get_boost_ratio_numerator()
      cpufreq: amd-pstate: Merge amd_pstate_highest_perf_set() into
amd_get_boost_ratio_numerator()
      cpufreq: amd-pstate: Optimize amd_pstate_update_limits()
      cpufreq: amd-pstate: Add documentation for `amd_pstate_hw_prefcore`
      amd-pstate: Add missing documentation for `amd_pstate_prefcore_ranking`
      cpufreq/amd-pstate: Export symbols for changing modes
      cpufreq/amd-pstate-ut: Add test case for mode switches

Nishanth Menon (1):
      cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately

Qais Yousef (1):
      cpufreq: Remove LATENCY_MULTIPLIER

Qianqiang Liu (1):
      cpufreq/amd-pstate-ut: Fix an "Uninitialized variables" issue

Rafael J. Wysocki (2):
      x86/sched: Add basic support for CPU capacity scaling
      cpufreq: intel_pstate: Set asymmetric CPU capacity on hybrid systems

Rob Herring (Arm) (10):
      cpufreq: Use of_property_present()
      cpufreq: spear: Use of_property_for_each_u32() instead of open coding
      cpufreq: qcom: Add explicit io.h include for readl/writel_relaxed
      cpufreq: omap: Drop asm includes
      cpufreq: armada-8k: Avoid excessive stack usage
      opp: ti: Drop unnecessary of_match_ptr()
      cpufreq: Enable COMPILE_TEST on Arm drivers
      cpufreq: Drop CONFIG_ARM and CONFIG_ARM64 dependency on Arm drivers
      cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF
      PM / devfreq: imx-bus: Use of_property_present()

Srinivas Pandruvada (1):
      cpufreq: intel_pstate: Support Granite Rapids and Sierra Forest OOB mode

Sumeet Pawnikar (1):
      powercap: intel_rapl: Add support for ArrowLake-U platform

Xueqin Luo (2):
      PM: hibernate: Use sysfs_emit() and sysfs_emit_at() in "show" functions
      PM: sleep: Use sysfs_emit() and sysfs_emit_at() in "show" functions

Yo-Jung (Leo) Lin (1):
      pm-graph: Make git ignore sleepgraph.py artifacts

---------------

 Documentation/admin-guide/pm/amd-pstate.rst        |  15 +-
 .../bindings/opp/operating-points-v2-ti-cpu.yaml   |   2 +-
 Documentation/power/pci.rst                        |  11 +-
 Documentation/power/runtime_pm.rst                 |   4 +-
 MAINTAINERS                                        |   3 +
 arch/x86/include/asm/processor.h                   |   3 -
 arch/x86/include/asm/topology.h                    |  13 ++
 arch/x86/kernel/acpi/cppc.c                        | 172 +++++++++++++-
 arch/x86/kernel/cpu/amd.c                          |  16 --
 arch/x86/kernel/cpu/aperfmperf.c                   |  89 +++++++-
 drivers/cpufreq/Kconfig                            |   2 -
 drivers/cpufreq/Kconfig.arm                        |  50 +++--
 drivers/cpufreq/acpi-cpufreq.c                     |  12 +-
 drivers/cpufreq/amd-pstate-ut.c                    |  41 +++-
 drivers/cpufreq/amd-pstate.c                       | 181 ++++++---------
 drivers/cpufreq/amd-pstate.h                       |  14 ++
 drivers/cpufreq/apple-soc-cpufreq.c                |   2 +-
 drivers/cpufreq/armada-8k-cpufreq.c                |   2 +-
 drivers/cpufreq/cpufreq-dt-platdev.c               |   1 +
 drivers/cpufreq/cpufreq-dt.c                       |  11 +-
 drivers/cpufreq/cpufreq.c                          |  27 +--
 drivers/cpufreq/intel_pstate.c                     | 240 +++++++++++++++++++-
 drivers/cpufreq/loongson3_cpufreq.c                |   2 +-
 drivers/cpufreq/maple-cpufreq.c                    |   1 +
 drivers/cpufreq/mediatek-cpufreq.c                 |   2 +-
 drivers/cpufreq/omap-cpufreq.c                     |   3 -
 drivers/cpufreq/pasemi-cpufreq.c                   |   1 +
 drivers/cpufreq/pmac64-cpufreq.c                   |   3 +-
 drivers/cpufreq/powernv-cpufreq.c                  |   3 +-
 drivers/cpufreq/ppc_cbe_cpufreq.c                  |   1 +
 drivers/cpufreq/qcom-cpufreq-hw.c                  |   1 +
 drivers/cpufreq/qcom-cpufreq-nvmem.c               |   2 +-
 drivers/cpufreq/spear-cpufreq.c                    |  18 +-
 drivers/cpufreq/sti-cpufreq.c                      |   2 +-
 drivers/cpufreq/sun50i-cpufreq-nvmem.c             |   2 +-
 drivers/cpufreq/ti-cpufreq.c                       |  31 ++-
 drivers/cpuidle/cpuidle-riscv-sbi.c                |  28 +--
 drivers/cpuidle/cpuidle.c                          |   5 +-
 drivers/devfreq/exynos-bus.c                       |  22 +-
 drivers/devfreq/governor_performance.c             |   1 +
 drivers/devfreq/governor_powersave.c               |   1 +
 drivers/devfreq/governor_simpleondemand.c          |   1 +
 drivers/devfreq/governor_userspace.c               |   1 +
 drivers/devfreq/imx-bus.c                          |   2 +-
 drivers/idle/intel_idle.c                          |  60 ++++-
 drivers/opp/ti-opp-supply.c                        |   2 +-
 drivers/powercap/intel_rapl_common.c               |  38 +++-
 include/acpi/cppc_acpi.h                           |  41 ++--
 include/linux/cpufreq.h                            |   6 -
 kernel/power/hibernate.c                           |  26 ++-
 kernel/power/main.c                                |  76 ++++---
 kernel/power/snapshot.c                            |   5 -
 tools/power/cpupower/bindings/python/.gitignore    |   8 +
 tools/power/cpupower/bindings/python/Makefile      |  33 +++
 tools/power/cpupower/bindings/python/README        |  59 +++++
 .../cpupower/bindings/python/raw_pylibcpupower.i   | 247 +++++++++++++++++++++
 .../bindings/python/test_raw_pylibcpupower.py      |  42 ++++
 tools/power/cpupower/lib/cpuidle.c                 |   8 +
 tools/power/cpupower/lib/cpuidle.h                 |   2 +
 tools/power/cpupower/lib/powercap.c                |   8 +
 tools/power/cpupower/utils/cpuidle-info.c          |   4 +
 tools/power/pm-graph/.gitignore                    |   3 +
 tools/power/pm-graph/Makefile                      | 111 +++++----
 63 files changed, 1416 insertions(+), 407 deletions(-)

.
Date: Thu, 12 Sep 2024 20:10:03 +0200
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linux PM <linux-pm@vger.kernel.org>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, 
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>, Daniel Lezcano <daniel.lezcano@linaro.org>
Subject: [GIT PULL] Thermal control updates for v6.12-rc1

Hi Linus,

The next week will be all conference travel for me and I'll be traveling in
the week after it too, so here's an early request to pull thermal control
updates for 6.12-rc1.

To receive them, please pull from the tag

 git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \
 thermal-6.12-rc1

with top-most commit 3bc5ed15bdc5077d7ee621f44872f550babbea3e

 Merge tag 'thermal-v6.12-rc1' of
ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/thermal/linux into

on top of commit c0a1ef9c5be72ff28a5413deb1b3e1a066593c13

 thermal: of: Fix OF node leak in of_thermal_zone_find() error paths

to receive thermal control updates for 6.12-rc1.

These mostly continue to rework the thermal core and the thermal zone
driver interface to make the code more straightforward and reduce bloat.
The most significant piece of this work is a change of the code related
to binding cooling devices to thermal zones which, among other things,
replaces two previously existing thermal zone operations with one
allowing driver implementations to be much simpler.

There is also a new thermal core testing module allowing mock thermal
zones to be created and controlled via debugfs in order to exercise the
thermal core functionality.  It is expected to be used for implementing
thermal core self tests in the future.

Apart from the above, there are assorted thermal driver updates.

Specifics:

 - Update some thermal drivers to eliminate thermal_zone_get_trip()
   calls from them and get rid of that function (Rafael Wysocki).

 - Update the thermal sysfs code to store trip point attributes in trip
   descriptors and get to trip points via attribute pointers (Rafael
   Wysocki).

 - Move the computation of the low and high boundaries for
   thermal_zone_set_trips() to __thermal_zone_device_update() (Daniel
   Lezcano).

 - Introduce a debugfs-based facility for thermal core testing (Rafael
   Wysocki).

 - Replace the thermal zone .bind() and .unbind() callbacks for binding
   cooling devices to thermal zones with one .should_bind() callback
   used for deciding whether or not a given cooling devices should be
   bound to a given trip point in a given thermal zone (Rafael Wysocki).

 - Eliminate code that has no more users after the other changes, drop
   some redundant checks from the thermal core and clean it up (Rafael
   Wysocki).

 - Fix rounding of delay jiffies in the thermal core (Rafael Wysocki).

 - Refuse to accept trip point temperature or hysteresis that would lead
   to an invalid threshold value when setting them via sysfs (Rafael
   Wysocki).

 - Adjust states of all uninitialized instances in the .manage()
   callback of the Bang-bang thermal governor (Rafael Wysocki).

 - Drop a couple of redundant checks along with the code depending on
   them from the thermal core (Rafael Wysocki).

 - Rearrange the thermal core to avoid redundant checks and simplify
   control flow in a couple of code paths (Rafael Wysocki).

 - Add power domain DT bindings for new Amlogic SoCs (Georges Stark).

 - Switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() in the ST
   driver and add a Kconfig dependency on THERMAL_OF subsystem for the
   STi driver (Raphael Gallais-Pou).

 - Simplify the error code path in the probe functions in the brcmstb
   driver with the help of dev_err_probe() (Yan Zhen).

 - Make imx_sc_thermal use dev_err_probe() (Alexander Stein).

 - Remove trailing space after \n newline in the Renesas driver (Colin
   Ian King).

 - Add DT binding compatible string for the SA8255p to the tsens thermal
   driver (Nikunj Kela).

 - Use the devm_clk_get_enabled() helpers to simplify the init routine
   in the sprd thermal driver (Huan Yang).

 - Remove __maybe_unused notations for the functions by using the new
   RUNTIME_PM_OPS() and SYSTEM_SLEEP_PM_OPS() macros on the IMx and
   Qoriq drivers (Fabio Estevam)

 - Remove unused declarations from the ti-soc-thermal driver's header
   file as the functions in question were removed previously (Zhang
   Zekun).

Thanks!


---------------

Alexander Stein (1):
      thermal/drivers/imx_sc_thermal: Use dev_err_probe

Colin Ian King (1):
      thermal/drivers/renesas: Remove trailing space after \n newline

Daniel Lezcano (1):
      thermal/core: Compute low and high boundaries in
thermal_zone_device_update()

Fabio Estevam (2):
      thermal/drivers/qoriq: Remove __maybe_unused notations
      thermal/drivers/imx: Remove __maybe_unused notations

George Stark (1):
      dt-bindings: thermal: amlogic,thermal: add optional power-domains

Huan Yang (1):
      thermal/drivers/sprd: Use devm_clk_get_enabled() helpers

Nikunj Kela (1):
      dt-bindings: thermal: tsens: document support on SA8255p

Rafael J. Wysocki (36):
      thermal: broadcom: Use thermal_zone_get_crit_temp() in
bcm2835_thermal_probe()
      thermal: hisi: Use thermal_zone_for_each_trip() in
hisi_thermal_register_sensor()
      thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init()
      thermal: tegra: Introduce struct trip_temps for critical and hot trips
      thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points
      thermal: helpers: Drop get_thermal_instance()
      thermal: trip: Get rid of thermal_zone_get_num_trips()
      thermal: trip: Drop thermal_zone_get_trip()
      thermal: core: Store trip sysfs attributes in thermal_trip_desc
      thermal: sysfs: Get to trips via attribute pointers
      thermal: sysfs: Refine the handling of trip hysteresis changes
      thermal: Introduce a debugfs-based testing facility
      thermal: core: Fold two functions into their respective callers
      thermal: core: Rearrange checks in thermal_bind_cdev_to_trip()
      thermal: core: Drop redundant thermal instance checks
      thermal: sysfs: Use the dev argument in instance-related show/store
      thermal: core: Move thermal zone locking out of bind/unbind functions
      thermal: core: Introduce .should_bind() thermal zone callback
      thermal: ACPI: Use the .should_bind() thermal zone callback
      thermal: core: Unexport thermal_bind_cdev_to_trip() and
thermal_unbind_cdev_from_trip()
      platform/x86: acerhdf: Use the .should_bind() thermal zone callback
      mlxsw: core_thermal: Use the .should_bind() thermal zone callback
      thermal: imx: Use the .should_bind() thermal zone callback
      thermal/of: Use the .should_bind() thermal zone callback
      thermal: core: Drop unused bind/unbind functions and callbacks
      thermal: core: Clean up trip bind/unbind functions
      thermal: core: Fix rounding of delay jiffies
      thermal: core: Rename cdev-to-thermal-zone bind/unbind functions
      thermal: core: Drop redundant checks from thermal_bind_cdev_to_trip()
      thermal: core: Drop tz field from struct thermal_instance
      thermal: sysfs: Add sanity checks for trip temperature and hysteresis
      thermal: gov_bang_bang: Adjust states of all uninitialized instances
      thermal: core: Drop redundant lockdep_assert_held()
      thermal: core: Drop dead code from monitor_thermal_zone()
      thermal: core: Check passive delay in monitor_thermal_zone()
      thermal: core: Drop thermal_zone_device_is_enabled()

Raphael Gallais-Pou (2):
      thermal/drivers/st: Switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
      thermal/drivers/sti: Depend on THERMAL_OF subsystem

Yan Zhen (1):
      thermal/drivers/brcmstb_thermal: Simplify with dev_err_probe()

Zhang Zekun (1):
      thermal/drivers/ti-soc-thermal: Remove unused declarations

---------------

 .../bindings/thermal/amlogic,thermal.yaml          |   3 +
 .../devicetree/bindings/thermal/qcom-tsens.yaml    |   1 +
 Documentation/driver-api/thermal/sysfs-api.rst     |  68 +--
 drivers/acpi/thermal.c                             |  66 +--
 drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 115 ++---
 drivers/platform/x86/acerhdf.c                     |  33 +-
 drivers/thermal/Kconfig                            |  11 +-
 drivers/thermal/Makefile                           |   1 +
 drivers/thermal/broadcom/bcm2835_thermal.c         |   7 +-
 drivers/thermal/broadcom/brcmstb_thermal.c         |  15 +-
 drivers/thermal/gov_bang_bang.c                    |  14 +-
 drivers/thermal/hisi_thermal.c                     |  25 +-
 drivers/thermal/imx_sc_thermal.c                   |   3 +-
 drivers/thermal/imx_thermal.c                      |  36 +-
 drivers/thermal/qcom/qcom-spmi-temp-alarm.c        |  22 +-
 drivers/thermal/qoriq_thermal.c                    |  10 +-
 drivers/thermal/renesas/rcar_gen3_thermal.c        |   6 +-
 drivers/thermal/renesas/rcar_thermal.c             |   2 +-
 drivers/thermal/sprd_thermal.c                     |  14 +-
 drivers/thermal/st/st_thermal.c                    |  32 +-
 drivers/thermal/st/st_thermal_memmap.c             |   2 +-
 drivers/thermal/st/stm_thermal.c                   |   8 +-
 drivers/thermal/tegra/soctherm.c                   |  36 +-
 drivers/thermal/tegra/tegra30-tsensor.c            |  57 +--
 drivers/thermal/testing/Makefile                   |   7 +
 drivers/thermal/testing/command.c                  | 221 ++++++++++
 drivers/thermal/testing/thermal_testing.h          |  11 +
 drivers/thermal/testing/zone.c                     | 468 +++++++++++++++++++++
 drivers/thermal/thermal_core.c                     | 243 ++++-------
 drivers/thermal/thermal_core.h                     |  38 +-
 drivers/thermal/thermal_helpers.c                  |  32 +-
 drivers/thermal/thermal_of.c                       | 171 ++------
 drivers/thermal/thermal_sysfs.c                    | 222 +++++-----
 drivers/thermal/thermal_trip.c                     |  53 +--
 drivers/thermal/ti-soc-thermal/ti-bandgap.h        |   4 -
 include/linux/thermal.h                            |  31 +-
 36 files changed, 1160 insertions(+), 928 deletions(-)

.
Date: Thu, 12 Sep 2024 20:12:54 +0200
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: ACPI Devel Maling List <linux-acpi@vger.kernel.org>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Linux PM <linux-pm@vger.kernel.org>
Subject: [GIT PULL] ACPI updates for v6.12-rc1

Hi Linus,

The next week will be all conference travel for me and I'll be traveling in
the week after it too, so here's an early request to pull ACPI updates for
6.12-rc1.

To receive them, please pull from the tag

 git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \
 acpi-6.12-rc1

with top-most commit 3dd2fcf496359d2e196acd33e53dc921d6e39cff

 Merge branches 'acpi-video', 'acpi-resource', 'acpi-pad' and 'acpi-misc'

on top of commit da3ea35007d0af457a0afc87e84fddaebc4e0b63

 Linux 6.11-rc7

These update the ACPICA code in the kernel to upstream version 20240827,
add support for ACPI-based enumeration of interrupt controllers on
RISC-V along with some related irqchip updates, clean up the ACPI device
object sysfs interface, add some quirks for backlight handling and IRQ
overrides, fix assorted issues and clean up code.

Specifics:

 - Check return value in acpi_db_convert_to_package() (Pei Xiao).

 - Detect FACS and allow setting the waking vector on reduced-hardware
   ACPI platforms (Jiaqing Zhao).

 - Allow ACPICA to represent semaphores as integers (Adrien Destugues).

 - Complete CXL 3.0 CXIMS structures support in ACPICA (Zhang Rui).

 - Make ACPICA support SPCR version 4 and add RISC-V SBI Subtype to
   DBG2 (Sia Jee Heng).

 - Implement the Dword_PCC Resource Descriptor Macro in ACPICA (Jose
   Marinho).

 - Correct the typo in struct acpi_mpam_msc_node member (Punit Agrawal).

 - Implement ACPI_WARNING_ONCE() and ACPI_ERROR_ONCE() and use them to
   prevent a Stall() violation warning from being printed every time
   this takes place (Vasily Khoruzhick).

 - Allow PCC Data Type in MCTP resource (Adam Young).

 - Fix memory leaks on acpi_ps_get_next_namepath()
   and acpi_ps_get_next_field() failures  (Armin Wolf).

 - Add support for suppressing leading zeros in hex strings when
   converting them to integers and update integer-to-hex-string
   conversions in ACPICA (Armin Wolf).

 - Add support for Windows 11 22H2 _OSI string (Armin Wolf).

 - Avoid warning for Dump Functions in ACPICA (Adam Lackorzynski).

 - Add extended linear address mode to HMAT MSCIS in ACPICA (Dave
   Jiang).

 - Handle empty connection_node in iasl (Aleksandrs Vinarskis).

 - Allow for more flexibility in _DSM args (Saket Dumbre).

 - Setup for ACPICA release 20240827 (Saket Dumbre).

 - Add ACPI device enumeration support for interrupt controller probing
   including taking dependencies into account (Sunil V L).

 - Implement ACPI-based interrupt controller probing on RISC-V (Sunil V L).

 - Add ACPI support for AIA in riscv-intc and add ACPI support to
   riscv-imsic, riscv-aplic, and sifive-plic (Sunil V L).

 - Do not release locks during operation region accesses in the ACPI EC
   driver (Rafael Wysocki).

 - Fix up the _STR handling in the ACPI device object sysfs interface,
   make it represent the device object attributes as an attribute group
   and make it rely on driver core functionality for sysfs attribute
   management (Thomas Wei=C3=9Fschuh).

 - Extend error messages printed to the kernel log when acpi_evaluate_dsm()
   fails to include revision and function number (David Wang).

 - Add a new AMDI0015 platform device ID to the ACPi APD driver for AMD
   SoCs (Shyam Sundar S K).

 - Use the driver core for the async probing management in the ACPI
   battery driver (Thomas Wei=C3=9Fschuh).

 - Remove redundant initialization of a local variable to NULL from the
   ACPI battery driver (Ilpo J=C3=A4rvinen).

 - Remove unneeded check in tps68470_pmic_opregion_probe() (Aleksandr
   Mishin).

 - Add support for setting the EPP register through the ACPI CPPC sysfs
   interface if it is in FFH (Mario Limonciello).

 - Fix MASK_VAL() usage in the ACPI CPPC library (Cl=C3=A9ment L=C3=A9ger).

 - Reduce the log level of a per-CPU message about idle states in the
   ACPI processor driver (Li RongQing).

 - Fix crash in exit_round_robin() in the ACPI processor aggregator
   device (PAD) driver (Seiji Nishikawa).

 - Add force_vendor quirk for Panasonic Toughbook CF-18 in the ACPI
   backlight driver (Hans de Goede).

 - Make the DMI checks related to backlight handling on Lenovo Yoga
   Tab 3 X90F less strict (Hans de Goede).

 - Enforce native backlight handling on Apple MacbookPro9,2 (Esther
   Shimanovich).

 - Add IRQ override quirks for Asus Vivobook Go E1404GAB and MECHREV
   GM7XG0M, and refine the TongFang GMxXGxx quirk (Li Chen, Tamim Khan,
   Werner Sembach).

 - Quirk ASUS ROG M16 to default to S3 sleep (Luke D. Jones).

 - Define and use symbols for device and class name lengths in the ACPI
   bus type code and make the code use strscpy() instead of strcpy() in
   several places (Muhammad Qasim Abdul Majeed).

Thanks!


---------------

Adam Lackorzynski (1):
      ACPICA: Avoid warning for Dump Functions

Adam Young (1):
      ACPICA: Allow PCC Data Type in MCTP resource.

Adrien Destugues (1):
      ACPICA: haiku: Fix invalid value used for semaphores

Aleksandr Mishin (1):
      ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe()

Aleksandrs Vinarskis (1):
      ACPICA: iasl: handle empty connection_node

Armin Wolf (6):
      ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails
      ACPICA: Fix memory leak if acpi_ps_get_next_field() fails
      ACPICA: Allow for suppressing leading zeros when using
acpi_ex_convert_to_ascii()
      ACPICA: Add support for suppressing leading zeros in hex strings
      ACPICA: Update integer-to-hex-string conversions
      ACPICA: Add support for Windows 11 22H2 _OSI string

Cl=C3=A9ment L=C3=A9ger (1):
      ACPI: CPPC: Fix MASK_VAL() usage

Dave Jiang (1):
      ACPICA: HMAT: Add extended linear address mode to MSCIS

David Wang (1):
      ACPI: utils: Add rev/func to message when acpi_evaluate_dsm() fails

Esther Shimanovich (1):
      ACPI: video: force native for Apple MacbookPro9,2

Hans de Goede (3):
      ACPI: video: Make Lenovo Yoga Tab 3 X90F DMI match less strict
      ACPI: x86: Make Lenovo Yoga Tab 3 X90F DMI match less strict
      ACPI: video: Add force_vendor quirk for Panasonic Toughbook CF-18

Ilpo J=C3=A4rvinen (1):
      ACPI: battery: Remove redundant NULL initalizations

Jiaqing Zhao (2):
      ACPICA: Detect FACS in reduced hardware build
      ACPICA: Allow setting waking vector on reduced hardware platforms

Jose Marinho (1):
      ACPICA: Implement the Dword_PCC Resource Descriptor Macro

Li Chen (1):
      ACPI: resource: Do IRQ override on MECHREV GM7XG0M

Li RongQing (1):
      ACPI: processor: Reduce the log level of a per-CPU message about
idle states

Luke D. Jones (1):
      ACPI: PM: Quirk ASUS ROG M16 to default to S3 sleep

Mario Limonciello (1):
      ACPI: CPPC: Add support for setting EPP register in FFH

Muhammad Qasim Abdul Majeed (7):
      ACPI: battery: Use strscpy() instead of strcpy()
      ACPI: AC: Use strscpy() instead of strcpy()
      ACPI: PAD: Use strscpy() instead of strcpy()
      ACPI: acpi_processor: Use strscpy instead() of strcpy()
      ACPI: battery : Use strscpy() instead of strcpy()
      ACPI: bus: Define and use symbols for device and class name lengths
      ACPI: button: Use strscpy() instead of strcpy()

Pei Xiao (1):
      ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in
acpi_db_convert_to_package()

Punit Agrawal (1):
      ACPICA: MPAM: Correct the typo in struct acpi_mpam_msc_node member

Rafael J. Wysocki (1):
      ACPI: EC: Do not release locks during operation region accesses

Saket Dumbre (2):
      ACPICA: Allow for more flexibility in _DSM args
      ACPICA: Setup for ACPICA release 20240827

Seiji Nishikawa (1):
      ACPI: PAD: fix crash in exit_round_robin()

Shyam Sundar S K (1):
      ACPI: APD: Add AMDI0015 as platform device

Sia Jee Heng (2):
      ACPICA: SPCR: Update the SPCR table to version 4
      ACPICA: Headers: Add RISC-V SBI Subtype to DBG2

Sunil V L (17):
      arm64: PCI: Migrate ACPI related functions to pci-acpi.c
      ACPI: scan: Add a weak arch_sort_irqchip_probe() to order the
IRQCHIP probe
      ACPI: bus: Add acpi_riscv_init() function
      ACPI: scan: Refactor dependency creation
      ACPI: scan: Add RISC-V interrupt controllers to honor list
      ACPI: scan: Define weak function to populate dependencies
      ACPI: bus: Add RINTC IRQ model for RISC-V
      ACPI: pci_link: Clear the dependencies after probe
      ACPI: RISC-V: Implement PCI related functionality
      ACPI: RISC-V: Implement function to reorder irqchip probe entries
      ACPI: RISC-V: Initialize GSI mapping structures
      ACPI: RISC-V: Implement function to add implicit dependencies
      irqchip/riscv-intc: Add ACPI support for AIA
      irqchip/riscv-imsic-state: Create separate function for DT
      irqchip/riscv-imsic: Add ACPI support
      irqchip/riscv-aplic: Add ACPI support
      irqchip/sifive-plic: Add ACPI support

Tamim Khan (1):
      ACPI: resource: Skip IRQ override on Asus Vivobook Go E1404GAB

Thomas Wei=C3=9Fschuh (6):
      ACPI: sysfs: validate return type of _STR method
      ACPI: sysfs: evaluate _STR on each sysfs access
      ACPI: sysfs: manage attributes as attribute_group
      ACPI: sysfs: manage sysfs attributes through device core
      ACPI: sysfs: remove return value of acpi_device_setup_files()
      ACPI: battery: use driver core managed async probing

Vasily Khoruzhick (2):
      ACPICA: Implement ACPI_WARNING_ONCE and ACPI_ERROR_ONCE
      ACPICA: executer/exsystem: Don't nag user about every Stall()
violating the spec

Werner Sembach (1):
      ACPI: resource: Add another DMI match for the TongFang GMxXGxx

Zhang Rui (1):
      ACPICA: Complete CXL 3.0 CXIMS structures

---------------

 arch/arm64/kernel/pci.c                    | 191 ----------------
 arch/riscv/Kconfig                         |   2 +
 arch/riscv/include/asm/irq.h               |  55 +++++
 arch/riscv/kernel/acpi.c                   |  31 ++-
 drivers/acpi/ac.c                          |   4 +-
 drivers/acpi/acpi_apd.c                    |   6 +
 drivers/acpi/acpi_pad.c                    |  10 +-
 drivers/acpi/acpi_processor.c              |   6 +-
 drivers/acpi/acpica/acglobal.h             |   6 +-
 drivers/acpi/acpica/aclocal.h              |   2 +
 drivers/acpi/acpica/acpredef.h             |   2 +-
 drivers/acpi/acpica/dbconvert.c            |   2 +
 drivers/acpi/acpica/exconvrt.c             |  58 ++++-
 drivers/acpi/acpica/exprep.c               |   3 +
 drivers/acpi/acpica/exsystem.c             |  11 +-
 drivers/acpi/acpica/hwxfsleep.c            |  15 +-
 drivers/acpi/acpica/psargs.c               |  47 ++++
 drivers/acpi/acpica/rsaddr.c               |   3 +-
 drivers/acpi/acpica/rsdump.c               |   2 +
 drivers/acpi/acpica/tbutils.c              |   2 -
 drivers/acpi/acpica/utdelete.c             |   4 +-
 drivers/acpi/acpica/utinit.c               |   2 +-
 drivers/acpi/acpica/utosi.c                |   1 +
 drivers/acpi/acpica/utxfinit.c             |  24 +--
 drivers/acpi/battery.c                     |  39 +---
 drivers/acpi/bus.c                         |   4 +
 drivers/acpi/button.c                      |   6 +-
 drivers/acpi/cppc_acpi.c                   |  53 ++++-
 drivers/acpi/device_sysfs.c                | 196 ++++++++---------
 drivers/acpi/ec.c                          |  55 ++++-
 drivers/acpi/internal.h                    |   3 +-
 drivers/acpi/pci_link.c                    |   2 +
 drivers/acpi/pmic/tps68470_pmic.c          |   6 +-
 drivers/acpi/resource.c                    |  19 ++
 drivers/acpi/riscv/Makefile                |   2 +-
 drivers/acpi/riscv/init.c                  |  13 ++
 drivers/acpi/riscv/init.h                  |   4 +
 drivers/acpi/riscv/irq.c                   | 335 +++++++++++++++++++++++++=
++++
 drivers/acpi/scan.c                        | 109 ++++++----
 drivers/acpi/sleep.c                       |  14 ++
 drivers/acpi/utils.c                       |   3 +-
 drivers/acpi/video_detect.c                |  17 +-
 drivers/acpi/x86/utils.c                   |   1 -
 drivers/irqchip/irq-riscv-aplic-direct.c   |  22 +-
 drivers/irqchip/irq-riscv-aplic-main.c     |  71 +++---
 drivers/irqchip/irq-riscv-aplic-main.h     |   1 +
 drivers/irqchip/irq-riscv-aplic-msi.c      |   9 +-
 drivers/irqchip/irq-riscv-imsic-early.c    |  64 +++++-
 drivers/irqchip/irq-riscv-imsic-platform.c |  32 ++-
 drivers/irqchip/irq-riscv-imsic-state.c    | 150 +++++++------
 drivers/irqchip/irq-riscv-imsic-state.h    |   2 +-
 drivers/irqchip/irq-riscv-intc.c           |  90 ++++++++
 drivers/irqchip/irq-sifive-plic.c          |  99 +++++++--
 drivers/pci/pci-acpi.c                     | 182 ++++++++++++++++
 include/acpi/acconfig.h                    |   1 -
 include/acpi/acoutput.h                    |   5 +
 include/acpi/acpi_bus.h                    |   9 +-
 include/acpi/acpixf.h                      |  10 +-
 include/acpi/actbl1.h                      |  10 +-
 include/acpi/actbl2.h                      |   2 +-
 include/acpi/actbl3.h                      |  12 +-
 include/acpi/actypes.h                     |   1 +
 include/acpi/cppc_acpi.h                   |   2 +
 include/acpi/platform/acenv.h              |   6 +
 include/linux/acpi.h                       |   9 +
 include/linux/irqchip/riscv-imsic.h        |   9 +
 66 files changed, 1561 insertions(+), 607 deletions(-)

.
Date: Thu, 12 Sep 2024 08:58:50 -1000
From: Tejun Heo <tj@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Lai Jiangshan <jiangshanlai@gmail.com>
Subject: [GIT PULL] workqueue: Fixes for v6.11-rc7

The following changes since commit c4c8f369b6a6d21ce27286de1501137771e01dc3:

  workqueue: Correct declaration of cpu_pwq in struct workqueue_struct (2024-08-05 18:34:02 -1000)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git/ tags/wq-for-6.11-rc7-fixes

for you to fetch changes up to 73613840a8896f4f859eea489cb4a7a656939e70:

  workqueue: Clear worker->pool in the worker thread context (2024-09-11 19:58:20 -1000)

----------------------------------------------------------------
workqueue: Fixes for v6.11-rc7

Contains the fix for a NULL worker->pool deref bug which can be triggered
when a worker is created and then destroyed immediately.

----------------------------------------------------------------
Lai Jiangshan (1):
      workqueue: Clear worker->pool in the worker thread context

 kernel/workqueue.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

-- 
tejun

.
Date: Thu, 12 Sep 2024 10:56:31 -1000
From: Tejun Heo <tj@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
	Waiman Long <longman@redhat.com>,
	Zefan Li <lizefan.x@bytedance.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Michal =?iso-8859-1?Q?Koutn=FD?= <mkoutny@suse.com>
Subject: [GIT PULL] cgroup: Changes for v6.12

The following changes since commit ff0ce721ec213499ec5a532041fb3a1db2dc5ecb:

  cgroup/cpuset: Eliminate unncessary sched domains rebuilds in hotplug (2024-08-05 10:54:25 -1000)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/ tags/cgroup-for-6.12

for you to fetch changes up to af000ce85293b8e608f696f0c6c280bc3a75887f:

  cgroup: Do not report unavailable v1 controllers in /proc/cgroups (2024-09-10 10:04:28 -1000)

----------------------------------------------------------------
cgroup: Changes for v6.12

- cpuset isolation improvements.

- cpuset cgroup1 support is split into its own file behind the new config
  option CONFIG_CPUSET_V1. This makes it the second controller which makes
  cgroup1 support optional after memcg.

- Handling of unavailable v1 controller handling improved during cgroup1
  mount operations.

- union_find applied to cpuset. It makes code simpler and more efficient.

- Reduce spurious events in pids.events.

- Cleanups and other misc changes.

- Contains a merge of cgroup/for-6.11-fixes to receive cpuset fixes that
  further changes build upon.

----------------------------------------------------------------
Chen Ridong (18):
      cgroup/cpuset: remove child_ecpus_count
      cgroup/cpuset: add decrease attach_in_progress helpers
      cgroup: update some statememt about delegation
      cgroup/cpuset: Correct invalid remote parition prs
      cgroup/cpuset: remove fetch_xcpus
      cgroup/cpuset: remove use_parent_ecpus of cpuset
      cgroup/cpuset: introduce cpuset-v1.c
      cgroup/cpuset: move common code to cpuset-internal.h
      cgroup/cpuset: move memory_pressure to cpuset-v1.c
      cgroup/cpuset: move relax_domain_level to cpuset-v1.c
      cgroup/cpuset: move memory_spread to cpuset-v1.c
      cgroup/cpuset: add callback_lock helper
      cgroup/cpuset: move legacy hotplug update to cpuset-v1.c
      cgroup/cpuset: move validate_change_legacy to cpuset-v1.c
      cgroup/cpuset: move v1 interfaces to cpuset-v1.c
      cgroup/cpuset: rename functions shared between v1 and v2
      cgroup/cpuset: guard cpuset-v1 code under CONFIG_CPUSETS_V1
      cgroup/cpuset: add sefltest for cpuset v1

Michal Koutný (3):
      cgroup/cpuset: Expose cpuset filesystem with cpuset v1 only
      cgroup: Disallow mounting v1 hierarchies without controller implementation
      cgroup: Do not report unavailable v1 controllers in /proc/cgroups

Tejun Heo (1):
      Merge branch 'cgroup/for-6.11-fixes' into cgroup/for-6.12

Waiman Long (7):
      cgroup: Show # of subsystem CSSes in cgroup.stat
      cgroup/cpuset: Check for partition roots with overlapping CPUs
      selftest/cgroup: Add new test cases to test_cpuset_prs.sh
      cgroup: Fix incorrect WARN_ON_ONCE() in css_release_work_fn()
      cgroup/cpuset: Account for boot time isolated CPUs
      selftest/cgroup: Make test_cpuset_prs.sh deal with pre-isolated CPUs
      cgroup/cpuset: Move cpu.h include to cpuset-internal.h

Xavier (3):
      Union-Find: add a new module in kernel library
      cpuset: use Union-Find to optimize the merging of cpumasks
      Documentation: Fix the compilation errors in union_find.rst

Xiu Jianfeng (3):
      cgroup/pids: Avoid spurious event notification
      cgroup/cpuset: Remove cpuset_slab_spread_rotor
      cgroup/pids: Remove unreachable paths of pids_{can,cancel}_fork

 Documentation/admin-guide/cgroup-v2.rst            |   22 +-
 Documentation/core-api/index.rst                   |    1 +
 Documentation/core-api/union_find.rst              |  106 ++
 .../translations/zh_CN/core-api/index.rst          |    1 +
 .../translations/zh_CN/core-api/union_find.rst     |   92 ++
 MAINTAINERS                                        |   12 +
 include/linux/cgroup-defs.h                        |   14 +
 include/linux/cpuset.h                             |   10 +-
 include/linux/sched.h                              |    1 -
 include/linux/union_find.h                         |   41 +
 init/Kconfig                                       |   13 +
 kernel/cgroup/Makefile                             |    1 +
 kernel/cgroup/cgroup-v1.c                          |   17 +-
 kernel/cgroup/cgroup.c                             |   68 +-
 kernel/cgroup/cpuset-internal.h                    |  305 ++++++
 kernel/cgroup/cpuset-v1.c                          |  562 ++++++++++
 kernel/cgroup/cpuset.c                             | 1155 +++-----------------
 kernel/cgroup/pids.c                               |   32 +-
 kernel/fork.c                                      |    1 -
 lib/Makefile                                       |    2 +-
 lib/union_find.c                                   |   49 +
 tools/testing/selftests/cgroup/test_cpuset_prs.sh  |   56 +-
 .../selftests/cgroup/test_cpuset_v1_base.sh        |   77 ++
 23 files changed, 1569 insertions(+), 1069 deletions(-)
 create mode 100644 Documentation/core-api/union_find.rst
 create mode 100644 Documentation/translations/zh_CN/core-api/union_find.rst
 create mode 100644 include/linux/union_find.h
 create mode 100644 kernel/cgroup/cpuset-internal.h
 create mode 100644 kernel/cgroup/cpuset-v1.c
 create mode 100644 lib/union_find.c
 create mode 100755 tools/testing/selftests/cgroup/test_cpuset_v1_base.sh

-- 
tejun

.
Date: Thu, 12 Sep 2024 14:02:15 -0700
From: Guenter Roeck <linux@roeck-us.net>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-hwmon@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] hwmon fixes for v6.11-rc8

Hi Linus,

Please pull hwmon fixes for Linux v6.11-rc8 from signed tag:

    git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-for-v6.11-rc8

Thanks,
Guenter
------

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git tags/hwmon-for-v6.11-rc8

for you to fetch changes up to 20471071f198c8626dbe3951ac9834055b387844:

  hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2 (2024-09-09 10:58:09 -0700)

----------------------------------------------------------------
hwmon fixes for v6.11-rc8/v6.11

- Fix clearing status register bits for chips supporting older
  PMBus versions

----------------------------------------------------------------
Patryk Biel (1):
      hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2

 drivers/hwmon/pmbus/pmbus.h      |  6 ++++++
 drivers/hwmon/pmbus/pmbus_core.c | 17 ++++++++++++++---
 2 files changed, 20 insertions(+), 3 deletions(-)

.
Date: Thu, 12 Sep 2024 13:29:22 -1000
From: Tejun Heo <tj@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Lai Jiangshan <jiangshanlai@gmail.com>
Subject: [GIT PULL] workqueue: Changes for v6.12

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git/ tags/wq-for-6.12

for you to fetch changes up to b4722b8593b8815785bbadf87f13c88e89a0ebef:

  kernel/workqueue.c: fix DEFINE_PER_CPU_SHARED_ALIGNED expansion (2024-09-11 08:10:44 -1000)

----------------------------------------------------------------
workqueue: Changes for v6.12

Nothing major:

- workqueue.panic_on_stall boot param added.

- alloc_workqueue_lockdep_map() added (used by DRM).

- Other cleanusp and doc updates.

----------------------------------------------------------------
Baoquan He (1):
      kernel/workqueue.c: fix DEFINE_PER_CPU_SHARED_ALIGNED expansion

Matthew Brost (4):
      workqueue: Split alloc_workqueue into internal function and lockdep init
      workqueue: Change workqueue lockdep map to pointer
      workqueue: Add interface for user-defined workqueue lockdep map
      workqueue: Don't call va_start / va_end twice

Sangmoon Kim (2):
      workqueue: add cmdline parameter workqueue.panic_on_stall
      Documentation: kernel-parameters: add workqueue.panic_on_stall

Sergey Senozhatsky (1):
      workqueue: fix null-ptr-deref on __alloc_workqueue() error

Tejun Heo (2):
      workqueue: Fix htmldocs build warning
      workqueue: Fix another htmldocs build warning

 Documentation/admin-guide/kernel-parameters.txt |   7 ++
 include/linux/workqueue.h                       |  41 +++++++++
 kernel/workqueue.c                              | 107 ++++++++++++++++++------
 3 files changed, 130 insertions(+), 25 deletions(-)

-- 
tejun

.
Date: Thu, 12 Sep 2024 16:31:47 -0700
From: Stephen Boyd <sboyd@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michael Turquette <mturquette@baylibre.com>,
	linux-clk@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] clk fixes for v6.11-rc7

The following changes since commit 71c03a8cb213d267853e0d9f520c972480960544:

  clk: qcom: gcc-sc8280xp: don't use parking clk_ops for QUPs (2024-09-03 13:01:34 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git tags/clk-fixes-for-linus

for you to fetch changes up to a4d89b11aca3ffa73e234f06685261ce85e5fb41:

  clk: qcom: clk-alpha-pll: Simplify the zonda_pll_adjust_l_val() (2024-09-09 14:06:07 -0700)

----------------------------------------------------------------
One build fix for 32-bit arches using the Qualcomm PLL driver. It's
cheaper to use a comparison here instead of a division so we just do
that to fix the build.

----------------------------------------------------------------
Satya Priya Kakitapalli (1):
      clk: qcom: clk-alpha-pll: Simplify the zonda_pll_adjust_l_val()

 drivers/clk/qcom/clk-alpha-pll.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

-- 
https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git/
https://git.kernel.org/pub/scm/linux/kernel/git/sboyd/spmi.git

.
Date: Thu, 12 Sep 2024 21:15:46 -0400
From: Paul Moore <paul@paul-moore.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: audit@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] audit/audit-pr-20240911

Linus,

Two audit patches for the v6.12 merge window:

* Fix some remaining problems with PID/TGID reporting

When most users think about PIDs, what they are really thinking about is
the TGID.  This commit shifts the audit PID logging and filtering to use
the TGID value which should provide a more meaningful audit stream and
filtering experience for users.

* Migrate to the str_enabled_disabled() helper

Evidently we have helper functions that help ensure if we mistype
"enabled" or "disabled" it is now caught at compile time.  I guess we're
fancy now.

-Paul

--
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
    tags/audit-pr-20240911

for you to fetch changes up to 8c1867a2f0fd4235b84da6b204519e830b551988:

  audit: Make use of str_enabled_disabled() helper
    (2024-09-03 16:35:16 -0400)

----------------------------------------------------------------
audit/stable-6.12 PR 20240911
----------------------------------------------------------------

Hongbo Li (1):
      audit: Make use of str_enabled_disabled() helper

Ricardo Robaina (1):
      audit: use task_tgid_nr() instead of task_pid_nr()

 kernel/audit.c       |    4 ++--
 kernel/auditfilter.c |    2 +-
 kernel/auditsc.c     |    2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

--
paul-moore.com

.
Date: Thu, 12 Sep 2024 21:18:33 -0400
From: Paul Moore <paul@paul-moore.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: selinux@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] selinux/selinux-pr-20240911

Linus,

A number of small SELinux patches for the v6.12 merge window:

* Ensure that both IPv4 and IPv6 connections are properly initialized

While we always properly initialized IPv4 connections early in their
life, we missed the necessary IPv6 change when we were adding IPv6
support.

* Annotate the SELinux inode revalidation function to quiet KCSAN 

KCSAN correctly identifyies a race in __inode_security_revalidate() when
we check to see if an inode's SELinux has been properly initialized.
While KCSAN is correct, it is an intentional choice made for performance
reasons; if necessary, we check the state a second time, this time with a
lock held, before initializing the inode's state.

* Code cleanups, simplification, etc.

A handful of individual patches to simplify some SELinux kernel logic,
improve return code granularity via ERR_PTR(), follow the guidance on
using KMEM_CACHE(), and correct some minor style problems.

-Paul

--
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git
    tags/selinux-pr-20240911

for you to fetch changes up to d19a9e25a722d629041ac8fd320a86c016e349d1:

  selinux: fix style problems in security/selinux/include/audit.h
    (2024-09-03 18:54:38 -0400)

----------------------------------------------------------------
selinux/stable-6.12 PR 20240911
----------------------------------------------------------------

Canfeng Guo (1):
      selinux: Streamline type determination in security_compute_sid

Eric Suen (1):
      selinux: replace kmem_cache_create() with KMEM_CACHE()

Gaosheng Cui (1):
      selinux: refactor code to return ERR_PTR in
         selinux_netlbl_sock_genattr

Guido Trentalancia (1):
      selinux: mark both IPv4 and IPv6 accepted connection sockets as
         labeled

Paul Moore (1):
      selinux: fix style problems in security/selinux/include/audit.h

Stephen Smalley (1):
      selinux: annotate false positive data race to avoid KCSAN warnings

Zhen Lei (1):
      selinux: simplify avc_xperms_audit_required()

 security/selinux/avc.c           |   20 ++++---------
 security/selinux/hooks.c         |    7 ++++
 security/selinux/include/audit.h |   46 +++++++++++++++----------------
 security/selinux/netlabel.c      |   20 ++++++-------
 security/selinux/ss/avtab.c      |    7 +---
 security/selinux/ss/ebitmap.c    |    4 --
 security/selinux/ss/hashtab.c    |    4 --
 security/selinux/ss/services.c   |   36 ++++++++++++------------
 8 files changed, 68 insertions(+), 76 deletions(-)

--
paul-moore.com

.
Date: Thu, 12 Sep 2024 15:23:59 -1000
From: Tejun Heo <tj@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, David Vernet <void@manifault.com>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Alexei Starovoitov <ast@kernel.org>
Subject: [GIT PULL] sched_ext: Initial pull request for v6.12

The following changes since commit bc9057da1a220ff2cb6c8885fd5352558aceba2c:

  sched/cpufreq: Use NSEC_PER_MSEC for deadline task (2024-09-11 11:25:22 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git/ tags/sched_ext-for-6.12

for you to fetch changes up to 902d67a2d40f5b0815f4f627b26d91f96cc51fb3:

  sched: Move update_other_load_avgs() to kernel/sched/pelt.c (2024-09-11 20:00:21 -1000)

----------------------------------------------------------------
sched_ext: Initial pull request for v6.12

This is the initial pull request of sched_ext. The v7 patchset
(https://lkml.kernel.org/r/20240618212056.2833381-1-tj@kernel.org) is
applied on top of tip/sched/core + bpf/master as of Jun 18th.

  tip/sched/core 793a62823d1c ("sched/core: Drop spinlocks on contention iff kernel is preempti
ble")
  bpf/master f6afdaf72af7 ("Merge branch 'bpf-support-resilient-split-btf'")

Since then, the following pulls were made:

- v6.11-rc1 is pulled to keep up with the mainline.

- tip/sched/core was pulled several times:

  - 7b9f6c864a34, 0df340ceae2e, 5ac998574f93, 0b1777f0fa04: To resolve
    conflicts. See each commit for details on conflicts and their
    resolutions.

  - d7b01aef9dbd: To receive fd03c5b85855 ("sched: Rework pick_next_task()")
    and related commits. @prev in added to sched_class->put_prev_task() and
    put_prev_task() is reordered after ->pick_task(), which makes
    sched_class->switch_class() unnecessary. The follow-up commits update
    sched_ext accordingly and drop sched_class->switch_class().

- bpf/master was pulled to receive baebe9aaba1e ("bpf: allow passing struct
  bpf_iter_<type> as kfunc arguments") and related changes in preparation
  for the DSQ iterator patchset

To obtain the net sched_ext changes, diff against:

  git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git for-6.12-base

which is the merge of:

  tip/sched/core bc9057da1a22 ("sched/cpufreq: Use NSEC_PER_MSEC for deadline task")
  bpf/master 2ad6d23f465 ("selftests/bpf: Do not update vmlinux.h unnecessarily")

Since the v7 patchset, the following changes were made:

- cpuperf support which was a part of the v6 patchset was posted separately
  and then applied after reviews.

- cgroup support which was a part of the v6 patchset was posted seprately,
  iterated and then applied.

- Improve integration with sched core.

- Double locking usage in migration paths dropped. Depend on
  TASK_ON_RQ_MIGRATING synchronization instead.

- The BPF scheduler couldn't directly dispatch to the local DSQ of another
  CPU using a SCX_DSQ_LOCAL_ON verdict. This caused difficulties around
  handling non-wakeup enqueues. Updated so that SCX_DSQ_LOCAL_ON can be used
  in the enqueue path too.

- DSQ iterator which was a part of the v6 patchset was posted separately.
  The iterator itself was applied after a couple revisions. The associated
  selective consumption kfunc can use further improvements and is still
  being worked on.

- scx_bpf_dispatch[_vtime]_from_dsq() added to increase flexibility. A task
  can now be transferred between two DSQs from almost any context. This
  involved significant refactoring of migration code.

- Various fixes and improvements.

As the branch is based on top of tip/sched/core + bpf/master, please merge
after both are applied.

----------------------------------------------------------------
Aboorva Devarajan (1):
      sched_ext: Documentation: Remove mentions of scx_bpf_switch_all

Andrea Righi (2):
      sched_ext: fix typo in set_weight() description
      sched_ext: add CONFIG_DEBUG_INFO_BTF dependency

Colin Ian King (1):
      sched_ext: Fix spelling mistake: "intead" -> "instead"

David Vernet (8):
      sched_ext: Implement runnable task stall watchdog
      sched_ext: Print sched_ext info when dumping stack
      sched_ext: Implement SCX_KICK_WAIT
      sched_ext: Implement sched_ext_ops.cpu_acquire/release()
      sched_ext: Add selftests
      sched_ext: Make scx_bpf_cpuperf_set() @cpu arg signed
      scx: Allow calling sleepable kfuncs from BPF_PROG_TYPE_SYSCALL
      scx/selftests: Verify we can call create_dsq from prog_run

Hongyan Xia (1):
      sched/ext: Add BPF function to fetch rq

Jiapeng Chong (1):
      sched_ext: Fixes incorrect type in bpf_scx_init()

Manu Bretelle (1):
      sched_ext: define missing cfi stubs for sched_ext

Tejun Heo (102):
      Merge branch 'bpf/for-next' into sched_ext-base
      sched: Restructure sched_class order sanity checks in sched_init()
      sched: Allow sched_cgroup_fork() to fail and introduce sched_cancel_fork()
      sched: Add sched_class->reweight_task()
      sched: Add sched_class->switching_to() and expose check_class_changing/changed()
      sched: Factor out cgroup weight conversion functions
      sched: Factor out update_other_load_avgs() from __update_blocked_others()
      sched: Add normal_policy()
      sched_ext: Add boilerplate for extensible scheduler class
      sched_ext: Implement BPF extensible scheduler class
      sched_ext: Add scx_simple and scx_example_qmap example schedulers
      sched_ext: Add sysrq-S which disables the BPF scheduler
      sched_ext: Allow BPF schedulers to disallow specific tasks from joining SCHED_EXT
      sched_ext: Print debug dump after an error exit
      tools/sched_ext: Add scx_show_state.py
      sched_ext: Implement scx_bpf_kick_cpu() and task preemption support
      sched_ext: Add a central scheduler which makes all scheduling decisions on one CPU
      sched_ext: Make watchdog handle ops.dispatch() looping stall
      sched_ext: Add task state tracking operations
      sched_ext: Implement tickless support
      sched_ext: Track tasks that are subjects of the in-flight SCX operation
      sched_ext: Implement sched_ext_ops.cpu_online/offline()
      sched_ext: Bypass BPF scheduler while PM events are in progress
      sched_ext: Implement core-sched support
      sched_ext: Add vtime-ordered priority queue to dispatch_q's
      sched_ext: Documentation: scheduler: Document extensible scheduler class
      sched, sched_ext: Replace scx_next_task_picked() with sched_class->switch_class()
      cpufreq_schedutil: Refactor sugov_cpu_is_busy()
      sched_ext: Add cpuperf support
      sched_ext: Drop tools_clean target from the top-level Makefile
      sched_ext: Swap argument positions in kcalloc() call to avoid compiler warning
      Merge branch 'sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-6.11
      sched, sched_ext: Simplify dl_prio() case handling in sched_fork()
      sched_ext: Account for idle policy when setting p->scx.weight in scx_ops_enable_task()
      sched_ext: Disallow loading BPF scheduler if isolcpus= domain isolation is in effect
      sched_ext: Minor cleanups in kernel/sched/ext.h
      sched, sched_ext: Open code for_balance_class_range()
      sched, sched_ext: Move some declarations from kernel/sched/ext.h to sched.h
      sched_ext: Take out ->priq and ->flags from scx_dsq_node
      sched_ext: Implement DSQ iterator
      sched_ext/scx_qmap: Add an example usage of DSQ iterator
      sched_ext: Reimplement scx_bpf_reenqueue_local()
      sched_ext: Make scx_bpf_reenqueue_local() skip tasks that are being migrated
      sched: Move struct balance_callback definition upward
      sched_ext: Open-code task_linked_on_dsq()
      sched_ext: Unpin and repin rq lock from balance_scx()
      sched_ext: s/SCX_RQ_BALANCING/SCX_RQ_IN_BALANCE/ and add SCX_RQ_IN_WAKEUP
      sched_ext: Allow SCX_DSQ_LOCAL_ON for direct dispatches
      sched_ext/scx_qmap: Pick idle CPU for direct dispatch on !wakeup enqueues
      Merge tag 'v6.11-rc1' into for-6.12
      sched_ext: Build fix on !CONFIG_STACKTRACE[_SUPPORT]
      sched_ext: Allow p->scx.disallow only while loading
      Merge branch 'sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-6.12
      sched_ext: Simplify scx_can_stop_tick() invocation in sched_can_stop_tick()
      sched_ext: Add scx_enabled() test to @start_class promotion in put_prev_task_balance()
      sched_ext: Use update_curr_common() in update_curr_scx()
      sched_ext: Simplify UP support by enabling sched_class->balance() in UP
      sched_ext: Improve comment on idle_sched_class exception in scx_task_iter_next_locked()
      sched_ext: Make task_can_run_on_remote_rq() use common task_allowed_on_cpu()
      sched_ext: Fix unsafe list iteration in process_ddsp_deferred_locals()
      sched_ext: Make scx_rq_online() also test cpu_active() in addition to SCX_RQ_ONLINE
      sched_ext: Improve logging around enable/disable
      sched_ext: Don't use double locking to migrate tasks across CPUs
      Merge branch 'tip/sched/core' into for-6.12
      scx_central: Fix smatch checker warning
      sched_ext: Add missing cfi stub for ops.tick
      sched_ext: Use task_can_run_on_remote_rq() test in dispatch_to_local_dsq()
      sched_ext: Use sched_clock_cpu() instead of rq_clock_task() in touch_core_sched()
      Merge branch 'tip/sched/core' into for-6.12
      sched_ext: Don't call put_prev_task_scx() before picking the next task
      sched_ext: Replace SCX_TASK_BAL_KEEP with SCX_RQ_BAL_KEEP
      sched_ext: Unify regular and core-sched pick task paths
      sched_ext: Relocate functions in kernel/sched/ext.c
      sched_ext: Remove switch_class_scx()
      sched_ext: Remove sched_class->switch_class()
      sched_ext: TASK_DEAD tasks must be switched out of SCX on ops_disable
      sched_ext: TASK_DEAD tasks must be switched into SCX on ops_enable
      sched: Expose css_tg()
      sched: Make cpu_shares_read_u64() use tg_weight()
      sched: Introduce CONFIG_GROUP_SCHED_WEIGHT
      sched_ext: Add cgroup support
      sched_ext: Add a cgroup scheduler which uses flattened hierarchy
      Merge branch 'bpf/master' into for-6.12
      sched_ext: Temporarily work around pick_task_scx() being called without balance_scx()
      sched_ext: Add missing static to scx_has_op[]
      sched_ext: Add missing static to scx_dump_data
      sched_ext: Rename scx_kfunc_set_sleepable to unlocked and relocate
      sched_ext: Refactor consume_remote_task()
      sched_ext: Make find_dsq_for_dispatch() handle SCX_DSQ_LOCAL_ON
      sched_ext: Fix processs_ddsp_deferred_locals() by unifying DTL_INVALID handling
      sched_ext: Restructure dispatch_to_local_dsq()
      sched_ext: Reorder args for consume_local/remote_task()
      sched_ext: Move sanity check and dsq_mod_nr() into task_unlink_from_dsq()
      sched_ext: Move consume_local_task() upward
      sched_ext: Replace consume_local_task() with move_local_task_to_local_dsq()
      sched_ext: Compact struct bpf_iter_scx_dsq_kern
      sched_ext: Implement scx_bpf_dispatch[_vtime]_from_dsq()
      scx_qmap: Implement highpri boosting
      sched_ext: Synchronize bypass state changes with rq lock
      sched_ext: Don't trigger ops.quiescent/runnable() on migrations
      Merge branch 'tip/sched/core' into sched_ext/for-6.12
      sched: Move update_other_load_avgs() to kernel/sched/pelt.c

Yipeng Zou (1):
      sched_ext: Allow dequeue_task_scx to fail

 Documentation/scheduler/index.rst                                   |    1
 Documentation/scheduler/sched-ext.rst                               |  316
 MAINTAINERS                                                         |   13
 drivers/tty/sysrq.c                                                 |    1
 include/asm-generic/vmlinux.lds.h                                   |    1
 include/linux/cgroup.h                                              |    4
 include/linux/sched.h                                               |    5
 include/linux/sched/ext.h                                           |  215
 include/linux/sched/task.h                                          |    8
 include/trace/events/sched_ext.h                                    |   32
 include/uapi/linux/sched.h                                          |    1
 init/Kconfig                                                        |   10
 init/init_task.c                                                    |   12
 kernel/Kconfig.preempt                                              |   27
 kernel/fork.c                                                       |   17
 kernel/sched/build_policy.c                                         |   11
 kernel/sched/core.c                                                 |  281
 kernel/sched/cpufreq_schedutil.c                                    |   50
 kernel/sched/debug.c                                                |    3
 kernel/sched/ext.c                                                  | 7173 +++++++++++++++++++
 kernel/sched/ext.h                                                  |   91
 kernel/sched/fair.c                                                 |   23
 kernel/sched/idle.c                                                 |    2
 kernel/sched/pelt.c                                                 |   20
 kernel/sched/pelt.h                                                 |    1
 kernel/sched/sched.h                                                |  190
 kernel/sched/syscalls.c                                             |    7
 lib/dump_stack.c                                                    |    1
 tools/Makefile                                                      |   10
 tools/sched_ext/.gitignore                                          |    2
 tools/sched_ext/Makefile                                            |  246
 tools/sched_ext/README.md                                           |  270
 tools/sched_ext/include/bpf-compat/gnu/stubs.h                      |   11
 tools/sched_ext/include/scx/common.bpf.h                            |  412 +
 tools/sched_ext/include/scx/common.h                                |   75
 tools/sched_ext/include/scx/compat.bpf.h                            |   28
 tools/sched_ext/include/scx/compat.h                                |  186
 tools/sched_ext/include/scx/user_exit_info.h                        |  111
 tools/sched_ext/scx_central.bpf.c                                   |  361
 tools/sched_ext/scx_central.c                                       |  135
 tools/sched_ext/scx_flatcg.bpf.c                                    |  949 ++
 tools/sched_ext/scx_flatcg.c                                        |  233
 tools/sched_ext/scx_flatcg.h                                        |   51
 tools/sched_ext/scx_qmap.bpf.c                                      |  827 ++
 tools/sched_ext/scx_qmap.c                                          |  153
 tools/sched_ext/scx_show_state.py                                   |   39
 tools/sched_ext/scx_simple.bpf.c                                    |  156
 tools/sched_ext/scx_simple.c                                        |  107
 tools/testing/selftests/sched_ext/.gitignore                        |    6
 tools/testing/selftests/sched_ext/Makefile                          |  218
 tools/testing/selftests/sched_ext/config                            |    9
 tools/testing/selftests/sched_ext/create_dsq.bpf.c                  |   58
 tools/testing/selftests/sched_ext/create_dsq.c                      |   57
 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.bpf.c         |   42
 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.c             |   57
 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.bpf.c        |   39
 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.c            |   56
 tools/testing/selftests/sched_ext/dsp_local_on.bpf.c                |   65
 tools/testing/selftests/sched_ext/dsp_local_on.c                    |   58
 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.bpf.c       |   21
 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.c           |   60
 tools/testing/selftests/sched_ext/enq_select_cpu_fails.bpf.c        |   43
 tools/testing/selftests/sched_ext/enq_select_cpu_fails.c            |   61
 tools/testing/selftests/sched_ext/exit.bpf.c                        |   84
 tools/testing/selftests/sched_ext/exit.c                            |   55
 tools/testing/selftests/sched_ext/exit_test.h                       |   20
 tools/testing/selftests/sched_ext/hotplug.bpf.c                     |   61
 tools/testing/selftests/sched_ext/hotplug.c                         |  168
 tools/testing/selftests/sched_ext/hotplug_test.h                    |   15
 tools/testing/selftests/sched_ext/init_enable_count.bpf.c           |   53
 tools/testing/selftests/sched_ext/init_enable_count.c               |  166
 tools/testing/selftests/sched_ext/maximal.bpf.c                     |  164
 tools/testing/selftests/sched_ext/maximal.c                         |   51
 tools/testing/selftests/sched_ext/maybe_null.bpf.c                  |   36
 tools/testing/selftests/sched_ext/maybe_null.c                      |   49
 tools/testing/selftests/sched_ext/maybe_null_fail_dsp.bpf.c         |   25
 tools/testing/selftests/sched_ext/maybe_null_fail_yld.bpf.c         |   28
 tools/testing/selftests/sched_ext/minimal.bpf.c                     |   21
 tools/testing/selftests/sched_ext/minimal.c                         |   58
 tools/testing/selftests/sched_ext/prog_run.bpf.c                    |   33
 tools/testing/selftests/sched_ext/prog_run.c                        |   78
 tools/testing/selftests/sched_ext/reload_loop.c                     |   75
 tools/testing/selftests/sched_ext/runner.c                          |  201
 tools/testing/selftests/sched_ext/scx_test.h                        |  131
 tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c              |   40
 tools/testing/selftests/sched_ext/select_cpu_dfl.c                  |   72
 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.bpf.c   |   89
 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.c       |   72
 tools/testing/selftests/sched_ext/select_cpu_dispatch.bpf.c         |   41
 tools/testing/selftests/sched_ext/select_cpu_dispatch.c             |   70
 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.bpf.c |   37
 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.c     |   56
 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.bpf.c |   38
 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.c     |   56
 tools/testing/selftests/sched_ext/select_cpu_vtime.bpf.c            |   92
 tools/testing/selftests/sched_ext/select_cpu_vtime.c                |   59
 tools/testing/selftests/sched_ext/test_example.c                    |   49
 tools/testing/selftests/sched_ext/util.c                            |   71
 tools/testing/selftests/sched_ext/util.h                            |   13
 99 files changed, 16029 insertions(+), 126 deletions(-)

-- 
tejun

.
Date: Thu, 12 Sep 2024 21:29:54 -0400
From: Paul Moore <paul@paul-moore.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] lsm/lsm-pr-20240911

Linus,

We've got a reasonably large pull request for the LSM framework this
time (at least it's large for us), here are the highlights:

* Move the LSM framework to static calls

Based on some of our exchanges over the summer, it sounds like you
are already familiar with the effort to convert the LSM callbacks
from function pointers to static calls.  This pull request includes
that work and transitions the vast majority of the LSM callbacks into
static calls.  Those callbacks which haven't been converted were
left as-is due to the general ugliness of the changes required to
support the static call conversion; we can revisit those callbacks
at a future date.

It is worth mentioning that Tetsuo Handa is opposed to the static call
patches, some even carry his NACK, as they make it more difficult to
dynamically load out-of-tree LSMs, or unsupported LSMs on distro kernels.
Many of us have tried to explain that out-of-tree LSMs are not a
concern for the upstream LSM framework, or the Linux kernel in general,
and that decisions around what LSMs are enabled in distro kernels is
a distro issue, not an upstream issue, but unfortunately Tetsuo
continues to disregard these arguments.

* Add the Integrity Policy Enforcement (IPE) LSM

This pull request adds a new LSM, Integrity Policy Enforcement (IPE).
There is plenty of documentation about IPE in this patches, so I'll
refrain from going into too much detail here, but the basic motivation
behind IPE is to provide a mechanism such that administrators can
restrict execution to only those binaries which come from integrity
protected storage, e.g. a dm-verity protected filesystem.  You will
notice that IPE requires additional LSM hooks in the initramfs,
dm-verity, and fs-verity code, with the associated patches carrying
ACK/review tags from the associated maintainers.  We couldn't find an
obvious maintainer for the initramfs code, but the IPE patchset has
been widely posted over several years.

Both Deven Bowers and Fan Wu have contributed to IPE's development
over the past several years, with Fan Wu agreeing to serve as the IPE
maintainer moving forward.  Once IPE is accepted into your tree, I'll
start working with Fan to ensure he has the necessary accounts, keys,
etc. so that he can start submitting IPE pull requests to you directly
during the next merge window.

* Move the lifecycle management of the LSM blobs to the LSM framework

Management of the LSM blobs (the LSM state buffers attached to various
kernel structs, typically via a void pointer named "security" or similar)
has been mixed, some blobs were allocated/managed by individual LSMs,
others were managed by the LSM framework itself.  Starting with this
pull request we move management of all the LSM blobs, minus the XFRM
blob, into the framework itself, improving consistency across LSMs, and
reducing the amount of duplicated code across LSMs.  Due to some
additional work required to migrate the XFRM blob, it has been left as
a todo item for a later date; from a practical standpoint this omission
should have little impact as only SELinux provides a XFRM LSM
implementation.

* Fix problems with the LSM's handling of F_SETOWN

The LSM hook for the fcntl(F_SETOWN) operation had a couple of problems:
it was racy with itself, and it was disconnected from the associated DAC
related logic in such a way that the LSM state could be updated in cases
where the DAC state would not.  We fix both of these problems by moving
the security_file_set_fowner() hook into the same section of code where
the DAC attributes are updated.  Not only does this resolve the DAC/LSM
synchronization issue, but as that code block is protected by a lock, it
also resolve the race condition.

* Fix potential problems with the security_inode_free() LSM hook 

Due to use of RCU to protect inodes and the placement of the LSM hook
associated with freeing the inode, there is a bit of a challenge when
it comes to managing any LSM state associated with an inode.  The VFS
folks are not open to relocating the LSM hook so we have to get creative
when it comes to releasing an inode's LSM state.  Traditionally we have
used a single LSM callback within the hook that is triggered when the
inode is "marked for death", but not actually released due to RCU.
Unfortunately, this causes problems for LSMs which want to take an
action when the inode's associated LSM state is actually released; this
pull request adds an additional LSM callback, inode_free_security_rcu(),
that is called when the inode's LSM state is released in the RCU free
callback.

* Refactor two LSM hooks to better fit the LSM return value patterns

The vast majority of the LSM hooks follow the "return 0 on success,
negative values on failure" pattern, however, there are a small handful
that have unique return value behaviors which has caused confusion in the
past and makes it difficult for the BPF verifier to properly vet BPF LSM
programs.  This pull request includes patches to convert two of these
"special" LSM hooks to the common 0/-ERRNO pattern.

* Various cleanups and improvements

A handful of patches to remove redundant code, better leverage the
IS_ERR_OR_NULL() helper, add missing "static" markings, and do some minor
style fixups.

-Paul

--
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm.git
    tags/lsm-pr-20240911

for you to fetch changes up to 19c9d55d72a9040cf9dc8de62633e6217381106b:

  security: Update file_set_fowner documentation
    (2024-09-09 12:30:51 -0400)

----------------------------------------------------------------
lsm/stable-6.12 PR 20240911
----------------------------------------------------------------

Casey Schaufler (6):
      lsm: infrastructure management of the sock security
      lsm: infrastructure management of the key security blob
      lsm: add helper for blob allocations
      lsm: infrastructure management of the dev_tun blob
      lsm: infrastructure management of the infiniband blob
      lsm: infrastructure management of the perf_event security blob

Deven Bowers (13):
      lsm: add IPE lsm
      ipe: add policy parser
      ipe: add evaluation loop
      ipe: add LSM hooks on execution and kernel read
      ipe: add userspace interface
      audit,ipe: add IPE auditing support
      ipe: add permissive toggle
      block,lsm: add LSM blob and new LSM hooks for block devices
      dm-verity: expose root hash digest and signature data to LSMs
      ipe: add support for dm-verity as a trust provider
      scripts: add boot policy generation program
      ipe: kunit test for parser
      documentation: add IPE documentation

Fan Wu (7):
      initramfs,lsm: add a security hook to do_populate_rootfs()
      ipe: introduce 'boot_verified' as a trust provider
      lsm: add new securityfs delete function
      lsm: add security_inode_setintegrity() hook
      fsverity: expose verified fsverity built-in signatures to LSMs
      ipe: enable support for fs-verity as a trust provider
      MAINTAINERS: add IPE entry with Fan Wu as maintainer

Hongbo Li (1):
      lsm: Use IS_ERR_OR_NULL() helper function

KP Singh (4):
      init/main.c: Initialize early LSMs after arch code, static keys
         and calls.
      kernel: Add helper macros for loop unrolling
      lsm: count the LSMs enabled at compile time
      lsm: replace indirect LSM hook calls with static calls

Mickaël Salaün (2):
      fs: Fix file_set_fowner LSM hook inconsistencies
      security: Update file_set_fowner documentation

Paul Moore (2):
      lsm: cleanup lsm_hooks.h
      lsm: add the inode_free_security_rcu() LSM implementation hook

Tetsuo Handa (1):
      lsm: remove LSM_COUNT and LSM_CONFIG_COUNT

Xu Kuohai (2):
      lsm: Refactor return value of LSM hook vm_enough_memory
      lsm: Refactor return value of LSM hook inode_copy_up_xattr

Yang Li (1):
      ipe: Remove duplicated include in ipe.c

Yue Haibing (1):
      lockdown: Make lockdown_lsmid static

 Documentation/admin-guide/LSM/index.rst             |    1 
 Documentation/admin-guide/LSM/ipe.rst               |  790 ++++++++++++
 Documentation/admin-guide/kernel-parameters.txt     |   12 
 Documentation/filesystems/fsverity.rst              |   27 
 Documentation/security/index.rst                    |    1 
 Documentation/security/ipe.rst                      |  446 ++++++
 MAINTAINERS                                         |   10 
 block/bdev.c                                        |    7 
 drivers/md/dm-verity-target.c                       |  118 +
 drivers/md/dm-verity.h                              |    4 
 fs/fcntl.c                                          |   14 
 fs/overlayfs/copy_up.c                              |    6 
 fs/verity/signature.c                               |   18 
 include/linux/args.h                                |    6 
 include/linux/blk_types.h                           |    3 
 include/linux/lsm_count.h                           |  135 ++
 include/linux/lsm_hook_defs.h                       |   20 
 include/linux/lsm_hooks.h                           |  129 +
 include/linux/security.h                            |   55 
 include/linux/unroll.h                              |   36 
 include/uapi/linux/audit.h                          |    3 
 include/uapi/linux/lsm.h                            |    1 
 init/initramfs.c                                    |    3 
 init/main.c                                         |    6 
 scripts/Makefile                                    |    1 
 scripts/ipe/Makefile                                |    2 
 scripts/ipe/polgen/.gitignore                       |    2 
 scripts/ipe/polgen/Makefile                         |    5 
 scripts/ipe/polgen/polgen.c                         |  145 ++
 security/Kconfig                                    |   11 
 security/Makefile                                   |    1 
 security/apparmor/include/net.h                     |    3 
 security/apparmor/lsm.c                             |   17 
 security/apparmor/net.c                             |    2 
 security/commoncap.c                                |   11 
 security/inode.c                                    |   27 
 security/integrity/evm/evm_main.c                   |    2 
 security/integrity/ima/ima.h                        |    2 
 security/integrity/ima/ima_iint.c                   |   20 
 security/integrity/ima/ima_main.c                   |    2 
 security/ipe/.gitignore                             |    2 
 security/ipe/Kconfig                                |   97 +
 security/ipe/Makefile                               |   31 
 security/ipe/audit.c                                |  292 ++++
 security/ipe/audit.h                                |   19 
 security/ipe/digest.c                               |  118 +
 security/ipe/digest.h                               |   26 
 security/ipe/eval.c                                 |  393 +++++
 security/ipe/eval.h                                 |   70 +
 security/ipe/fs.c                                   |  247 +++
 security/ipe/fs.h                                   |   16 
 security/ipe/hooks.c                                |  314 ++++
 security/ipe/hooks.h                                |   52 
 security/ipe/ipe.c                                  |   98 +
 security/ipe/ipe.h                                  |   26 
 security/ipe/policy.c                               |  227 +++
 security/ipe/policy.h                               |   98 +
 security/ipe/policy_fs.c                            |  472 +++++++
 security/ipe/policy_parser.c                        |  559 ++++++++
 security/ipe/policy_parser.h                        |   11 
 security/ipe/policy_tests.c                         |  296 ++++
 security/landlock/fs.c                              |    9 
 security/lockdown/lockdown.c                        |    2 
 security/security.c                                 |  615 ++++++---
 security/selinux/hooks.c                            |  176 --
 security/selinux/include/objsec.h                   |   28 
 security/selinux/netlabel.c                         |   23 
 security/smack/smack.h                              |   12 
 security/smack/smack_lsm.c                          |  107 -
 security/smack/smack_netfilter.c                    |    4 
 tools/testing/selftests/lsm/lsm_list_modules_test.c |    3 
 71 files changed, 6063 insertions(+), 484 deletions(-)

--
paul-moore.com

.
Date: Fri, 13 Sep 2024 16:46:14 +1000
From: Dave Airlie <airlied@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>, Sima Vetter <sima@ffwll.ch>
Cc: dri-devel <dri-devel@lists.freedesktop.org>, LKML <linux-kernel@vger.kernel.org>
Subject: [git pull] drm fixes for 6.11-rc8

Hi Linus,

Regular fixes pull, the amdgpu JPEG engine fixes are probably the
biggest, they look to block some register accessing, otherwise there
are just minor fixes and regression fixes all over. nouveau had a
regression report going back a few kernels that finally got fixed, Not
entirely happy with so many changes so late, but they all seem quite
benign apart from the jpeg one.

I should be fine for the merge window next week, see you in Vienna.

Dave.

drm-fixes-2024-09-13:
drm fixes for 6.11-rc8

dma-buf/heaps:
- fix off by one in CMA heap fault handler

syncobj:
- fix syncobj leak in drm_syncobj_eventfd_ioctl

amdgpu:
- Avoid races between set_drr() functions and dc_state_destruct()
- Fix regression related to zpos
- Fix regression related to overlay cursor
- SMU 14.x updates
- JPEG fixes
- Silence an UBSAN warning

amdkfd:
- Fetch cacheline size from IP discovery

i915:
- Prevent a possible int overflow in wq offsets

xe:
- Remove a double include
- Fix null checks and UAF
- Fix access_ok check in user_fence_create
- Fix compat IS_DISPLAY_STEP() range
- OA fix
- Fixes in show_meminfo

nouveau:
- fix GP10x regression on boot

stm:
- add COMMON_CLK dep

rockchip:
- iommu api change

tegra:
- iommu api change
The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  https://gitlab.freedesktop.org/drm/kernel.git tags/drm-fixes-2024-09-13

for you to fetch changes up to 135be1dc46c64c454f2828dbb7f239d035f47180:

  Merge tag 'drm-xe-fixes-2024-09-12' of
https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes
(2024-09-13 15:18:18 +1000)

----------------------------------------------------------------
drm fixes for 6.11-rc8

dma-buf/heaps:
- fix off by one in CMA heap fault handler

syncobj:
- fix syncobj leak in drm_syncobj_eventfd_ioctl

amdgpu:
- Avoid races between set_drr() functions and dc_state_destruct()
- Fix regerssion related to zpos
- Fix regression related to overlay cursor
- SMU 14.x updates
- JPEG fixes
- Silence an UBSAN warning

amdkfd:
- Fetch cacheline size from IP discovery

i915:
- Prevent a possible int overflow in wq offsets

xe:
- Remove a double include
- Fix null checks and UAF
- Fix access_ok check in user_fence_create
- Fix compat IS_DISPLAY_STEP() range
- OA fix
- Fixes in show_meminfo

nouveau:
- fix GP10x regression on boot

stm:
- add COMMON_CLK dep

rockchip:
- iommu api change

tegra:
- iommu api change

----------------------------------------------------------------
Alex Deucher (1):
      drm/amdgpu/atomfirmware: Silence UBSAN warning

Arnd Bergmann (1):
      drm/stm: add COMMON_CLK dependency

Ashutosh Dixit (1):
      drm/xe/oa: Enable Xe2+ PES disaggregation

Ben Skeggs (1):
      drm/nouveau/fb: restore init() for ramgp102

Dave Airlie (4):
      Merge tag 'amd-drm-fixes-6.11-2024-09-11' of
https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
      Merge tag 'drm-intel-fixes-2024-09-12' of
https://gitlab.freedesktop.org/drm/i915/kernel into drm-fixes
      Merge tag 'drm-misc-fixes-2024-09-12' of
https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes
      Merge tag 'drm-xe-fixes-2024-09-12' of
https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes

David (Ming Qiang) Wu (2):
      drm/amd/amdgpu: apply command submission parser for JPEG v2+
      drm/amd/amdgpu: apply command submission parser for JPEG v1

David Belanger (1):
      drm/amdkfd: Add cache line size info

Jani Nikula (1):
      drm/xe/display: fix compat IS_DISPLAY_STEP() range end

Kenneth Feng (2):
      drm/amd/pm: update the features set on smu v14.0.2/3
      drm/amd/pm: fix the pp_dpm_pcie issue on smu v14.0.2/3

Leo Li (2):
      drm/amd/display: Do not reset planes based on crtc zpos_changed
      drm/amd/display: Add all planes on CRTC to state for overlay cursor

Lu Baolu (2):
      drm/rockchip: Use iommu_paging_domain_alloc()
      drm/tegra: Use iommu_paging_domain_alloc()

Lucas De Marchi (1):
      drm/xe/gt: Remove double include

Matthew Auld (2):
      drm/xe/client: fix deadlock in show_meminfo()
      drm/xe/client: add missing bo locking in show_meminfo()

Matthew Brost (2):
      drm/xe: Remove fence check from send_tlb_invalidation
      drm/xe: Fix possible UAF in guc_exec_queue_process_msg

Nikita Zhandarovich (1):
      drm/i915/guc: prevent a possible int overflow in wq offsets

Nirmoy Das (1):
      drm/xe: Fix access_ok check in user_fence_create

T.J. Mercier (2):
      dma-buf: heaps: Fix off-by-one in CMA heap fault handler
      drm/syncobj: Fix syncobj leak in drm_syncobj_eventfd_ioctl

Tobias Jakobi (2):
      drm/amd/display: Avoid race between dcn10_set_drr() and
dc_state_destruct()
      drm/amd/display: Avoid race between dcn35_set_drr() and
dc_state_destruct()

 drivers/dma-buf/heaps/cma_heap.c                   |  2 +-
 drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c             | 76 +++++++++++++++++++++-
 drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h             | 11 ++++
 drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c             | 63 +++++++++++++++++-
 drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h             |  6 ++
 drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c             |  2 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c             |  1 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c             |  1 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.h             |  1 -
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c           | 57 +---------------
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.h           |  7 +-
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c           |  1 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c           |  3 +-
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c              |  8 ++-
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  | 13 +++-
 .../drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c    | 20 +++---
 .../drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c    | 20 +++---
 drivers/gpu/drm/amd/include/atomfirmware.h         |  4 +-
 drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h       | 11 +++-
 .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c   | 12 ++++
 drivers/gpu/drm/drm_syncobj.c                      | 17 +++--
 drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c  |  4 +-
 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h       |  2 +
 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c  |  2 +-
 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c  |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c        | 10 ++-
 drivers/gpu/drm/stm/Kconfig                        |  1 +
 drivers/gpu/drm/tegra/drm.c                        |  5 +-
 drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h  |  2 +-
 drivers/gpu/drm/xe/regs/xe_oa_regs.h               |  1 +
 drivers/gpu/drm/xe/xe_drm_client.c                 | 45 +++++++++++--
 drivers/gpu/drm/xe/xe_gt.c                         |  1 -
 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c        |  4 +-
 drivers/gpu/drm/xe/xe_guc_submit.c                 |  4 +-
 drivers/gpu/drm/xe/xe_oa.c                         |  4 ++
 drivers/gpu/drm/xe/xe_sync.c                       |  2 +-
 36 files changed, 315 insertions(+), 109 deletions(-)

.
Date: Fri, 13 Sep 2024 16:58:12 +0800
From: Huacai Chen <chenhuacai@loongson.cn>
To: Paolo Bonzini <pbonzini@redhat.com>,
	Huacai Chen <chenhuacai@kernel.org>,
	Tianrui Zhao <zhaotianrui@loongson.cn>,
	Bibo Mao <maobibo@loongson.cn>
Cc: kvm@vger.kernel.org,
	loongarch@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Xuerui Wang <kernel@xen0n.name>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	Huacai Chen <chenhuacai@loongson.cn>
Subject: [GIT PULL] LoongArch KVM changes for v6.12

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git tags/loongarch-kvm-6.12

for you to fetch changes up to 3abb708ec0be25da16a1ee9f1ab5cbc93f3256f3:

  LoongArch: KVM: Implement function kvm_para_has_feature() (2024-09-12 22:56:14 +0800)

----------------------------------------------------------------
LoongArch KVM changes for v6.12

1. Revert qspinlock to test-and-set simple lock on VM.
2. Add Loongson Binary Translation extension support.
3. Add PMU support for guest.
4. Enable paravirt feature control from VMM.
5. Implement function kvm_para_has_feature().

----------------------------------------------------------------
Bibo Mao (6):
      LoongArch: Revert qspinlock to test-and-set simple lock on VM
      LoongArch: KVM: Add VM feature detection function
      LoongArch: KVM: Add Binary Translation extension support
      LoongArch: KVM: Add vm migration support for LBT registers
      LoongArch: KVM: Enable paravirt feature control from VMM
      LoongArch: KVM: Implement function kvm_para_has_feature()

Song Gao (1):
      LoongArch: KVM: Add PMU support for guest

 arch/loongarch/include/asm/Kbuild          |   1 -
 arch/loongarch/include/asm/kvm_csr.h       |   6 +
 arch/loongarch/include/asm/kvm_host.h      |  37 +++-
 arch/loongarch/include/asm/kvm_para.h      |  12 +
 arch/loongarch/include/asm/kvm_vcpu.h      |  11 +
 arch/loongarch/include/asm/loongarch.h     |  11 +-
 arch/loongarch/include/asm/paravirt.h      |   7 +
 arch/loongarch/include/asm/qspinlock.h     |  41 ++++
 arch/loongarch/include/uapi/asm/Kbuild     |   2 -
 arch/loongarch/include/uapi/asm/kvm.h      |  20 ++
 arch/loongarch/include/uapi/asm/kvm_para.h |  21 ++
 arch/loongarch/kernel/paravirt.c           |  47 ++--
 arch/loongarch/kernel/setup.c              |   2 +
 arch/loongarch/kernel/smp.c                |   4 +-
 arch/loongarch/kvm/exit.c                  |  46 ++--
 arch/loongarch/kvm/vcpu.c                  | 340 ++++++++++++++++++++++++++++-
 arch/loongarch/kvm/vm.c                    |  69 +++++-
 17 files changed, 616 insertions(+), 61 deletions(-)
 create mode 100644 arch/loongarch/include/asm/qspinlock.h
 create mode 100644 arch/loongarch/include/uapi/asm/kvm_para.h

.
Date: Fri, 13 Sep 2024 11:53:38 +0200
From: Andi Shyti <andi.shyti@kernel.org>
To: Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: linux-i2c <linux-i2c@vger.kernel.org>, 
	lkml <linux-kernel@vger.kernel.org>, Andi Shyti <andi.shyti@kernel.org>
Subject: [GIT PULL] i2c-host-fixes for v6.11-rc8

Hi Wolfram,

Here’s the fixes pull request. It’s funny, after a few weeks with
no fixes, right at the merge window, I’m sending in five!

I’ve also brought in from the past two fixes from Robert Hancock
for the Xilinx controller.

See you later today for the next pull request.

Thanks,
Andi

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git tags/i2c-host-fixes-6.11-rc8

for you to fetch changes up to e2c85d85a05f16af2223fcc0195ff50a7938b372:

  i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq() (2024-09-12 09:08:22 +0200)

----------------------------------------------------------------
The Aspeed driver tracks the controller's state (stop, pending,
start, etc.). Previously, when the stop command was sent, the
state was not updated. The fix in this pull request ensures the
driver's state is aligned with the device status.

The Intel SCH driver receives a new look, and among the cleanups,
there is a fix where, due to an oversight, an if/else statement
was missing the else, causing it to move forward instead of
exiting the function in case of an error.

The Qualcomm GENI I2C driver adds the IRQF_NO_AUTOEN flag to the
IRQ setup to prevent unwanted interrupts during probe.

The Xilinx XPS controller fixes TX FIFO handling to avoid missed
NAKs. Another fix ensures the controller is reinitialized when
the bus appears busy.

----------------------------------------------------------------
Andy Shevchenko (1):
      i2c: isch: Add missed 'else'

Jinjie Ruan (1):
      i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq()

Robert Hancock (2):
      i2c: xiic: Wait for TX empty to avoid missed TX NAKs
      i2c: xiic: Try re-initialization on bus busy timeout

Tommy Huang (1):
      i2c: aspeed: Update the stop sw state when the bus recovery occurs

 drivers/i2c/busses/i2c-aspeed.c    | 16 ++++++++--------
 drivers/i2c/busses/i2c-isch.c      |  3 +--
 drivers/i2c/busses/i2c-qcom-geni.c |  4 +---
 drivers/i2c/busses/i2c-xiic.c      | 60 +++++++++++++++++++++++++++++++++++-------------------------
 4 files changed, 45 insertions(+), 38 deletions(-)

.
Date: Fri, 13 Sep 2024 13:20:01 +0200
From: Andi Shyti <andi.shyti@kernel.org>
To: Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: linux-i2c <linux-i2c@vger.kernel.org>, 
	lkml <linux-kernel@vger.kernel.org>, Andi Shyti <andi.shyti@kernel.org>
Subject: [GIT PULL] i2c-host for v6.12

Hi Wolfram,

This turned out to be a fairly loaded pull request, covering a
variety of topics. There are four new platforms added, but the
bulk of it consists of cleanups and refactors.

I didn’t plan to have a second pull request during this merge
window. Everything that was submitted is included in this one.

Wishing you a great weekend and a fantastic conference week,
which I’m sorry to miss!

Andi

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git tags/i2c-host-6.12

for you to fetch changes up to f56f4ba2fc1dbefd3242946f2fad35338a60e3bc:

  i2c: designware: Use pci_get_drvdata() (2024-09-11 12:52:46 +0200)

----------------------------------------------------------------
The DesignWare and the Renesas I2C drivers have received most of
the changes in this pull request.

The first has has undergone through a series of cleanups that
have been sent to the mailing list a year ago for the first time
and finally get merged in this pull request. They are many, from
typos (e.g. i2/i2c), to cosmetics, to refactoring (e.g. move
inline functions to librarieas) and many others.

Besides that, all the DesignWare Kconfig options have been
grouped under the I2C_DESIGNWARE_CORE and this required some
adaptation in many of the kernel configuration files for
different arm and mips boards.

Follows the list of the rest of the changes grouped by type of
change.

Cleanups
--------
The Qualcomm Geni platform improves the exit path in the runtime
resume function.

The Intel LJCA driver loses "target_addr" parameter in
ljca_i2c_stop() because it was unused.

The MediaTek controller intializes the restart_flag in the
transfer function using the ternary conditional operator ("? :")
instead of initializing it in different parts.

Constified a few global data structures in the virtio driver.

The Renesas driver simplifies the bus speed handling in the init
function making it more readable.

Improved an if/else statement in probe function of the Renesas
R-Car driver.

The iMX/MXC driver switches to using the RUNTIME_PM_OPS() instead
of SET_RUNTIME_PM_OPS().

Still in the iMX/MXC driver a comma ',' has been replaced by a
semicolon ';', while in different drivers the ',' has been
removed from the '{ }' delimiters.

Finally three devm_clk_get_enabled() have been used to simplify
the devm_clk_get/clk_prepare_enable tuple in the Renesas EMEV2,
Ingenic and MPC drivers.

Refactors
---------
The Nuvoton fixes a potential out of boundary array access. This
is not a bug fix because the issue could never occur due to
hardware not having the properties listed in the array. The
change makes the driver more future proof and, at the same time,
silences code analyzers.

Improvements
------------
The Renesas I2C (riic) driver undergoes several patches improving
the runtime power management handling.

The Intel i801 driver uses a more descriptive adapter's name to
show the presence of the IDF feature.

In the Intel Denverton (ismt) adapter the pending transactions
are killed when irq's can't complete their handling, triggering a
timeout. This could have been considered as a bug fix, but
because, standing to Vasily, it's very sporadic, I preferred
considering the patch rather as an improvement.

New Feature
-----------
The Renesas I2C (riic) driver now supports the fast mode plus.

New support
-----------
Added support for:

    - Renesas R9A08G045
    - Rockchip RK3576
    - KEBA I2C
    - Theobroma Systems Mule Multiplexer.

The Keba comes with a new driver, i2c-keba.c.
The Mule is an i2c multiplexer and it also comes with a new
driver, mux/i2c-mux-mule.c.

Core patch
----------
This pull request includes also a patch in the I2C framework, in
i2c-core-base.c where the runtime PM functions have been replaced
in order to allow to be accessed during the device add.

Devicetree
----------
Some cleanups in the devicetree, as well. nVidia and Qualcomm
bindings improve their "if:then:" blocks. While the aspeed
binding loses the "multi-master" property because it was
redundant.

The i2c-sprd binding has been converted to YAML.

----------------------------------------------------------------
Adrian Huang (1):
      i2c: designware: Fix wrong setting for {ss,fs,hs}_{h,l}cnt registers

Andi Shyti (2):
      i2c: qcom-geni: Use goto for clearer exit path
      i2c: ljca: Remove unused "target_addr" parameter

Andy Shevchenko (16):
      i2c: designware: Replace a while-loop by for-loop
      i2c: designware: Let PCI core to take care about interrupt vectors
      i2c: designware: Add missing 'c' into PCI IDs variable name
      i2c: designware: Unify terminator in device ID tables
      i2c: designware: Always provide device ID tables
      i2c: designware: Drop return value from i2c_dw_acpi_configure()
      i2c: designware: Drop return value from dw_i2c_of_configure()
      i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure()
      i2c: designware: Consolidate firmware parsing and configuring code
      i2c: designware: Unify the firmware type checks
      i2c: designware: Move exports to I2C_DW namespaces
      i2c: designware: Remove ->disable() callback
      i2c: designware: Consolidate PM ops
      i2c: designware: Uninline i2c_dw_probe()
      i2c: designware: Propagate firmware node
      i2c: designware: Use pci_get_drvdata()

AngeloGioacchino Del Regno (1):
      i2c: mt65xx: Avoid double initialization of restart_flag in isr

Christophe JAILLET (1):
      i2c: virtio: Constify struct i2c_algorithm and struct virtio_device_id

Claudiu Beznea (8):
      i2c: riic: Use temporary variable for struct device
      i2c: riic: Call pm_runtime_get_sync() when need to access registers
      i2c: riic: Use pm_runtime_resume_and_get()
      i2c: riic: Enable runtime PM autosuspend support
      i2c: riic: Add suspend/resume support
      i2c: riic: Define individual arrays to describe the register offsets
      dt-bindings: i2c: renesas,riic: Document the R9A08G045 support
      i2c: riic: Add support for fast mode plus

Detlev Casanova (1):
      dt-bindings: i2c: i2c-rk3x: Add rk3576 compatible

Fabio Estevam (1):
      i2c: imx: Switch to RUNTIME_PM_OPS()

Farouk Bouabid (2):
      dt-bindings: i2c: add support for tsd,mule-i2c-mux
      i2c: muxes: add support for tsd,mule-i2c multiplexer

Geert Uytterhoeven (1):
      i2c: riic: Simplify unsupported bus speed handling

Gerhard Engleder (1):
      i2c: keba: Add KEBA I2C controller support

Hans de Goede (2):
      i2c: core: Setup i2c_adapter runtime-pm before calling device_add()
      i2c: i801: Use a different adapter-name for IDF adapters

Heikki Krogerus (7):
      ARC: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM
      ARM: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM
      arm64: defconfig: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM
      mips: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM
      RISC-V: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM
      net: txgbe: Fix I2C Kconfig dependencies
      i2c: designware: Group all DesignWare drivers under a single option

Krzysztof Kozlowski (5):
      dt-bindings: i2c: nvidia,tegra20-i2c: combine same if:then: clauses
      dt-bindings: i2c: nvidia,tegra20-i2c: restrict also clocks in if:then:
      dt-bindings: i2c: nvidia,tegra20-i2c: define power-domains top-level
      dt-bindings: i2c: qcom,i2c-cci: add missing clocks constraint in if:then:
      dt-bindings: i2c: aspeed: drop redundant multi-master

Kuninori Morimoto (1):
      i2c: rcar: tidyup priv->devtype handling on rcar_i2c_probe()

Rong Qianfeng (2):
      i2c: emev2: Use devm_clk_get_enabled() helpers
      i2c: jz4780: Use devm_clk_get_enabled() helpers

Shen Lichuan (1):
      i2c: imx: Convert comma to semicolon

Stanislav Jakubek (1):
      dt-bindings: i2c: i2c-sprd: convert to YAML

Tyrone Ting (1):
      i2c: npcm: restore slave addresses array length

Vasily Khoruzhick (1):
      i2c: ismt: kill transaction in hardware on timeout

Wolfram Sang (1):
      i2c: don't use ',' after delimiters

Zhang Zekun (1):
      i2c: mpc: Use devm_clk_get_optional_enabled() to simplify code

 .../devicetree/bindings/i2c/aspeed,i2c.yaml        |   5 -
 .../devicetree/bindings/i2c/i2c-rk3x.yaml          |   1 +
 Documentation/devicetree/bindings/i2c/i2c-sprd.txt |  31 --
 .../bindings/i2c/nvidia,tegra20-i2c.yaml           |  27 +-
 .../devicetree/bindings/i2c/qcom,i2c-cci.yaml      |   1 +
 .../devicetree/bindings/i2c/renesas,riic.yaml      |   4 +
 .../devicetree/bindings/i2c/sprd,sc9860-i2c.yaml   |  65 +++
 .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml  |  69 +++
 arch/arc/configs/axs101_defconfig                  |   1 +
 arch/arc/configs/axs103_defconfig                  |   1 +
 arch/arc/configs/axs103_smp_defconfig              |   1 +
 arch/arc/configs/tb10x_defconfig                   |   1 +
 arch/arm/configs/hisi_defconfig                    |   1 +
 arch/arm/configs/multi_v7_defconfig                |   1 +
 arch/arm/configs/pxa_defconfig                     |   1 +
 arch/arm/configs/socfpga_defconfig                 |   1 +
 arch/arm/configs/spear13xx_defconfig               |   1 +
 arch/arm/configs/spear3xx_defconfig                |   1 +
 arch/arm/configs/spear6xx_defconfig                |   1 +
 arch/arm64/configs/defconfig                       |   1 +
 arch/mips/configs/generic/board-ocelot.config      |   1 +
 arch/riscv/configs/defconfig                       |   1 +
 arch/riscv/configs/nommu_k210_defconfig            |   1 +
 arch/riscv/configs/nommu_k210_sdcard_defconfig     |   1 +
 drivers/i2c/busses/Kconfig                         |  40 +-
 drivers/i2c/busses/Makefile                        |   1 +
 drivers/i2c/busses/i2c-ali1535.c                   |   3 +-
 drivers/i2c/busses/i2c-amd-mp2-plat.c              |   2 +-
 drivers/i2c/busses/i2c-aspeed.c                    |   2 +-
 drivers/i2c/busses/i2c-designware-common.c         | 180 ++++++-
 drivers/i2c/busses/i2c-designware-core.h           |  39 +-
 drivers/i2c/busses/i2c-designware-master.c         |  36 +-
 drivers/i2c/busses/i2c-designware-pcidrv.c         |  88 +--
 drivers/i2c/busses/i2c-designware-platdrv.c        | 184 ++-----
 drivers/i2c/busses/i2c-designware-slave.c          |   6 +-
 drivers/i2c/busses/i2c-digicolor.c                 |   2 +-
 drivers/i2c/busses/i2c-emev2.c                     |  25 +-
 drivers/i2c/busses/i2c-i801.c                      |   9 +-
 drivers/i2c/busses/i2c-imx-lpi2c.c                 |   2 +-
 drivers/i2c/busses/i2c-imx.c                       |  11 +-
 drivers/i2c/busses/i2c-ismt.c                      |  10 +
 drivers/i2c/busses/i2c-jz4780.c                    |  22 +-
 drivers/i2c/busses/i2c-keba.c                      | 598 +++++++++++++++++++++
 drivers/i2c/busses/i2c-ljca.c                      |   6 +-
 drivers/i2c/busses/i2c-mpc.c                       |  23 +-
 drivers/i2c/busses/i2c-mt65xx.c                    |   5 +-
 drivers/i2c/busses/i2c-npcm7xx.c                   |   6 +-
 drivers/i2c/busses/i2c-omap.c                      |   2 +-
 drivers/i2c/busses/i2c-piix4.c                     |   2 +-
 drivers/i2c/busses/i2c-pnx.c                       |   2 +-
 drivers/i2c/busses/i2c-pxa-pci.c                   |   2 +-
 drivers/i2c/busses/i2c-pxa.c                       |   2 +-
 drivers/i2c/busses/i2c-qcom-geni.c                 |  23 +-
 drivers/i2c/busses/i2c-qup.c                       |   2 +-
 drivers/i2c/busses/i2c-rcar.c                      |  12 +-
 drivers/i2c/busses/i2c-riic.c                      | 228 +++++---
 drivers/i2c/busses/i2c-s3c2410.c                   |   2 +-
 drivers/i2c/busses/i2c-virtio.c                    |   4 +-
 drivers/i2c/i2c-core-base.c                        |  20 +-
 drivers/i2c/muxes/Kconfig                          |  16 +
 drivers/i2c/muxes/Makefile                         |   1 +
 drivers/i2c/muxes/i2c-mux-mule.c                   | 148 +++++
 drivers/net/ethernet/wangxun/Kconfig               |   3 +-
 63 files changed, 1480 insertions(+), 508 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/i2c/i2c-sprd.txt
 create mode 100644 Documentation/devicetree/bindings/i2c/sprd,sc9860-i2c.yaml
 create mode 100644 Documentation/devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml
 create mode 100644 drivers/i2c/busses/i2c-keba.c
 create mode 100644 drivers/i2c/muxes/i2c-mux-mule.c

.
Date: Fri, 13 Sep 2024 17:15:00 +0530
From: Vinod Koul <vkoul@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: [GIT PULL]: Late fixes for soundwire subsystem for v6.11


--cDJdxvnMXDwbtM3g
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello Linus,

The earlier fix for non-continuous port map programming caused
regression to Intel platforms, so lets revert that change. Please pull
to receive the patch to revert the earlier fix.


The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6:

  Linux 6.11-rc6 (2024-09-01 19:46:02 +1200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git tags/so=
undwire-6.11-fixes_2

for you to fetch changes up to 233a95fd574fde1c375c486540a90304a2d2d49f:

  soundwire: stream: Revert "soundwire: stream: fix programming slave ports=
 for non-continous port maps" (2024-09-11 13:05:43 +0530)

----------------------------------------------------------------
soundwire final fixes for 6.11

- Revert of earlier fix sent for non-continuous port map programming
  which caused regression on Intel platforms

----------------------------------------------------------------
Krzysztof Kozlowski (1):
      soundwire: stream: Revert "soundwire: stream: fix programming slave p=
orts for non-continous port maps"

 drivers/soundwire/stream.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--=20
~Vinod

--cDJdxvnMXDwbtM3g
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmbkJbkACgkQfBQHDyUj
g0fqeBAAllBsy9jMAdYb95jzNlTJP/EQwsk1BuYDbGWJdvmHe/6v4hLKWaSIqwIJ
+oox7zjvswA5E0/zBGpYY0L9oAjfthvDc7WhidxCgTd4rR9Xe9WVtQ97NbdZgk/4
6RapkkIm1QO3jzwqRUIoGY07p5ss0wPDnG0e3uK/yzdVbz5aqHKj1UpCojvYuWy/
SjPWvN3vmhmsyeR2oja25arPT8RnlOQgnUKEWNzt9nzYiSHefPuTeeypxF16FyCf
9MWIjfr7/G+qby912udYmm2GnBjdu7xxfrh96dLjfeUV40cQ7/dpvSYLaoQBVB6u
vbOsMAWE5fFjJTsGFaO6+n/2vCdg24SS9bp5TkUSDLGl24fosVBeYaA3qidVnPa5
wt1jJ+SmSiM7Z0o5C/YH5vRVlp0X7Jz2Acaa07qeXzT9gliSQxUXrcak2VNhE8pn
JDizR//bNquPvryXQT4p385DxIBwWwhQhArMnjjRYkDlT08Tn50GWHZL6W5DH9us
ANAM/WrSfy3nDBqTdbiNdwrYmfoBlLwj4k0PhVfQ4ICraes3miVLc4r9903qoJNj
6IF2VqDTzf+a6+xfHc7mmprTGowPClLnMIPskeNRw4WDBwQm+pztA239Hki26B+Q
3z5YoHOdjFni/jWHo/hyXcF5S7yxBjJX3WJq5sT+UChQUf/inzA=
=C7Ss
-----END PGP SIGNATURE-----

--cDJdxvnMXDwbtM3g--

.
Date: Fri, 13 Sep 2024 16:41:28 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs misc

Hey Linus,

/* Summary */

This contains the usual pile of misc updates:

Features:

    - Add F_CREATED_QUERY fcntl() that allows userspace to query whether a
      file was actually created. Often userspace wants to know whether an
      O_CREATE request did actually create a file without using O_EXCL. The
      current logic is that to first attempts to open the file without
      O_CREAT | O_EXCL and if ENOENT is returned userspace tries again with
      both flags. If that succeeds all is well. If it now reports EEXIST it
      retries.

      That works fairly well but some corner cases make this more involved.
      If this operates on a dangling symlink the first openat() without
      O_CREAT | O_EXCL will return ENOENT but the second openat() with
      O_CREAT | O_EXCL will fail with EEXIST. The reason is that openat()
      without O_CREAT | O_EXCL follows the symlink while O_CREAT | O_EXCL
      doesn't for security reasons. So it's not something we can really
      change unless we add an explicit opt-in via O_FOLLOW which seems
      really ugly.

      All available workarounds are really nasty (fanotify, bpf lsm etc) so
      add a simple fcntl().

    - Try an opportunistic lookup for O_CREAT. Today, when opening a file
      we'll typically do a fast lookup, but if O_CREAT is set, the kernel
      always takes the exclusive inode lock. This was likely done with the
      expectation that O_CREAT means that we always expect to do the create,
      but that's often not the case. Many programs set O_CREAT even in
      scenarios where the file already exists (see related F_CREATED_QUERY
      patch motivation above).

      The series contained in the pr rearranges the pathwalk-for-open code
      to also attempt a fast_lookup in certain O_CREAT cases. If a positive
      dentry is found, the inode_lock can be avoided altogether and it can
      stay in rcuwalk mode for the last step_into.

    - Expose the 64 bit mount id via name_to_handle_at().
      Now that we provide a unique 64-bit mount ID interface in statx(2), we
      can now provide a race-free way for name_to_handle_at(2) to provide a
      file handle and corresponding mount without needing to worry about
      racing with /proc/mountinfo parsing or having to open a file just to
      do statx(2).

      While this is not necessary if you are using AT_EMPTY_PATH and don't
      care about an extra statx(2) call, users that pass full paths into
      name_to_handle_at(2) need to know which mount the file handle comes
      from (to make sure they don't try to open_by_handle_at a file handle
      from a different filesystem) and switching to AT_EMPTY_PATH would
      require allocating a file for every name_to_handle_at(2) call

    - Add a per dentry expire timeout to autofs.
      There are two fairly well known automounter map formats, the autofs
      format and the amd format (more or less System V and Berkley).

      Some time ago Linux autofs added an amd map format parser that
      implemented a fair amount of the amd functionality. This was done
      within the autofs infrastructure and some functionality wasn't
      implemented because it either didn't make sense or required extra
      kernel changes. The idea was to restrict changes to be within the
      existing autofs functionality as much as possible and leave changes
      with a wider scope to be considered later.

      One of these changes is implementing the amd options:
      1) "unmount", expire this mount according to a timeout (same as the
         current autofs default).
      2) "nounmount", don't expire this mount (same as setting the autofs
         timeout to 0 except only for this specific mount) .
      3) "utimeout=<seconds>", expire this mount using the specified
         timeout (again same as setting the autofs timeout but only for
         this mount).

      To implement these options per-dentry expire timeouts need to be
      implemented for autofs indirect mounts. This is because all map keys
      (mounts) for autofs indirect mounts use an expire timeout stored in
      the autofs mount super block info. structure and all indirect mounts
      use the same expire timeout.

Fixes:

    - Fix missing fput for FSCONFIG_SET_FD in autofs.

    - Use param->file for FSCONFIG_SET_FD in coda.

    - Delete the 'fs/netfs' proc subtreee when netfs module exits.

    - Make sure that struct uid_gid_map fits into a single cacheline.

    - Don't flush in-flight wb switches for superblocks without cgroup writeback.

    - Correcting the idmapping mount example in the idmapping documentation.

    - Fix a race between evice_inodes() and find_inode() and iput().

    - Refine the show_inode_state() macro definition in writeback code.

    - Prevent dump_mapping() from accessing invalid dentry.d_name.name.

    - Show actual source for debugfs in /proc/mounts.

    - Annotate data-race of busy_poll_usecs in eventpoll.

    - Don't WARN for racy path_noexec check in exec code.

    - Handle OOM on mnt_warn_timestamp_expiry().

    - Fix some spelling in the iomap design documentation.

    - Fix typo in procfs comment.

    - Fix typo in fs/namespace.c comment

Cleanups:

    - Add the VFS git tree to the MAINTAINERS file.

    - Move FMODE_UNSIGNED_OFFSET to fop_flags freeing up another f_mode bit
      in struct file bringing us to 5 free f_mode bits.

    - Remove the __I_DIO_WAKEUP bit from i_state flags as we can simplify
      the wait mechanism.

    - Remove the unused path_put_init() helper.

    - Replace a __u32 with u32 for s_fsnotify_mask as __u32 is uapi specific.

    - Replace the unsigned long i_state member with a u32 i_state member in
      struct inode freeing up 4 bytes in struct inode. Instead of using
      the bit based wait apis we're now using the var event apis and using
      the individual bytes of the i_state member to wait on state changes.

    - Explain how per-syscall AT_* flags should be allocated.

    - Use in_group_or_capable() helper to simplify the posix acl mode update
      code.

    - Switch to LIST_HEAD() in fsync_buffers_list() to simplify the code.

    - Removed comment about d_rcu_to_refcount() as that function doesn't
      exist anymore.

    - Add kernel documentation for lookup_fast().

    - Don't re-zero evenpoll fields.

    - Remove outdated comment after close_fd().

    - Fix imprecise wording in comment about the pipe filesystem.

    - Drop GFP_NOFAIL mode from alloc_page_buffers.

    - Missing blank line warnings and struct declaration improved in file_table.

    - Annotate struct poll_list with __counted_by()

    - Remove the unused read parameter in percpu-rwsem.

    - Remove linux/prefetch.h include from direct-io code.

    - Use kmemdup_array instead of kmemdup for multiple allocation in
      mnt_idmapping code.

    - Remove unused mnt_cursor_del() declaration.

Performance tweaks:

    - Dodge smp_mb in break_lease and break_deleg in the common case.

    - Only read fops once in fops_{get,put}().

    - Use RCU in ilookup().

    - Elide smp_mb in iversion handling in the common case.

    - Drop one lock trip in evict().

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc4 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known conflicts.

Merge conflicts with other trees
================================

(1) This will have merge conflict with the vfs.file pull request sent as:
    https://lore.kernel.org/r/20240913-vfs-file-53bf57c94647@brauner

    I've provided the conflict resolution there.

(2) This will also very likely cause a merge conflict with the series
    to convert everything to fd_file() accessors. Because we change:

-static int coda_parse_fd(struct fs_context *fc, int fd)
+static int coda_set_idx(struct fs_context *fc, struct file *file)
 {
        struct coda_fs_context *ctx = fc->fs_private;
-       struct fd f;
        struct inode *inode;
        int idx;

-       f = fdget(fd);
-       if (!f.file)
-               return -EBADF;
-       inode = file_inode(f.file);
+       inode = file_inode(file);
        if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
-               fdput(f);
-               return invalf(fc, "code: Not coda psdev");
+               return invalf(fc, "coda: Not coda psdev");
        }
-
        idx = iminor(inode);
-       fdput(f);
-
        if (idx < 0 || idx >= MAX_CODADEVS)
                return invalf(fc, "coda: Bad minor number");
        ctx->idx = idx;
        return 0;
 }

which removes the raw f.file access so the fd_file() replacement becomes mute.

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.misc

for you to fetch changes up to 2077006d4725c82c6e9612cec3a6c140921b067f:

  uidgid: make sure we fit into one cacheline (2024-09-12 12:16:09 +0200)

Please consider pulling these changes from the signed vfs-6.12.misc tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.misc

----------------------------------------------------------------
Aleksa Sarai (4):
      autofs: fix missing fput for FSCONFIG_SET_FD
      coda: use param->file for FSCONFIG_SET_FD
      uapi: explain how per-syscall AT_* flags should be allocated
      fhandle: expose u64 mount id to name_to_handle_at(2)

Baokun Li (1):
      netfs: Delete subtree of 'fs/netfs' when netfs module exits

Christian Brauner (20):
      fcntl: add F_CREATED_QUERY
      selftests: add F_CREATED_QUERY tests
      Merge patch series "Add an fcntl() to check file creation"
      fs: move audit parent inode
      fs: pull up trailing slashes check for O_CREAT
      fs: remove audit dummy context check
      fs: rearrange general fastpath check now that O_CREAT uses it
      fs: move FMODE_UNSIGNED_OFFSET to fop_flags
      inode: remove __I_DIO_WAKEUP
      fs: remove unused path_put_init()
      fs: s/__u32/u32/ for s_fsnotify_mask
      fs: add i_state helpers
      fs: reorder i_state bits
      inode: port __I_SYNC to var event
      inode: port __I_NEW to var event
      inode: port __I_LRU_ISOLATING to var event
      inode: make i_state a u32
      Merge patch series "fs: add i_state helpers"
      Merge patch series "fhandle: expose u64 mount id to name_to_handle_at(2)"
      uidgid: make sure we fit into one cacheline

Eric Biggers (1):
      MAINTAINERS: add the VFS git tree

Haifeng Xu (1):
      fs: don't flush in-flight wb switches for superblocks without cgroup writeback

Hongbo Li (3):
      fs: Use in_group_or_capable() helper to simplify the code
      doc: correcting the idmapping mount example
      fs: use LIST_HEAD() to simplify code

Ian Kent (1):
      autofs: add per dentry expire timeout

Jeff Layton (3):
      fs: remove comment about d_rcu_to_refcount
      fs: add a kerneldoc header over lookup_fast
      fs: try an opportunistic lookup for O_CREAT opens too

Joe Damato (1):
      eventpoll: Don't re-zero eventpoll fields

Joel Savitz (1):
      file: remove outdated comment after close_fd()

Julian Sun (2):
      vfs: fix race between evice_inodes() and find_inode()&iput()
      writeback: Refine the show_inode_state() macro definition

Kienan Stewart (1):
      fs/pipe: Correct imprecise wording in comment

Li Zhijian (1):
      fs/inode: Prevent dump_mapping() accessing invalid dentry.d_name.name

Marc Aurèle La France (1):
      debugfs show actual source in /proc/mounts

Martin Karsten (1):
      eventpoll: Annotate data-race of busy_poll_usecs

Mateusz Guzik (6):
      exec: don't WARN for racy path_noexec check
      vfs: dodge smp_mb in break_lease and break_deleg in the common case
      vfs: only read fops once in fops_get/put
      vfs: use RCU in ilookup
      vfs: elide smp_mb in iversion handling in the common case
      vfs: drop one lock trip in evict()

Michal Hocko (1):
      fs: drop GFP_NOFAIL mode from alloc_page_buffers

Mohit0404 (1):
      Fixed: fs: file_table_c: Missing blank line warnings and struct declaration improved

Olaf Hering (1):
      mount: handle OOM on mnt_warn_timestamp_expiry

Thorsten Blum (1):
      fs/select: Annotate struct poll_list with __counted_by()

Uros Bizjak (1):
      fs/aio: Fix __percpu annotation of *cpu pointer in struct kioctx

Wang Long (1):
      percpu-rwsem: remove the unused parameter 'read'

Xiaxi Shen (1):
      Fix spelling and gramatical errors

Yan Zhen (1):
      proc: Fix typo in the comment

Youling Tang (1):
      fs/direct-io: Remove linux/prefetch.h include

Yu Jiaoliang (1):
      mnt_idmapping: Use kmemdup_array instead of kmemdup for multiple allocation

Yue Haibing (1):
      fs: mounts: Remove unused declaration mnt_cursor_del()

Yuesong Li (1):
      fs/namespace.c: Fix typo in comment

 Documentation/filesystems/idmappings.rst        |   8 +-
 Documentation/filesystems/iomap/design.rst      |   6 +-
 MAINTAINERS                                     |   1 +
 drivers/char/adi.c                              |   8 +-
 drivers/char/mem.c                              |   3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c         |   1 +
 drivers/gpu/drm/drm_file.c                      |   3 +-
 drivers/gpu/drm/gma500/psb_drv.c                |   1 +
 drivers/gpu/drm/i915/i915_driver.c              |   1 +
 drivers/gpu/drm/nouveau/nouveau_drm.c           |   1 +
 drivers/gpu/drm/radeon/radeon_drv.c             |   1 +
 drivers/gpu/drm/tegra/drm.c                     |   1 +
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c             |   1 +
 drivers/gpu/drm/xe/xe_device.c                  |   1 +
 drivers/md/md-bitmap.c                          |   2 +-
 fs/aio.c                                        |   2 +-
 fs/autofs/autofs_i.h                            |   4 +
 fs/autofs/dev-ioctl.c                           |  97 +++++++++++++++++++-
 fs/autofs/expire.c                              |   7 +-
 fs/autofs/inode.c                               |   5 +-
 fs/bcachefs/fs.c                                |  10 +-
 fs/buffer.c                                     |   8 +-
 fs/coda/inode.c                                 |  43 ++++++---
 fs/dcache.c                                     |  10 +-
 fs/debugfs/inode.c                              |   8 ++
 fs/direct-io.c                                  |   6 --
 fs/eventpoll.c                                  |   7 +-
 fs/exec.c                                       |  31 +++----
 fs/fcntl.c                                      |  10 ++
 fs/fhandle.c                                    |  29 ++++--
 fs/file.c                                       |   2 +-
 fs/file_table.c                                 |   5 +-
 fs/fs-writeback.c                               |  67 ++++++++------
 fs/inode.c                                      | 116 ++++++++++++++++--------
 fs/libfs.c                                      |  28 ++++--
 fs/mnt_idmapping.c                              |  12 +--
 fs/mount.h                                      |   1 -
 fs/namei.c                                      |  75 ++++++++++++---
 fs/namespace.c                                  |  18 +++-
 fs/netfs/locking.c                              |  22 +----
 fs/netfs/main.c                                 |   4 +-
 fs/pipe.c                                       |   2 +-
 fs/posix_acl.c                                  |   4 +-
 fs/proc/base.c                                  |  10 +-
 fs/proc/fd.c                                    |   2 +-
 fs/proc/kcore.c                                 |   2 +-
 fs/read_write.c                                 |   2 +-
 fs/select.c                                     |   2 +-
 fs/super.c                                      |   4 +-
 include/drm/drm_accel.h                         |   3 +-
 include/drm/drm_gem.h                           |   3 +-
 include/drm/drm_gem_dma_helper.h                |   1 +
 include/linux/buffer_head.h                     |   3 +-
 include/linux/filelock.h                        |  14 ++-
 include/linux/fs.h                              |  88 +++++++++++-------
 include/linux/path.h                            |   6 --
 include/linux/percpu-rwsem.h                    |   2 +-
 include/linux/syscalls.h                        |   2 +-
 include/linux/user_namespace.h                  |   6 +-
 include/linux/writeback.h                       |   7 +-
 include/trace/events/writeback.h                |  10 +-
 include/uapi/linux/auto_fs.h                    |   2 +-
 include/uapi/linux/fcntl.h                      |  84 ++++++++++++-----
 kernel/user.c                                   |   6 +-
 mm/mmap.c                                       |   2 +-
 tools/testing/selftests/core/close_range_test.c |  39 ++++++++
 66 files changed, 662 insertions(+), 310 deletions(-)

.
Date: Fri, 13 Sep 2024 16:41:58 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs mount

Hey Linus,

/* Summary */

Recently, we added the ability to list mounts in other mount namespaces
and the ability to retrieve namespace file descriptors without having to
go through procfs by deriving them from pidfds.

This extends nsfs in two ways:

(1) Add the ability to retrieve information about a mount namespace via
    NS_MNT_GET_INFO. This will return the mount namespace id and the
    number of mounts currently in the mount namespace. The number of
    mounts can be used to size the buffer that needs to be used for
    listmount() and is in general useful without having to actually
    iterate through all the mounts.

    The structure is extensible.

(2) Add the ability to iterate through all mount namespaces over which
    the caller holds privilege returning the file descriptor for the
    next or previous mount namespace.

    To retrieve a mount namespace the caller must be privileged wrt to
    it's owning user namespace. This means that PID 1 on the host can
    list all mounts in all mount namespaces or that a container can list
    all mounts of its nested containers.

    Optionally pass a structure for NS_MNT_GET_INFO with
    NS_MNT_GET_{PREV,NEXT} to retrieve information about the mount
    namespace in one go.

(1) and (2) can be implemented for other namespace types easily.

Together with recent api additions this means one can iterate through
all mounts in all mount namespaces without ever touching procfs. The
merge message contains example code how to do this.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc1 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known conflicts.

Merge conflicts with other trees
================================

(1) linux-next: build failure after merge of the bpf-next tree
    https://lore.kernel.org/r/20240913133240.066ae790@canb.auug.org.au

    The reported merge conflict isn't really with bpf-next but with the
    series to convert to fd_file() accessors for the changed struct fd
    representation.

    The patch you need to fix this however is correct in that draft. But
    honestly, it's pretty easy for you to figure out on your own anyway.

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.mount

for you to fetch changes up to 49224a345c488a0e176f193a60a2a76e82349e3e:

  Merge patch series "nsfs: iterate through mount namespaces" (2024-08-09 12:47:05 +0200)

Please consider pulling these changes from the signed vfs-6.12.mount tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.mount

----------------------------------------------------------------
Christian Brauner (5):
      fs: allow mount namespace fd
      fs: add put_mnt_ns() cleanup helper
      file: add fput() cleanup helper
      nsfs: iterate through mount namespaces
      Merge patch series "nsfs: iterate through mount namespaces"

 fs/mount.h                    |  13 ++++++
 fs/namespace.c                |  74 +++++++++++++++++++++++++-----
 fs/nsfs.c                     | 102 +++++++++++++++++++++++++++++++++++++++++-
 include/linux/file.h          |   2 +
 include/linux/mnt_namespace.h |   4 ++
 include/uapi/linux/nsfs.h     |  16 +++++++
 6 files changed, 198 insertions(+), 13 deletions(-)

.
Date: Fri, 13 Sep 2024 16:42:31 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs folio

Hey Linus,

/* Summary */

This contains work to port write_begin and write_end to rely on folios
for various filesystems.

This converts ocfs2, vboxfs, orangefs, jffs2, hostfs, fuse, f2fs,
ecryptfs, ntfs3, nilfs2, reiserfs, minixfs, qnx6, sysv, ufs, and
squashfs.

After this series lands a bunch of the filesystems in this list do not
mention struct page anymore.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc1 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known merge conflicts.

Merge conflicts with other trees
================================

Most of the conflicts are mechanical conversion. The only nasty
conversion is f2fs. The provided conflict resolution by Stephen has been
acked by the f2fs maintainer.

(1) linux-next: manual merge of the vfs-brauner tree with the f2fs tree
    https://lore.kernel.org/all/20240905101845.0a47926a@canb.auug.org.au

(2) linux-next: manual merge of the vfs-brauner tree with the ext4 tree
    https://lore.kernel.org/r/20240904091532.4b0dee26@canb.auug.org.au

(3) linux-next: manual merge of the vfs-brauner tree with the mm tree
    https://lore.kernel.org/r/20240902112101.2728f045@canb.auug.org.au

(4) linux-next: manual merge of the vfs-brauner tree with the exfat tree
    https://lore.kernel.org/r/20240812081046.369bbba5@canb.auug.org.au

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.folio

for you to fetch changes up to 84e0e03b308816a48c67f6da2168fcea6d49eda8:

  Squashfs: Ensure all readahead pages have been used (2024-08-23 13:11:36 +0200)

Please consider pulling these changes from the signed vfs-6.12.folio tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.folio

----------------------------------------------------------------
Christian Brauner (3):
      Merge branch 'work.write.end'
      Merge patch series "Finish converting jffs2 to folios"
      Merge patch series "Squashfs: Update code to not use page->index"

Matthew Wilcox (Oracle) (56):
      ufs: Convert ufs_get_page() to use a folio
      ufs: Convert ufs_get_page() to ufs_get_folio()
      ufs: Convert ufs_check_page() to ufs_check_folio()
      ufs: Convert ufs_find_entry() to take a folio
      ufs: Convert ufs_set_link() and ufss_dotdot() to take a folio
      ufs: Convert ufs_delete_entry() to work on a folio
      ufs: Convert ufs_make_empty() to use a folio
      ufs: Convert ufs_prepare_chunk() to take a folio
      ufs; Convert ufs_commit_chunk() to take a folio
      ufs: Convert directory handling to kmap_local
      sysv: Convert dir_get_page() to dir_get_folio()
      sysv: Convert sysv_find_entry() to take a folio
      sysv: Convert sysv_set_link() and sysv_dotdot() to take a folio
      sysv: Convert sysv_delete_entry() to work on a folio
      sysv: Convert sysv_make_empty() to use a folio
      sysv: Convert sysv_prepare_chunk() to take a folio
      sysv: Convert dir_commit_chunk() to take a folio
      qnx6: Convert qnx6_get_page() to qnx6_get_folio()
      qnx6: Convert qnx6_find_entry() to qnx6_find_ino()
      qnx6: Convert qnx6_longname() to take a folio
      qnx6: Convert qnx6_checkroot() to use a folio
      qnx6: Convert qnx6_iget() to use a folio
      qnx6: Convert directory handling to use kmap_local
      minixfs: Convert dir_get_page() to dir_get_folio()
      minixfs: Convert minix_find_entry() to take a folio
      minixfs: Convert minix_set_link() and minix_dotdot() to take a folio
      minixfs: Convert minix_delete_entry() to work on a folio
      minixfs: Convert minix_make_empty() to use a folio
      minixfs: Convert minix_prepare_chunk() to take a folio
      minixfs: Convert dir_commit_chunk() to take a folio
      fs: Convert block_write_begin() to use a folio
      reiserfs: Convert grab_tail_page() to use a folio
      reiserfs: Convert reiserfs_write_begin() to use a folio
      block: Use a folio in blkdev_write_end()
      buffer: Use a folio in generic_write_end()
      nilfs2: Use a folio in nilfs_recover_dsync_blocks()
      ntfs3: Remove reset_log_file()
      buffer: Convert block_write_end() to take a folio
      ecryptfs: Convert ecryptfs_write_end() to use a folio
      ecryptfs: Use a folio in ecryptfs_write_begin()
      f2fs: Convert f2fs_write_end() to use a folio
      f2fs: Convert f2fs_write_begin() to use a folio
      fuse: Convert fuse_write_end() to use a folio
      fuse: Convert fuse_write_begin() to use a folio
      hostfs: Convert hostfs_write_end() to use a folio
      jffs2: Convert jffs2_write_end() to use a folio
      jffs2: Convert jffs2_write_begin() to use a folio
      orangefs: Convert orangefs_write_end() to use a folio
      orangefs: Convert orangefs_write_begin() to use a folio
      vboxsf: Use a folio in vboxsf_write_end()
      fs: Convert aops->write_end to take a folio
      fs: Convert aops->write_begin to take a folio
      ocfs2: Convert ocfs2_write_zero_page to use a folio
      buffer: Convert __block_write_begin() to take a folio
      jffs2: Convert jffs2_do_readpage_nolock to take a folio
      jffs2: Use a folio in jffs2_garbage_collect_dnode()

Phillip Lougher (5):
      Squashfs: Update page_actor to not use page->index
      Squashfs: Update squashfs_readahead() to not use page->index
      Squashfs: Update squashfs_readpage_block() to not use page->index
      Squashfs: Rewrite and update squashfs_readahead_fragment() to not use page->index
      Squashfs: Ensure all readahead pages have been used

 Documentation/filesystems/locking.rst     |   6 +-
 Documentation/filesystems/vfs.rst         |  12 +-
 block/fops.c                              |  12 +-
 drivers/gpu/drm/i915/gem/i915_gem_shmem.c |  47 +++---
 fs/adfs/inode.c                           |   5 +-
 fs/affs/file.c                            |  22 ++-
 fs/bcachefs/fs-io-buffered.c              |   8 +-
 fs/bcachefs/fs-io-buffered.h              |   6 +-
 fs/bfs/file.c                             |   4 +-
 fs/buffer.c                               |  63 ++++----
 fs/ceph/addr.c                            |  13 +-
 fs/ecryptfs/mmap.c                        |  86 +++++------
 fs/exfat/file.c                           |   8 +-
 fs/exfat/inode.c                          |   9 +-
 fs/ext2/dir.c                             |   4 +-
 fs/ext2/inode.c                           |   8 +-
 fs/ext4/ext4.h                            |   4 +-
 fs/ext4/inline.c                          |  14 +-
 fs/ext4/inode.c                           |  37 +++--
 fs/ext4/verity.c                          |   8 +-
 fs/f2fs/data.c                            |  87 +++++------
 fs/f2fs/super.c                           |   8 +-
 fs/f2fs/verity.c                          |   8 +-
 fs/fat/inode.c                            |   9 +-
 fs/fuse/file.c                            |  47 +++---
 fs/hfs/extent.c                           |   6 +-
 fs/hfs/hfs_fs.h                           |   2 +-
 fs/hfs/inode.c                            |   5 +-
 fs/hfsplus/extents.c                      |   6 +-
 fs/hfsplus/hfsplus_fs.h                   |   2 +-
 fs/hfsplus/inode.c                        |   5 +-
 fs/hostfs/hostfs_kern.c                   |  23 +--
 fs/hpfs/file.c                            |   9 +-
 fs/hugetlbfs/inode.c                      |   4 +-
 fs/iomap/buffered-io.c                    |   2 +-
 fs/jffs2/file.c                           |  88 ++++++------
 fs/jffs2/gc.c                             |  25 ++--
 fs/jfs/inode.c                            |   8 +-
 fs/libfs.c                                |  13 +-
 fs/minix/dir.c                            | 134 +++++++++--------
 fs/minix/inode.c                          |   8 +-
 fs/minix/minix.h                          |  40 +++---
 fs/minix/namei.c                          |  32 ++---
 fs/namei.c                                |  10 +-
 fs/nfs/file.c                             |   7 +-
 fs/nilfs2/dir.c                           |   4 +-
 fs/nilfs2/inode.c                         |  10 +-
 fs/nilfs2/recovery.c                      |  16 +--
 fs/ntfs3/file.c                           |   9 +-
 fs/ntfs3/inode.c                          |  51 +------
 fs/ntfs3/ntfs_fs.h                        |   5 +-
 fs/ocfs2/aops.c                           |  12 +-
 fs/ocfs2/aops.h                           |   2 +-
 fs/ocfs2/file.c                           |  17 +--
 fs/ocfs2/mmap.c                           |   6 +-
 fs/omfs/file.c                            |   4 +-
 fs/orangefs/inode.c                       |  39 +++--
 fs/qnx6/dir.c                             |  88 ++++++------
 fs/qnx6/inode.c                           |  25 ++--
 fs/qnx6/namei.c                           |   4 +-
 fs/qnx6/qnx6.h                            |   9 +-
 fs/reiserfs/inode.c                       |  57 ++++----
 fs/squashfs/file.c                        |  86 +++++++----
 fs/squashfs/file_direct.c                 |  19 +--
 fs/squashfs/page_actor.c                  |  11 +-
 fs/squashfs/page_actor.h                  |   6 +-
 fs/sysv/dir.c                             | 158 ++++++++++----------
 fs/sysv/itree.c                           |   8 +-
 fs/sysv/namei.c                           |  32 ++---
 fs/sysv/sysv.h                            |  20 +--
 fs/ubifs/file.c                           |  13 +-
 fs/udf/file.c                             |   2 +-
 fs/udf/inode.c                            |  12 +-
 fs/ufs/dir.c                              | 231 ++++++++++++++----------------
 fs/ufs/inode.c                            |  12 +-
 fs/ufs/namei.c                            |  39 +++--
 fs/ufs/ufs.h                              |  20 +--
 fs/ufs/util.h                             |   6 +-
 fs/vboxsf/file.c                          |  24 ++--
 include/linux/buffer_head.h               |  14 +-
 include/linux/fs.h                        |   6 +-
 mm/filemap.c                              |   6 +-
 mm/shmem.c                                |  11 +-
 83 files changed, 994 insertions(+), 1064 deletions(-)

.
Date: Fri, 13 Sep 2024 16:43:10 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs file

Hey Linus,

/* Summary */

This is the work to cleanup and shrink struct file significantly. You
should've already seen most of the work in here.

Right now, (focussing on x86) struct file is 232 bytes. After this
series struct file will be 184 bytes aka 3 cacheline and a spare 8 bytes
for future extensions at the end of the struct.

With struct file being as ubiquitous as it is this should make a
difference for file heavy workloads and allow further optimizations in
the future.

* struct fown_struct was embeeded into struct file letting it take up 32
  bytes in total when really it shouldn't even be embedded in struct
  file in the first place. Instead, actual users of struct fown_struct
  now allocate the struct on demand. This frees up 24 bytes.

* Move struct file_ra_state into the union containg the cleanup hooks
  and move f_iocb_flags out of the union. This closes a 4 byte hole we
  created earlier and brings struct file to 192 bytes. Which means
  struct file is 3 cachelines and we managed to shrink it by 40 bytes.

* Reorder struct file so that nothing crosses a cacheline. I suspect
  that in the future we will end up reordering some members to mitigate
  false sharing issues or just because someone does actually provide
  really good perf data.

* Shrinking struct file to 192 bytes is only part of the work. Files use
  a slab that is SLAB_TYPESAFE_BY_RCU and when a kmem cache is created
  with SLAB_TYPESAFE_BY_RCU the free pointer must be located outside of
  the object because the cache doesn't know what part of the memory can
  safely be overwritten as it may be needed to prevent object recycling.

  That has the consequence that SLAB_TYPESAFE_BY_RCU may end up adding a
  new cacheline.

  So this also contains work to add a new kmem_cache_create_rcu()
  function that allows the caller to specify an offset where the
  freelist pointer is supposed to be placed. Thus avoiding the implicit
  addition of a fourth cacheline.

* And finally this removes the f_version member in struct file. The
  f_version member isn't particularly well-defined. It is mainly used as
  a cookie to detect concurrent seeks when iterating directories. But it
  is also abused by some subsystems for completely unrelated things.

  It is mostly a directory and filesystem specific thing that doesn't
  really need to live in struct file and with its wonky semantics it
  really lacks a specific function.

  For pipes, f_version is (ab)used to defer poll notifications until a
  write has happened. And struct pipe_inode_info is used by multiple
  struct files in their ->private_data so there's no chance of pushing
  that down into file->private_data without introducing another pointer
  indirection.

  But pipes don't rely on f_pos_lock so this adds a union into struct
  file encompassing f_pos_lock and a pipe specific f_pipe member that
  pipes can use. This union of course can be extended to other file
  types and is similar to what we do in struct inode already.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc4 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known conflicts.

Merge conflicts with other trees
================================

(1) This will have merge conflict with the vfs.misc pull request sent as:
    https://lore.kernel.org/r/20240913-vfs-misc-348ac639e66e@brauner

    Assuming you merge vfs.misc first the conflict resolution looks like this:

diff --cc fs/fcntl.c
index 22ec683ad8f8,0587a0e221a6..f6fde75a3bd5
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@@ -343,12 -414,30 +414,36 @@@ static long f_dupfd_query(int fd, struc
        return f.file == filp;
  }

 +/* Let the caller figure out whether a given file was just created. */
 +static long f_created_query(const struct file *filp)
 +{
 +      return !!(filp->f_mode & FMODE_CREATED);
 +}
 +
+ static int f_owner_sig(struct file *filp, int signum, bool setsig)
+ {
+       int ret = 0;
+       struct fown_struct *f_owner;
+
+       might_sleep();
+
+       if (setsig) {
+               if (!valid_signal(signum))
+                       return -EINVAL;
+
+               ret = file_f_owner_allocate(filp);
+               if (ret)
+                       return ret;
+       }
+
+       f_owner = file_f_owner(filp);
+       if (setsig)
+               f_owner->signum = signum;
+       else if (f_owner)
+               ret = f_owner->signum;
+       return ret;
+ }
+
  static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
                struct file *filp)
  {

(2) linux-next: manual merge of the security tree with the vfs-brauner tree
    https://lore.kernel.org/r/20240910132740.775b92e1@canb.auug.org.au

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.file

for you to fetch changes up to 24a988f75c8a5f16ef935c51039700e985767eb9:

  Merge patch series "file: remove f_version" (2024-09-12 11:58:46 +0200)

Please consider pulling these changes from the signed vfs-6.12.file tag.

Note that this work provides the base for the slab pull request this
cycle. So just to not mess with Vlastimil's pr I pushed two tags:

(1) vfs-6.12.file
(2) vfs-6.12.file.kmem

The second tag only contains what slab relies on and (1) contains
everything for this cycle. If you disagree with additional stuff in (1)
you may still consider pulling (2).

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.file

----------------------------------------------------------------
Christian Brauner (27):
      file: reclaim 24 bytes from f_owner
      fs: switch f_iocb_flags and f_ra
      fs: pack struct file
      mm: remove unused argument from create_cache()
      mm: add kmem_cache_create_rcu()
      fs: use kmem_cache_create_rcu()
      Merge patch series "fs,mm: add kmem_cache_create_rcu()"
      adi: remove unused f_version
      ceph: remove unused f_version
      s390: remove unused f_version
      fs: add vfs_setpos_cookie()
      fs: add must_set_pos()
      fs: use must_set_pos()
      fs: add generic_llseek_cookie()
      affs: store cookie in private data
      ext2: store cookie in private data
      ext4: store cookie in private data
      input: remove f_version abuse
      ocfs2: store cookie in private data
      proc: store cookie in private data
      udf: store cookie in private data
      ufs: store cookie in private data
      ubifs: store cookie in private data
      fs: add f_pipe
      pipe: use f_pipe
      fs: remove f_version
      Merge patch series "file: remove f_version"

R Sundar (1):
      mm: Removed @freeptr_offset to prevent doc warning

 drivers/char/adi.c             |   1 -
 drivers/input/input.c          |  47 ++++++-----
 drivers/net/tun.c              |   6 ++
 drivers/s390/char/hmcdrv_dev.c |   3 -
 drivers/tty/tty_io.c           |   6 ++
 fs/affs/dir.c                  |  44 +++++++++--
 fs/ceph/dir.c                  |   1 -
 fs/ext2/dir.c                  |  28 ++++++-
 fs/ext4/dir.c                  |  50 ++++++------
 fs/ext4/ext4.h                 |   2 +
 fs/ext4/inline.c               |   7 +-
 fs/fcntl.c                     | 166 +++++++++++++++++++++++++++++++--------
 fs/file_table.c                |  16 ++--
 fs/internal.h                  |   1 +
 fs/locks.c                     |   6 +-
 fs/notify/dnotify/dnotify.c    |   6 +-
 fs/ocfs2/dir.c                 |   3 +-
 fs/ocfs2/file.c                |  11 ++-
 fs/ocfs2/file.h                |   1 +
 fs/pipe.c                      |   8 +-
 fs/proc/base.c                 |  30 ++++++--
 fs/read_write.c                | 171 +++++++++++++++++++++++++++++++----------
 fs/ubifs/dir.c                 |  64 ++++++++++-----
 fs/udf/dir.c                   |  28 ++++++-
 fs/ufs/dir.c                   |  28 ++++++-
 include/linux/fs.h             | 106 +++++++++++++++----------
 include/linux/slab.h           |   9 +++
 mm/slab.h                      |   2 +
 mm/slab_common.c               | 138 +++++++++++++++++++++++----------
 mm/slub.c                      |  20 +++--
 net/core/sock.c                |   2 +-
 security/selinux/hooks.c       |   2 +-
 security/smack/smack_lsm.c     |   2 +-
 33 files changed, 744 insertions(+), 271 deletions(-)

.
Date: Fri, 13 Sep 2024 16:44:09 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs fallocate

Hey Linus,

/* Summary */

This contains work to try and cleanup some the fallocate mode handling.
Currently, it confusingly mixes operation modes and an optional flag.
The work here tries to better define operation modes and optional flags
allowing the core and filesystem code to use switch statements to switch
on the operation mode.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc4 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known conflicts.

Merge conflicts with other trees
================================

No known conflicts.

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.fallocate

for you to fetch changes up to 7fbabbb4ae2a7203861e4db363e3c861a4df260e:

  Merge patch series "Subject: sort out the fallocate mode mess" (2024-08-28 16:54:05 +0200)

Please consider pulling these changes from the signed vfs-6.12.fallocate tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.fallocate

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch series "Sort out the fallocate mode mess"

Christoph Hellwig (6):
      block: remove checks for FALLOC_FL_NO_HIDE_STALE
      ext4: remove tracing for FALLOC_FL_NO_HIDE_STALE
      fs: sort out the fallocate mode vs flag mess
      xfs: call xfs_flush_unmap_range from xfs_free_file_space
      xfs: move the xfs_is_always_cow_inode check into xfs_alloc_file_space
      xfs: refactor xfs_file_fallocate

 block/fops.c                |  10 +-
 fs/open.c                   |  51 ++++---
 fs/xfs/xfs_bmap_util.c      |  11 ++
 fs/xfs/xfs_file.c           | 353 ++++++++++++++++++++++++++------------------
 include/linux/falloc.h      |  18 ++-
 include/trace/events/ext4.h |   1 -
 include/uapi/linux/falloc.h |   1 +
 7 files changed, 258 insertions(+), 187 deletions(-)

.
Date: Fri, 13 Sep 2024 16:44:47 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs procfs

/* Summary */
Hey Linus,

This contains the following changes for procfs:

* Add config options and parameters to block forcing memory writes.

  This adds a Kconfig option and boot param to allow removing the
  FOLL_FORCE flag from /proc/<pid>/mem write calls as this can be used
  in various attacks.

  The traditional forcing behavior is kept as default because it can
  break GDB and some other use cases.

  This is the simpler version that you had requested.

* Restrict overmounting of ephemeral entities.

  It is currently possible to mount on top of various ephemeral entities
  in procfs. This specifically includes magic links. To recap, magic
  links are links of the form /proc/<pid>/fd/<nr>. They serve as
  references to a target file and during path lookup they cause a jump
  to the target path. Such magic links disappear if the corresponding
  file descriptor is closed.

  Currently it is possible to overmount such magic links. This is mostly
  interesting for an attacker that wants to somehow trick a process into
  e.g., reopening something that it didn't intend to reopen or to hide
  a malicious file descriptor.

  But also it risks leaking mounts for long-running processes. When
  overmounting a magic link like above, the mount will not be detached
  when the file descriptor is closed. Only the target mountpoint will
  disappear. Which has the consequence of making it impossible to unmount
  that mount afterwards. So the mount will stick around until the process
  exits and the /proc/<pid>/ directory is cleaned up during
  proc_flush_pid() when the dentries are pruned and invalidated.

  That in turn means it's possible for a program to accidentally leak
  mounts and it's also possible to make a task leak mounts without it's
  knowledge if the attacker just keeps overmounting things under
  /proc/<pid>/fd/<nr>.

  Disallow overmounting of such ephemeral entities.

* Cleanup the readdir method naming in some procfs file operations.

* Replace kmalloc() and strcpy() with a simple kmemdup() call.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on v6.11-rc1 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

None.

Merge conflicts with other trees
================================

None.

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.procfs

for you to fetch changes up to 4ad5f9a021bd7e3a48a8d11c52cef36d5e05ffcc:

  proc: fold kmalloc() + strcpy() into kmemdup() (2024-09-09 10:51:20 +0200)

Please consider pulling these changes from the signed vfs-6.12.procfs tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.procfs

----------------------------------------------------------------
Adrian Ratiu (1):
      proc: add config & param to block forcing mem writes

Alexey Dobriyan (1):
      proc: fold kmalloc() + strcpy() into kmemdup()

Christian Brauner (7):
      proc: proc_readfd() -> proc_fd_iterate()
      proc: proc_readfdinfo() -> proc_fdinfo_iterate()
      proc: add proc_splice_unmountable()
      proc: block mounting on top of /proc/<pid>/map_files/*
      proc: block mounting on top of /proc/<pid>/fd/*
      proc: block mounting on top of /proc/<pid>/fdinfo/*
      Merge patch series "proc: restrict overmounting of ephemeral entities"

 Documentation/admin-guide/kernel-parameters.txt | 10 ++++
 fs/proc/base.c                                  | 65 +++++++++++++++++++++++--
 fs/proc/fd.c                                    | 16 +++---
 fs/proc/generic.c                               |  4 +-
 fs/proc/internal.h                              | 13 +++++
 security/Kconfig                                | 32 ++++++++++++
 6 files changed, 127 insertions(+), 13 deletions(-)

.
Date: Fri, 13 Sep 2024 16:50:53 +0200
From: Petr Mladek <pmladek@suse.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	John Ogness <john.ogness@linutronix.de>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Thomas Gleixner <tglx@linutronix.de>, Jan Kara <jack@suse.cz>,
	Peter Zijlstra <peterz@infradead.org>, linux-kernel@vger.kernel.org
Subject: [GIT PULL] printk for 6.12

Hi Linus,

please pull the latest printk changes from

  git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.12

=============================================

This is the "last" part of the support for the new nbcon consoles.
Where "nbcon" stays for "No Big console lock CONsoles" aka not under
the console_lock.

New callbacks are added to struct console:

  - write_thread() for flushing nbcon consoles in task context.

  - write_atomic() for flushing nbcon consoles in atomic context,
    including NMI.

  - con->device_lock() and device_unlock() for taking the driver
    specific lock, for example, port->lock.

New printk-specific kthreads are created:

  - per-console kthreads which get responsible for flushing normal
    priority messages on nbcon consoles.

  - thread which gets responsible for flushing normal priority messages
    on all consoles when CONFIG_RT enabled.

The new callbacks are called under a special per-console lock which has
already been added back in v6.7. It allows to distinguish three severities:
normal, emergency, and panic. A context with a higher priority could take
over the ownership when it is safe even in the middle of handling a record.
The panic context could do it even when it is not safe. But it is allowed
only for the final desperate flush before entering the infinite loop.

The new lock helps to flush the messages directly in emergency and panic
contexts. But it is not enough in all situations:

  - console_lock() is still need for synchronization against boot consoles.

  - con->device_lock() is need for synchronization against other operations
    on the same HW, e.g. serial port speed setting, non-printk related
    read/write.

The dependency on con->device_lock() is mutual. Any code taking the driver
specific lock has to acquire the related nbcon console context as well.
For example, see the new uart_port_lock() API. It provides the necessary
synchronization against emergency and panic contexts where the messages
are flushed only under the new per-console lock.

Maybe surprisingly, a quite tricky part is the decision how to flush
the consoles in various situations. It has to take into account:

  - message priority:	 normal, emergency, panic

  - scheduling context:	 task, atomic, deferred_legacy

  - registered consoles: boot, legacy, nbcon

  - threads are running: early boot, suspend, shutdown, panic

  - caller:		 printk(), pr_flush(), printk_flush_in_panic(),
			 console_unlock(), console_start(), ...

The primary decision is made in printk_get_console_flush_type(). It creates
a hint what the caller should do:

  - flush nbcon consoles directly or via the kthread

  - call the legacy loop (console_unlock()) directly or via irq_work

The existing behavior is preserved for the legacy consoles. The only
exception is that they are not longer flushed directly from printk() in
panic() before CPUs are stopped. But this blocking happens only when at
least one nbcon console is registered. The motivation is to increase
a chance to produce the crash dump. They legacy consoles might create
a deadlock in compare with nbcon consoles. The nbcon console should
allow to see the messages even when the crash dump fails.

There are three possible ways how nbcon consoles are flushed:

  - The per-nbcon-console kthread is responsible for flushing messages
    added with the normal priority. This is the default mode.

  - The legacy loop, aka console_unlock(), is used when there is still
    a boot console registered. There is no easy way how to match an early
    console driver with a nbcon console driver. And the console_lock()
    provides the only reliable serialization at the moment.

    The legacy loop uses either con->write_atomic() or con->write_thread()
    callbacks depending on whether it is allowed to schedule. The atomic
    variant has to be used from printk().

  - In other situations, the messages are flushed directly using
    write_atomic() which can be called in any context, including NMI.
    It is primary needed during early boot or shutdown, in emergency
    situations, and panic.

The emergency priority is used by a code called within
nbcon_cpu_emergency_enter()/exit(). At the moment, it is used in four
situations: WARN(), Oops, lockdep, and RCU stall reports.

Finally, there is no nbcon console at the moment. It means that the changes
should _not_ modify the existing behavior. The only exception is CONFIG_RT
which would force offloading the legacy loop, for normal priority context,
into the dedicated kthread.

===============================================

Two thirds of the changes has already been in the pull request for 6.11.
The user-visible change is that the flushing is no longer postponed
in the emergency sections. The logic has been further simplified
by using printk_get_console_flush_type() already at this stage.

The new third of the changes added the write_thread() callback,
implemented the kthreads, and updated procfs and sysfs interfaces.

----------------------------------------------------------------
Jinjie Ruan (1):
      printk: Use the BITS_PER_LONG macro

John Ogness (47):
      printk: Add notation to console_srcu locking
      printk: nbcon: Consolidate alloc() and init()
      printk: nbcon: Clarify rules of the owner/waiter matching
      printk: nbcon: Remove return value for write_atomic()
      printk: nbcon: Add detailed doc for write_atomic()
      printk: nbcon: Add callbacks to synchronize with driver
      printk: nbcon: Use driver synchronization while (un)registering
      serial: core: Provide low-level functions to lock port
      serial: core: Introduce wrapper to set @uart_port->cons
      console: Improve console_srcu_read_flags() comments
      nbcon: Add API to acquire context for non-printing operations
      serial: core: Acquire nbcon context in port->lock wrapper
      printk: nbcon: Do not rely on proxy headers
      printk: Make console_is_usable() available to nbcon.c
      printk: Let console_is_usable() handle nbcon
      printk: Add @flags argument for console_is_usable()
      printk: nbcon: Add helper to assign priority based on CPU state
      printk: Track registered boot consoles
      printk: nbcon: Use nbcon consoles in console_flush_all()
      printk: Add is_printk_legacy_deferred()
      printk: nbcon: Flush new records on device_release()
      printk: Flush nbcon consoles first on panic
      printk: nbcon: Add unsafe flushing on panic
      printk: Avoid console_lock dance if no legacy or boot consoles
      printk: Track nbcon consoles
      printk: Coordinate direct printing in panic
      printk: Add helper for flush type logic
      panic: Mark emergency section in oops
      rcu: Mark emergency sections in rcu stalls
      lockdep: Mark emergency sections in lockdep splats
      printk: nbcon: Use raw_cpu_ptr() instead of open coding
      printk: nbcon: Add function for printers to reacquire ownership
      printk: Fail pr_flush() if before SYSTEM_SCHEDULING
      printk: Flush console on unregister_console()
      printk: nbcon: Add context to usable() and emit()
      printk: nbcon: Init @nbcon_seq to highest possible
      printk: nbcon: Relocate nbcon_atomic_emit_one()
      printk: nbcon: Use thread callback if in task context for legacy
      printk: nbcon: Rely on kthreads for normal operation
      printk: Provide helper for message prepending
      printk: nbcon: Show replay message on takeover
      proc: consoles: Add notation to c_start/c_stop
      proc: Add nbcon support for /proc/consoles
      tty: sysfs: Add nbcon support for 'active'
      printk: Implement legacy printer kthread for PREEMPT_RT
      printk: nbcon: Assign nice -20 for printing threads
      printk: Avoid false positive lockdep report for legacy printing

Petr Mladek (1):
      printk: Properly deal with nbcon consoles on seq init

Sebastian Andrzej Siewior (1):
      printk: Check printk_deferred_enter()/_exit() usage

Thomas Gleixner (4):
      printk: nbcon: Provide function to flush using write_atomic()
      printk: nbcon: Implement emergency sections
      panic: Mark emergency section in warn
      printk: nbcon: Introduce printer kthreads

 drivers/tty/serial/8250/8250_core.c |   6 +-
 drivers/tty/serial/amba-pl011.c     |   2 +-
 drivers/tty/serial/serial_core.c    |  16 +-
 drivers/tty/tty_io.c                |   2 +-
 fs/proc/consoles.c                  |   7 +-
 include/linux/console.h             | 158 +++++-
 include/linux/printk.h              |  33 +-
 include/linux/serial_core.h         | 117 ++++-
 kernel/locking/lockdep.c            |  83 +++-
 kernel/panic.c                      |   9 +
 kernel/printk/internal.h            | 207 +++++++-
 kernel/printk/nbcon.c               | 936 +++++++++++++++++++++++++++++++++---
 kernel/printk/printk.c              | 714 ++++++++++++++++++++++-----
 kernel/printk/printk_ringbuffer.h   |   7 +-
 kernel/printk/printk_safe.c         |  25 +-
 kernel/rcu/tree_exp.h               |   7 +
 kernel/rcu/tree_stall.h             |   9 +
 17 files changed, 2125 insertions(+), 213 deletions(-)

.
Date: Fri, 13 Sep 2024 17:40:01 +0100
From: Will Deacon <will@kernel.org>
To: torvalds@linux-foundation.org
Cc: catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kernel-team@android.com
Subject: [GIT PULL] arm64 updates for 6.12

Hi Linus,

Like a bunch of folks, I'll be living off conference coffee and canapes
for the next week or so, so here's the arm64 pull request for 6.12
before the chaos descends and the malnutrition sets in.

There's the usual summary in the tag, but the highlights are support for
Arm's "Permission Overlay Extension" using memory protection keys,
support for running as a protected guest on Android as well as perf
support for a bunch of new interconnect PMUs.

There's a trivial conflict with the kvmarm tree which was resolved in
linux-next as per [1]. Any issues, just yell.

Please pull,

Will

[1] https://lore.kernel.org/r/20240905160856.14e95d14@canb.auug.org.au

--->8

The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba:

  Linux 6.11-rc3 (2024-08-11 14:27:14 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git tags/arm64-upstream

for you to fetch changes up to 75078ba2b38a38d94017bd334f71aaed205e30a4:

  Merge branch 'for-next/timers' into for-next/core (2024-09-12 13:44:03 +0100)

----------------------------------------------------------------
arm64 updates for 6.12

ACPI:
* Enable PMCG erratum workaround for HiSilicon HIP10 and 11 platforms.
* Ensure arm64-specific IORT header is covered by MAINTAINERS.

CPU Errata:
* Enable workaround for hardware access/dirty issue on Ampere-1A cores.

Memory management:
* Define PHYSMEM_END to fix a crash in the amdgpu driver.
* Avoid tripping over invalid kernel mappings on the kexec() path.
* Userspace support for the Permission Overlay Extension (POE) using
  protection keys.

Perf and PMUs:
* Add support for the "fixed instruction counter" extension in the CPU
  PMU architecture.
* Extend and fix the event encodings for Apple's M1 CPU PMU.
* Allow LSM hooks to decide on SPE permissions for physical profiling.
* Add support for the CMN S3 and NI-700 PMUs.

Confidential Computing:
* Add support for booting an arm64 kernel as a protected guest under
  Android's "Protected KVM" (pKVM) hypervisor.

Selftests:
* Fix vector length issues in the SVE/SME sigreturn tests
* Fix build warning in the ptrace tests.

Timers:
* Add support for PR_{G,S}ET_TSC so that 'rr' can deal with
  non-determinism arising from the architected counter.

Miscellaneous:
* Rework our IPI-based CPU stopping code to try NMIs if regular IPIs
  don't succeed.
* Minor fixes and cleanups.

----------------------------------------------------------------
Anastasia Belova (1):
      arm64: esr: Define ESR_ELx_EC_* constants as UL

Andre Przywara (1):
      kselftest/arm64: signal: fix/refactor SVE vector length enumeration

Andy Shevchenko (1):
      ACPI/IORT: Switch to use kmemdup_array()

Anshuman Khandual (2):
      arm64/mm: Drop PMD_SECT_VALID
      arm64/mm: Drop TCR_SMP_FLAGS

Barry Song (1):
      mm: arm64: document why pte is not advanced in contpte_ptep_set_access_flags()

D Scott Phillips (2):
      arm64: errata: Enable the AC03_CPU_38 workaround for ampere1a
      arm64: Expose the end of the linear map in PHYSMEM_END

Dan Carpenter (1):
      perf: arm-ni: Fix an NULL vs IS_ERR() bug

Dave Martin (2):
      arm64: signal: Fix some under-bracketed UAPI macros
      arm64: el2_setup.h: Rename some labels to be more diff-friendly

Dev Jain (1):
      kselftest/arm64: Fix build warnings for ptrace

Douglas Anderson (1):
      arm64: smp: smp_send_stop() and crash_smp_send_stop() should try non-NMI first

Fares Mehanna (1):
      arm64: trans_pgd: mark PTEs entries as valid to avoid dead kexec()

Hanjun Guo (1):
      ACPI: ARM64: add acpi_iort.h to MAINTAINERS

Huang Xiaojia (1):
      arm64: Constify struct kobj_type

Ilkka Koskinen (1):
      perf: arm_pmuv3: Use BR_RETIRED for HW branch event if enabled

James Clark (1):
      drivers/perf: arm_spe: Use perf_allow_kernel() for permissions

Jing Zhang (1):
      drivers/perf: Fix ali_drw_pmu driver interrupt status clearing

Joey Gouly (32):
      KVM: arm64: Make kvm_at() take an OP_AT_*
      arm64: disable trapping of POR_EL0 to EL2
      arm64: cpufeature: add Permission Overlay Extension cpucap
      arm64: context switch POR_EL0 register
      KVM: arm64: Save/restore POE registers
      KVM: arm64: use `at s1e1a` for POE
      KVM: arm64: Sanitise ID_AA64MMFR3_EL1
      KVM: selftests: get-reg-list: add Permission Overlay registers
      powerpc/mm: add ARCH_PKEY_BITS to Kconfig
      x86/mm: add ARCH_PKEY_BITS to Kconfig
      mm: use ARCH_PKEY_BITS to define VM_PKEY_BITN
      arm64: enable the Permission Overlay Extension for EL0
      arm64: re-order MTE VM_ flags
      arm64: add POIndex defines
      arm64: convert protection key into vm_flags and pgprot values
      arm64: mask out POIndex when modifying a PTE
      arm64: handle PKEY/POE faults
      arm64: add pte_access_permitted_no_overlay()
      arm64: implement PKEYS support
      arm64: add POE signal support
      arm64/ptrace: add support for FEAT_POE
      arm64: enable POE and PIE to coexist
      arm64: enable PKEY support for CPUs with S1POE
      arm64: add Permission Overlay Extension Kconfig
      kselftest/arm64: move get_header()
      selftests: mm: move fpregs printing
      selftests: mm: make protection_keys test work on arm64
      kselftest/arm64: add HWCAP test for FEAT_S1POE
      kselftest/arm64: parse POE_MAGIC in a signal frame
      kselftest/arm64: Add test case for POR_EL0 signal frame records
      arm64/mm: use lm_alias() with addresses passed to memblock_free()
      arm64: pkeys: remove redundant WARN

Krishna chaitanya chundru (4):
      perf/dwc_pcie: Fix registration issue in multi PCIe controller instances
      Documentation: dwc_pcie_pmu: Update bdf to sbdf
      perf/dwc_pcie: Always register for PCIe bus notifier
      perf/dwc_pcie: Add support for QCOM vendor devices

Marc Zyngier (1):
      firmware/smccc: Call arch-specific hook on discovering KVM services

Mark Brown (1):
      kselftest/arm64: Actually test SME vector length changes via sigreturn

Min-Hua Chen (1):
      arm64: hibernate: Fix warning for cast from restricted gfp_t

Peter Collingbourne (1):
      arm64: Implement prctl(PR_{G,S}ET_TSC)

Rob Herring (Arm) (8):
      perf: arm_pmu: Use of_property_present()
      perf: arm_pmu: Remove event index to counter remapping
      perf: arm_pmuv3: Prepare for more than 32 counters
      KVM: arm64: pmu: Use arm_pmuv3.h register accessors
      KVM: arm64: pmu: Use generated define for PMSELR_EL0.SEL access
      arm64: perf/kvm: Use a common PMU cycle counter define
      KVM: arm64: Refine PMU defines for number of counters
      perf: arm_pmuv3: Add support for Armv9.4 PMU instruction counter

Robin Murphy (13):
      perf/arm-cmn: Refactor node ID handling. Again.
      perf/arm-cmn: Fix CCLA register offset
      perf/arm-cmn: Ensure dtm_idx is big enough
      perf/arm-cmn: Improve build-time assertion
      perf/arm-cmn: Make cycle counts less surprising
      perf/arm-cmn: Refactor DTC PMU register access
      dt-bindings: perf: arm-cmn: Add CMN S3
      perf/arm-cmn: Support CMN S3
      perf/arm-cmn: Clean up unnecessary NUMA_NO_NODE check
      perf/arm-cmn: Improve format attr printing
      dt-bindings/perf: Add Arm NI-700 PMU
      perf: Add driver for Arm NI-700 interconnect PMU
      MAINTAINERS: List Arm interconnect PMUs as supported

Rong Qianfeng (1):
      arm64/mm: Delete __init region from memblock.reserved

Will Deacon (16):
      drivers/virt: pkvm: Add initial support for running as a protected guest
      arm64: mm: Add top-level dispatcher for internal mem_encrypt API
      drivers/virt: pkvm: Hook up mem_encrypt API using pKVM hypercalls
      arm64: mm: Add confidential computing hook to ioremap_prot()
      drivers/virt: pkvm: Intercept ioremap using pKVM MMIO_GUARD hypercall
      arm64: smccc: Reserve block of KVM "vendor" services for pKVM hypercalls
      Merge remote-tracking branch 'kvmarm/arm64-shared-6.12' into for-next/poe
      Merge branch 'for-next/acpi' into for-next/core
      Merge branch 'for-next/errata' into for-next/core
      Merge branch 'for-next/misc' into for-next/core
      Merge branch 'for-next/mm' into for-next/core
      Merge branch 'for-next/perf' into for-next/core
      Merge branch 'for-next/pkvm-guest' into for-next/core
      Merge branch 'for-next/poe' into for-next/core
      Merge branch 'for-next/selftests' into for-next/core
      Merge branch 'for-next/timers' into for-next/core

Yangyu Chen (1):
      drivers/perf: apple_m1: add known PMU events

Yicong Yang (4):
      ACPI/IORT: Add PMCG platform information for HiSilicon HIP10/11
      drivers/perf: hisi_pcie: Record hardware counts correctly
      drivers/perf: hisi_pcie: Fix TLP headers bandwidth counting
      drivers/perf: hisi_pcie: Export supported Root Ports [bdf_min, bdf_max]

Yue Haibing (2):
      arm64: mm: Remove unused declaration early_io_map()
      arm64/sve: Remove unused declaration read_smcr_features()

 Documentation/admin-guide/perf/arm-ni.rst          |  17 +
 Documentation/admin-guide/perf/dwc_pcie_pmu.rst    |  16 +-
 Documentation/admin-guide/perf/hisi-pcie-pmu.rst   |   4 +-
 Documentation/admin-guide/perf/index.rst           |   1 +
 Documentation/arch/arm64/elf_hwcaps.rst            |   2 +
 Documentation/arch/arm64/silicon-errata.rst        |   6 +-
 .../devicetree/bindings/perf/arm,cmn.yaml          |   1 +
 Documentation/devicetree/bindings/perf/arm,ni.yaml |  30 +
 Documentation/virt/kvm/arm/hypercalls.rst          |  98 +++
 MAINTAINERS                                        |  12 +
 arch/arm/include/asm/arm_pmuv3.h                   |  20 +
 arch/arm/include/asm/hypervisor.h                  |   2 +
 arch/arm64/Kconfig                                 |  26 +-
 arch/arm64/include/asm/arm_pmuv3.h                 |  53 +-
 arch/arm64/include/asm/cpufeature.h                |   6 +
 arch/arm64/include/asm/cputype.h                   |   2 +
 arch/arm64/include/asm/el2_setup.h                 |  25 +-
 arch/arm64/include/asm/esr.h                       |  88 +--
 arch/arm64/include/asm/fpsimd.h                    |   2 -
 arch/arm64/include/asm/hwcap.h                     |   1 +
 arch/arm64/include/asm/hypervisor.h                |  11 +
 arch/arm64/include/asm/io.h                        |   4 +
 arch/arm64/include/asm/kvm_asm.h                   |   3 +-
 arch/arm64/include/asm/kvm_host.h                  |  12 +-
 arch/arm64/include/asm/mem_encrypt.h               |  15 +
 arch/arm64/include/asm/memory.h                    |   2 +
 arch/arm64/include/asm/mman.h                      |  10 +-
 arch/arm64/include/asm/mmu.h                       |   2 +-
 arch/arm64/include/asm/mmu_context.h               |  46 +-
 arch/arm64/include/asm/pgtable-hwdef.h             |  11 +-
 arch/arm64/include/asm/pgtable-prot.h              |   8 +-
 arch/arm64/include/asm/pgtable.h                   |  34 +-
 arch/arm64/include/asm/pkeys.h                     | 106 +++
 arch/arm64/include/asm/por.h                       |  33 +
 arch/arm64/include/asm/processor.h                 |   6 +
 arch/arm64/include/asm/set_memory.h                |   1 +
 arch/arm64/include/asm/sysreg.h                    |   4 +-
 arch/arm64/include/asm/thread_info.h               |   2 +
 arch/arm64/include/asm/traps.h                     |   1 +
 arch/arm64/include/asm/vncr_mapping.h              |   1 +
 arch/arm64/include/uapi/asm/hwcap.h                |   1 +
 arch/arm64/include/uapi/asm/mman.h                 |   9 +
 arch/arm64/include/uapi/asm/sigcontext.h           |  13 +-
 arch/arm64/kernel/cpu_errata.c                     |  10 +-
 arch/arm64/kernel/cpufeature.c                     |  23 +
 arch/arm64/kernel/cpuinfo.c                        |   3 +-
 arch/arm64/kernel/hibernate.c                      |   2 +-
 arch/arm64/kernel/process.c                        |  97 ++-
 arch/arm64/kernel/ptrace.c                         |  46 ++
 arch/arm64/kernel/signal.c                         |  62 ++
 arch/arm64/kernel/smp.c                            | 164 +++--
 arch/arm64/kernel/traps.c                          |  26 +-
 arch/arm64/kvm/hyp/include/hyp/fault.h             |   5 +-
 arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h         |  27 +
 arch/arm64/kvm/pmu-emul.c                          |  14 +-
 arch/arm64/kvm/pmu.c                               |  87 +--
 arch/arm64/kvm/sys_regs.c                          |  36 +-
 arch/arm64/mm/Makefile                             |   2 +-
 arch/arm64/mm/contpte.c                            |   6 +
 arch/arm64/mm/fault.c                              |  55 +-
 arch/arm64/mm/init.c                               |  12 +-
 arch/arm64/mm/ioremap.c                            |  23 +-
 arch/arm64/mm/mem_encrypt.c                        |  50 ++
 arch/arm64/mm/mmap.c                               |  11 +
 arch/arm64/mm/mmu.c                                |  45 ++
 arch/arm64/mm/proc.S                               |   4 +-
 arch/arm64/mm/trans_pgd.c                          |   6 +-
 arch/arm64/tools/cpucaps                           |   1 +
 arch/arm64/tools/sysreg                            |  30 +
 arch/powerpc/Kconfig                               |   4 +
 arch/x86/Kconfig                                   |   4 +
 drivers/acpi/arm64/iort.c                          |   9 +-
 drivers/firmware/smccc/kvm_guest.c                 |   2 +
 drivers/perf/Kconfig                               |   7 +
 drivers/perf/Makefile                              |   1 +
 drivers/perf/alibaba_uncore_drw_pmu.c              |   2 +-
 drivers/perf/apple_m1_cpu_pmu.c                    | 182 +++--
 drivers/perf/arm-cmn.c                             | 318 +++++----
 drivers/perf/arm-ni.c                              | 781 +++++++++++++++++++++
 drivers/perf/arm_pmu.c                             |  11 +-
 drivers/perf/arm_pmu_platform.c                    |   2 +-
 drivers/perf/arm_pmuv3.c                           | 148 ++--
 drivers/perf/arm_spe_pmu.c                         |   9 +-
 drivers/perf/arm_v6_pmu.c                          |   6 +-
 drivers/perf/arm_v7_pmu.c                          |  77 +-
 drivers/perf/arm_xscale_pmu.c                      |  12 +-
 drivers/perf/dwc_pcie_pmu.c                        |  22 +-
 drivers/perf/hisilicon/hisi_pcie_pmu.c             |  34 +-
 drivers/virt/coco/Kconfig                          |   2 +
 drivers/virt/coco/Makefile                         |   1 +
 drivers/virt/coco/pkvm-guest/Kconfig               |  10 +
 drivers/virt/coco/pkvm-guest/Makefile              |   2 +
 drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c      | 127 ++++
 fs/proc/task_mmu.c                                 |   2 +
 include/kvm/arm_pmu.h                              |   8 +-
 include/linux/arm-smccc.h                          |  88 +++
 include/linux/mm.h                                 |  20 +-
 include/linux/perf/arm_pmu.h                       |  10 +-
 include/linux/perf/arm_pmuv3.h                     |   9 +-
 include/linux/perf_event.h                         |   8 +-
 include/uapi/linux/elf.h                           |   1 +
 kernel/events/core.c                               |   9 +
 tools/testing/selftests/arm64/abi/hwcap.c          |  14 +
 tools/testing/selftests/arm64/abi/ptrace.c         |   4 +-
 tools/testing/selftests/arm64/signal/.gitignore    |   1 +
 tools/testing/selftests/arm64/signal/Makefile      |   2 +-
 tools/testing/selftests/arm64/signal/sve_helpers.c |  56 ++
 tools/testing/selftests/arm64/signal/sve_helpers.h |  21 +
 .../testcases/fake_sigreturn_sme_change_vl.c       |  46 +-
 .../testcases/fake_sigreturn_sve_change_vl.c       |  30 +-
 .../selftests/arm64/signal/testcases/poe_siginfo.c |  86 +++
 .../selftests/arm64/signal/testcases/ssve_regs.c   |  36 +-
 .../arm64/signal/testcases/ssve_za_regs.c          |  36 +-
 .../selftests/arm64/signal/testcases/sve_regs.c    |  32 +-
 .../selftests/arm64/signal/testcases/testcases.c   |  27 +-
 .../selftests/arm64/signal/testcases/testcases.h   |  28 +-
 .../selftests/arm64/signal/testcases/za_no_regs.c  |  32 +-
 .../selftests/arm64/signal/testcases/za_regs.c     |  36 +-
 tools/testing/selftests/kvm/aarch64/get-reg-list.c |  14 +
 tools/testing/selftests/mm/Makefile                |   2 +-
 tools/testing/selftests/mm/pkey-arm64.h            | 139 ++++
 tools/testing/selftests/mm/pkey-helpers.h          |   8 +
 tools/testing/selftests/mm/pkey-powerpc.h          |   3 +
 tools/testing/selftests/mm/pkey-x86.h              |   4 +
 tools/testing/selftests/mm/protection_keys.c       | 109 ++-
 125 files changed, 3395 insertions(+), 893 deletions(-)
 create mode 100644 Documentation/admin-guide/perf/arm-ni.rst
 create mode 100644 Documentation/devicetree/bindings/perf/arm,ni.yaml
 create mode 100644 arch/arm64/include/asm/mem_encrypt.h
 create mode 100644 arch/arm64/include/asm/pkeys.h
 create mode 100644 arch/arm64/include/asm/por.h
 create mode 100644 arch/arm64/mm/mem_encrypt.c
 create mode 100644 drivers/perf/arm-ni.c
 create mode 100644 drivers/virt/coco/pkvm-guest/Kconfig
 create mode 100644 drivers/virt/coco/pkvm-guest/Makefile
 create mode 100644 drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c
 create mode 100644 tools/testing/selftests/arm64/signal/sve_helpers.c
 create mode 100644 tools/testing/selftests/arm64/signal/sve_helpers.h
 create mode 100644 tools/testing/selftests/arm64/signal/testcases/poe_siginfo.c
 create mode 100644 tools/testing/selftests/mm/pkey-arm64.h

.
Date: Fri, 13 Sep 2024 18:56:36 +0200
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] vfs netfs

Hey Linus,

/* Summary */

This contains the work to improve read/write performance for the new
netfs library.

The main performance enhancing changes are:

    - Define a structure, struct folio_queue, and a new iterator type,
      ITER_FOLIOQ, to hold a buffer as a replacement for ITER_XARRAY. See
      that patch for questions about naming and form.

      ITER_FOLIOQ is provided as a replacement for ITER_XARRAY. The
      problem with an xarray is that accessing it requires the use of a
      lock (typically the RCU read lock) - and this means that we can't
      supply iterate_and_advance() with a step function that might sleep
      (crypto for example) without having to drop the lock between
      pages. ITER_FOLIOQ is the iterator for a chain of folio_queue
      structs, where each folio_queue holds a small list of folios. A
      folio_queue struct is a simpler structure than xarray and is not
      subject to concurrent manipulation by the VM. folio_queue is used
      rather than a bvec[] as it can form lists of indefinite size,
      adding to one end and removing from the other on the fly.

    - Provide a copy_folio_from_iter() wrapper.

    - Make cifs RDMA support ITER_FOLIOQ.

    - Use folio queues in the write-side helpers instead of xarrays.

    - Add a function to reset the iterator in a subrequest.

    - Simplify the write-side helpers to use sheaves to skip gaps rather
      than trying to work out where gaps are.

    - In afs, make the read subrequests asynchronous, putting them into work
      items to allow the next patch to do progressive unlocking/reading.

    - Overhaul the read-side helpers to improve performance.

    - Fix the caching of a partial block at the end of a file.

    - Allow a store to be cancelled.

Then some changes for cifs to make it use folio queues instead of
xarrays for crypto bufferage:

    - Use raw iteration functions rather than manually coding iteration when
      hashing data.

    - Switch to using folio_queue for crypto buffers.

    - Remove the xarray bits.

Make some adjustments to the /proc/fs/netfs/stats file such that:

    - All the netfs stats lines begin 'Netfs:' but change this to something
      a bit more useful.

    - Add a couple of stats counters to track the numbers of skips and waits
      on the per-inode writeback serialisation lock to make it easier to
      check for this as a source of performance loss.

Miscellaneous work:

    - Ensure that the sb_writers lock is taken around
      vfs_{set,remove}xattr() in the cachefiles code.

    - Reduce the number of conditional branches in netfs_perform_write().

    - Move the CIFS_INO_MODIFIED_ATTR flag to the netfs_inode struct and
      remove cifs_post_modify().

    - Move the max_len/max_nr_segs members from netfs_io_subrequest to
      netfs_io_request as they're only needed for one subreq at a time.

    - Add an 'unknown' source value for tracing purposes.

    - Remove NETFS_COPY_TO_CACHE as it's no longer used.

    - Set the request work function up front at allocation time.

    - Use bh-disabling spinlocks for rreq->lock as cachefiles completion may
      be run from block-filesystem DIO completion in softirq context.

    - Remove fs/netfs/io.c.

/* Testing */

gcc version 14.2.0 (Debian 14.2.0-3)
Debian clang version 16.0.6 (27+b1)

All patches are based on the vfs-6.11-rc7.fixes merge to bring in prerequisite
fixes in individual filesystems. All of this has been sitting in linux-next. No
build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known merge conflicts.

This has now a merge conflict with main due to some rather late cifs fixes.
This can be resolved by:

git rm fs/netfs/io.c

and then:

diff --cc fs/smb/client/cifssmb.c
index cfae2e918209,04f2a5441a89..d0df0c17b18f
--- a/fs/smb/client/cifssmb.c
+++ b/fs/smb/client/cifssmb.c
@@@ -1261,16 -1261,6 +1261,14 @@@ openRetry
        return rc;
  }

 +static void cifs_readv_worker(struct work_struct *work)
 +{
 +      struct cifs_io_subrequest *rdata =
 +              container_of(work, struct cifs_io_subrequest, subreq.work);
 +
-       netfs_subreq_terminated(&rdata->subreq,
-                               (rdata->result == 0 || rdata->result == -EAGAIN) ?
-                               rdata->got_bytes : rdata->result, true);
++      netfs_read_subreq_terminated(&rdata->subreq, rdata->result, false);
 +}
 +
  static void
  cifs_readv_callback(struct mid_q_entry *mid)
  {
@@@ -1323,21 -1306,11 +1321,23 @@@
                rdata->result = -EIO;
        }

 -      if (rdata->result == 0 || rdata->result == -EAGAIN)
 -              iov_iter_advance(&rdata->subreq.io_iter, rdata->got_bytes);
 +      if (rdata->result == -ENODATA) {
 +              __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags);
 +              rdata->result = 0;
 +      } else {
-               if (rdata->got_bytes < rdata->actual_len &&
-                   rdata->subreq.start + rdata->subreq.transferred + rdata->got_bytes ==
-                   ictx->remote_i_size) {
++              size_t trans = rdata->subreq.transferred + rdata->got_bytes;
++              if (trans < rdata->subreq.len &&
++                  rdata->subreq.start + trans == ictx->remote_i_size) {
 +                      __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags);
 +                      rdata->result = 0;
 +              }
 +      }
 +
        rdata->credits.value = 0;
+       rdata->subreq.transferred += rdata->got_bytes;
 -      netfs_read_subreq_terminated(&rdata->subreq, rdata->result, false);
++      trace_netfs_sreq(&rdata->subreq, netfs_sreq_trace_io_progress);
 +      INIT_WORK(&rdata->subreq.work, cifs_readv_worker);
 +      queue_work(cifsiod_wq, &rdata->subreq.work);
        release_mid(mid);
        add_credits(server, &credits, 0);
  }
diff --cc fs/smb/client/smb2pdu.c
index 88dc49d67037,95377bb91950..bb8ecbbe78af
--- a/fs/smb/client/smb2pdu.c
+++ b/fs/smb/client/smb2pdu.c
@@@ -4614,6 -4613,10 +4613,8 @@@ smb2_readv_callback(struct mid_q_entry
                              server->credits, server->in_flight,
                              0, cifs_trace_rw_credits_read_response_clear);
        rdata->credits.value = 0;
+       rdata->subreq.transferred += rdata->got_bytes;
 -      if (rdata->subreq.start + rdata->subreq.transferred >= rdata->subreq.rreq->i_size)
 -              __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags);
+       trace_netfs_sreq(&rdata->subreq, netfs_sreq_trace_io_progress);
        INIT_WORK(&rdata->subreq.work, smb2_readv_worker);
        queue_work(cifsiod_wq, &rdata->subreq.work);
        release_mid(mid);

Merge conflicts with other trees
================================

No known merge conflicts.

The following changes since commit 4356ab331c8f0dbed0f683abde345cd5503db1e4:

  Merge tag 'vfs-6.11-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs (2024-09-04 09:33:57 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.netfs

for you to fetch changes up to 4b40d43d9f951d87ae8dc414c2ef5ae50303a266:

  docs: filesystems: corrected grammar of netfs page (2024-09-12 12:20:43 +0200)

Please consider pulling these changes from the signed vfs-6.12.netfs tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.12.netfs

----------------------------------------------------------------
Christian Brauner (1):
      Merge branch 'netfs-writeback' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs into vfs.netfs

David Howells (24):
      cachefiles: Fix non-taking of sb_writers around set/removexattr
      netfs: Adjust labels in /proc/fs/netfs/stats
      netfs: Record contention stats for writeback lock
      netfs: Reduce number of conditional branches in netfs_perform_write()
      netfs, cifs: Move CIFS_INO_MODIFIED_ATTR to netfs_inode
      netfs: Move max_len/max_nr_segs from netfs_io_subrequest to netfs_io_stream
      netfs: Reserve netfs_sreq_source 0 as unset/unknown
      netfs: Remove NETFS_COPY_TO_CACHE
      netfs: Set the request work function upon allocation
      netfs: Use bh-disabling spinlocks for rreq->lock
      mm: Define struct folio_queue and ITER_FOLIOQ to handle a sequence of folios
      iov_iter: Provide copy_folio_from_iter()
      cifs: Provide the capability to extract from ITER_FOLIOQ to RDMA SGEs
      netfs: Use new folio_queue data type and iterator instead of xarray iter
      netfs: Provide an iterator-reset function
      netfs: Simplify the writeback code
      afs: Make read subreqs async
      netfs: Speed up buffered reading
      netfs: Remove fs/netfs/io.c
      cachefiles, netfs: Fix write to partial block at EOF
      netfs: Cancel dirty folios that have no storage destination
      cifs: Use iterate_and_advance*() routines directly for hashing
      cifs: Switch crypto buffer to use a folio_queue rather than an xarray
      cifs: Don't support ITER_XARRAY

Dennis Lam (1):
      docs: filesystems: corrected grammar of netfs page

 Documentation/filesystems/netfs_library.rst |   2 +-
 fs/9p/vfs_addr.c                            |  11 +-
 fs/afs/file.c                               |  30 +-
 fs/afs/fsclient.c                           |   9 +-
 fs/afs/write.c                              |   4 +-
 fs/afs/yfsclient.c                          |   9 +-
 fs/cachefiles/io.c                          |  19 +-
 fs/cachefiles/xattr.c                       |  34 +-
 fs/ceph/addr.c                              |  76 +--
 fs/netfs/Makefile                           |   4 +-
 fs/netfs/buffered_read.c                    | 766 ++++++++++++++++----------
 fs/netfs/buffered_write.c                   | 309 +++++------
 fs/netfs/direct_read.c                      | 147 ++++-
 fs/netfs/internal.h                         |  43 +-
 fs/netfs/io.c                               | 804 ----------------------------
 fs/netfs/iterator.c                         |  50 ++
 fs/netfs/main.c                             |   7 +-
 fs/netfs/misc.c                             |  94 ++++
 fs/netfs/objects.c                          |  16 +-
 fs/netfs/read_collect.c                     | 544 +++++++++++++++++++
 fs/netfs/read_pgpriv2.c                     | 264 +++++++++
 fs/netfs/read_retry.c                       | 256 +++++++++
 fs/netfs/stats.c                            |  27 +-
 fs/netfs/write_collect.c                    | 246 +++------
 fs/netfs/write_issue.c                      |  93 ++--
 fs/nfs/fscache.c                            |  19 +-
 fs/nfs/fscache.h                            |   7 +-
 fs/smb/client/cifsencrypt.c                 | 144 +----
 fs/smb/client/cifsglob.h                    |   4 +-
 fs/smb/client/cifssmb.c                     |   6 +-
 fs/smb/client/file.c                        |  96 ++--
 fs/smb/client/smb2ops.c                     | 219 ++++----
 fs/smb/client/smb2pdu.c                     |  27 +-
 fs/smb/client/smbdirect.c                   |  82 +--
 include/linux/folio_queue.h                 | 156 ++++++
 include/linux/iov_iter.h                    | 104 ++++
 include/linux/netfs.h                       |  46 +-
 include/linux/uio.h                         |  18 +
 include/trace/events/netfs.h                | 144 +++--
 lib/iov_iter.c                              | 240 ++++++++-
 lib/kunit_iov_iter.c                        | 259 +++++++++
 lib/scatterlist.c                           |  69 ++-
 42 files changed, 3520 insertions(+), 1984 deletions(-)
 delete mode 100644 fs/netfs/io.c
 create mode 100644 fs/netfs/read_collect.c
 create mode 100644 fs/netfs/read_pgpriv2.c
 create mode 100644 fs/netfs/read_retry.c
 create mode 100644 include/linux/folio_queue.h

.
Date: Sat, 14 Sep 2024 01:48:29 +0800
From: Gao Xiang <xiang@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, linux-erofs@lists.ozlabs.org,
	Chao Yu <chao@kernel.org>, Sandeep Dhavale <dhavale@google.com>,
	Hongzhen Luo <hongzhen@linux.alibaba.com>,
	Yiyang Wu <toolmanp@tlmp.cc>, Chunhai Guo <guochunhai@vivo.com>
Subject: [GIT PULL] erofs updates for 6.12-rc1

Hi Linus,

Could you consider this pull request for 6.12-rc1? It's a bit earlier
due to our mid-autumn festival holidays next week.

In this cycle, we'd like to add file-backed mount support, which has
has been a strong requirement for years.  It is especially useful when
there are thousands of images running on the same host for containers
and other sandbox use cases, unlike OS image use cases.

Without file-backed mounts, it's hard for container runtimes  to manage
and isolate so many unnecessary virtual block devices safely and
efficiently, therefore file-backed mounts are highly preferred.
For EROFS users, ComposeFS [1], containerd, and Android APEXes [2] will
directly benefit from it, and I've seen no risk in implementing it as
a completely immutable filesystem.

The previous experimental feature "EROFS over fscache" is now marked as
deprecated because:

 - Fscache is no longer an independent subsystem and has been merged
   into netfs, which was somewhat unexpected when it was proposed.

 - New HSM "fanotify pre-content hooks" [3] will be landed upstream.
   These hooks will replace "EROFS over fscache" in a simpler way, as
   EROFS won't be bother with kernel caching anymore.  Userspace
   programs can also manage their own caching hierarchy more flexibly.

Once the HSM "fanotify pre-content hooks" is landed, I will remove the
fscache backend entirely as an internal dependency cleanup.  More
backgrounds are listed in the original patchset [4].

In addition to that, there are bugfixes and cleanups as usual as shown
below.  All commits have been in -next and no potential merge conflict
is observed.

Thanks,
Gao Xiang

[1] https://github.com/containers/storage/pull/2039 
[2] https://lore.kernel.org/r/CAB=BE-R3wU7hBBaeAXdkDp2kvODxSFWNQtcmc5tCppN5qwdQgw@mail.gmail.com
[3] https://lore.kernel.org/r/cover.1725481503.git.josef@toxicpanda.com
[4] https://lore.kernel.org/r/20240830032840.3783206-1-hsiangkao@linux.alibaba.com 

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git tags/erofs-for-6.12-rc1

for you to fetch changes up to 025497e1d176a9e063d1e60699527e2f3a871935:

  erofs: reject inodes with negative i_size (2024-09-12 23:00:09 +0800)

----------------------------------------------------------------
Changes since last update:

 - Support file-backed mounts for containers and sandboxes;

 - Mark the experimental fscache backend as deprecated;

 - Handle overlapped pclusters caused by crafted images properly;

 - Fix a failure path which could cause infinite loops in
   z_erofs_init_decompressor();

 - Get rid of unnecessary NOFAILs;

 - Harmless on-disk hardening & minor cleanups.

----------------------------------------------------------------
Chunhai Guo (1):
      erofs: allocate more short-lived pages from reserved pool first

Gao Xiang (10):
      erofs: fix incorrect symlink detection in fast symlink
      erofs: clean up erofs_register_sysfs()
      erofs: handle overlapped pclusters out of crafted images properly
      erofs: add file-backed mount support
      erofs: support unencoded inodes for fileio
      erofs: support compressed inodes for fileio
      erofs: mark experimental fscache backend deprecated
      erofs: sunset unneeded NOFAILs
      erofs: restrict pcluster size limitations
      erofs: reject inodes with negative i_size

Hongzhen Luo (1):
      erofs: simplify erofs_map_blocks_flatmode()

Sandeep Dhavale (1):
      erofs: fix error handling in z_erofs_init_decompressor

Yiyang Wu (2):
      erofs: use kmemdup_nul in erofs_fill_symlink
      erofs: refactor read_inode calling convention

 fs/erofs/Kconfig        |  22 +++++-
 fs/erofs/Makefile       |   1 +
 fs/erofs/data.c         | 109 ++++++++++++++++++---------
 fs/erofs/decompressor.c |   2 +-
 fs/erofs/erofs_fs.h     |   5 +-
 fs/erofs/fileio.c       | 192 +++++++++++++++++++++++++++++++++++++++++++++++
 fs/erofs/inode.c        | 138 +++++++++++++++-------------------
 fs/erofs/internal.h     |  26 ++++++-
 fs/erofs/super.c        |  80 +++++++++++++-------
 fs/erofs/sysfs.c        |  30 ++------
 fs/erofs/zdata.c        | 196 ++++++++++++++++++++++--------------------------
 fs/erofs/zmap.c         |  42 +++++------
 12 files changed, 544 insertions(+), 299 deletions(-)
 create mode 100644 fs/erofs/fileio.c

.
Date: Fri, 13 Sep 2024 19:30:19 +0100
From: Mark Brown <broonie@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: [GIT PULL] SPI fixes for v6.11-rc7

The following changes since commit c9ca76e8239810ccb08825a7b847c39d367410a6:

  MAINTAINERS: SPI: Add mailing list imx@lists.linux.dev for nxp spi drivers (2024-09-05 19:15:45 +0100)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git tags/spi-fix-v6.11-rc7

for you to fetch changes up to 2a8787c1cdc7be24fdd8953ecd1a8743a1006235:

  spi: nxp-fspi: fix the KASAN report out-of-bounds bug (2024-09-11 22:25:44 +0100)

----------------------------------------------------------------
spi: Fixes for v6.11

A few last minute fixes for v6.11, they're all individually unremarkable
and only last minute due to when they came in.

----------------------------------------------------------------
Han Xu (1):
      spi: nxp-fspi: fix the KASAN report out-of-bounds bug

Jinjie Ruan (2):
      spi: geni-qcom: Undo runtime PM changes at driver exit time
      spi: geni-qcom: Fix incorrect free_irq() sequence

 drivers/spi/spi-geni-qcom.c | 17 ++++++++---------
 drivers/spi/spi-nxp-fspi.c  |  5 +++--
 2 files changed, 11 insertions(+), 11 deletions(-)

.
Date: Fri, 13 Sep 2024 15:27:17 -0500
From: Bjorn Helgaas <helgaas@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kwilczynski@kernel.org>,
	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
	Philipp Stanner <pstanner@redhat.com>,
	Alex Williamson <alex.williamson@redhat.com>
Subject: [GIT PULL] PCI fixes for v6.11

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git tags/pci-v6.11-fixes-4

for you to fetch changes up to fc8c818e756991f5f50b8dfab07f970a18da2556:

  PCI: Fix potential deadlock in pcim_intx() (2024-09-12 07:52:50 -0500)

Another fix to a commit merged during the v6.11 merge window.
----------------------------------------------------------------
- Prevent a possible deadlock (reported by lockdep) when a driver
  relinquishes a pci_dev, another driver claims it, and one uses
  managed pcim_enable_device() and the other doesn't (Philipp Stanner)

----------------------------------------------------------------
Philipp Stanner (1):
      PCI: Fix potential deadlock in pcim_intx()

 drivers/pci/devres.c | 2 ++
 1 file changed, 2 insertions(+)

.
Date: Fri, 13 Sep 2024 18:13:41 -0700
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, 
	Sean Christopherson <seanjc@google.com>
Subject: [GIT PULL] KVM: x86 pull requests for 6.12

There's a trivial (and amusing) conflict with KVM s390 in the selftests pull
request (we both added "config" to the .gitignore, within a few days of each
other, after the goof being around for a good year or more).

Note, the pull requests are relative to v6.11-rc4.  I got a late start, and for
some reason thought kvm/next would magically end up on rc4 or later.

Note #2, I had a brainfart and put the testcase for verifying KVM's fastpath
correctly exits to userspace when needed in selftests, whereas the actual KVM
fix is in misc.  So if you run KVM selftests in the middle of pulling everything,
expect the debug_regs test to fail.

.
Date: Fri, 13 Sep 2024 23:21:33 -0500
From: Steve French <smfrench@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, CIFS <linux-cifs@vger.kernel.org>
Subject: [GIT PULL] smb3 fix

Please pull the following changes since commit
da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.samba.org/sfrench/cifs-2.6.git tags/6.11-rc7-SMB3-client-fix

for you to fetch changes up to 5a20b7cb0d8d3ee490a8e088dc2584aa782e3355:

  cifs: Fix signature miscalculation (2024-09-12 19:28:48 -0500)

----------------------------------------------------------------
Fix a case where many signing check of write failures
   ("signature verification returned error = -13")
----------------------------------------------------------------
David Howells (1):
      cifs: Fix signature miscalculation

 fs/smb/client/cifsencrypt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


-- 
Thanks,

Steve

.
Date: Fri, 13 Sep 2024 17:16:09 -0700
From: Casey Schaufler <casey@schaufler-ca.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LSM List <linux-security-module@vger.kernel.org>,
 Linux kernel mailing list <linux-kernel@vger.kernel.org>,
 Casey Schaufler <casey@schaufler-ca.com>,
 GiSeong Ji <jiggyjiggy0323@gmail.com>, Jiawei Ye <jiawei.ye@foxmail.com>
Subject: [GIT PULL] Smack patches for 6.12

Hello Linus,

Here is the Smack pull request for v6.12.

There are 2 patches. One is a simple indentation correction.
The other corrects a potentially rcu unsafe pointer assignment.
Both have time in next and pass all tests.

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  https://github.com/cschaufler/smack-next tags/Smack-for-6.12

for you to fetch changes up to 2749749afa071f8a0e405605de9da615e771a7ce:

  smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso (2024-09-03 08:37:17 -0700)

----------------------------------------------------------------
Smack changes for v6.12
	- rcu pointer assignment in smk_set_cipso
	- indentation in smack_ip_output

----------------------------------------------------------------
GiSeong Ji (1):
      security: smack: Fix indentation in smack_netfilter.c

Jiawei Ye (1):
      smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso

 security/smack/smack_netfilter.c | 4 ++--
 security/smack/smackfs.c         | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)


.
Date: Sat, 14 Sep 2024 08:15:27 +0530
From: Neeraj Upadhyay <Neeraj.Upadhyay@kernel.org>
To: torvalds@linux-foundation.org
Cc: paulmck@kernel.org, joel@joelfernandes.org, frederic@kernel.org,
	boqun.feng@gmail.com, urezki@gmail.com, neeraj.iitr10@gmail.com,
	christophe.jaillet@wanadoo.fr, inwardvessel@gmail.com,
	riel@surriel.com, takakura@valinux.co.jp, seanjc@google.com,
	thorsten.blum@toblux.com, vschneid@redhat.com, longman@redhat.com,
	zhouzhouyi@gmail.com, qiang.zhang1211@gmail.com,
	linux-kernel@vger.kernel.org, kernel-team@meta.com,
	mingo@kernel.org, tglx@linutronix.de, rcu@vger.kernel.org
Subject: [GIT PULL] RCU changes for v6.12

Hello Linus,

When the merge window opens, please pull this RCU update from:

  git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git tags/rcu.release.v6.12

  # HEAD: 355debb83bf79853cde43579f88eed16adb1da29: Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a (2024-09-09 00:09:47 +0530)


Following are the merge conflicts with other trees:

1. Merge conflicts with slab tree

Stephen's resolution: https://lore.kernel.org/lkml/20240812124748.3725011b@canb.auug.org.au/

In case you might want to refer to it, a sample tree with resolutions applied is at
git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.slab.tree.conflict_res


2. Merge conflict with kvm-fixes tree

Stephen's resolution: https://lore.kernel.org/lkml/20240905154122.4d1f8ca5@canb.auug.org.au/

In case you might want to refer to it, a sample tree with resolutions applied is at
git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.kvm-fixes.tree.conflict_res

----------------------------------------------------------------
RCU pull request for v6.12

This pull request contains the following branches:

context_tracking.15.08.24a: Rename context tracking state related
        symbols and remove references to "dynticks" in various context
        tracking state variables and related helpers; force
        context_tracking_enabled_this_cpu() to be inlined to avoid
        leaving a noinstr section.

csd.lock.15.08.24a: Enhance CSD-lock diagnostic reports; add an API
        to provide an indication of ongoing CSD-lock stall.

nocb.09.09.24a: Update and simplify RCU nocb code to handle
        (de-)offloading of callbacks only for offline CPUs; fix RT
        throttling hrtimer being armed from offline CPU.

rcutorture.14.08.24a: Remove redundant rcu_torture_ops get_gp_completed
        fields; add SRCU ->same_gp_state and ->get_comp_state
        functions; add generic test for NUM_ACTIVE_*RCU_POLL* for
        testing RCU and SRCU polled grace periods; add CFcommon.arch
        for arch-specific Kconfig options; print number of update types
        in rcu_torture_write_types();
        add rcutree.nohz_full_patience_delay testing to the TREE07
        scenario; add a stall_cpu_repeat module parameter to test
        repeated CPU stalls; add argument to limit number of CPUs a
        guest OS can use in torture.sh;

rcustall.09.09.24a: Abbreviate RCU CPU stall warnings during CSD-lock
        stalls; Allow dump_cpu_task() to be called without disabling
        preemption; defer printing stall-warning backtrace when holding
        rcu_node lock.

srcu.12.08.24a: Make SRCU gp seq wrap-around faster; add KCSAN checks
        for concurrent updates to ->srcu_n_exp_nodelay and
        ->reschedule_count which are used in heuristics governing
        auto-expediting of normal SRCU grace periods and
        grace-period-state-machine delays; mark idle SRCU-barrier
        callbacks to help identify stuck SRCU-barrier callback.

rcu.tasks.14.08.24a: Remove RCU Tasks Rude asynchronous APIs as they
        are no longer used; stop testing RCU Tasks Rude asynchronous
        APIs; fix access to non-existent percpu regions; check
        processor-ID assumptions during chosen CPU calculation for
        callback enqueuing; update description of rtp->tasks_gp_seq
        grace-period sequence number; add rcu_barrier_cb_is_done()
        to identify whether a given rcu_barrier callback is stuck;
        mark idle Tasks-RCU-barrier callbacks; add
        *torture_stats_print() functions to print detailed
        diagnostics for Tasks-RCU variants; capture start time of
        rcu_barrier_tasks*() operation to help distinguish a hung
        barrier operation from a long series of barrier operations.

rcu_scaling_tests.15.08.24a:
        refscale: Add a TINY scenario to support tests of Tiny RCU
        and Tiny SRCU; Optimize process_durations() operation;

        rcuscale: Dump stacks of stalled rcu_scale_writer() instances;
        dump grace-period statistics when rcu_scale_writer() stalls;
        mark idle RCU-barrier callbacks to identify stuck RCU-barrier
        callbacks; print detailed grace-period and barrier diagnostics
        on rcu_scale_writer() hangs for Tasks-RCU variants; warn if
        async module parameter is specified for RCU implementations
        that do not have async primitives such as RCU Tasks Rude;
        make all writer tasks report upon hang; tolerate repeated
        GFP_KERNEL failure in rcu_scale_writer(); use special allocator
        for rcu_scale_writer(); NULL out top-level pointers to heap
        memory to avoid double-free bugs on modprobe failures; maintain
        per-task instead of per-CPU callbacks count to avoid any issues
        with migration of either tasks or callbacks; constify struct
        ref_scale_ops.

fixes.12.08.24a: Use system_unbound_wq for kfree_rcu work to avoid
        disturbing isolated CPUs.

misc.11.08.24a: Warn on unexpected rcu_state.srs_done_tail state;
        Better define "atomic" for list_replace_rcu() and
        hlist_replace_rcu() routines; annotate struct
        kvfree_rcu_bulk_data with __counted_by().

----------------------------------------------------------------
Christophe JAILLET (2):
      refscale: Optimize process_durations()
      refscale: Constify struct ref_scale_ops

Frederic Weisbecker (14):
      rcu/nocb: Introduce RCU_NOCB_LOCKDEP_WARN()
      rcu/nocb: Move nocb field at the end of state struct
      rcu/nocb: Assert no callbacks while nocb kthread allocation fails
      rcu/nocb: Introduce nocb mutex
      rcu/nocb: (De-)offload callbacks on offline CPUs only
      rcu/nocb: Remove halfway (de-)offloading handling from bypass
      rcu/nocb: Remove halfway (de-)offloading handling from rcu_core()'s QS reporting
      rcu/nocb: Remove halfway (de-)offloading handling from rcu_core
      rcu/nocb: Remove SEGCBLIST_RCU_CORE
      rcu/nocb: Remove SEGCBLIST_KTHREAD_CB
      rcu/nocb: Simplify (de-)offloading state machine
      rcu/nocb: Fix RT throttling hrtimer armed from offline CPU
      rcu/nocb: Conditionally wake up rcuo if not already waiting on GP
      rcu/nocb: Remove superfluous memory barrier after bypass enqueue

JP Kobryn (1):
      srcu: faster gp seq wrap-around

Neeraj Upadhyay (1):
      Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a

Paul E. McKenney (41):
      rcutorture: Remove redundant rcu_torture_ops get_gp_completed fields
      rcutorture: Add SRCU ->same_gp_state and ->get_comp_state functions
      rcutorture: Generic test for NUM_ACTIVE_*RCU_POLL*
      rcutorture: Make rcu_torture_write_types() print number of update types
      tools/rcu: Remove RCU Tasks Rude asynchronous APIs from rcu-updaters.sh
      rcu/kfree: Warn on unexpected tail state
      locking/csd_lock: Print large numbers as negatives
      rcu: Better define "atomic" for list replacement
      rcutorture: Add rcutree.nohz_full_patience_delay to TREE07
      srcu: Check for concurrent updates of heuristics
      srcu: Mark callbacks not currently participating in barrier operation
      rcutorture: Add a stall_cpu_repeat module parameter
      torture: Add torture.sh --guest-cpu-limit argument for limited hosts
      doc: Remove RCU Tasks Rude asynchronous APIs
      rcutorture: Stop testing RCU Tasks Rude asynchronous APIs
      rcuscale: Stop testing RCU Tasks Rude asynchronous APIs
      rcu-tasks: Remove RCU Tasks Rude asynchronous APIs
      rcu/tasks: Check processor-ID assumptions
      rcu/tasks: Update rtp->tasks_gp_seq comment
      rcu: Provide rcu_barrier_cb_is_done() to check rcu_barrier() CBs
      rcu/tasks: Mark callbacks not currently participating in barrier operation
      rcu/tasks: Add detailed grace-period and barrier diagnostics
      rcu/tasks: Add rcu_barrier_tasks*() start time to diagnostics
      refscale: Add TINY scenario
      rcuscale: Save a few lines with whitespace-only change
      rcuscale: Dump stacks of stalled rcu_scale_writer() instances
      rcuscale: Dump grace-period statistics when rcu_scale_writer() stalls
      rcu: Mark callbacks not currently participating in barrier operation
      rcuscale: Print detailed grace-period and barrier diagnostics
      locking/csd_lock: Provide an indication of ongoing CSD-lock stall
      locking/csd-lock: Use backoff for repeated reports of same incident
      rcu: Summarize RCU CPU stall warnings during CSD-lock stalls
      rcu: Extract synchronize_rcu_expedited_stall() from synchronize_rcu_expedited_wait()
      rcu: Summarize expedited RCU CPU stall warnings during CSD-lock stalls
      rcuscale: Provide clear error when async specified without primitives
      rcuscale: Make all writer tasks report upon hang
      rcuscale: Make rcu_scale_writer() tolerate repeated GFP_KERNEL failure
      rcuscale: Use special allocator for rcu_scale_writer()
      rcuscale: NULL out top-level pointers to heap memory
      rcuscale: Count outstanding callbacks per-task rather than per-CPU
      rcu: Defer printing stall-warning backtrace when holding rcu_node lock

Rik van Riel (1):
      smp: print only local CPU info when sched_clock goes backward

Ryo Takakura (1):
      rcu: Let dump_cpu_task() be used without preemption disabled

Sean Christopherson (1):
      context_tracking: Tag context_tracking_enabled_this_cpu() __always_inline

Thorsten Blum (1):
      rcu: Annotate struct kvfree_rcu_bulk_data with __counted_by()

Valentin Schneider (25):
      treewide: context_tracking: Rename CONTEXT_* into CT_STATE_*
      context_tracking, rcu: Rename RCU_DYNTICKS_IDX into CT_RCU_WATCHING
      context_tracking, rcu: Rename ct_dynticks() into ct_rcu_watching()
      context_tracking, rcu: Rename ct_dynticks_cpu() into ct_rcu_watching_cpu()
      context_tracking, rcu: Rename ct_dynticks_cpu_acquire() into ct_rcu_watching_cpu_acquire()
      context_tracking, rcu: Rename struct context_tracking .dynticks_nesting into .nesting
      context_tracking, rcu: Rename ct_dynticks_nesting() into ct_nesting()
      context_tracking, rcu: Rename ct_dynticks_nesting_cpu() into ct_nesting_cpu()
      context_tracking, rcu: Rename struct context_tracking .dynticks_nmi_nesting into .nmi_nesting
      context_tracking, rcu: Rename ct_dynticks_nmi_nesting() into ct_nmi_nesting()
      context_tracking, rcu: Rename ct_dynticks_nmi_nesting_cpu() into ct_nmi_nesting_cpu()
      context_tracking, rcu: Rename DYNTICK_IRQ_NONIDLE into CT_NESTING_IRQ_NONIDLE
      context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*()
      context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu()
      rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online()
      rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs()
      rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since()
      rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs()
      rcu: Rename struct rcu_data .dynticks_snap into .watching_snap
      rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap
      rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save()
      rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck()
      rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs()
      rcu: Update stray documentation references to rcu_dynticks_eqs_{enter, exit}()
      context_tracking, rcu: Rename rcu_dyntick trace event into rcu_watching

Waiman Long (1):
      rcu: Use system_unbound_wq to avoid disturbing isolated CPUs

Zhouyi Zhou (1):
      rcutorture: Add CFcommon.arch for arch-specific Kconfig options

Zqiang (1):
      rcu-tasks: Fix access non-existent percpu rtpcp variable in rcu_tasks_need_gpcb()

 Documentation/RCU/Design/Data-Structures/Data-Structures.rst          |  28 +++---
 Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst |   8 +-
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-dyntick.svg          |   8 +-
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg           |   8 +-
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp.svg               |   8 +-
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-hotplug.svg          |   4 +-
 Documentation/RCU/Design/Requirements/Requirements.rst                |   3 +-
 Documentation/RCU/checklist.rst                                       |  61 ++++++------
 Documentation/RCU/whatisRCU.rst                                       |   2 +-
 Documentation/admin-guide/kernel-parameters.txt                       |  20 ++--
 arch/Kconfig                                                          |   2 +-
 arch/arm64/kernel/entry-common.c                                      |   2 +-
 arch/powerpc/include/asm/interrupt.h                                  |   6 +-
 arch/powerpc/kernel/interrupt.c                                       |   6 +-
 arch/powerpc/kernel/syscall.c                                         |   2 +-
 arch/x86/entry/common.c                                               |   2 +-
 include/linux/context_tracking.h                                      |  32 ++++---
 include/linux/context_tracking_state.h                                |  60 ++++++------
 include/linux/entry-common.h                                          |   2 +-
 include/linux/rcu_segcblist.h                                         |   6 +-
 include/linux/rculist.h                                               |   9 +-
 include/linux/rcupdate.h                                              |  15 ++-
 include/linux/rcutiny.h                                               |   2 +-
 include/linux/rcutree.h                                               |   2 +-
 include/linux/smp.h                                                   |   6 ++
 include/linux/srcutree.h                                              |  15 ++-
 include/trace/events/rcu.h                                            |  20 ++--
 kernel/context_tracking.c                                             | 140 ++++++++++++++--------------
 kernel/entry/common.c                                                 |   2 +-
 kernel/rcu/rcu.h                                                      |  12 ++-
 kernel/rcu/rcu_segcblist.c                                            |  11 ---
 kernel/rcu/rcu_segcblist.h                                            |  11 +--
 kernel/rcu/rcuscale.c                                                 | 214 ++++++++++++++++++++++++++++++++++++------
 kernel/rcu/rcutorture.c                                               | 121 +++++++++++++++---------
 kernel/rcu/refscale.c                                                 |  67 ++++++-------
 kernel/rcu/srcutree.c                                                 |  11 ++-
 kernel/rcu/tasks.h                                                    | 214 ++++++++++++++++++++++++++++--------------
 kernel/rcu/tree.c                                                     | 174 ++++++++++++++++------------------
 kernel/rcu/tree.h                                                     |  10 +-
 kernel/rcu/tree_exp.h                                                 | 121 +++++++++++++-----------
 kernel/rcu/tree_nocb.h                                                | 279 +++++++++++++++++++++----------------------------------
 kernel/rcu/tree_plugin.h                                              |  11 ++-
 kernel/rcu/tree_stall.h                                               |  16 +++-
 kernel/sched/core.c                                                   |   6 +-
 kernel/smp.c                                                          |  38 +++++++-
 kernel/stop_machine.c                                                 |   2 +-
 kernel/trace/trace_osnoise.c                                          |   4 +-
 lib/Kconfig.debug                                                     |   1 +
 tools/rcu/rcu-updaters.sh                                             |   2 -
 tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh              |   2 +
 tools/testing/selftests/rcutorture/bin/torture.sh                     |  38 +++++---
 tools/testing/selftests/rcutorture/configs/rcu/CFcommon               |   2 -
 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686          |   2 +
 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le       |   1 +
 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64        |   2 +
 tools/testing/selftests/rcutorture/configs/rcu/TREE07.boot            |   1 +
 tools/testing/selftests/rcutorture/configs/refscale/TINY              |  20 ++++
 57 files changed, 1088 insertions(+), 786 deletions(-)
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le
 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64
 create mode 100644 tools/testing/selftests/rcutorture/configs/refscale/TINY

.
Date: Sat, 14 Sep 2024 00:30:48 -0700
From: "Paul E. McKenney" <paulmck@kernel.org>
To: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org
Cc: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	kernel-team@meta.com, elver@google.com, akpm@linux-foundation.org,
	tglx@linutronix.de, peterz@infradead.org, arnd@arndb.de,
	broonie@kernel.org, naresh.kamboju@linaro.org, nathan@kernel.org,
	linus.walleij@linaro.org, rmk+kernel@armlinux.org.uk, afd@ti.com,
	eric.devolder@oracle.com, robh@kernel.org, mark.rutland@arm.com
Subject: [GIT PULL] Emulated one-byte cmpxchg() for ARC and sh

Hello, Linux,

Please pull the following cmpxchg()-related changes:

  git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/cmpxchg.2024.09.14a
  # HEAD: c81a748edefd098ea21dd35d4bba03f69412fc26: sh: Emulate one-byte cmpxchg (2024-09-13 07:10:38 -0700)

----------------------------------------------------------------
ARC/sh: Provide one-byte cmpxchg emulation

This series provides emulated one-byte cmpxchg() support for ARM and
sh using the cmpxchg_emu_u8() function that uses a four-byte cmpxchg()
to emulate the one-byte variant.

A similar patch for emulation of one-byte cmpxchg() for xtensa has not yet
received a maintainer ack, so it is slated for the v6.13 merge window.
If you are not that patient, there is another signed tag covering all
three (ARC, sh, and xtensa) named cmpxchg.2024.09.15a.

----------------------------------------------------------------
Paul E. McKenney (2):
      ARC: Emulate one-byte cmpxchg
      sh: Emulate one-byte cmpxchg

 arch/arc/Kconfig               | 1 +
 arch/arc/include/asm/cmpxchg.h | 6 ++++--
 arch/sh/Kconfig                | 1 +
 arch/sh/include/asm/cmpxchg.h  | 3 +++
 4 files changed, 9 insertions(+), 2 deletions(-)

.
Date: Sat, 14 Sep 2024 01:10:36 -0700
From: "Paul E. McKenney" <paulmck@kernel.org>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com,
	kernel-team@meta.com, elver@google.com, thorsten.blum@toblux.com
Subject: [GIT PULL] KCSAN changes for v6.12

Hello, Linus,

When the merge window opens, please pull the latest KCSAN git commit from:

  git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/kcsan.2024.09.14a
  # HEAD: 43d631bf06ec961bbe4c824b931fe03be44c419c: kcsan: Use min() to fix Coccinelle warning (2024-08-01 16:40:44 -0700)

----------------------------------------------------------------
kcsan: Use min() to fix Coccinelle warning.

Courtesy of Thorsten Blum.

----------------------------------------------------------------
Thorsten Blum (1):
      kcsan: Use min() to fix Coccinelle warning

 kernel/kcsan/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

.
Date: Sat, 14 Sep 2024 10:16:04 +0200
From: Takashi Iwai <tiwai@suse.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com>,
 Linux Sound Mailing List <linux-sound@vger.kernel.org>, Linux Kernel
 Mailing List <linux-kernel@vger.kernel.org>
Subject: [GIT PULL] sound fixes for 6.11-rc7

Linus,

please pull sound fixes for v6.11 from:

  git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-6.11

The topmost commit is 134536c21275bb3410cd1f10c5e369d30702741d

----------------------------------------------------------------

sound fixes for 6.11

A few last-minute ASoC fixes and MAINTAINERS update.
All look small, obvious and nice-to-have fixes for 6.11-final.

----------------------------------------------------------------

Arseniy Krasnov (1):
      ASoC: meson: axg-card: fix 'use-after-free'

Bard Liao (2):
      ASoC: Intel: soc-acpi-intel-lnl-match: add missing empty item
      ASoC: Intel: soc-acpi-intel-mtl-match: add missing empty item

Pierre-Louis Bossart (1):
      MAINTAINERS: update Pierre Bossart's email and role

Shenghao Ding (1):
      ASoC: tas2781: fix to save the dsp bin file name into the correct array in case name_prefix is not NULL

Su Hui (1):
      ASoC: codecs: avoid possible garbage value in peb2466_reg_read()

---
 .mailmap                                          | 1 +
 MAINTAINERS                                       | 6 +++---
 sound/soc/codecs/peb2466.c                        | 3 ++-
 sound/soc/codecs/tas2781-i2c.c                    | 2 +-
 sound/soc/intel/common/soc-acpi-intel-lnl-match.c | 1 +
 sound/soc/intel/common/soc-acpi-intel-mtl-match.c | 1 +
 sound/soc/meson/axg-card.c                        | 3 ++-
 7 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/.mailmap b/.mailmap
index f01d7bfca2a0..7c7f171d0e55 100644
--- a/.mailmap
+++ b/.mailmap
@@ -529,6 +529,7 @@ Pavankumar Kondeti <quic_pkondeti@quicinc.com> <pkondeti@codeaurora.org>
 Peter A Jonsson <pj@ludd.ltu.se>
 Peter Oruba <peter.oruba@amd.com>
 Peter Oruba <peter@oruba.de>
+Pierre-Louis Bossart <pierre-louis.bossart@linux.dev> <pierre-louis.bossart@linux.intel.com>
 Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
 Praveen BP <praveenbp@ti.com>
 Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> <pradeepc@codeaurora.org>
diff --git a/MAINTAINERS b/MAINTAINERS
index f70987f7e462..cc40a9d9b8cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11156,12 +11156,12 @@ F:	drivers/gpio/gpio-i8255.h
 
 INTEL ASoC DRIVERS
 M:	Cezary Rojewski <cezary.rojewski@intel.com>
-M:	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
 M:	Liam Girdwood <liam.r.girdwood@linux.intel.com>
 M:	Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
 M:	Bard Liao <yung-chuan.liao@linux.intel.com>
 M:	Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
 M:	Kai Vehmanen <kai.vehmanen@linux.intel.com>
+R:	Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Supported
 F:	sound/soc/intel/
@@ -21391,13 +21391,13 @@ S:	Maintained
 F:	tools/sound/dapm-graph
 
 SOUND - SOUND OPEN FIRMWARE (SOF) DRIVERS
-M:	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
 M:	Liam Girdwood <lgirdwood@gmail.com>
 M:	Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
 M:	Bard Liao <yung-chuan.liao@linux.intel.com>
 M:	Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
 M:	Daniel Baluta <daniel.baluta@nxp.com>
 R:	Kai Vehmanen <kai.vehmanen@linux.intel.com>
+R:	Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
 L:	sound-open-firmware@alsa-project.org (moderated for non-subscribers)
 S:	Supported
 W:	https://github.com/thesofproject/linux/
@@ -21406,7 +21406,7 @@ F:	sound/soc/sof/
 SOUNDWIRE SUBSYSTEM
 M:	Vinod Koul <vkoul@kernel.org>
 M:	Bard Liao <yung-chuan.liao@linux.intel.com>
-R:	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+R:	Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
 R:	Sanyog Kale <sanyog.r.kale@intel.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Supported
diff --git a/sound/soc/codecs/peb2466.c b/sound/soc/codecs/peb2466.c
index 76ee7e3f4d9b..67ea70cef0c7 100644
--- a/sound/soc/codecs/peb2466.c
+++ b/sound/soc/codecs/peb2466.c
@@ -229,7 +229,8 @@ static int peb2466_reg_read(void *context, unsigned int reg, unsigned int *val)
 	case PEB2466_CMD_XOP:
 	case PEB2466_CMD_SOP:
 		ret = peb2466_read_byte(peb2466, reg, &tmp);
-		*val = tmp;
+		if (!ret)
+			*val = tmp;
 		break;
 	default:
 		dev_err(&peb2466->spi->dev, "Not a XOP or SOP command\n");
diff --git a/sound/soc/codecs/tas2781-i2c.c b/sound/soc/codecs/tas2781-i2c.c
index e79d613745b4..cf8bc7ede6c7 100644
--- a/sound/soc/codecs/tas2781-i2c.c
+++ b/sound/soc/codecs/tas2781-i2c.c
@@ -502,7 +502,7 @@ static void tasdevice_fw_ready(const struct firmware *fmw,
 	 */
 	tas_priv->fw_state = TASDEVICE_RCA_FW_OK;
 	if (tas_priv->name_prefix)
-		scnprintf(tas_priv->rca_binaryname, 64, "%s-%s_coef.bin",
+		scnprintf(tas_priv->coef_binaryname, 64, "%s-%s_coef.bin",
 			tas_priv->name_prefix, tas_priv->dev_name);
 	else
 		scnprintf(tas_priv->coef_binaryname, 64, "%s_coef.bin",
diff --git a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
index e6ffcd5be6c5..edfb668d0580 100644
--- a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
@@ -208,6 +208,7 @@ static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0[] = {
 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
 		.adr_d = cs42l43_0_adr,
 	},
+	{}
 };
 
 static const struct snd_soc_acpi_link_adr lnl_rvp[] = {
diff --git a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
index 8e0ae3635a35..d4435a34a3a3 100644
--- a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
@@ -674,6 +674,7 @@ static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = {
 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
 		.adr_d = cs42l43_0_adr,
 	},
+	{}
 };
 
 static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {
diff --git a/sound/soc/meson/axg-card.c b/sound/soc/meson/axg-card.c
index 8c5605c1e34e..eb0302f20740 100644
--- a/sound/soc/meson/axg-card.c
+++ b/sound/soc/meson/axg-card.c
@@ -104,7 +104,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card,
 				     int *index)
 {
 	struct meson_card *priv = snd_soc_card_get_drvdata(card);
-	struct snd_soc_dai_link *pad = &card->dai_link[*index];
+	struct snd_soc_dai_link *pad;
 	struct snd_soc_dai_link *lb;
 	struct snd_soc_dai_link_component *dlc;
 	int ret;
@@ -114,6 +114,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card,
 	if (ret)
 		return ret;
 
+	pad = &card->dai_link[*index];
 	lb = &card->dai_link[*index + 1];
 
 	lb->name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-lb", pad->name);

.
Date: Sat, 14 Sep 2024 01:16:38 -0700
From: "Paul E. McKenney" <paulmck@kernel.org>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, oleg@redhat.com,
	axboe@kernel.dk, brauner@kernel.org, akpm@linux-foundation.org,
	willy@infradead.org, clm@fb.com, riel@surriel.com
Subject: [GIT PULL] exit/core-dump non-urgent sleep for v6.12

Hello, Linus,

When the merge window opens, please pull the following exit-path
application core-dump commit for v6.12:

  git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/misc.2024.09.14a
  # HEAD: b8e753128ed074fcb48e9ceded940752f6b1c19f: exit: Sleep at TASK_IDLE when waiting for application core dump (2024-08-02 10:55:04 -0700)

No, this is not my usual part of the kernel, but it does have Oleg
Nesterov's ack.

----------------------------------------------------------------
exit: Sleep at TASK_IDLE when waiting for application core dump

This causes the coredump_task_exit() function to sleep at TASK_IDLE,
thus preventing task-blocked splats in case of large core dumps to
slow devices.

----------------------------------------------------------------
Paul E. McKenney (1):
      exit: Sleep at TASK_IDLE when waiting for application core dump

 kernel/exit.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

.
Date: Sat, 14 Sep 2024 14:18:20 +0200
From: Linus Walleij <linus.walleij@linaro.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>, linux-kernel <linux-kernel@vger.kernel.org>, 
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>, 
	Patrick Rudolph <patrick.rudolph@9elements.com>
Subject: [GIT PULL] late pin control fixes for v6.11

Hi Linus,

here are some late fixes for two pin control drivers that should
ideally go into v6.11.

Please pull it in, details in the signed tag!

Yours,
Linus Walleij

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
tags/pinctrl-v6.11-4

for you to fetch changes up to 71e4001a0455ec2b6218715c81f374f1ab8b1b12:

  pinctrl: pinctrl-cy8c95x0: Fix regcache (2024-09-13 13:14:18 +0200)

----------------------------------------------------------------
Pin control fixes for the v6.11 series:

- One Intel patch that I mistakedly merged into for-next
  despite it belongs in fixes: add Arrow Lake-H/U ACPI
  ID so this Arrow Lake chip probes.

- One fix making the CY895x0 reg cache work, which is
  good because it makes the device work too.

----------------------------------------------------------------
Linus Walleij (1):
      Merge tag 'intel-pinctrl-v6.11-1' of
git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel into fixes

Mika Westerberg (1):
      pinctrl: meteorlake: Add Arrow Lake-H/U ACPI ID

Patrick Rudolph (1):
      pinctrl: pinctrl-cy8c95x0: Fix regcache

 drivers/pinctrl/intel/pinctrl-meteorlake.c |  1 +
 drivers/pinctrl/pinctrl-cy8c95x0.c         | 14 +++++++++-----
 2 files changed, 10 insertions(+), 5 deletions(-)

.
Date: Sat, 14 Sep 2024 18:45:44 +0200
From: Takashi Iwai <tiwai@suse.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com>,
 Linux Sound Mailing List <linux-sound@vger.kernel.org>, Linux Kernel
 Mailing List <linux-kernel@vger.kernel.org>
Subject: [GIT PULL] sound updates for 6.12-rc1 (early PR)

Linus,

please pull sound updates for v6.12-rc1 from:

  git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-6.12-rc1

The topmost commit is 64c0ce555ad2d84f497f5f584ddd31e87ac690a2

----------------------------------------------------------------

sound updates for 6.12-rc1

A fairly big update at this time, both in core and driver sides.

The core received rewrites in PCM buffer allocation handling and
locking optimizations, PCM rate updates followed by lots of cleanups.

In ASoC side, the legacy Intel drivers have been deprecated by AVS
drivers which leaded to the significant amount of code reduction.
SoundWire driver updates and other cleanups contributed more code
reduction, too.

USB-audio driver received a large cleanup of its big quirk table, and
the old snd_print*() API usages in many legacy drivers are replaced
with the standard print API.

Here are some highlights:

Core:
- More optimized locking in ALSA control code
- Rewrites of memalloc helpers for better DMA API usage
- Drop of obsoleted vmalloc PCM buffer helper API
- Continued MIDI2 UMP updates
- Support of a new user-space driven timer instance
- Update for more PCM support rates and cleanups
- Xrun counter report in the proc files

ASoC:
- Continued simplification and cleanup works for ASoC
- Extensive cleanups and refactoring of the Soundwire drivers
- Removal of Intel machine support obsoleted by the AVS driver
- Lots of DT schema conversions
- Machine support for many AMD and Intel x86 platforms
- Support for AMD ACP 7.1, Mediatek MT6367 and MT8365, Realtek RTL1320
  SoundWire and rev C, and Texas Instruments TAS2563

USB-audio:
- Add support of multiple control interfaces
- A large rewrite of quirk table with macros
- Support for RME Digiface USB

HD-audio:
- Cleanup of quirk code for Samsung Galaxy laptops
- Clean up of detection of Cirrus codecs
- C-Media CM9825 HD-audio codec support

Others:
- Rewrites to standard print API in a lot of legacy drivers

----------------------------------------------------------------

Alexandre Mergnat (11):
      ASoC: dt-bindings: mediatek,mt8365-afe: Add audio afe document
      ASoC: dt-bindings: mediatek,mt8365-mt6357: Add audio sound card document
      dt-bindings: mfd: mediatek: Add codec property for MT6357 PMIC
      ASoC: mediatek: mt8365: Add common header
      ASoC: mediatek: mt8365: Add audio clock control support
      ASoC: mediatek: mt8365: Add I2S DAI support
      ASoC: mediatek: mt8365: Add ADDA DAI support
      ASoC: mediatek: mt8365: Add DMIC DAI support
      ASoC: mediatek: mt8365: Add PCM DAI support
      ASoC: mediatek: mt8365: Add the AFE driver support
      ASoC: mediatek: Add MT8365 support

Andrei Simion (1):
      ASoC: dt-bindings: microchip,sama7g5-spdifrx: Add common DAI reference

Andrew Kreimer (1):
      ASoC: tlv320aic31xx: Fix typos

Andy Shevchenko (1):
      ALSA: ump: Use %*ph to print small buffer

Animesh Agarwal (2):
      ASoC: dt-bindings: ti,pcm512x: Convert to dtschema
      ASoC: dt-bindings: fsl,imx-audio-es8328: Convert to dtschema

Arnd Bergmann (2):
      ASoC: mediatek: mt8365: include linux/bitfield.h
      ASoC: mediatek: mt8365: remove unused mt8365_i2s_hd_str

Asahi Lina (1):
      ALSA: usb-audio: Add mixer quirk for RME Digiface USB

Balamurugan C (4):
      ASoC: Intel: soc-acpi: Add entry for sof_es8336 in ARL match table.
      ASoC: Intel: soc-acpi: Add entry for HDMI_In capture support in ARL match table
      ASoC: Intel: sof_rt5682: Add HDMI-In capture with rt5682 support for ARL.
      ASoC: Intel: ARL: Add entry for HDMI-In capture support to non-I2S codec boards.

Baojun Xu (1):
      ASoC: tas2781: Remove unnecessary line feed for tasdevice_codec_remove

Bard Liao (6):
      ASoC: Intel: soc-acpi-intel-ptl-match: add rt711-sdca table
      ASoC: Intel: soc-acpi-intel-ptl-match: Add rt722 support
      ASoC: Intel: sof_sdw: add rt1320 amp support
      ASoC: SOF: Intel: hda: refactoring topology name fixup for HDA mach
      ASoC: Intel: sof_sdw: move ignore_internal_dmic check earlier
      ASoC: Intel: sof_sdw: overwrite mach_params->dmic_num

Biju Das (2):
      ASoC: dt-bindings: renesas,rz-ssi: Document port property
      ASoC: sh: rz-ssi: Add full duplex support

Binbin Zhou (7):
      ASoC: loongson: Use BIT() macro
      ASoC: loongson: Simplify probe() with local dev variable
      ASoC: loongson: Simplify with dev_err_probe()
      ASoC: loongson: Simplify if statment in loongson_card_hw_params()
      ASoC: loongson: Replace if with ternary operator
      ASoC: loongson: Factor out loongson_card_acpi_find_device() function
      ASoC: loongson: Factor out loongson i2s enable clock functions

Brent Lu (10):
      ASoC: SOF: Intel: hda: refactoring topology name fixup for SDW mach
      ASoC: SOF: Intel: hda: support BT link mask in mach_params
      ASoC: Intel: skl_hda_dsp_generic: support BT audio offload
      ASoC: Intel: skl_hda_dsp_generic: remove hdac-hdmi support
      ASoC: Intel: skl_hda_dsp_generic: use sof_hdmi_private to init HDMI
      ASoC: Intel: board_helpers: support HDA link initialization
      ASoC: Intel: skl_hda_dsp_generic: use common module for DAI links
      ASoC: Intel: ehl_rt5660: do not check common_hdmi_codec_drv
      ASoC: Intel: sof_pcm512x: do not check common_hdmi_codec_drv
      ASoC: SOF: Intel: hda: remove common_hdmi_codec_drv

Cezary Rojewski (14):
      ALSA: hda: Move SST device entries to AVS
      ASoC: Intel: Drop skl_machine_pdata usage
      ASoC: Intel: Remove bxt_rt298 board driver
      ASoC: Intel: Remove bxt_da7219_max98357a board driver
      ASoC: Intel: Remove kbl_rt5663_rt5514_max98927 board driver
      ASoC: Intel: Remove kbl_rt5663_max98927 board driver
      ASoC: Intel: Remove kbl_rt5660 board driver
      ASoC: Intel: Remove kbl_da7219_max98927 board driver
      ASoC: Intel: Remove kbl_da7219_max98357a board driver
      ASoC: Intel: Remove skl_rt286 board driver
      ASoC: Intel: Remove skl_nau88l25_ssm4567 board driver
      ASoC: Intel: Remove skl_nau88l25_max98357a board driver
      ASoC: Intel: Remove skylake driver
      ASoC: Intel: avs: Enable by default for all SST configurations

Charles Keepax (3):
      ASoC: Intel: soc-acpi: arl: Add match entries for new cs42l43 laptops
      ASoC: Intel: soc-acpi: adl: Add match entries for new cs42l43 laptops
      ASoC: Intel: soc-acpi: lnl: Add match entries for new cs42l43 laptops

Chen Ni (4):
      ASoC: mediatek: mt8192: remove redundant null pointer check before of_node_put
      ASoC: cs42l42: Convert comma to semicolon
      ASoC: topology-test: Convert comma to semicolon
      ASoC: Intel: skl_hda_dsp_generic: convert comma to semicolon

Christophe JAILLET (4):
      ASoC: sti-sas: Constify snd_soc_component_driver struct
      ASoC: cs43130: Constify snd_soc_component_driver struct
      ASoC: cs43130: Constify struct reg_sequence and reg_sequences
      ASoC: rt1318: Constify struct reg_sequence

Codrin Ciubotariu (5):
      ASoC: atmel: mchp-i2s-mcc: Improve maxburst calculation for better performance
      ASoC: atmel: mchp-i2s-mcc: Remove interface name from stream_name
      ASoC: atmel: mchp-pdmc: Improve maxburst calculation for better performance
      ASoC: atmel: mchp-pdmc: Add snd_soc_dai_driver name
      ASoC: atmel: mchp-pdmc: Retain Non-Runtime Controls

Colin Ian King (2):
      ASoC: codecs: wcd934x: make read-only array minCode_param static const
      ALSA: ali5451: Remove trailing space after \n newline

Cyan Nyan (1):
      ALSA: usb-audio: Add quirk for RME Digiface USB

Dmitry Torokhov (1):
      ASoC: tas5086: use sleeping variants of gpiod API

Edson Juliano Drosdeck (1):
      ALSA: hda/realtek: Enable mic on Vaio VJFH52

Fabio Estevam (7):
      ASoC: fsl_audmix: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS()
      ASoC: fsl_mqs: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS()
      ASoC: fsl_rpmsg: Switch to RUNTIME_PM_OPS()
      ASoC: fsl_spdif: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS()
      ASoC: fsl_ssi: Switch to SYSTEM_SLEEP_PM_OPS
      ASoC: imx-audmux: Switch to SYSTEM_SLEEP_PM_OPS
      ASoC: imx-pcm-rpmsg: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS()

Frank Li (2):
      ASoC: dt-bindings: convert tlv320aic31xx.txt to yaml
      ASoC: dt-bindings: Convert tpa6130a2.txt to yaml

Fred Oh (1):
      ASoC: SOF: Intel: add PTL specific power control register

Geert Uytterhoeven (1):
      ASoC: dt-bindings: dlg,da7213: Convert to json-schema

Gustavo A. R. Silva (1):
      ASoC: SOF: sof-audio: Avoid -Wflex-array-member-not-at-end warnings

He Lugang (1):
      ALSA: rme9652: remove unused parameter in macro

Heiko Stuebner (2):
      ASoC: dt-bindings: realtek,rt5616: document mclk clock
      ASoC: dt-bindings: realtek,rt5616: Document audio graph port

Hongbo Li (3):
      ASoC: dapm: Use IS_ERR_OR_NULL() helper function
      ALSA: pcm: replace simple_strtoul to kstrtoul
      ASoC: adi: Use str_enabled_disabled() helper

Ivan Orlov (4):
      ALSA: aloop: Allow using global timers
      Docs/sound: Add documentation for userspace-driven ALSA timers
      ALSA: timer: Introduce virtual userspace-driven timers
      selftests: ALSA: Cover userspace-driven timers with test

Jens Reidel (1):
      ASoC: qcom: sm8250: enable primary mi2s

Jerome Brunet (16):
      ALSA: snd-usb-caiaq: use snd_pcm_rate_to_rate_bit
      ASoC: amlogic: do not use dpcm_playback/capture flags
      ALSA: pcm: add more sample rate definitions
      ALSA: cmipci: drop SNDRV_PCM_RATE_KNOT
      ALSA: emu10k1: drop SNDRV_PCM_RATE_KNOT
      ALSA: hdsp: drop SNDRV_PCM_RATE_KNOT
      ALSA: hdspm: drop SNDRV_PCM_RATE_KNOT
      ASoC: cs35l36: drop SNDRV_PCM_RATE_KNOT
      ASoC: cs35l41: drop SNDRV_PCM_RATE_KNOT
      ASoC: cs53l30: drop SNDRV_PCM_RATE_KNOT
      ASoC: Intel: avs: drop SNDRV_PCM_RATE_KNOT
      ASoC: qcom: q6asm-dai: drop SNDRV_PCM_RATE_KNOT
      ASoC: sunxi: sun4i-codec: drop SNDRV_PCM_RATE_KNOT
      ASoC: cs35l34: drop useless rate contraint
      ASoC: spdif: extend supported rates to 768kHz
      ALSA: IEC958 definition for consumer status channel update

Jinjie Ruan (1):
      ALSA: core: timer: Use NSEC_PER_SEC macro

Jonathan LoBue (1):
      ALSA: hda/realtek: tas2781: Fix ROG ALLY X audio

Joshua Grisham (2):
      ALSA: hda/realtek: Refactor and simplify Samsung Galaxy Book init
      ALSA: hda/realtek: Add support for Galaxy Book2 Pro (NP950XEE)

Joshua Pius (1):
      ALSA: usb-audio: Add logitech Audio profile quirk

Karol Kosik (1):
      ALSA: usb-audio: Support multiple control interfaces

Krzysztof Kozlowski (16):
      ASoC: codecs: wsa881x: Drop unused version readout
      ASoC: codecs: wsa883x: Handle reading version failure
      ASoC: codecs: wsa883x: Simplify handling variant/version
      ASoC: codecs: wsa884x: Simplify handling variant
      ASoC: dt-bindings: qcom,apq8016-sbc-sndcard: move to separate binding
      ASoC: codecs: lpass-wsa-macro: Do not hard-code dai in VI mixer
      ASoC: codecs: wsa881x: Use designator array initializers for Soundwire ports
      ASoC: codecs: wsa883x: Use designator array initializers for Soundwire ports
      ASoC: codecs: wsa884x: Use designator array initializers for Soundwire ports
      ASoC: codecs: wcd938x: Drop unused defines and enums
      ASoC: codecs: wcd937x: Move max port number defines to enum
      ASoC: codecs: wcd938x: Move max port number defines to enum
      ASoC: codecs: wcd939x: Move max port number defines to enum
      ASoC: dt-bindings: samsung,odroid: drop stale clocks
      ASoC: MAINTAINERS: Drop incorrect tlv320aic31xx.txt path
      ASoC: codecs: wsa884x: Implement temperature reading and hwmon

Kuninori Morimoto (24):
      ASoC: rsnd: remove rsnd_mod_confirm_ssi() under DEBUG
      ASoC: rsnd: use pcm_dmaengine code
      ALSA: pci: pcxhr: use snd_pcm_direction_name()
      ALSA: pci: rme9652: use snd_pcm_direction_name()
      ALSA: trace: use snd_pcm_direction_name()
      ALSA: aloop: use snd_pcm_direction_name()
      ALSA: pcm_timer: use snd_pcm_direction_name()
      ASoC: stm: use snd_pcm_direction_name()
      ASoC: sof: pcm: use snd_pcm_direction_name()
      ASoC: sof: intel: use snd_pcm_direction_name()
      ASoC: fsl: lpc3xxx-i2s: use snd_pcm_direction_name()
      ASoC: tegra: use snd_pcm_direction_name()
      ASoC: soc-pcm: use snd_pcm_direction_name()
      ASoC: soc-dapm: use snd_pcm_direction_name()
      ASoC: remove bespoke trigger support
      ASoC: soc-pcm: remove snd_soc_dpcm_stream_{lock/unlock}_irq()
      ASoC: soc-pcm: remove snd_soc_dpcm_stream_lock_irqsave_nested()
      ASoC: soc-pcm: Indicate warning if dpcm_playback/capture were used for availability limition
      ASoC: remove snd_soc_dai_link_set_capabilities()
      ASoC: Intel: sof_sdw: use playback/capture_only flags
      ASoC: soc-pcm: move snd_soc_dpcm_can_be_xxx() to top
      ASoC: soc-pcm: makes snd_soc_dpcm_can_be_xxx() local function
      ASoC: makes rtd->initialized bit field
      ASoC: dt-bindings: renesas,rsnd: add post-init-providers property

Leo Tsai (1):
      ALSA: hda: Add a new CM9825 standard driver

Linus Walleij (3):
      ASoC: tas2781-i2c: Drop weird GPIO code
      ASoC: tas2781-i2c: Get the right GPIO line
      ASoC: tas*: Drop unused GPIO includes

Liu Jing (1):
      ASoC: mediatek: mt2701-cs42448: Optimize redundant code in mt2701_cs42448_machine_probe

Luca Ceresoli (3):
      ASoC: dapm-graph: remove the "ROOT" cluster
      ASoC: dapm-graph: visualize component On/Off bias level
      ASoC: dapm-graph: show path name for non-static routes

Lukasz Majewski (1):
      ASoC: dt-bindings: Convert mxs-saif.txt to fsl,saif.yaml (imx28 saif)

Ma Ke (2):
      ASoC: rt5682s: Return devm_of_clk_add_hw_provider to transfer the error
      ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error

Maciej Strozek (1):
      ASoC: Intel: sof_sdw: Add quirks from some new Dell laptops

Marek Vasut (1):
      ASoC: tlv320aic32x4: Add multi endpoint support

Mark Brown (7):
      ASoC: mt8365: Open code BIT() to avoid spurious warnings
      ASoC: mt8365: Remove spurious unsigned long casts
      ASoC: mt8365: Remove unused prototype for mt8365_afe_clk_group_48k()
      ASoC: mt8365: Make non-exported functions static
      ASoC: mt8365: Remove unused variables
      ASoC: mt8365: Remove unused DMIC IIR coefficient configuration
      ASoC: mt8365: Allow build coverage

Muhammad Usama Anjum (3):
      ASoC: amd: acp: Return in-case of error
      ASoC: mediatek: mt8365: check validity before usage of i2s_data
      ASoc: mediatek: mt8365: Remove unneeded assignment

Neil Armstrong (2):
      ASoC: dt-bindings: amlogic,axg-sound-card: document clocks property
      ASoC: dt-bindings: amlogic,gx-sound-card: document clocks property

Nicolas Belin (2):
      ASoc: mediatek: mt8365: Add a specific soundcard for EVK
      ASoC: codecs: add MT6357 support

Nikita Shubin (1):
      ASoC: dt-bindings: cirrus,cs4271: Convert to dtschema

Norman Bintang (1):
      ALSA: pcm: Add xrun counter for snd_pcm_substream

Pierre-Louis Bossart (11):
      ASoC: Intel: soc-acpi: add PTL match tables
      ASoC: SOF: Intel: add initial support for PTL
      ASoC: SOF: sof-priv.h: optimize snd_sof_platform_stream_params
      ASoC: SOF: sof-priv.h: optimize snd_sof_mailbox
      ASoC: SOF: sof-priv.h: optimize snd_sof_ipc_msg
      ASoC: SOF: sof-audio.h: optimize snd_sof_pcm_stream_pipeline_list
      ALSA/ASoC/SoundWire: Intel: use single definition for SDW_INTEL_MAX_LINKS
      soundwire: intel: add probe-time check on link id
      soundwire: intel: increase maximum number of links
      ASoC: Intel: sof_sdw: make sof_sdw_quirk static
      ASoC: Intel: boards: always check the result of acpi_dev_get_first_match_dev()

Richard Fitzgerald (2):
      ASoC: cs35l56: Make struct regmap_config const
      ASoC: cs-amp-lib: Add KUnit test case for empty calibration entries

Rob Herring (Arm) (2):
      ASoC: Use of_property_present()
      ASoC: Use of_property_read_bool()

Romain Gantois (1):
      ASoC: tlv320aic31xx: Add support for loading filter coefficients

Shen Lichuan (2):
      ALSA: usb-audio: Use kmemdup_array instead of kmemdup for multiple allocation
      ASoC: SOF: topology: Use kmemdup_array instead of kmemdup for multiple allocation

Shenghao Ding (7):
      ASoC: tas2781: Add TAS2563 into the Header
      ASoC: tas2781: Fix a compiling warning reported by robot kernel test due to adding tas2563_dvc_table
      ASoc: tas2781: Rename dai_driver name to unify the name between TAS2563 and TAS2781
      ASoc: tas2781: Remove unnecessary line feed and space
      ASoC: tas2781: mark const variables tas2563_dvc_table as __maybe_unused
      ASoC: tas2781: replace devm_kzalloc and scnprintf with devm_kstrdup
      ASoC: tas2781: Add Calibration Kcontrols for Chromebook

Shuming Fan (1):
      ASoC: rt1320: Add support for version C

Simon Trimmer (3):
      ASoC: cs35l56: Use regmap_read_bypassed() to wake the device
      ALSA: hda/realtek: Convert existing CS35L56 products to use autodetect fixup function
      ALSA: hda/realtek: Autodetect Cirrus Logic companion amplifier bindings

Srinivas Kandagatla (1):
      ASoC: dt-bindings: qcom,lpass-wsa-macro: correct clocks on SM8250

Stefan Stistrup (1):
      ALSA: usb-audio: Add input gain and master output mixer elements for RME Babyface Pro

Takashi Iwai (98):
      ASoC: Use __counted_by() annotation for snd_soc_pcm_runtime
      ALSA: control: Annotate snd_kcontrol with __counted_by()
      ALSA: ump: Update substream name from assigned FB names
      ALSA: hda: Keep PM disablement for deny-listed instance
      ALSA: hda: Enhance pm_blacklist option
      ALSA: control: Take power_ref lock primarily
      ALSA: control: Fix leftover snd_power_unref()
      ALSA: memalloc: Use DMA API for x86 WC page allocations, too
      ALSA: memalloc: Let IOMMU handle S/G primarily
      ALSA: ump: Handle MIDI 1.0 Function Block in MIDI 2.0 protocol
      ALSA: usb-audio: Add input value sanity checks for standard types
      ALSA: ump: Choose the protocol when protocol caps are changed
      ALSA: usb-audio: Accept multiple protocols in GTBs
      ALSA: usb-audio: Set MIDI1 flag appropriately for GTB MIDI 1.0 entry
      ALSA: usb-audio: Update UMP group attributes for GTB blocks, too
      ALSA: seq: Print MIDI 1.0 specific port in proc output
      ALSA: seq: Fix missing seq port info bit return for MIDI 1.0 block
      ALSA: portman2x4: Use standard print API
      ALSA: mts64: Use standard print API
      ALSA: mpu401: Use standard print API
      ALSA: mpu401_uart: Use standard print API
      ALSA: mtpav: Use standard print API
      ALSA: opl3: Use standard print API
      ALSA: opl4: Use standard print API
      ALSA: serial-u16550: Use standard print API
      ALSA: virmidi: Use standard print API
      ALSA: vx_core: Drop unused dev field
      ALSA: vx_core: Use standard print API
      ALSA: aloop: Use standard print API
      ALSA: dummy: Use standard print API
      ALSA: pcsp: Use standard print API
      ALSA: i2c: cs8427: Use standard print API
      ALSA: i2c: pt2258: Use standard print API
      ALSA: i2c: Drop commented old debug prints
      ALSA: ad1816a: Use standard print API
      ALSA: als100: Use standard print API
      ALSA: azt2320: Use standard print API
      ALSA: cmi8328: Use standard print API
      ALSA: cmi8330: Use standard print API
      ALSA: cs4236: Use standard print API
      ALSA: es1688: Use standard print API
      ALSA: es18xx: Use standard print API
      ALSA: gus: Use standard print API
      ALSA: msnd: Use standard print API
      ALSA: opl3sa2: Use standard print API
      ALSA: opti9xx: Use standard print API
      ALSA: sb: Use standard print API
      ALSA: control_led: Use dev_err()
      ALSA: pcm: oss: Use pr_debug()
      ALSA: sc6000: Use standard print API
      ALSA: sscape: Use standard print API
      ALSA: wavefront: Use standard print API
      ALSA: wss: Use standard print API
      ALSA: riptide: Use standard print API
      ALSA: korg1212: Use standard print API
      ALSA: lx6464es: Cleanup the print API usages
      ALSA: azt3328: Use pr_warn()
      ALSA: emu10k1: Use dev_warn()
      ALSA: trident: Use standard print API
      ALSA: emux: Use standard print API
      ALSA: usx2y: Use standard print API
      ALSA: usb-audio: Use standard print API
      ALSA: intel8x0: Drop unused snd_printd() calls
      ALSA: vxpocket: Use standard print API
      ALSA: pdaudiocf: Use standard print API
      ALSA: ppc: Use standard print API
      ALSA: sh: Use standard print API
      ALSA: sparc: Use standard print API
      ALSA: asihpi: Use standard print API
      ALSA: docs: Drop snd_print*() stuff
      ALSA: core: Drop snd_print stuff and co
      ALSA: asihpi: Fix potential OOB array access
      ALSA: hdsp: Break infinite MIDI input flush loop
      ALSA: usb-audio: Check shutdown at endpoint_set_interface()
      ALSA: vxpocket: Drop no longer existent chip->dev assignment
      ALSA: control: Fix power_ref lock order for compat code, too
      ALSA: vxpocket: Fix a typo at conversion to dev_*()
      ALSA: sparc: Fix a typo at dev_*() conversion
      ALSA: caiaq: Fix unused variable warning
      ALSA: usx2y: Drop no longer used variable
      ALSA: control: Rename ctl_files_rwlock to controls_rwlock
      ALSA: control: Optimize locking for look-up
      ASoC: Drop snd_soc_*_get_kcontrol_locked()
      ALSA: usb-audio: Define macros for quirk table entries
      ALSA: usb-audio: Replace complex quirk lines with macros
      ALSA: seq: Drop superfluous filter argument of get_event_dest_client()
      drm/bridge: dw-hdmi: Move vmalloc PCM buffer management into the driver
      ALSA: pcm: Drop PCM vmalloc buffer helpers
      ALSA: pcm: Fix the previous conversion to kstrtoul()
      ALSA: pcm: Fix yet more compile warning at replacement with kstrtoul()
      ALSA: core: Drop superfluous no_free_ptr() for memdup_user() errors
      ALSA: hda: Allow the default preallocation for x86 again
      ALSA: hda: Use non-SG allocation for the communication buffers
      ALSA: memalloc: Move snd_malloc_ops definition into memalloc.c again
      ALSA: memalloc: Drop Xen PV workaround again
      ALSA: pcm: Fix breakage of PCM rates used for topology
      ALSA: memalloc: Use proper DMA mapping API for x86 WC buffer allocations
      ALSA: memalloc: Use proper DMA mapping API for x86 S/G buffer allocations

Tang Bin (6):
      ASoC: loongson: remove redundant variable assignments
      ASoC: codecs: fix the right check and simplify code
      ASoC: soc-ac97: Fix the incorrect description
      ASoC: loongson: Add the correct judgement return
      ASoC: mediatek: mt7986-afe-pcm: Remove redundant error message
      ASoC: topology: Fix redundant logical jump

Uwe Kleine-König (1):
      ASoC: Switch back to struct platform_driver::remove()

Venkata Prasad Potturu (12):
      ASoC: amd: acp: Refactor TDM slots selction based on acp revision id
      ASoC: amd: acp: Refactor I2S dai driver
      ASoC: amd: acp: Update pcm hardware capabilities for acp6.3 platform
      ASoC: amd: acp: Add I2S TDM support for acp6.3 platform
      ASoC: amd: acp: Update pcm hardware capabilities for acp7.0 platform
      ASoC: amd: acp: Add I2S master clock generation support for acp7.0 platform
      ASoC: amd: acp: Set i2s clock for acp7.0 platform
      ASoC: amd: acp: Modify max channels and sample rate support for acp70 dai driver
      ASoC: amd: acp: Add I2S TDM support for acp7.0 platform
      ASoC: amd: acp: Add pte configuration for ACP7.0 platform
      ASoC: amd: acp: Add i2s master clock generation support for acp7.1 platform
      ASoC: amd: acp: Add I2S TDM support for acp7.1 platform

Vijendar Mukunda (47):
      ASoC: intel: rename codec_info and dai_info structures names
      ASoC: intel: rename soundwire common header macros
      ASoC: intel: rename soundwire machine driver soc ops
      ASoC: intel: rename soundwire codec helper functions
      ASoC: intel: rename maxim codec macros
      ASoC: intel: rename ignore_pch_dmic variable name
      ASoC: intel/sdw-utils: move soundwire machine driver soc ops
      ASoC: intel: move soundwire machine driver common structures
      ASoC: intel/sdw_utils: move soundwire machine driver helper functions
      ASoC: intel/sdw_utils: move dmic codec helper function
      ASoC: intel/sdw_utils: move rtk dmic helper functions
      ASoC: intel/sdw_utils: move rt712 sdca helper functions
      ASoC: intel/sdw_utils: move rt722 sdca helper functions
      ASoC: intel: split soundwire machine driver private data
      ASoC: intel/sdw_utils: move rt5682 codec helper function
      ASoC: intel/sdw_utils: move rtk jack common helper functions
      ASoC: intel/sdw_utils: move rt700 and rt711 codec helper functions
      ASoC: intel/sdw_utils: move rtk amp codec helper functions
      ASoC: intel/sdw_utils: move cirrus soundwire codec helper functions
      ASoC: intel/sdw_utils: move maxim codec helper functions
      ASoC: intel/sdw_utils: move dai id common macros
      ASoC: intel/sdw_utils: move soundwire dai type macros
      ASoC: intel/sdw_utils: move soundwire codec_info_list structure
      ASoC: intel/sdw_utils: move machine driver dai link helper functions
      ASoC: sdw_utils: refactor sof_sdw_card_late_probe function
      ASoC: intel/sdw_utils: refactor init_dai_link() and init_simple_dai_link()
      ASoC: soc-acpi: add pci revision id field in mach params structure
      ASoC: amd: acp: add soundwire machines for acp6.3 based platform
      ASoC: SOF: amd: add alternate machines for acp6.3 based platform
      ASoC: SOF: amd: update mach params subsystem_rev variable
      ASoC: amd/sdw_utils: add sof based soundwire generic machine driver
      ASoC: amd: acp: remove MODULE_ALIAS for SoundWire machine driver
      ASoC: amd: acp: add ZSC control register programming sequence
      ASoC: SOF: amd: update conditional check for cache register update
      ASoC: amd: acp: Convert comma to semicolon
      ASoC: amd: acp: add legacy driver support for ACP7.1 based platforms
      ASoC: amd: acp: replace desc->rev check with acp pci revision id
      ASoC: SOF: amd: remove unused variable from sof_amd_acp_desc structure
      ASoC: amd: Add acpi machine id for acp7.0 version based platform
      ASoC: SOF: amd: add support for acp7.0 based platform
      ASoC: amd: acp: remove MODULE_ALIAS for legacy machine driver
      ASoC: amd: acp: remove MODULE_ALIAS for sof based generic machine driver
      ASoC: intel: sof_sdw: rename soundwire endpoint and dailink structures
      ASoC: intel: sof_sdw: rename soundwire parsing helper functions
      ASoC: sdw_util/intel: move soundwire endpoint and dai link structures
      ASoC: sdw_utils/intel: move soundwire endpoint parsing helper functions
      ASoC: amd: acp: refactor SoundWire machine driver code

Wu Bo (1):
      ASoC: dwc: change to use devm_clk_get_enabled() helpers

Yue Haibing (5):
      ASoC: fsl: lpc3xxx-i2s: Remove set but not used variable 'savedbitclkrate'
      ASoC: fsl: lpc3xxx: Make some symbols static
      ALSA: oss: Remove unused declarations
      ALSA: seq: Remove unused declarations
      ALSA: trident: Remove unused declarations

Yuntao Liu (1):
      ALSA: hda: cs35l41: fix module autoloading

Zhang Yi (2):
      ASoC: codecs: ES8326: suspend issue
      ASoC: codecs: ES8326: input issue after init

Zhang Zekun (4):
      ALSA: aoa: Use helper function for_each_child_of_node()
      ASoC: audio-graph-card: Use for_each_child_of_node_scoped() to simplify code
      ASoC: audio-graph-card2: Use helper function of_get_child_count()
      ASoC: meson: Remove unused declartion in header file

tangbin (3):
      ASoC: loongson: Remove useless variable definitions
      ASoC: loongson: remove unnecessary assignment in i2s_resume()
      ASoC: loongson: fix error release

ying zuxin (1):
      ASoC: codecs: Use devm_clk_get_enabled() helpers

---
 .../devicetree/bindings/mfd/mediatek,mt6357.yaml   |   21 +
 .../bindings/sound/amlogic,axg-sound-card.yaml     |    7 +
 .../bindings/sound/amlogic,gx-sound-card.yaml      |    7 +
 .../devicetree/bindings/sound/cirrus,cs4271.yaml   |  101 +
 Documentation/devicetree/bindings/sound/cs4271.txt |   57 -
 Documentation/devicetree/bindings/sound/da7213.txt |   45 -
 .../devicetree/bindings/sound/dlg,da7213.yaml      |  103 +
 .../bindings/sound/fsl,imx-audio-es8328.yaml       |  111 +
 .../devicetree/bindings/sound/fsl,saif.yaml        |   83 +
 .../devicetree/bindings/sound/imx-audio-es8328.txt |   60 -
 .../bindings/sound/mediatek,mt8365-afe.yaml        |  130 +
 .../bindings/sound/mediatek,mt8365-mt6357.yaml     |  107 +
 .../bindings/sound/microchip,sama7g5-spdifrx.yaml  |    5 +-
 .../devicetree/bindings/sound/mxs-saif.txt         |   41 -
 .../devicetree/bindings/sound/pcm512x.txt          |   53 -
 .../bindings/sound/qcom,apq8016-sbc-sndcard.yaml   |  205 ++
 .../bindings/sound/qcom,lpass-wsa-macro.yaml       |   22 +-
 .../devicetree/bindings/sound/qcom,sm8250.yaml     |  137 -
 .../devicetree/bindings/sound/realtek,rt5616.yaml  |   12 +
 .../devicetree/bindings/sound/renesas,rsnd.yaml    |    6 +
 .../devicetree/bindings/sound/renesas,rz-ssi.yaml  |    4 +
 .../devicetree/bindings/sound/samsung,odroid.yaml  |    5 -
 .../devicetree/bindings/sound/ti,pcm512x.yaml      |  101 +
 .../bindings/sound/ti,tlv320dac3100.yaml           |  127 +
 .../devicetree/bindings/sound/ti,tpa6130a2.yaml    |   55 +
 .../devicetree/bindings/sound/tlv320aic31xx.txt    |   77 -
 .../devicetree/bindings/sound/tpa6130a2.txt        |   27 -
 Documentation/sound/alsa-configuration.rst         |    3 +
 Documentation/sound/hd-audio/notes.rst             |    6 -
 Documentation/sound/index.rst                      |    1 +
 .../sound/kernel-api/writing-an-alsa-driver.rst    |   25 -
 Documentation/sound/utimers.rst                    |  126 +
 MAINTAINERS                                        |    4 +-
 .../gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c    |   30 +-
 drivers/soundwire/intel.h                          |    7 +
 drivers/soundwire/intel_ace2x.c                    |   20 +
 drivers/soundwire/intel_auxdevice.c                |   14 +
 include/linux/soundwire/sdw_intel.h                |    8 +
 include/sound/aci.h                                |    1 +
 include/sound/asoundef.h                           |    6 +-
 include/sound/control.h                            |   27 +-
 include/sound/core.h                               |   69 +-
 include/sound/cs35l56.h                            |    6 +-
 include/sound/es1688.h                             |    1 +
 include/sound/memalloc.h                           |    7 +-
 include/sound/pcm.h                                |   49 +-
 include/sound/seq_kernel.h                         |    4 -
 include/sound/snd_wavefront.h                      |    4 -
 include/sound/soc-acpi-intel-match.h               |    2 +
 include/sound/soc-acpi.h                           |    6 +-
 include/sound/soc-card.h                           |    2 -
 include/sound/soc-component.h                      |    3 -
 include/sound/soc-dai.h                            |    6 +-
 include/sound/soc-dpcm.h                           |   19 -
 include/sound/soc.h                                |    7 +-
 include/sound/soc_sdw_utils.h                      |  247 ++
 include/sound/soundfont.h                          |    6 +-
 include/sound/tas2563-tlv.h                        |  279 ++
 include/sound/tas2781-tlv.h                        |  260 --
 include/sound/tas2781.h                            |   71 +-
 include/sound/ump.h                                |   12 +
 include/sound/vx_core.h                            |    1 -
 include/trace/events/asoc.h                        |    3 +-
 include/uapi/sound/asequencer.h                    |    2 +
 include/uapi/sound/asound.h                        |   17 +-
 sound/aoa/soundbus/i2sbus/core.c                   |    4 +-
 sound/core/Kconfig                                 |   19 +-
 sound/core/compress_offload.c                      |    2 +-
 sound/core/control.c                               |  212 +-
 sound/core/control_compat.c                        |   47 +-
 sound/core/control_led.c                           |    4 +-
 sound/core/init.c                                  |    2 +-
 sound/core/memalloc.c                              |  214 +-
 sound/core/memalloc_local.h                        |   16 -
 sound/core/misc.c                                  |   71 -
 sound/core/oss/mixer_oss.c                         |   10 +-
 sound/core/oss/pcm_plugin.h                        |    5 +-
 sound/core/pcm.c                                   |    6 +
 sound/core/pcm_lib.c                               |    3 +
 sound/core/pcm_memory.c                            |   68 +-
 sound/core/pcm_misc.c                              |   18 +-
 sound/core/pcm_native.c                            |   18 +-
 sound/core/pcm_timer.c                             |    3 +-
 sound/core/seq/oss/seq_oss_device.h                |    4 -
 sound/core/seq/seq_clientmgr.c                     |   26 +-
 sound/core/seq/seq_ports.c                         |    5 +
 sound/core/seq/seq_ports.h                         |    2 +
 sound/core/seq/seq_queue.h                         |    1 -
 sound/core/seq/seq_timer.h                         |    2 -
 sound/core/seq/seq_ump_client.c                    |   79 +-
 sound/core/seq/seq_ump_convert.c                   |   11 +-
 sound/core/timer.c                                 |  229 +-
 sound/core/ump.c                                   |  120 +-
 sound/drivers/aloop.c                              |    7 +-
 sound/drivers/dummy.c                              |    5 +-
 sound/drivers/mpu401/mpu401.c                      |   16 +-
 sound/drivers/mpu401/mpu401_uart.c                 |   31 +-
 sound/drivers/mtpav.c                              |   14 +-
 sound/drivers/mts64.c                              |   18 +-
 sound/drivers/opl3/opl3_lib.c                      |   18 +-
 sound/drivers/opl3/opl3_midi.c                     |   95 +-
 sound/drivers/opl3/opl3_oss.c                      |   12 +-
 sound/drivers/opl3/opl3_synth.c                    |    4 +-
 sound/drivers/opl4/opl4_lib.c                      |    8 +-
 sound/drivers/opl4/yrw801.c                        |    2 +-
 sound/drivers/pcsp/pcsp.c                          |   21 +-
 sound/drivers/pcsp/pcsp_lib.c                      |   38 +-
 sound/drivers/pcsp/pcsp_mixer.c                    |    2 +-
 sound/drivers/portman2x4.c                         |   19 +-
 sound/drivers/serial-u16550.c                      |   41 +-
 sound/drivers/virmidi.c                            |    8 +-
 sound/drivers/vx/vx_core.c                         |   64 +-
 sound/drivers/vx/vx_hwdep.c                        |    4 +-
 sound/drivers/vx/vx_pcm.c                          |   23 +-
 sound/drivers/vx/vx_uer.c                          |    3 +-
 sound/hda/Kconfig                                  |    5 +-
 sound/hda/intel-dsp-config.c                       |  111 +-
 sound/hda/intel-sdw-acpi.c                         |    5 +-
 sound/i2c/cs8427.c                                 |   37 +-
 sound/i2c/other/ak4113.c                           |    2 -
 sound/i2c/other/ak4114.c                           |   12 -
 sound/i2c/other/ak4117.c                           |   13 -
 sound/i2c/other/ak4xxx-adda.c                      |    2 -
 sound/i2c/other/pt2258.c                           |    6 +-
 sound/i2c/tea6330t.c                               |    3 -
 sound/isa/ad1816a/ad1816a.c                        |   16 +-
 sound/isa/ad1816a/ad1816a_lib.c                    |   16 +-
 sound/isa/als100.c                                 |   16 +-
 sound/isa/azt2320.c                                |   14 +-
 sound/isa/cmi8328.c                                |   42 +-
 sound/isa/cmi8330.c                                |   36 +-
 sound/isa/cs423x/cs4236.c                          |   31 +-
 sound/isa/cs423x/cs4236_lib.c                      |   56 +-
 sound/isa/es1688/es1688.c                          |    2 +-
 sound/isa/es1688/es1688_lib.c                      |   55 +-
 sound/isa/es18xx.c                                 |   87 +-
 sound/isa/gus/gus_dma.c                            |   37 +-
 sound/isa/gus/gus_io.c                             |  215 +-
 sound/isa/gus/gus_irq.c                            |    7 +-
 sound/isa/gus/gus_main.c                           |   29 +-
 sound/isa/gus/gus_mem.c                            |    2 +-
 sound/isa/gus/gus_pcm.c                            |   33 +-
 sound/isa/gus/gus_reset.c                          |    8 +-
 sound/isa/gus/gus_uart.c                           |   21 +-
 sound/isa/gus/gus_volume.c                         |    7 +-
 sound/isa/gus/gusclassic.c                         |    4 +-
 sound/isa/gus/gusextreme.c                         |    4 +-
 sound/isa/gus/gusmax.c                             |   16 +-
 sound/isa/gus/interwave.c                          |   61 +-
 sound/isa/msnd/msnd.c                              |   46 +-
 sound/isa/msnd/msnd_midi.c                         |    4 -
 sound/isa/msnd/msnd_pinnacle.c                     |  184 +-
 sound/isa/opl3sa2.c                                |   46 +-
 sound/isa/opti9xx/miro.c                           |  163 +-
 sound/isa/opti9xx/opti92x-ad1848.c                 |   62 +-
 sound/isa/sb/emu8000.c                             |   11 +-
 sound/isa/sb/emu8000_patch.c                       |    1 -
 sound/isa/sb/emu8000_synth.c                       |    2 +-
 sound/isa/sb/jazz16.c                              |   49 +-
 sound/isa/sb/sb16.c                                |   42 +-
 sound/isa/sb/sb16_csp.c                            |   38 +-
 sound/isa/sb/sb16_main.c                           |   13 +-
 sound/isa/sb/sb8.c                                 |   12 +-
 sound/isa/sb/sb_common.c                           |   27 +-
 sound/isa/sb/sb_mixer.c                            |    4 +-
 sound/isa/sc6000.c                                 |  177 +-
 sound/isa/sscape.c                                 |   96 +-
 sound/isa/wavefront/wavefront.c                    |   61 +-
 sound/isa/wavefront/wavefront_fx.c                 |   36 +-
 sound/isa/wavefront/wavefront_midi.c               |   15 +-
 sound/isa/wavefront/wavefront_synth.c              |  196 +-
 sound/isa/wss/wss_lib.c                            |  178 +-
 sound/pci/ali5451/ali5451.c                        |    2 +-
 sound/pci/asihpi/asihpi.c                          |  101 +-
 sound/pci/asihpi/hpimsgx.c                         |    2 +-
 sound/pci/asihpi/hpioctl.c                         |    2 +-
 sound/pci/azt3328.c                                |    2 +-
 sound/pci/cmipci.c                                 |   32 +-
 sound/pci/emu10k1/emu10k1_patch.c                  |    5 +-
 sound/pci/emu10k1/emupcm.c                         |   31 +-
 sound/pci/hda/cs35l41_hda_spi.c                    |    1 +
 sound/pci/hda/hda_component.c                      |   19 +-
 sound/pci/hda/hda_component.h                      |    2 +-
 sound/pci/hda/hda_intel.c                          |   21 +-
 sound/pci/hda/hda_intel.h                          |    1 +
 sound/pci/hda/patch_cmedia.c                       |  269 ++
 sound/pci/hda/patch_realtek.c                      |  375 +-
 sound/pci/hda/samsung_helper.c                     |  310 --
 sound/pci/hda/tas2781_hda_i2c.c                    |    2 +-
 sound/pci/intel8x0.c                               |    3 -
 sound/pci/intel8x0m.c                              |    3 -
 sound/pci/korg1212/korg1212.c                      |   30 +-
 sound/pci/lx6464es/lx_core.c                       |    8 +-
 sound/pci/lx6464es/lx_core.h                       |    3 -
 sound/pci/pcxhr/pcxhr_mix22.c                      |    2 +-
 sound/pci/riptide/riptide.c                        |  193 +-
 sound/pci/rme9652/hdsp.c                           |   24 +-
 sound/pci/rme9652/hdspm.c                          |   36 +-
 sound/pci/trident/trident.h                        |    5 -
 sound/pci/trident/trident_memory.c                 |   10 +-
 sound/pcmcia/pdaudiocf/pdaudiocf.c                 |   21 +-
 sound/pcmcia/pdaudiocf/pdaudiocf_core.c            |   36 +-
 sound/pcmcia/pdaudiocf/pdaudiocf_irq.c             |    3 +-
 sound/pcmcia/vx/vxp_ops.c                          |   10 +-
 sound/pcmcia/vx/vxpocket.c                         |   27 +-
 sound/ppc/awacs.c                                  |    4 +-
 sound/ppc/daca.c                                   |    2 +-
 sound/ppc/keywest.c                                |    5 +-
 sound/ppc/pmac.c                                   |   52 +-
 sound/ppc/powermac.c                               |    2 +-
 sound/ppc/tumbler.c                                |   21 +-
 sound/sh/aica.c                                    |    7 +-
 sound/sh/sh_dac_audio.c                            |    8 +-
 sound/soc/Kconfig                                  |    2 +
 sound/soc/Makefile                                 |    1 +
 sound/soc/adi/axi-i2s.c                            |    6 +-
 sound/soc/adi/axi-spdif.c                          |    2 +-
 sound/soc/amd/acp-config.c                         |   12 +
 sound/soc/amd/acp-pcm-dma.c                        |    2 +-
 sound/soc/amd/acp/Kconfig                          |   22 +
 sound/soc/amd/acp/Makefile                         |    4 +
 sound/soc/amd/acp/acp-i2s.c                        |  182 +-
 sound/soc/amd/acp/acp-legacy-common.c              |   40 +-
 sound/soc/amd/acp/acp-legacy-mach.c                |    7 -
 sound/soc/amd/acp/acp-mach-common.c                |    2 +-
 sound/soc/amd/acp/acp-mach.h                       |    1 +
 sound/soc/amd/acp/acp-pci.c                        |    4 +
 sound/soc/amd/acp/acp-pdm.c                        |    7 +-
 sound/soc/amd/acp/acp-platform.c                   |  117 +-
 sound/soc/amd/acp/acp-rembrandt.c                  |    2 +-
 sound/soc/amd/acp/acp-renoir.c                     |    2 +-
 sound/soc/amd/acp/acp-sdw-sof-mach.c               |  509 +++
 sound/soc/amd/acp/acp-sof-mach.c                   |    7 -
 sound/soc/amd/acp/acp63.c                          |    2 +-
 sound/soc/amd/acp/acp70.c                          |   87 +-
 sound/soc/amd/acp/amd-acp63-acpi-match.c           |   90 +
 sound/soc/amd/acp/amd.h                            |   27 +-
 sound/soc/amd/acp/chip_offset_byte.h               |   84 +-
 sound/soc/amd/acp/soc_amd_sdw_common.h             |   44 +
 sound/soc/amd/mach-config.h                        |    2 +
 sound/soc/amd/ps/ps-pdm-dma.c                      |    2 +-
 sound/soc/amd/ps/ps-sdw-dma.c                      |    2 +-
 sound/soc/amd/raven/acp3x-pcm-dma.c                |    2 +-
 sound/soc/amd/renoir/acp3x-pdm-dma.c               |    2 +-
 sound/soc/amd/vangogh/acp5x-pcm-dma.c              |    2 +-
 sound/soc/amd/yc/acp6x-pdm-dma.c                   |    2 +-
 sound/soc/apple/mca.c                              |    2 +-
 sound/soc/atmel/atmel-i2s.c                        |    2 +-
 sound/soc/atmel/atmel_wm8904.c                     |    2 +-
 sound/soc/atmel/mchp-i2s-mcc.c                     |   44 +-
 sound/soc/atmel/mchp-pdmc.c                        |   99 +-
 sound/soc/atmel/mchp-spdifrx.c                     |    2 +-
 sound/soc/atmel/mchp-spdiftx.c                     |    2 +-
 sound/soc/atmel/sam9g20_wm8731.c                   |    2 +-
 sound/soc/atmel/sam9x5_wm8731.c                    |    2 +-
 sound/soc/atmel/tse850-pcm5142.c                   |    2 +-
 sound/soc/au1x/ac97c.c                             |    2 +-
 sound/soc/au1x/i2sc.c                              |    2 +-
 sound/soc/au1x/psc-ac97.c                          |    2 +-
 sound/soc/au1x/psc-i2s.c                           |    2 +-
 sound/soc/bcm/bcm63xx-i2s-whistler.c               |    2 +-
 sound/soc/bcm/cygnus-ssp.c                         |    2 +-
 sound/soc/cirrus/edb93xx.c                         |    2 +-
 sound/soc/cirrus/ep93xx-i2s.c                      |    2 +-
 sound/soc/codecs/Kconfig                           |    7 +
 sound/soc/codecs/Makefile                          |    2 +
 sound/soc/codecs/ak4613.c                          |    4 +-
 sound/soc/codecs/cs-amp-lib-test.c                 |   44 +
 sound/soc/codecs/cs35l34.c                         |   21 -
 sound/soc/codecs/cs35l36.c                         |   34 +-
 sound/soc/codecs/cs35l41.c                         |   34 +-
 sound/soc/codecs/cs35l45.c                         |    2 +-
 sound/soc/codecs/cs35l56-shared.c                  |   25 +-
 sound/soc/codecs/cs42l42-sdw.c                     |   12 +-
 sound/soc/codecs/cs42l43.c                         |    2 +-
 sound/soc/codecs/cs43130.c                         |  113 +-
 sound/soc/codecs/cs47l15.c                         |    2 +-
 sound/soc/codecs/cs47l24.c                         |    2 +-
 sound/soc/codecs/cs47l35.c                         |    2 +-
 sound/soc/codecs/cs47l85.c                         |    2 +-
 sound/soc/codecs/cs47l90.c                         |    2 +-
 sound/soc/codecs/cs47l92.c                         |    2 +-
 sound/soc/codecs/cs53l30.c                         |   24 +-
 sound/soc/codecs/es8326.c                          |    6 +-
 sound/soc/codecs/inno_rk3036.c                     |    2 +-
 sound/soc/codecs/lpass-rx-macro.c                  |    2 +-
 sound/soc/codecs/lpass-tx-macro.c                  |    2 +-
 sound/soc/codecs/lpass-va-macro.c                  |    2 +-
 sound/soc/codecs/lpass-wsa-macro.c                 |   27 +-
 sound/soc/codecs/msm8916-wcd-digital.c             |    2 +-
 sound/soc/codecs/mt6357.c                          | 1855 ++++++++++
 sound/soc/codecs/mt6357.h                          |  660 ++++
 sound/soc/codecs/peb2466.c                         |   14 +-
 sound/soc/codecs/rk817_codec.c                     |    2 +-
 sound/soc/codecs/rt1318.c                          |    3 +-
 sound/soc/codecs/rt1320-sdw.c                      | 2147 +++++++++++-
 sound/soc/codecs/rt1320-sdw.h                      |    3 +
 sound/soc/codecs/rt5682.c                          |    4 +-
 sound/soc/codecs/rt5682s.c                         |    4 +-
 sound/soc/codecs/spdif_receiver.c                  |    3 +-
 sound/soc/codecs/spdif_transmitter.c               |    3 +-
 sound/soc/codecs/sti-sas.c                         |   21 +-
 sound/soc/codecs/tas2552.c                         |    1 -
 sound/soc/codecs/tas2764.c                         |    1 -
 sound/soc/codecs/tas2770.c                         |    1 -
 sound/soc/codecs/tas2780.c                         |    1 -
 sound/soc/codecs/tas2781-comlib.c                  |   35 +-
 sound/soc/codecs/tas2781-fmwlib.c                  |   61 +-
 sound/soc/codecs/tas2781-i2c.c                     |  953 +++++-
 sound/soc/codecs/tas5086.c                         |    9 +-
 sound/soc/codecs/tlv320aic31xx.c                   |  102 +-
 sound/soc/codecs/tlv320aic32x4.c                   |    9 +
 sound/soc/codecs/wcd934x.c                         |    4 +-
 sound/soc/codecs/wcd937x.c                         |    2 +-
 sound/soc/codecs/wcd937x.h                         |   34 +-
 sound/soc/codecs/wcd938x.c                         |   20 +-
 sound/soc/codecs/wcd938x.h                         |    4 +-
 sound/soc/codecs/wcd939x.c                         |    2 +-
 sound/soc/codecs/wcd939x.h                         |    6 +-
 sound/soc/codecs/wm5102.c                          |    2 +-
 sound/soc/codecs/wm5110.c                          |    2 +-
 sound/soc/codecs/wm8994.c                          |    2 +-
 sound/soc/codecs/wm8997.c                          |    2 +-
 sound/soc/codecs/wm8998.c                          |    2 +-
 sound/soc/codecs/wsa881x.c                         |   44 +-
 sound/soc/codecs/wsa883x.c                         |   75 +-
 sound/soc/codecs/wsa884x.c                         |  240 +-
 sound/soc/dwc/dwc-i2s.c                            |   18 +-
 sound/soc/fsl/fsl_asrc.c                           |    2 +-
 sound/soc/fsl/fsl_aud2htx.c                        |    2 +-
 sound/soc/fsl/fsl_audmix.c                         |   14 +-
 sound/soc/fsl/fsl_dma.c                            |    2 +-
 sound/soc/fsl/fsl_easrc.c                          |    2 +-
 sound/soc/fsl/fsl_esai.c                           |    2 +-
 sound/soc/fsl/fsl_micfil.c                         |    2 +-
 sound/soc/fsl/fsl_mqs.c                            |   13 +-
 sound/soc/fsl/fsl_rpmsg.c                          |   11 +-
 sound/soc/fsl/fsl_sai.c                            |    2 +-
 sound/soc/fsl/fsl_spdif.c                          |   13 +-
 sound/soc/fsl/fsl_ssi.c                            |    8 +-
 sound/soc/fsl/fsl_xcvr.c                           |    4 +-
 sound/soc/fsl/imx-audmux.c                         |    8 +-
 sound/soc/fsl/imx-card.c                           |    3 -
 sound/soc/fsl/imx-pcm-rpmsg.c                      |   16 +-
 sound/soc/fsl/imx-sgtl5000.c                       |    2 +-
 sound/soc/fsl/lpc3xxx-i2s.c                        |   11 +-
 sound/soc/fsl/lpc3xxx-pcm.c                        |    2 +-
 sound/soc/fsl/mpc5200_psc_ac97.c                   |    2 +-
 sound/soc/fsl/mpc5200_psc_i2s.c                    |    4 +-
 sound/soc/fsl/p1022_ds.c                           |    2 +-
 sound/soc/fsl/p1022_rdk.c                          |    2 +-
 sound/soc/fsl/pcm030-audio-fabric.c                |    2 +-
 sound/soc/generic/audio-graph-card.c               |   16 +-
 .../soc/generic/audio-graph-card2-custom-sample.c  |    2 +-
 sound/soc/generic/audio-graph-card2.c              |   15 +-
 sound/soc/generic/simple-card.c                    |    4 +-
 sound/soc/generic/test-component.c                 |   11 +-
 sound/soc/img/img-i2s-in.c                         |    2 +-
 sound/soc/img/img-i2s-out.c                        |    2 +-
 sound/soc/img/img-parallel-out.c                   |    2 +-
 sound/soc/img/img-spdif-in.c                       |    2 +-
 sound/soc/img/img-spdif-out.c                      |    2 +-
 sound/soc/img/pistachio-internal-dac.c             |    2 +-
 sound/soc/intel/Kconfig                            |  120 -
 sound/soc/intel/Makefile                           |    1 -
 sound/soc/intel/atom/sst-mfld-platform-pcm.c       |    2 +-
 sound/soc/intel/atom/sst/sst_acpi.c                |    2 +-
 sound/soc/intel/avs/core.c                         |    8 +-
 sound/soc/intel/avs/pcm.c                          |   22 +-
 sound/soc/intel/boards/Kconfig                     |  156 +-
 sound/soc/intel/boards/Makefile                    |   31 +-
 sound/soc/intel/boards/bxt_da7219_max98357a.c      |  720 ----
 sound/soc/intel/boards/bxt_rt298.c                 |  670 ----
 sound/soc/intel/boards/bytcht_cx2072x.c            |    4 +
 sound/soc/intel/boards/bytcht_da7213.c             |    4 +
 sound/soc/intel/boards/bytcht_es8316.c             |    4 +-
 sound/soc/intel/boards/bytcr_rt5640.c              |    4 +-
 sound/soc/intel/boards/bytcr_rt5651.c              |    4 +-
 sound/soc/intel/boards/bytcr_wm5102.c              |    2 +-
 sound/soc/intel/boards/cht_bsw_max98090_ti.c       |    2 +-
 sound/soc/intel/boards/cht_bsw_rt5645.c            |    4 +
 sound/soc/intel/boards/cht_bsw_rt5672.c            |    4 +
 sound/soc/intel/boards/ehl_rt5660.c                |    3 +-
 sound/soc/intel/boards/kbl_da7219_max98357a.c      |  688 ----
 sound/soc/intel/boards/kbl_da7219_max98927.c       | 1175 -------
 sound/soc/intel/boards/kbl_rt5660.c                |  567 ---
 sound/soc/intel/boards/kbl_rt5663_max98927.c       | 1073 ------
 .../soc/intel/boards/kbl_rt5663_rt5514_max98927.c  |  869 -----
 sound/soc/intel/boards/skl_hda_dsp_common.c        |  168 -
 sound/soc/intel/boards/skl_hda_dsp_common.h        |   67 -
 sound/soc/intel/boards/skl_hda_dsp_generic.c       |  242 +-
 sound/soc/intel/boards/skl_nau88l25_max98357a.c    |  704 ----
 sound/soc/intel/boards/skl_nau88l25_ssm4567.c      |  751 ----
 sound/soc/intel/boards/skl_rt286.c                 |  568 ---
 sound/soc/intel/boards/sof_board_helpers.c         |  152 +
 sound/soc/intel/boards/sof_board_helpers.h         |    3 +
 sound/soc/intel/boards/sof_es8336.c                |   14 +-
 sound/soc/intel/boards/sof_pcm512x.c               |    5 +-
 sound/soc/intel/boards/sof_rt5682.c                |    7 +
 sound/soc/intel/boards/sof_sdw.c                   | 1408 +-------
 sound/soc/intel/boards/sof_sdw_common.h            |  172 +-
 sound/soc/intel/boards/sof_sdw_hdmi.c              |   16 +-
 sound/soc/intel/boards/sof_ssp_amp.c               |    6 +
 sound/soc/intel/boards/sof_wm8804.c                |    6 +-
 sound/soc/intel/catpt/device.c                     |    2 +-
 sound/soc/intel/common/Makefile                    |    1 +
 sound/soc/intel/common/soc-acpi-intel-adl-match.c  |  105 +
 sound/soc/intel/common/soc-acpi-intel-arl-match.c  |  263 ++
 sound/soc/intel/common/soc-acpi-intel-cnl-match.c  |    6 -
 sound/soc/intel/common/soc-acpi-intel-ehl-match.c  |    1 -
 sound/soc/intel/common/soc-acpi-intel-hda-match.c  |   18 +-
 sound/soc/intel/common/soc-acpi-intel-icl-match.c  |    6 -
 sound/soc/intel/common/soc-acpi-intel-kbl-match.c  |   11 -
 sound/soc/intel/common/soc-acpi-intel-lnl-match.c  |  104 +
 sound/soc/intel/common/soc-acpi-intel-ptl-match.c  |  145 +
 sound/soc/intel/common/soc-acpi-intel-skl-match.c  |    5 -
 sound/soc/intel/skylake/Makefile                   |   15 -
 sound/soc/intel/skylake/bxt-sst.c                  |  629 ----
 sound/soc/intel/skylake/cnl-sst-dsp.c              |  266 --
 sound/soc/intel/skylake/cnl-sst-dsp.h              |  103 -
 sound/soc/intel/skylake/cnl-sst.c                  |  508 ---
 sound/soc/intel/skylake/skl-debug.c                |  248 --
 sound/soc/intel/skylake/skl-i2s.h                  |   87 -
 sound/soc/intel/skylake/skl-messages.c             | 1419 --------
 sound/soc/intel/skylake/skl-nhlt.c                 |  269 --
 sound/soc/intel/skylake/skl-pcm.c                  | 1507 --------
 sound/soc/intel/skylake/skl-ssp-clk.c              |  428 ---
 sound/soc/intel/skylake/skl-ssp-clk.h              |  108 -
 sound/soc/intel/skylake/skl-sst-cldma.c            |  373 --
 sound/soc/intel/skylake/skl-sst-cldma.h            |  243 --
 sound/soc/intel/skylake/skl-sst-dsp.c              |  462 ---
 sound/soc/intel/skylake/skl-sst-dsp.h              |  256 --
 sound/soc/intel/skylake/skl-sst-ipc.c              | 1071 ------
 sound/soc/intel/skylake/skl-sst-ipc.h              |  169 -
 sound/soc/intel/skylake/skl-sst-utils.c            |  425 ---
 sound/soc/intel/skylake/skl-sst.c                  |  599 ----
 sound/soc/intel/skylake/skl-topology.c             | 3605 --------------------
 sound/soc/intel/skylake/skl-topology.h             |  524 ---
 sound/soc/intel/skylake/skl.c                      | 1177 -------
 sound/soc/intel/skylake/skl.h                      |  207 --
 sound/soc/kirkwood/kirkwood-i2s.c                  |    2 +-
 sound/soc/loongson/loongson_card.c                 |  125 +-
 sound/soc/loongson/loongson_dma.c                  |   25 +-
 sound/soc/loongson/loongson_i2s.c                  |  115 +-
 sound/soc/loongson/loongson_i2s.h                  |   24 +-
 sound/soc/loongson/loongson_i2s_pci.c              |   51 +-
 sound/soc/mediatek/Kconfig                         |   20 +
 sound/soc/mediatek/Makefile                        |    1 +
 sound/soc/mediatek/common/mtk-btcvsd.c             |    2 +-
 sound/soc/mediatek/mt2701/mt2701-afe-pcm.c         |    2 +-
 sound/soc/mediatek/mt2701/mt2701-cs42448.c         |   18 +-
 sound/soc/mediatek/mt6797/mt6797-afe-pcm.c         |    2 +-
 sound/soc/mediatek/mt7986/mt7986-afe-pcm.c         |    9 +-
 sound/soc/mediatek/mt8173/mt8173-afe-pcm.c         |    2 +-
 sound/soc/mediatek/mt8183/mt8183-afe-pcm.c         |    2 +-
 sound/soc/mediatek/mt8192/mt8192-afe-pcm.c         |    2 +-
 .../mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c  |    4 +-
 sound/soc/mediatek/mt8195/mt8195-afe-pcm.c         |    2 +-
 sound/soc/mediatek/mt8365/Makefile                 |   15 +
 sound/soc/mediatek/mt8365/mt8365-afe-clk.c         |  421 +++
 sound/soc/mediatek/mt8365/mt8365-afe-clk.h         |   32 +
 sound/soc/mediatek/mt8365/mt8365-afe-common.h      |  448 +++
 sound/soc/mediatek/mt8365/mt8365-afe-pcm.c         | 2274 ++++++++++++
 sound/soc/mediatek/mt8365/mt8365-dai-adda.c        |  311 ++
 sound/soc/mediatek/mt8365/mt8365-dai-dmic.c        |  310 ++
 sound/soc/mediatek/mt8365/mt8365-dai-i2s.c         |  846 +++++
 sound/soc/mediatek/mt8365/mt8365-dai-pcm.c         |  293 ++
 sound/soc/mediatek/mt8365/mt8365-mt6357.c          |  343 ++
 sound/soc/mediatek/mt8365/mt8365-reg.h             |  993 ++++++
 sound/soc/meson/aiu-fifo.h                         |    2 -
 sound/soc/meson/aiu.c                              |    2 +-
 sound/soc/meson/axg-card.c                         |   13 +-
 sound/soc/meson/gx-card.c                          |    3 +-
 sound/soc/meson/meson-card-utils.c                 |    4 +-
 sound/soc/mxs/mxs-sgtl5000.c                       |    2 +-
 sound/soc/pxa/mmp-sspa.c                           |    2 +-
 sound/soc/pxa/pxa2xx-ac97.c                        |    2 +-
 sound/soc/qcom/common.c                            |    1 -
 sound/soc/qcom/lpass-apq8016.c                     |    2 +-
 sound/soc/qcom/lpass-ipq806x.c                     |    2 +-
 sound/soc/qcom/lpass-sc7180.c                      |    2 +-
 sound/soc/qcom/lpass-sc7280.c                      |    2 +-
 sound/soc/qcom/qdsp6/q6asm-dai.c                   |   31 +-
 sound/soc/qcom/qdsp6/q6routing.c                   |    2 +-
 sound/soc/qcom/sm8250.c                            |    8 +
 sound/soc/rockchip/rockchip_i2s.c                  |    2 +-
 sound/soc/rockchip/rockchip_i2s_tdm.c              |    2 +-
 sound/soc/rockchip/rockchip_pdm.c                  |    2 +-
 sound/soc/rockchip/rockchip_rt5645.c               |    2 +-
 sound/soc/rockchip/rockchip_spdif.c                |    2 +-
 sound/soc/samsung/arndale.c                        |    2 +-
 sound/soc/samsung/i2s.c                            |    2 +-
 sound/soc/samsung/odroid.c                         |    2 +-
 sound/soc/samsung/pcm.c                            |    2 +-
 sound/soc/samsung/snow.c                           |    2 +-
 sound/soc/samsung/spdif.c                          |    2 +-
 sound/soc/sdw_utils/Kconfig                        |    6 +
 sound/soc/sdw_utils/Makefile                       |   11 +
 .../soc_sdw_bridge_cs35l56.c}                      |   56 +-
 .../soc_sdw_cs42l42.c}                             |   13 +-
 .../soc_sdw_cs42l43.c}                             |   38 +-
 .../soc_sdw_cs_amp.c}                              |   18 +-
 .../sof_sdw_dmic.c => sdw_utils/soc_sdw_dmic.c}    |   10 +-
 .../sof_sdw_maxim.c => sdw_utils/soc_sdw_maxim.c}  |   56 +-
 .../soc_sdw_rt5682.c}                              |   12 +-
 .../sof_sdw_rt700.c => sdw_utils/soc_sdw_rt700.c}  |   12 +-
 .../sof_sdw_rt711.c => sdw_utils/soc_sdw_rt711.c}  |   38 +-
 .../soc_sdw_rt712_sdca.c}                          |   10 +-
 .../soc_sdw_rt722_sdca.c}                          |   10 +-
 .../soc_sdw_rt_amp.c}                              |   43 +-
 .../soc_sdw_rt_amp_coeff_tables.h}                 |    6 +-
 .../soc_sdw_rt_dmic.c}                             |   11 +-
 .../soc_sdw_rt_sdca_jack_common.c}                 |   40 +-
 sound/soc/sdw_utils/soc_sdw_utils.c                | 1170 +++++++
 sound/soc/sh/Kconfig                               |    1 +
 sound/soc/sh/fsi.c                                 |    2 +-
 sound/soc/sh/hac.c                                 |    2 +-
 sound/soc/sh/rcar/adg.c                            |    4 +-
 sound/soc/sh/rcar/core.c                           |   19 +-
 sound/soc/sh/rcar/dma.c                            |   75 +-
 sound/soc/sh/rcar/rsnd.h                           |   10 -
 sound/soc/sh/rcar/ssi.c                            |    2 +-
 sound/soc/sh/rz-ssi.c                              |  291 +-
 sound/soc/sh/siu_dai.c                             |    2 +-
 sound/soc/soc-ac97.c                               |    4 +-
 sound/soc/soc-card-test.c                          |   57 -
 sound/soc/soc-card.c                               |   10 -
 sound/soc/soc-component.c                          |   12 -
 sound/soc/soc-core.c                               |   21 +-
 sound/soc/soc-dai.c                                |   58 -
 sound/soc/soc-dapm.c                               |    5 +-
 sound/soc/soc-pcm.c                                |  364 +-
 sound/soc/soc-topology-test.c                      |  132 +-
 sound/soc/soc-topology.c                           |    9 +-
 sound/soc/sof/amd/Kconfig                          |   11 +
 sound/soc/sof/amd/Makefile                         |    4 +-
 sound/soc/sof/amd/acp-common.c                     |    3 +
 sound/soc/sof/amd/acp-dsp-offset.h                 |   24 +-
 sound/soc/sof/amd/acp-loader.c                     |    2 +-
 sound/soc/sof/amd/acp.c                            |   88 +-
 sound/soc/sof/amd/acp.h                            |   11 +-
 sound/soc/sof/amd/acp70.c                          |  142 +
 sound/soc/sof/amd/pci-acp63.c                      |    2 +-
 sound/soc/sof/amd/pci-acp70.c                      |  112 +
 sound/soc/sof/amd/pci-rmb.c                        |    1 -
 sound/soc/sof/amd/pci-rn.c                         |    1 -
 sound/soc/sof/amd/pci-vangogh.c                    |    1 -
 sound/soc/sof/imx/imx8.c                           |    2 +-
 sound/soc/sof/imx/imx8m.c                          |    2 +-
 sound/soc/sof/imx/imx8ulp.c                        |    2 +-
 sound/soc/sof/intel/Kconfig                        |   17 +
 sound/soc/sof/intel/Makefile                       |    2 +
 sound/soc/sof/intel/bdw.c                          |    2 +-
 sound/soc/sof/intel/byt.c                          |    2 +-
 sound/soc/sof/intel/hda-dsp.c                      |    1 +
 sound/soc/sof/intel/hda-stream.c                   |    4 +-
 sound/soc/sof/intel/hda.c                          |  282 +-
 sound/soc/sof/intel/hda.h                          |    1 +
 sound/soc/sof/intel/lnl.c                          |   27 +
 sound/soc/sof/intel/mtl.c                          |   16 +-
 sound/soc/sof/intel/mtl.h                          |    2 +
 sound/soc/sof/intel/pci-ptl.c                      |   77 +
 sound/soc/sof/intel/shim.h                         |    1 +
 sound/soc/sof/mediatek/mt8186/mt8186.c             |    2 +-
 sound/soc/sof/mediatek/mt8195/mt8195.c             |    2 +-
 sound/soc/sof/pcm.c                                |    2 +-
 sound/soc/sof/sof-audio.h                          |    8 +-
 sound/soc/sof/sof-priv.h                           |   16 +-
 sound/soc/sof/topology.c                           |    8 +-
 sound/soc/sprd/sprd-mcdt.c                         |    2 +-
 sound/soc/starfive/jh7110_pwmdac.c                 |    2 +-
 sound/soc/starfive/jh7110_tdm.c                    |    2 +-
 sound/soc/stm/stm32_adfsdm.c                       |    2 +-
 sound/soc/stm/stm32_i2s.c                          |    6 +-
 sound/soc/stm/stm32_sai_sub.c                      |    2 +-
 sound/soc/stm/stm32_spdifrx.c                      |    2 +-
 sound/soc/sunxi/sun4i-codec.c                      |   30 +-
 sound/soc/sunxi/sun4i-i2s.c                        |    2 +-
 sound/soc/sunxi/sun4i-spdif.c                      |    2 +-
 sound/soc/sunxi/sun50i-dmic.c                      |    2 +-
 sound/soc/sunxi/sun8i-codec.c                      |    2 +-
 sound/soc/tegra/tegra186_asrc.c                    |    2 +-
 sound/soc/tegra/tegra186_dspk.c                    |    2 +-
 sound/soc/tegra/tegra20_ac97.c                     |    2 +-
 sound/soc/tegra/tegra20_i2s.c                      |    2 +-
 sound/soc/tegra/tegra210_admaif.c                  |    2 +-
 sound/soc/tegra/tegra210_adx.c                     |    2 +-
 sound/soc/tegra/tegra210_ahub.c                    |    2 +-
 sound/soc/tegra/tegra210_amx.c                     |    2 +-
 sound/soc/tegra/tegra210_dmic.c                    |    2 +-
 sound/soc/tegra/tegra210_i2s.c                     |   18 +-
 sound/soc/tegra/tegra210_mixer.c                   |    2 +-
 sound/soc/tegra/tegra210_mvc.c                     |    2 +-
 sound/soc/tegra/tegra210_ope.c                     |    2 +-
 sound/soc/tegra/tegra210_sfc.c                     |    2 +-
 sound/soc/tegra/tegra30_ahub.c                     |    2 +-
 sound/soc/tegra/tegra30_i2s.c                      |    2 +-
 sound/soc/tegra/tegra_audio_graph_card.c           |    2 +-
 sound/soc/tegra/tegra_pcm.c                        |    2 +-
 sound/soc/ti/ams-delta.c                           |    2 +-
 sound/soc/ti/davinci-i2s.c                         |    2 +-
 sound/soc/ti/davinci-mcasp.c                       |    2 +-
 sound/soc/ti/omap-mcbsp.c                          |    2 +-
 sound/soc/uniphier/aio-ld11.c                      |    2 +-
 sound/soc/uniphier/aio-pxs2.c                      |    2 +-
 sound/soc/uniphier/evea.c                          |    2 +-
 sound/soc/ux500/mop500.c                           |    2 +-
 sound/soc/ux500/ux500_msp_dai.c                    |    2 +-
 sound/soc/xilinx/xlnx_formatter_pcm.c              |    2 +-
 sound/soc/xilinx/xlnx_spdif.c                      |    2 +-
 sound/soc/xtensa/xtfpga-i2s.c                      |    2 +-
 sound/sparc/amd7930.c                              |    8 +-
 sound/sparc/cs4231.c                               |   78 +-
 sound/synth/emux/emux_hwdep.c                      |    6 +-
 sound/synth/emux/emux_oss.c                        |   11 +-
 sound/synth/emux/emux_seq.c                        |   13 +-
 sound/synth/emux/emux_synth.c                      |   12 +-
 sound/synth/emux/soundfont.c                       |   67 +-
 sound/usb/caiaq/audio.c                            |   15 +-
 sound/usb/card.c                                   |    8 +
 sound/usb/clock.c                                  |   62 +-
 sound/usb/endpoint.c                               |    3 +
 sound/usb/format.c                                 |    6 +-
 sound/usb/helper.c                                 |   34 +
 sound/usb/helper.h                                 |   10 +-
 sound/usb/midi.c                                   |    6 +-
 sound/usb/midi2.c                                  |   36 +-
 sound/usb/mixer.c                                  |   37 +-
 sound/usb/mixer.h                                  |    1 +
 sound/usb/mixer_quirks.c                           |  593 +++-
 sound/usb/mixer_scarlett.c                         |    4 +-
 sound/usb/power.c                                  |    3 +-
 sound/usb/power.h                                  |    1 +
 sound/usb/quirks-table.h                           | 2455 +++++--------
 sound/usb/quirks.c                                 |   62 +-
 sound/usb/stream.c                                 |   21 +-
 sound/usb/usbaudio.h                               |   12 +
 sound/usb/usx2y/us122l.c                           |   45 +-
 sound/usb/usx2y/usX2Yhwdep.c                       |   25 +-
 sound/usb/usx2y/usb_stream.c                       |   95 +-
 sound/usb/usx2y/usb_stream.h                       |    1 +
 sound/usb/usx2y/usbusx2y.c                         |    7 +-
 sound/usb/usx2y/usbusx2yaudio.c                    |   67 +-
 sound/usb/usx2y/usx2yhwdeppcm.c                    |   54 +-
 tools/sound/dapm-graph                             |   44 +-
 tools/testing/selftests/alsa/Makefile              |    4 +-
 tools/testing/selftests/alsa/global-timer.c        |   87 +
 tools/testing/selftests/alsa/utimer-test.c         |  164 +
 648 files changed, 25012 insertions(+), 32651 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/sound/cirrus,cs4271.yaml
 delete mode 100644 Documentation/devicetree/bindings/sound/cs4271.txt
 delete mode 100644 Documentation/devicetree/bindings/sound/da7213.txt
 create mode 100644 Documentation/devicetree/bindings/sound/dlg,da7213.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/fsl,imx-audio-es8328.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/fsl,saif.yaml
 delete mode 100644 Documentation/devicetree/bindings/sound/imx-audio-es8328.txt
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8365-afe.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8365-mt6357.yaml
 delete mode 100644 Documentation/devicetree/bindings/sound/mxs-saif.txt
 delete mode 100644 Documentation/devicetree/bindings/sound/pcm512x.txt
 create mode 100644 Documentation/devicetree/bindings/sound/qcom,apq8016-sbc-sndcard.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/ti,pcm512x.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/ti,tlv320dac3100.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/ti,tpa6130a2.yaml
 delete mode 100644 Documentation/devicetree/bindings/sound/tlv320aic31xx.txt
 delete mode 100644 Documentation/devicetree/bindings/sound/tpa6130a2.txt
 create mode 100644 Documentation/sound/utimers.rst
 create mode 100644 include/sound/soc_sdw_utils.h
 create mode 100644 include/sound/tas2563-tlv.h
 delete mode 100644 sound/core/memalloc_local.h
 delete mode 100644 sound/pci/hda/samsung_helper.c
 create mode 100644 sound/soc/amd/acp/acp-sdw-sof-mach.c
 create mode 100644 sound/soc/amd/acp/amd-acp63-acpi-match.c
 create mode 100644 sound/soc/amd/acp/soc_amd_sdw_common.h
 create mode 100644 sound/soc/codecs/mt6357.c
 create mode 100644 sound/soc/codecs/mt6357.h
 delete mode 100644 sound/soc/intel/boards/bxt_da7219_max98357a.c
 delete mode 100644 sound/soc/intel/boards/bxt_rt298.c
 delete mode 100644 sound/soc/intel/boards/kbl_da7219_max98357a.c
 delete mode 100644 sound/soc/intel/boards/kbl_da7219_max98927.c
 delete mode 100644 sound/soc/intel/boards/kbl_rt5660.c
 delete mode 100644 sound/soc/intel/boards/kbl_rt5663_max98927.c
 delete mode 100644 sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
 delete mode 100644 sound/soc/intel/boards/skl_hda_dsp_common.c
 delete mode 100644 sound/soc/intel/boards/skl_hda_dsp_common.h
 delete mode 100644 sound/soc/intel/boards/skl_nau88l25_max98357a.c
 delete mode 100644 sound/soc/intel/boards/skl_nau88l25_ssm4567.c
 delete mode 100644 sound/soc/intel/boards/skl_rt286.c
 create mode 100644 sound/soc/intel/common/soc-acpi-intel-ptl-match.c
 delete mode 100644 sound/soc/intel/skylake/Makefile
 delete mode 100644 sound/soc/intel/skylake/bxt-sst.c
 delete mode 100644 sound/soc/intel/skylake/cnl-sst-dsp.c
 delete mode 100644 sound/soc/intel/skylake/cnl-sst-dsp.h
 delete mode 100644 sound/soc/intel/skylake/cnl-sst.c
 delete mode 100644 sound/soc/intel/skylake/skl-debug.c
 delete mode 100644 sound/soc/intel/skylake/skl-i2s.h
 delete mode 100644 sound/soc/intel/skylake/skl-messages.c
 delete mode 100644 sound/soc/intel/skylake/skl-nhlt.c
 delete mode 100644 sound/soc/intel/skylake/skl-pcm.c
 delete mode 100644 sound/soc/intel/skylake/skl-ssp-clk.c
 delete mode 100644 sound/soc/intel/skylake/skl-ssp-clk.h
 delete mode 100644 sound/soc/intel/skylake/skl-sst-cldma.c
 delete mode 100644 sound/soc/intel/skylake/skl-sst-cldma.h
 delete mode 100644 sound/soc/intel/skylake/skl-sst-dsp.c
 delete mode 100644 sound/soc/intel/skylake/skl-sst-dsp.h
 delete mode 100644 sound/soc/intel/skylake/skl-sst-ipc.c
 delete mode 100644 sound/soc/intel/skylake/skl-sst-ipc.h
 delete mode 100644 sound/soc/intel/skylake/skl-sst-utils.c
 delete mode 100644 sound/soc/intel/skylake/skl-sst.c
 delete mode 100644 sound/soc/intel/skylake/skl-topology.c
 delete mode 100644 sound/soc/intel/skylake/skl-topology.h
 delete mode 100644 sound/soc/intel/skylake/skl.c
 delete mode 100644 sound/soc/intel/skylake/skl.h
 create mode 100644 sound/soc/mediatek/mt8365/Makefile
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-clk.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-clk.h
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-common.h
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-pcm.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-adda.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-dmic.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-i2s.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-pcm.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-mt6357.c
 create mode 100644 sound/soc/mediatek/mt8365/mt8365-reg.h
 create mode 100644 sound/soc/sdw_utils/Kconfig
 create mode 100644 sound/soc/sdw_utils/Makefile
 rename sound/soc/{intel/boards/bridge_cs35l56.c => sdw_utils/soc_sdw_bridge_cs35l56.c} (63%)
 rename sound/soc/{intel/boards/sof_sdw_cs42l42.c => sdw_utils/soc_sdw_cs42l42.c} (82%)
 rename sound/soc/{intel/boards/sof_sdw_cs42l43.c => sdw_utils/soc_sdw_cs42l43.c} (73%)
 rename sound/soc/{intel/boards/sof_sdw_cs_amp.c => sdw_utils/soc_sdw_cs_amp.c} (66%)
 rename sound/soc/{intel/boards/sof_sdw_dmic.c => sdw_utils/soc_sdw_dmic.c} (71%)
 rename sound/soc/{intel/boards/sof_sdw_maxim.c => sdw_utils/soc_sdw_maxim.c} (63%)
 rename sound/soc/{intel/boards/sof_sdw_rt5682.c => sdw_utils/soc_sdw_rt5682.c} (82%)
 rename sound/soc/{intel/boards/sof_sdw_rt700.c => sdw_utils/soc_sdw_rt700.c} (81%)
 rename sound/soc/{intel/boards/sof_sdw_rt711.c => sdw_utils/soc_sdw_rt711.c} (70%)
 rename sound/soc/{intel/boards/sof_sdw_rt712_sdca.c => sdw_utils/soc_sdw_rt712_sdca.c} (74%)
 rename sound/soc/{intel/boards/sof_sdw_rt722_sdca.c => sdw_utils/soc_sdw_rt722_sdca.c} (68%)
 rename sound/soc/{intel/boards/sof_sdw_rt_amp.c => sdw_utils/soc_sdw_rt_amp.c} (84%)
 rename sound/soc/{intel/boards/sof_sdw_amp_coeff_tables.h => sdw_utils/soc_sdw_rt_amp_coeff_tables.h} (97%)
 rename sound/soc/{intel/boards/sof_sdw_rt_dmic.c => sdw_utils/soc_sdw_rt_dmic.c} (70%)
 rename sound/soc/{intel/boards/sof_sdw_rt_sdca_jack_common.c => sdw_utils/soc_sdw_rt_sdca_jack_common.c} (78%)
 create mode 100644 sound/soc/sdw_utils/soc_sdw_utils.c
 create mode 100644 sound/soc/sof/amd/acp70.c
 create mode 100644 sound/soc/sof/amd/pci-acp70.c
 create mode 100644 sound/soc/sof/intel/pci-ptl.c
 create mode 100644 tools/testing/selftests/alsa/global-timer.c
 create mode 100644 tools/testing/selftests/alsa/utimer-test.c


.
Date: Sun, 15 Sep 2024 02:46:21 -0400
From: Paolo Bonzini <pbonzini@redhat.com>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: [GIT PULL] First batch of KVM changes for Linux 6.12

Linus,

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus-non-x86

for you to fetch changes up to 0cdcc99eeaedf2422c80d75760293fdbb476cec1:

  Merge tag 'kvm-riscv-6.12-1' of https://github.com/kvm-riscv/linux into HEAD (2024-09-15 02:43:17 -0400)

These are the non-x86 changes (mostly ARM, as is usually the case).
The generic and x86 changes will come later, in the meanwhile
here is what's ready in case it helps you intersecting the
travelling and pulling schedule.  There is a trivial conflict in
arch/arm64/include/asm/kvm_host.h with the arm64 tree.

I'll also send a revert for 6.11 in a few minutes.

Thanks,

Paolo

----------------------------------------------------------------
ARM:

* New Stage-2 page table dumper, reusing the main ptdump infrastructure

* FP8 support

* Nested virtualization now supports the address translation (FEAT_ATS1A)
  family of instructions

* Add selftest checks for a bunch of timer emulation corner cases

* Fix multiple cases where KVM/arm64 doesn't correctly handle the guest
  trying to use a GICv3 that wasn't advertised

* Remove REG_HIDDEN_USER from the sysreg infrastructure, making
  things little simpler

* Prevent MTE tags being restored by userspace if we are actively
  logging writes, as that's a recipe for disaster

* Correct the refcount on a page that is not considered for MTE tag
  copying (such as a device)

* When walking a page table to split block mappings, synchronize only
  at the end the walk rather than on every store

* Fix boundary check when transfering memory using FFA

* Fix pKVM TLB invalidation, only affecting currently out of tree
  code but worth addressing for peace of mind

LoongArch:

* Revert qspinlock to test-and-set simple lock on VM.

* Add Loongson Binary Translation extension support.

* Add PMU support for guest.

* Enable paravirt feature control from VMM.

* Implement function kvm_para_has_feature().

RISC-V:

* Fix sbiret init before forwarding to userspace

* Don't zero-out PMU snapshot area before freeing data

* Allow legacy PMU access from guest

* Fix to allow hpmcounter31 from the guest

----------------------------------------------------------------
Andrew Jones (1):
      RISC-V: KVM: Fix sbiret init before forwarding to userspace

Anup Patel (1):
      RISC-V: KVM: Don't zero-out PMU snapshot area before freeing data

Atish Patra (2):
      RISC-V: KVM: Allow legacy PMU access from guest
      RISC-V: KVM: Fix to allow hpmcounter31 from the guest

Bibo Mao (6):
      LoongArch: Revert qspinlock to test-and-set simple lock on VM
      LoongArch: KVM: Add VM feature detection function
      LoongArch: KVM: Add Binary Translation extension support
      LoongArch: KVM: Add vm migration support for LBT registers
      LoongArch: KVM: Enable paravirt feature control from VMM
      LoongArch: KVM: Implement function kvm_para_has_feature()

Colton Lewis (3):
      KVM: arm64: Move data barrier to end of split walk
      KVM: arm64: selftests: Ensure pending interrupts are handled in arch_timer test
      KVM: arm64: selftests: Add arch_timer_edge_cases selftest

Joey Gouly (1):
      KVM: arm64: Make kvm_at() take an OP_AT_*

Marc Zyngier (47):
      KVM: arm64: Move SVCR into the sysreg array
      KVM: arm64: Add predicate for FPMR support in a VM
      KVM: arm64: Move FPMR into the sysreg array
      KVM: arm64: Add save/restore support for FPMR
      KVM: arm64: Honor trap routing for FPMR
      KVM: arm64: Expose ID_AA64FPFR0_EL1 as a writable ID reg
      KVM: arm64: Enable FP8 support when available and configured
      KVM: arm64: Expose ID_AA64PFR2_EL1 to userspace and guests
      Merge branch kvm-arm64/tlbi-fixes-6.12 into kvmarm-master/next
      KVM: arm64: Move GICv3 trap configuration to kvm_calculate_traps()
      KVM: arm64: Force SRE traps when SRE access is not enabled
      KVM: arm64: Force GICv3 trap activation when no irqchip is configured on VHE
      KVM: arm64: Add helper for last ditch idreg adjustments
      KVM: arm64: Zero ID_AA64PFR0_EL1.GIC when no GICv3 is presented to the guest
      KVM: arm64: Add ICH_HCR_EL2 to the vcpu state
      KVM: arm64: Add trap routing information for ICH_HCR_EL2
      KVM: arm64: Honor guest requested traps in GICv3 emulation
      KVM: arm64: Make most GICv3 accesses UNDEF if they trap
      KVM: arm64: Unify UNDEF injection helpers
      KVM: arm64: Add selftest checking how the absence of GICv3 is handled
      arm64: Add missing APTable and TCR_ELx.HPD masks
      arm64: Add PAR_EL1 field description
      arm64: Add system register encoding for PSTATE.PAN
      arm64: Add ESR_ELx_FSC_ADDRSZ_L() helper
      KVM: arm64: nv: Enforce S2 alignment when contiguous bit is set
      KVM: arm64: nv: Turn upper_attr for S2 walk into the full descriptor
      KVM: arm64: nv: Honor absence of FEAT_PAN2
      KVM: arm64: nv: Add basic emulation of AT S1E{0,1}{R,W}
      KVM: arm64: nv: Add basic emulation of AT S1E1{R,W}P
      KVM: arm64: nv: Add basic emulation of AT S1E2{R,W}
      KVM: arm64: nv: Add emulation of AT S12E{0,1}{R,W}
      KVM: arm64: nv: Make ps_to_output_size() generally available
      KVM: arm64: nv: Add SW walker for AT S1 emulation
      KVM: arm64: nv: Sanitise SCTLR_EL1.EPAN according to VM configuration
      KVM: arm64: nv: Make AT+PAN instructions aware of FEAT_PAN3
      KVM: arm64: nv: Plumb handling of AT S1* traps from EL2
      KVM: arm64: nv: Add support for FEAT_ATS1A
      KVM: arm64: Simplify handling of CNTKCTL_EL12
      KVM: arm64: Simplify visibility handling of AArch32 SPSR_*
      KVM: arm64: Get rid of REG_HIDDEN_USER visibility qualifier
      Merge branch kvm-arm64/mmu-misc-6.12 into kvmarm-master/next
      Merge branch kvm-arm64/fpmr into kvmarm-master/next
      Merge branch kvm-arm64/vgic-sre-traps into kvmarm-master/next
      Merge branch kvm-arm64/selftests-6.12 into kvmarm-master/next
      Merge branch kvm-arm64/nv-at-pan into kvmarm-master/next
      Merge branch kvm-arm64/s2-ptdump into kvmarm-master/next
      Merge branch kvm-arm64/visibility-cleanups into kvmarm-master/next

Oliver Upton (1):
      KVM: arm64: selftests: Cope with lack of GICv3 in set_id_regs

Paolo Bonzini (3):
      Merge tag 'kvmarm-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
      Merge tag 'loongarch-kvm-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson into HEAD
      Merge tag 'kvm-riscv-6.12-1' of https://github.com/kvm-riscv/linux into HEAD

Sean Christopherson (2):
      KVM: arm64: Release pfn, i.e. put page, if copying MTE tags hits ZONE_DEVICE
      KVM: arm64: Disallow copying MTE to guest memory while KVM is dirty logging

Sebastian Ene (5):
      KVM: arm64: Move pagetable definitions to common header
      arm64: ptdump: Expose the attribute parsing functionality
      arm64: ptdump: Use the ptdump description from a local context
      arm64: ptdump: Don't override the level when operating on the stage-2 tables
      KVM: arm64: Register ptdump with debugfs on guest creation

Snehal Koukuntla (1):
      KVM: arm64: Add memory length checks and remove inline in do_ffa_mem_xfer

Song Gao (1):
      LoongArch: KVM: Add PMU support for guest

Will Deacon (2):
      KVM: arm64: Invalidate EL1&0 TLB entries for all VMIDs in nvhe hyp init
      KVM: arm64: Ensure TLBI uses correct VMID after changing context

 arch/arm64/include/asm/esr.h                       |    5 +-
 arch/arm64/include/asm/kvm_arm.h                   |    1 +
 arch/arm64/include/asm/kvm_asm.h                   |    6 +-
 arch/arm64/include/asm/kvm_host.h                  |   22 +-
 arch/arm64/include/asm/kvm_mmu.h                   |    6 +
 arch/arm64/include/asm/kvm_nested.h                |   40 +-
 arch/arm64/include/asm/kvm_pgtable.h               |   42 +
 arch/arm64/include/asm/pgtable-hwdef.h             |    9 +
 arch/arm64/include/asm/ptdump.h                    |   43 +-
 arch/arm64/include/asm/sysreg.h                    |   22 +
 arch/arm64/kvm/Kconfig                             |   17 +
 arch/arm64/kvm/Makefile                            |    3 +-
 arch/arm64/kvm/arm.c                               |   15 +-
 arch/arm64/kvm/at.c                                | 1101 ++++++++++++++++++++
 arch/arm64/kvm/emulate-nested.c                    |   81 +-
 arch/arm64/kvm/fpsimd.c                            |    5 +-
 arch/arm64/kvm/guest.c                             |    6 +
 arch/arm64/kvm/hyp/include/hyp/fault.h             |    2 +-
 arch/arm64/kvm/hyp/include/hyp/switch.h            |    3 +
 arch/arm64/kvm/hyp/nvhe/ffa.c                      |   21 +-
 arch/arm64/kvm/hyp/nvhe/hyp-init.S                 |    2 +-
 arch/arm64/kvm/hyp/nvhe/hyp-main.c                 |    9 +
 arch/arm64/kvm/hyp/nvhe/switch.c                   |    9 +
 arch/arm64/kvm/hyp/nvhe/tlb.c                      |    6 +-
 arch/arm64/kvm/hyp/pgtable.c                       |   48 +-
 arch/arm64/kvm/hyp/vgic-v3-sr.c                    |   97 +-
 arch/arm64/kvm/hyp/vhe/switch.c                    |    3 +
 arch/arm64/kvm/nested.c                            |   55 +-
 arch/arm64/kvm/ptdump.c                            |  268 +++++
 arch/arm64/kvm/sys_regs.c                          |  384 ++++---
 arch/arm64/kvm/sys_regs.h                          |   23 +-
 arch/arm64/kvm/vgic/vgic-v3.c                      |   12 +
 arch/arm64/kvm/vgic/vgic.c                         |   14 +-
 arch/arm64/kvm/vgic/vgic.h                         |    6 +-
 arch/arm64/mm/ptdump.c                             |   70 +-
 arch/loongarch/include/asm/Kbuild                  |    1 -
 arch/loongarch/include/asm/kvm_csr.h               |    6 +
 arch/loongarch/include/asm/kvm_host.h              |   37 +-
 arch/loongarch/include/asm/kvm_para.h              |   12 +
 arch/loongarch/include/asm/kvm_vcpu.h              |   11 +
 arch/loongarch/include/asm/loongarch.h             |   11 +-
 arch/loongarch/include/asm/paravirt.h              |    7 +
 arch/loongarch/include/asm/qspinlock.h             |   41 +
 arch/loongarch/include/uapi/asm/Kbuild             |    2 -
 arch/loongarch/include/uapi/asm/kvm.h              |   20 +
 arch/loongarch/include/uapi/asm/kvm_para.h         |   21 +
 arch/loongarch/kernel/paravirt.c                   |   47 +-
 arch/loongarch/kernel/setup.c                      |    2 +
 arch/loongarch/kernel/smp.c                        |    4 +-
 arch/loongarch/kvm/exit.c                          |   46 +-
 arch/loongarch/kvm/vcpu.c                          |  340 +++++-
 arch/loongarch/kvm/vm.c                            |   69 +-
 arch/riscv/include/asm/kvm_vcpu_pmu.h              |   21 +-
 arch/riscv/kvm/vcpu_pmu.c                          |   14 +-
 arch/riscv/kvm/vcpu_sbi.c                          |    4 +-
 tools/testing/selftests/kvm/Makefile               |    2 +
 .../selftests/kvm/aarch64/arch_timer_edge_cases.c  | 1062 +++++++++++++++++++
 tools/testing/selftests/kvm/aarch64/no-vgic-v3.c   |  175 ++++
 tools/testing/selftests/kvm/aarch64/set_id_regs.c  |    1 +
 tools/testing/selftests/kvm/aarch64/vgic_irq.c     |   11 +-
 .../selftests/kvm/include/aarch64/arch_timer.h     |   18 +-
 .../selftests/kvm/include/aarch64/processor.h      |    3 +
 .../testing/selftests/kvm/lib/aarch64/processor.c  |    6 +
 63 files changed, 4041 insertions(+), 409 deletions(-)
 create mode 100644 arch/arm64/kvm/at.c
 create mode 100644 arch/arm64/kvm/ptdump.c
 create mode 100644 arch/loongarch/include/asm/qspinlock.h
 create mode 100644 arch/loongarch/include/uapi/asm/kvm_para.h
 create mode 100644 tools/testing/selftests/kvm/aarch64/arch_timer_edge_cases.c
 create mode 100644 tools/testing/selftests/kvm/aarch64/no-vgic-v3.c


.
Date: Sun, 15 Sep 2024 03:30:10 -0400
From: Paolo Bonzini <pbonzini@redhat.com>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: [GIT PULL] KVM revert for Linux 6.11-rc8 (or final)

Linus,

The following changes since commit 59cbd4eea48fdbc68fc17a29ad71188fea74b28b:

  KVM: Remove HIGH_RES_TIMERS dependency (2024-09-05 12:04:54 -0400)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus-6.11

for you to fetch changes up to 9d70f3fec14421e793ffbc0ec2f739b24e534900:

  Revert "KVM: VMX: Always honor guest PAT on CPUs that support self-snoop" (2024-09-15 02:49:33 -0400)

----------------------------------------------------------------
Do not always honor guest PAT on CPUs that support self-snoop.
This triggers an issue in the bochsdrm driver, which used ioremap()
instead of ioremap_wc() to map the video RAM.  The revert lets video
RAM use the WB memory type instead of the slower UC memory type.

----------------------------------------------------------------
Paolo Bonzini (1):
      Revert "KVM: VMX: Always honor guest PAT on CPUs that support self-snoop"

 arch/x86/kvm/mmu/mmu.c |  8 +++-----
 arch/x86/kvm/vmx/vmx.c | 10 ++++------
 2 files changed, 7 insertions(+), 11 deletions(-)


.
Date: Sun, 15 Sep 2024 12:53:44 +0200
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-mtd@lists.infradead.org, Richard Weinberger <richard@nod.at>,
 Tudor Ambarus <Tudor.Ambarus@linaro.org>, Vignesh Raghavendra
 <vigneshr@ti.com>, Frieder Schrempf <frieder.schrempf@kontron.de>, Michael
 Walle <michael@walle.cc>, Pratyush Yadav <pratyush@kernel.org>,
 linux-kernel@vger.kernel.org
Subject: [GIT PULL] mtd: Changes for 6.12-rc1

Hello Linus,

This is the MTD PR for v6.12-rc1.

Thanks,
Miqu=C3=A8l

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git tags/mtd/for-=
6.12

for you to fetch changes up to 869acb874f2b61c34063b677c2bd29595bf446a1:

  Merge tag 'nand/for-6.12' into mtd/next (2024-09-15 12:38:22 +0200)

----------------------------------------------------------------
* MTD changes

No particularly important patchset this cycle, but we have a few usual
improvements: like using a better/more recent helper or checking a
return value.

* Raw NAND changes

The use of for_each_child_of_node_scoped() has been spread into the
subsystem drivers. Aside from that, a couple of exit path have been
fixed (mtk, denali), the TI GPMC bindings have been enhanced to comply
with up-to-date partition descriptions and as always there is a load of
small and misc fixes.

* SPI-NAND changes

The most impacting series this cycle is bringing support for continuous
reads in the SPI-NAND subsystem. This is a feature already merged in the
raw NAND subsystem which allows optimizing the internal fetch times in
the chip while reading sequential pages within an eraseblock. For now
only Macronix NANDs benefit from this feature. While we are talking
about Macronix, some of their chip need an explicit action for selecting
a different plane, and support for it has also been brought.

The bitflip threshold has also been set to the same arbitrary level as
in the raw NAND subsystem to optimize wear leveling decisions, and
finally support for a new Winbond chip has been added.

* SPI NOR changes

Notable changes:
- Add Write Protect support for N25Q064A.
- New flash support for Zetta ZD25Q128C and Spansion S28HS256T.
- Fix a NULL dereference in probe path for flashes without a name. The
  probe path tries to access the name without checking its existence
  first. S28HS256T is the first flash to define its entry without a
  name, uncovering this issue.

----------------------------------------------------------------
Alexander Dahl (1):
      mtd: rawnand: atmel: Add message on DMA usage

Bartosz Golaszewski (1):
      mtd: rawnand: davinci: make platform_data private

Brian Norris (1):
      mtd: spi-nor: micron-st: Add n25q064a WP support

Charles Han (1):
      mtd: powernv: Add check devm_kasprintf() returned value

Chen Ridong (1):
      mtd: rawnand: denali: Fix missing pci_release_regions in probe and re=
move

Cheng Ming Lin (2):
      mtd: spinand: Add support for setting plane select bits
      mtd: spinand: macronix: Flag parts needing explicit plane select

Colin Ian King (1):
      mtd: parsers: bcm47xxpart: make read-only array possible_nvram_sizes =
static const

Cs=C3=B3k=C3=A1s, Bence (1):
      mtd: spi-nor: sst: Factor out common write operation to `sst_nor_writ=
e_data()`

Daniel Golle (1):
      mtd: spinand: set bitflip_threshold to 75% of ECC strength

Jinjie Ruan (11):
      mtd: rawnand: denali: Use the devm_clk_get_enabled() helper function
      mtd: rawnand: arasan: Use for_each_child_of_node_scoped()
      mtd: rawnand: cadence: Use for_each_child_of_node_scoped()
      mtd: rawnand: pl353: Use for_each_child_of_node_scoped()
      mtd: rawnand: marvell: drm/rockchip: Use for_each_child_of_node_scope=
d()
      mtd: rawnand: rockchip: Use for_each_child_of_node_scoped()
      mtd: rawnand: meson: Use for_each_child_of_node_scoped()
      mtd: rawnand: mtk: Use for_each_child_of_node_scoped()
      mtd: rawnand: renesas: Use for_each_child_of_node_scoped()
      mtd: rawnand: stm32_fmc2: Use for_each_child_of_node_scoped()
      mtd: rawnand: sunxi: Use for_each_child_of_node_scoped()

Michael Walle (2):
      mtd: spi-nor: winbond: add Zetta ZD25Q128C support
      mtd: spi-nor: fix flash probing

Miquel Raynal (14):
      mtd: nand: Rename the NAND IO iteration helper
      mtd: nand: Introduce a block iterator
      mtd: spi-nand: Isolate the MTD read logic in a helper
      mtd: spi-nand: Add continuous read support
      mtd: spi-nand: Expose spinand_write_reg_op()
      mtd: spi-nand: macronix: Fix helper name
      mtd: spi-nand: macronix: Extract the bitflip retrieval logic
      mtd: spi-nand: macronix: Add a possible bitflip status flag
      mtd: spi-nand: macronix: Continuous read support
      mtd: rawnand: meson: Fix typo in function name
      mtd: rawnand: mtk: Factorize out the logic cleaning mtk chips
      mtd: rawnand: mtk: Fix init error path
      Merge tag 'spi-nor/for-6.12' into mtd/next
      Merge tag 'nand/for-6.12' into mtd/next

Mirsad Todorovac (1):
      mtd: slram: insert break after errors in parsing the map

Rob Herring (Arm) (1):
      mtd: Use of_property_read_bool()

Robert Marko (1):
      mtd: spinand: winbond: add support for W25N01KV

Roger Quadros (1):
      dt-bindings: mtd: ti, gpmc-nand: support partitions node

Takahiro Kuwano (1):
      mtd: spi-nor: spansion: Add support for S28HS256T

Yan Zhen (1):
      mtd: concat: Use kmemdup_array instead of kmemdup for multiple alloca=
tion

 Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml |   5 +-
 drivers/mtd/devices/powernv_flash.c                     |   3 +
 drivers/mtd/devices/slram.c                             |   2 +
 drivers/mtd/mtdconcat.c                                 |   2 +-
 drivers/mtd/nand/raw/arasan-nand-controller.c           |   5 +-
 drivers/mtd/nand/raw/atmel/nand-controller.c            |   5 +-
 drivers/mtd/nand/raw/cadence-nand-controller.c          |   4 +-
 drivers/mtd/nand/raw/davinci_nand.c                     |  70 ++++++++++-
 drivers/mtd/nand/raw/denali_dt.c                        |  29 +----
 drivers/mtd/nand/raw/denali_pci.c                       |  11 +-
 drivers/mtd/nand/raw/marvell_nand.c                     |  12 +-
 drivers/mtd/nand/raw/meson_nand.c                       |  10 +-
 drivers/mtd/nand/raw/mtk_nand.c                         |  36 +++---
 drivers/mtd/nand/raw/pl35x-nand-controller.c            |   5 +-
 drivers/mtd/nand/raw/renesas-nand-controller.c          |  12 +-
 drivers/mtd/nand/raw/rockchip-nand-controller.c         |   5 +-
 drivers/mtd/nand/raw/stm32_fmc2_nand.c                  |   7 +-
 drivers/mtd/nand/raw/sunxi_nand.c                       |   4 +-
 drivers/mtd/nand/spi/core.c                             | 223 ++++++++++++=
++++++++++++++++++++----
 drivers/mtd/nand/spi/macronix.c                         | 146 ++++++++++++=
+++++------
 drivers/mtd/nand/spi/winbond.c                          |  26 +++++
 drivers/mtd/parsers/bcm47xxpart.c                       |   2 +-
 drivers/mtd/parsers/ofpart_core.c                       |   4 +-
 drivers/mtd/spi-nor/core.c                              |   3 +-
 drivers/mtd/spi-nor/micron-st.c                         |   2 +
 drivers/mtd/spi-nor/spansion.c                          |   4 +
 drivers/mtd/spi-nor/sst.c                               |  39 +++----
 drivers/mtd/spi-nor/winbond.c                           |  26 +++++
 include/linux/mtd/nand.h                                |  90 ++++++++++++=
+--
 include/linux/mtd/spinand.h                             |  19 +++
 include/linux/platform_data/mtd-davinci-aemif.h         |  36 ------
 include/linux/platform_data/mtd-davinci.h               |  88 ------------=
--
 32 files changed, 621 insertions(+), 314 deletions(-)
 delete mode 100644 include/linux/platform_data/mtd-davinci-aemif.h
 delete mode 100644 include/linux/platform_data/mtd-davinci.h

.
Date: Sun, 15 Sep 2024 22:40:57 +0200
From: Sebastian Reichel <sre@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: [GIT PULL] hsi changes for 6.12


--nbhs5k7cbkf77ryp
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi Linus,

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git tags/hsi-for-6.12

for you to fetch changes up to c3eddf5e8c30adb6f43fc0b149e88b9feb76f381:

  HSI: omap-ssi: Remove unnecessary debugfs_create_dir() error check (2024-08-27 15:28:56 +0200)

----------------------------------------------------------------
HSI changes for the 6.12 series

 * omap-ssi: remove unnecessary debugfs_create_dir() error check

----------------------------------------------------------------
Yang Ruibin (1):
      HSI: omap-ssi: Remove unnecessary debugfs_create_dir() error check

 drivers/hsi/controllers/omap_ssi_core.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

--nbhs5k7cbkf77ryp
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmbnRlYACgkQ2O7X88g7
+prU9xAAi9WJgTUZ9Eutpsre5R77CoF71zVRF2my1jH+ciMfhVUV7r3BBcJmoWot
uZehebzG75QOvlGQLi/y1bE05Z2idB6GSChIt2aj5+SL31qUhSyDbTZGrArEDlyt
F5425J1+hp5a/MkkrA7Ao2Ulj29M+ULL3mG4ICLYLKnkG4GfvHJn7M58PvUePg6a
+RzeRcIveu12J6hHvyuDPq4QdSusOMIO3eUSexzcSlgZg7lKPWG/VTJz/3iYRhNK
FaENzea12z21tvZ5WurjWq5ew8yD4K1DCJsc5ZtexePYKo5wptytoUoGou0OvpwT
TKeJgxQ8LkdpMYMX3kgN1UZDvrF/8i+5ATMkjt+2cAiAT05qRMLc8e/ix5BwNip/
AE1LxiFI91zdR6LE5Yn1SQVHs5lHBbmiCirhSKz7gnblCokA4LeQ2fc14OEhl4KW
1DLAjgi24xn3jgKfBnRGjLwhnMK2boEAUgCg8P8aCA6Dp+LfvHFGgsa+e6Rrdmsl
kAb+Ivafgi0qviraOdgCWOs89Dhi4h5Yt+/0PCIqM0/0BG7/EoSv6wSGDrV8UWF/
Q6a9xuIPJG1hO7NhD/VlG6Nw1E/oEMHBio2fG1pvxfkuUTX96KaNIcjCW2PBhHZ7
eYEtbxUiHSsb/RN1Lk9BTDPVE+NQ7veG0Nj2VcVFO9YroeF6cGM=
=2ULi
-----END PGP SIGNATURE-----

--nbhs5k7cbkf77ryp--

.
Date: Sun, 15 Sep 2024 22:41:02 +0200
From: Sebastian Reichel <sre@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Subject: [GIT PULL] power-supply changes for 6.12


--v5iyho5naygwzboo
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Linus,

Lot's of small things this time. The pull contains two merges of
immutable branches, one for the AXP717 support, which is shared
with MFD and one for the usb_types change, which is shared with
extcon to fix up a newly introduced driver using usb_types (also
touching a couple of other subsystems). Everything but the last
two commits have been in linux-next for at least 10 days. I only
pushed the last two commits some minutes ago. Those two are fixes
originally intended for 6.11. I received them a few days ago and
gave them some testing while travelling to Vienna. I independently
received a second patch fixing the issue, so it should be fixed
soon and I will be on vacation with limited network access for 3
weeks after LPC. Thus I think its better to have them included now
even though they received limited testing.

Greetings,

-- Sebastian


The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.gi=
t tags/for-v6.12

for you to fetch changes up to e50a57d16f897e45de1112eb6478577b197fab52:

  power: supply: hwmon: Fix missing temp1_max_alarm attribute (2024-09-14 1=
1:06:07 +0200)

----------------------------------------------------------------
power supply and reset changes for the 6.12 series

 * power-supply core
   - introduce power_supply_show_enum_with_available() helper
   - change usb_types from an array into a bitmask
   - fix early usage of power_supply_property_is_writeable() resulting
     in sysfs files not being writable
   - fix missing temp1_max_alarm attribute in power-supply's hwmon devices
 * drivers
   - max1720x: expose nvmem device
   - brcmstb: cleanup driver to use latest APIs
   - max77693: expose input and charging current limit
   - max17042_battery: fix state of charge reading for devices without
     current sensing
   - axp20x_battery: add AXP717 support
   - axp20x_battery: fix min/max voltage properties
   - axp20x_usb_power: add AXP717 support
   - axp20x_usb_power: add DT based input current limit
 * Documentation updates
 * misc. minor cleanups and fixes

----------------------------------------------------------------
Andres Salomon (1):
      ABI: testing: sysfs-class-power: clarify charge_type documentation

Andrew Davis (5):
      power: reset: brcmstb: Use normal driver register function
      power: reset: brcmstb: Use device_get_match_data() for matching
      power: reset: brcmstb: Use syscon_regmap_lookup_by_phandle_args() hel=
per
      power: reset: brcmstb: Use devm_register_sys_off_handler()
      power: reset: brcmstb: Do not go into infinite loop if reset fails

Artur Weber (2):
      power: supply: max17042_battery: Fix SOC threshold calc w/ no current=
 sense
      power: supply: max77693: Expose input current limit and CC current pr=
operties

Asmaa Mnebhi (1):
      power: reset: pwr-mlxbf: support graceful shutdown

Chen Ni (1):
      power: supply: cpcap-charger: Convert comma to semicolon

Chris Morgan (11):
      power: supply: axp20x_battery: Remove design from min and max voltage
      power: supply: axp20x_battery: Make iio and battery config per device
      power: supply: axp20x_usb_power: Make VBUS and IIO config per device
      dt-bindings: power: supply: axp20x: Add input-current-limit-microamp
      power: supply: axp20x_usb_power: add input-current-limit-microamp
      dt-bindings: power: supply: axp20x-battery: Add monitored-battery
      mfd: axp20x: Add ADC, BAT, and USB cells for AXP717
      dt-bindings: power: supply: axp20x: Add AXP717 compatible
      dt-bindings: power: supply: axp20x: Add AXP717 compatible
      power: supply: axp20x_usb_power: Add support for AXP717
      power: supply: axp20x_battery: add support for AXP717

Colin Ian King (1):
      power: supply: axp20x_usb_power: Fix spelling mistake "reqested" -> "=
requested"

Dan Carpenter (1):
      power: supply: max1720x: fix a double free on error in probe()

Dimitri Fedrau (1):
      power: supply: max1720x: add read support for nvmem

Hans de Goede (8):
      power: supply: "usb_type" property may be written to
      power: supply: ucs1002: Adjust ucs1002_set_usb_type() to accept strin=
g values
      power: supply: rt9467-charger: Remove "usb_type" property write suppo=
rt
      power: supply: sysfs: Add power_supply_show_enum_with_available() hel=
per
      power: supply: sysfs: Move power_supply_show_enum_with_available() up
      power: supply: Change usb_types from an array into a bitmask
      power: supply: Drop use_cnt check from power_supply_property_is_write=
able()
      power: supply: hwmon: Fix missing temp1_max_alarm attribute

Hongbo Li (1):
      power: supply: ab8500: Constify struct kobj_type

Jinjie Ruan (1):
      power: supply: max8998_charger: Fix module autoloading

Krzysztof Kozlowski (2):
      power: supply: core: simplify with cleanup.h
      power: supply: twl4030_charger: correct comparision with old current

Sebastian Reichel (2):
      Merge tag 'ib-psy-usb-types-signed' into psy-next
      Merge tag 'tags/ib-mfd-for-iio-power-v6.12' into psy-next

Stanislav Jakubek (1):
      dt-bindings: power: supply: sc27xx-fg: add low voltage alarm IRQ

Thomas Wei=DFschuh (1):
      power: supply: core: constify psy_tzd_ops

 Documentation/ABI/testing/sysfs-class-power        |  45 +-
 .../bindings/power/supply/sc27xx-fg.yaml           |   6 +
 .../x-powers,axp20x-battery-power-supply.yaml      |   7 +
 .../supply/x-powers,axp20x-usb-power-supply.yaml   |  72 ++-
 drivers/extcon/extcon-intel-cht-wc.c               |  15 +-
 drivers/mfd/axp20x.c                               |  25 +-
 drivers/phy/ti/phy-tusb1210.c                      |  11 +-
 drivers/power/reset/brcmstb-reboot.c               |  59 +-
 drivers/power/reset/pwr-mlxbf.c                    |  16 +-
 drivers/power/supply/ab8500_fg.c                   |   2 +-
 drivers/power/supply/axp20x_battery.c              | 591 +++++++++++++++++=
++--
 drivers/power/supply/axp20x_usb_power.c            | 368 +++++++++++--
 drivers/power/supply/bq256xx_charger.c             |  15 +-
 drivers/power/supply/cpcap-charger.c               |   2 +-
 drivers/power/supply/cros_usbpd-charger.c          |  22 +-
 drivers/power/supply/lenovo_yoga_c630_battery.c    |   7 +-
 drivers/power/supply/max17042_battery.c            |   5 +-
 drivers/power/supply/max1720x_battery.c            | 209 +++++++-
 drivers/power/supply/max77693_charger.c            |  52 ++
 drivers/power/supply/max8998_charger.c             |   1 +
 drivers/power/supply/mp2629_charger.c              |  15 +-
 drivers/power/supply/mt6360_charger.c              |  13 +-
 drivers/power/supply/mt6370-charger.c              |  13 +-
 drivers/power/supply/power_supply_core.c           |  19 +-
 drivers/power/supply/power_supply_hwmon.c          |   3 +-
 drivers/power/supply/power_supply_sysfs.c          |  66 +--
 drivers/power/supply/qcom_battmgr.c                |  37 +-
 drivers/power/supply/qcom_pmi8998_charger.c        |  13 +-
 drivers/power/supply/rk817_charger.c               |   9 +-
 drivers/power/supply/rn5t618_power.c               |  13 +-
 drivers/power/supply/rt9467-charger.c              |  16 +-
 drivers/power/supply/rt9471.c                      |  15 +-
 drivers/power/supply/twl4030_charger.c             |   2 +-
 drivers/power/supply/ucs1002_power.c               |  26 +-
 drivers/usb/typec/anx7411.c                        |  11 +-
 drivers/usb/typec/rt1719.c                         |  11 +-
 drivers/usb/typec/tcpm/tcpm.c                      |  11 +-
 drivers/usb/typec/tipd/core.c                      |   9 +-
 drivers/usb/typec/ucsi/psy.c                       |  11 +-
 include/linux/mfd/axp20x.h                         |  26 +
 include/linux/mfd/max77693-private.h               |   5 +
 include/linux/power_supply.h                       |   3 +-
 42 files changed, 1435 insertions(+), 442 deletions(-)

--v5iyho5naygwzboo
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmbnRl4ACgkQ2O7X88g7
+powXg//Vf3fVIDf/G1bKemg7VNryDRxdlWp4Wv4He/odZESQvm71eedHrNTfHjH
ySIVAPJbCIYcfpJVrNpJ08hGYkmO4MYAsG0faRtW9tL2dhnyQrcan1A9TS9RDvJl
zaltwAOs118aNpZSNEWqT2iC8FJ/Sh/UK7NQORKn/tNx7/BkrA+w/LIY1iOj3LCq
3jjowsy4U0Ha2K/az6MfrBFQlOuX3McrTpDSljb2zitlNTRhh3pAmdCwc4ts0jp3
XFaIoZLv+dVBkEvCmkAcPG1gTTMpVe9hzZw4Wj2ZeRy+Yt7T0gQeD7ii7zkwcMbz
fTe03KIRzlehdSj2qpzfml4wkwb9mOJiKqvgNTx5fs9vqXybY3Jk13T1uvCVwVwR
5lTZpCZQXIS0xnz3EVLUs2lJWPesjKtjk88mbLkUDa3Xms8Z0S1f26dto6bGo35M
6Sxj+RZ3ZHHVkvWdd05bed29seaTaJ8r1qp0Wu9K1JTZll+w+yq0jvIo0K1B5he8
5fvruXT7M609a7Emb7n5HafxmN8pJJ47EtZlYGXgmbHNVzOlxz8e6Z09MG14dOof
FlBoq4K1CoM5cECdqoDKFSxFH/2DFYJHg0Qnk4s09ESVveeSKv3ddCQKvEqKgqdU
0nuoaljyc2y51A1NI7oflR+1caiCTaycV2eQo+Vlz3pudae/+RI=
=QAp9
-----END PGP SIGNATURE-----

--v5iyho5naygwzboo--

.
Date: Mon, 16 Sep 2024 00:26:11 +0100
From: Mark Brown <broonie@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: [GIT PULL] regmap updates for v6.12

The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba:

  Linux 6.11-rc3 (2024-08-11 14:27:14 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git tags/regmap-v6.12

for you to fetch changes up to c7edb7ac8472a57e0c56a3a95796db3af98b2383:

  regmap: kunit: Add coverage of spinlocked regmaps (2024-09-02 12:56:16 +0100)

----------------------------------------------------------------
regmap: Updates for v6.12

The main update here is Matti's work allowing regmap irqdomains to be
given custom names (allowing multiple interrupt controllers associatd
with a single struct device), this pulls in some commits from Thomas'
tree which it depends on.  Otherwise there's a bit of work on improving
handling of regmaps protected with spinlocks when used with complex
cache types, fixing some valid but harmless lockdep reports seen with
some new driver work.

----------------------------------------------------------------
Marek Szyprowski (1):
      regcache: use map->alloc_flags also for allocating cache

Mark Brown (4):
      regmap IRQ support for devices with multiple IRQs
      regmap: Hold the regmap lock when allocating and freeing the cache
      regmap: Use locking during kunit tests
      regmap: kunit: Add coverage of spinlocked regmaps

Matti Vaittinen (3):
      irqdomain: Simplify simple and legacy domain creation
      irqdomain: Allow giving name suffix for domain
      regmap: Allow setting IRQ domain name suffix

Thomas Gleixner (1):
      irqdomain: Cleanup domain name allocation

 drivers/base/regmap/regcache-flat.c   |   2 +-
 drivers/base/regmap/regcache-maple.c  |   2 +-
 drivers/base/regmap/regcache-rbtree.c |   2 +-
 drivers/base/regmap/regcache.c        |   4 +
 drivers/base/regmap/regmap-irq.c      |  37 +++++--
 drivers/base/regmap/regmap-kunit.c    |  19 +++-
 drivers/base/regmap/regmap.c          |   1 +
 include/linux/irqdomain.h             |   8 ++
 include/linux/regmap.h                |   4 +
 kernel/irq/irqdomain.c                | 198 +++++++++++++++++++---------------
 10 files changed, 175 insertions(+), 102 deletions(-)

.
Date: Mon, 16 Sep 2024 00:26:27 +0100
From: Mark Brown <broonie@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Liam Girdwood <lgirdwood@gmail.com>, linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: [GIT PULL] regulator updates for v6.12

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git tags/regulator-v6.12

for you to fetch changes up to 4591a2271f2e4c320eaa63c348169e4e6e6f2852:

  regulator: sm5703: Remove because it is unused and fails to build (2024-09-13 19:08:14 +0100)

----------------------------------------------------------------
regulator: Updates for v6.12

This release is almost all cleanup work of various kinds, while the
diffstat for the core is quite large this is almost all cleanups and
documentation improvments with some small fixes rather than any new
feature work.  We do have support for a couple of new devices but these
are small additions to existing drivers rather than new drivers.

 - Removal of the SM5703 driver which does not have it's dependencies
   available.
 - Support for Allwinner AXP717, and Qualcomm WCN6855.

The Allwinner support shares some commits with the MFD tree.

----------------------------------------------------------------
Andre Przywara (3):
      dt-bindings: mfd: x-powers,axp152: add boost regulator
      mfd: axp20x: AXP717: Add support for boost regulator
      regulator: axp20x: AXP717: Add boost regulator

Andrei Simion (2):
      regulator: mcp16502: Add supplier for regulators
      regulator: dt-bindings: microchip,mcp16502: Add voltage input supply documentation

André Draszik (1):
      regulator: update some comments ([gs]et_voltage_vsel vs [gs]et_voltage_sel)

Andy Shevchenko (1):
      regulator: of: Refactor of_get_*regulator() to decrease indentation

Bartosz Golaszewski (3):
      regulator: dt-bindings: qcom,qca6390-pmu: fix the description for bt-enable-gpios
      regulator: dt-bindings: qcom,qca6390-pmu: document WCN6855
      regulator: dt-bindings: qcom,qca6390-pmu: document the swctrl-gpios property

Chen Ni (2):
      regulator: wm831x-isink: Convert comma to semicolon
      regulator: rt5120: Convert comma to semicolon

Chen-Yu Tsai (15):
      regulator: Clarify error message for "id == NULL" in _regulator_get()
      regulator: Return actual error in of_regulator_bulk_get_all()
      regulator: Fully clean up on error in of_regulator_bulk_get_all()
      regulator: core: Fix short description for _regulator_check_status_enabled()
      regulator: core: Fix regulator_is_supported_voltage() kerneldoc return value
      regulator: core: Fix incorrectly formatted kerneldoc "Return" sections
      regulator: core: Add missing kerneldoc "Return" sections
      regulator: of: Fix incorrectly formatted kerneldoc "Return" sections
      regulator: fixed: Fix incorrectly formatted kerneldoc "Return" section
      regulator: fixed-helper: Add missing "Return" kerneldoc section
      regulator: irq_helpers: Fix regulator_irq_map_event_simple() kerneldoc
      regulator: of: Fix kerneldoc format for of_regulator_bulk_get_all()
      regulator: Unify "negative error number" terminology in comments
      regulator: Move OF-specific regulator lookup code to of_regulator.c
      regulator: Split up _regulator_get()

Christophe JAILLET (6):
      regulator: bd9576: Constify struct linear_range
      regulator: mp5416: Constify struct regulator_desc
      regulator: da9211: Constify struct regulator_desc
      regulator: wm8400: Constify struct regulator_desc
      regulator: tps6287x: Constify struct regulator_desc
      regulator: sm5703: Remove because it is unused and fails to build

Dan Carpenter (1):
      regulator: bd96801: Delete unnecessary check in probe()

Jinjie Ruan (1):
      regulator: max8973: Use irq_get_trigger_type() helper

Krzysztof Kozlowski (24):
      regulator: bd718x7: Use scoped device node handling to simplify error paths
      regulator: bd96801: Use scoped device node handling to simplify error paths
      regulator: max8997: Use scoped device node handling to simplify error paths
      regulator: s5m8767: Use scoped device node handling to simplify error paths
      regulator: qcom-rpmh: Simplify with scoped for each OF child loop
      regulator: qcom-smd: Simplify with scoped for each OF child loop
      regulator: scmi: Simplify with scoped for each OF child loop
      regulator: s2mps11: use scoped memory allocation to simplify probe
      regulator: da9052: Constify static data
      regulator: da9055: Constify static data
      regulator: da9063: Constify static data
      regulator: da9121: Constify static data
      regulator: hi6421: Constify static data
      regulator: hi6421v600: Constify static data
      regulator: tps65023: Constify static data
      regulator: max77826: Drop unused 'rdesc' in 'struct max77826_regulator_info'
      regulator: max77826: Constify static data
      regulator: mtk-dvfsrc: Constify static data
      regulator: pcap: Constify static data
      regulator: pfuze100: Constify static data
      regulator: qcom-refgen: Constify static data
      regulator: hi6421v530: Drop unused 'eco_microamp'
      regulator: hi6421v530: Use container_of and constify static data
      regulator: max77650: Use container_of and constify static data

Macpaul Lin (1):
      regulator: dt-bindings: mediatek,mt6397-regulator: convert to YAML

Mark Brown (5):
      Add input voltage suppliers for PMIC MCP16502
      regulator: Use scoped device node handling to simplify
      regulator: Minor cleanups
      regulator: Add AXP717 boost support
      regulator: Few constifications of static data

Rob Herring (Arm) (3):
      regulator: Use of_property_read_bool()
      regulator: qcom_spmi: Drop unnecessary of_find_property() call
      regulator: qcom_spmi: Use of_property_read_bool()

Wei Fang (1):
      regulator: core: fix the broken behavior of regulator_dev_lookup()

Yu Jiaoliang (1):
      regulator: Fix typos in the comment

Yue Haibing (1):
      regulator: max77857: Make max77857_id static

 .../devicetree/bindings/mfd/x-powers,axp152.yaml   |   2 +-
 .../regulator/mediatek,mt6397-regulator.yaml       | 238 ++++++++++++++++
 .../bindings/regulator/microchip,mcp16502.yaml     |  20 ++
 .../bindings/regulator/mt6397-regulator.txt        | 220 ---------------
 .../bindings/regulator/qcom,qca6390-pmu.yaml       |  22 +-
 drivers/mfd/axp20x.c                               |   2 +
 drivers/regulator/Kconfig                          |   7 -
 drivers/regulator/Makefile                         |   1 -
 drivers/regulator/act8865-regulator.c              |   4 +-
 drivers/regulator/axp20x-regulator.c               |   4 +
 drivers/regulator/bd718x7-regulator.c              |  19 +-
 drivers/regulator/bd9576-regulator.c               |   8 +-
 drivers/regulator/bd96801-regulator.c              |  19 +-
 drivers/regulator/core.c                           | 310 +++++++++++----------
 drivers/regulator/da903x-regulator.c               |   2 +-
 drivers/regulator/da9052-regulator.c               |  22 +-
 drivers/regulator/da9055-regulator.c               |  28 +-
 drivers/regulator/da9063-regulator.c               |   4 +-
 drivers/regulator/da9121-regulator.c               |  20 +-
 drivers/regulator/da9211-regulator.c               |   2 +-
 drivers/regulator/devres.c                         |  18 +-
 drivers/regulator/fan53555.c                       |   2 +-
 drivers/regulator/fixed-helper.c                   |   2 +
 drivers/regulator/fixed.c                          |   8 +-
 drivers/regulator/helpers.c                        |   8 +-
 drivers/regulator/hi6421-regulator.c               |  14 +-
 drivers/regulator/hi6421v530-regulator.c           |  27 +-
 drivers/regulator/hi6421v600-regulator.c           |  10 +-
 drivers/regulator/internal.h                       |  13 +-
 drivers/regulator/irq_helpers.c                    |  17 +-
 drivers/regulator/max5970-regulator.c              |   2 +-
 drivers/regulator/max77650-regulator.c             |  31 +--
 drivers/regulator/max77802-regulator.c             |   4 +-
 drivers/regulator/max77826-regulator.c             |   4 +-
 drivers/regulator/max77857-regulator.c             |   2 +-
 drivers/regulator/max8973-regulator.c              |   7 +-
 drivers/regulator/max8997-regulator.c              |  16 +-
 drivers/regulator/mcp16502.c                       |  17 +-
 drivers/regulator/mp5416.c                         |   4 +-
 drivers/regulator/mt6357-regulator.c               |   2 +-
 drivers/regulator/mtk-dvfsrc-regulator.c           |  10 +-
 drivers/regulator/of_regulator.c                   | 150 ++++++++--
 drivers/regulator/pcap-regulator.c                 |  12 +-
 drivers/regulator/pfuze100-regulator.c             |  10 +-
 drivers/regulator/qcom-refgen-regulator.c          |   4 +-
 drivers/regulator/qcom-rpmh-regulator.c            |  17 +-
 drivers/regulator/qcom_smd-regulator.c             |  13 +-
 drivers/regulator/qcom_spmi-regulator.c            |  12 +-
 drivers/regulator/rt5120-regulator.c               |   4 +-
 drivers/regulator/s2mps11.c                        |  17 +-
 drivers/regulator/s5m8767.c                        |  17 +-
 drivers/regulator/scmi-regulator.c                 |   8 +-
 drivers/regulator/sm5703-regulator.c               | 170 -----------
 drivers/regulator/tps6287x-regulator.c             |   2 +-
 drivers/regulator/tps65023-regulator.c             |   6 +-
 drivers/regulator/wm831x-isink.c                   |   8 +-
 drivers/regulator/wm8400-regulator.c               |   2 +-
 include/linux/mfd/axp20x.h                         |   3 +
 58 files changed, 809 insertions(+), 818 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/regulator/mediatek,mt6397-regulator.yaml
 delete mode 100644 Documentation/devicetree/bindings/regulator/mt6397-regulator.txt
 delete mode 100644 drivers/regulator/sm5703-regulator.c

.
Date: Mon, 16 Sep 2024 00:26:43 +0100
From: Mark Brown <broonie@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: [GIT PULL] SPI updates for v6.12

The following changes since commit b787a33864121a565aeb0e88561bf6062a19f99c:

  spi: geni-qcom: Fix incorrect free_irq() sequence (2024-09-09 12:57:33 +0100)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git tags/spi-v6.12

for you to fetch changes up to 07f1eb718db281c3e0cdb068ea7d73c30921a81c:

  spi: geni-qcom: Use devm functions to simplify code (2024-09-12 12:39:04 +0100)

----------------------------------------------------------------
spi: Updates for v6.12

This is quite a quiet release for sPI.  The one new core feature here is
support for configuring the state of the MOSI pin when the bus is idle,
there are some devices which are very fragile in this regard even when
the chip select signal is not asserted.  Otherwise we have some new
driver support, a bunch of small fixes and some general cleanup work.

 - Support for configuring the state of the MOSI pin when the the bus is
   idle.
 - Add the Elgin JG0309-01 in spidev.
 - Support for Marvell xSPI, Mediatek MTK7981, Microchip PIC64GX,
   NXP i.MX8ULP, and Rockchip RK3576 controllers.

I also accidentally pulled in an IIO DT bindings update due to a typo
when applying the MOSI idle state patches.

----------------------------------------------------------------
Andy Shevchenko (3):
      spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ
      spi: ppc4xx: Revert "handle irq_of_parse_and_map() errors"
      spi: ppc4xx: Sort headers

AngeloGioacchino Del Regno (1):
      spi: spi-mt65xx: Use threaded interrupt for non-SPIMEM transfer

Bastien Curutchet (1):
      spi: davinci: Adapt transfer's timeout to transfer's length

Biju Das (1):
      spi: rpc-if: Add missing MODULE_DEVICE_TABLE

Chen Ni (1):
      spi: meson-spicc: convert comma to semicolon

David Lechner (1):
      spi: axi-spi-engine: don't emit XFER_BITS for empty xfer

Detlev Casanova (1):
      spi: dt-bindings: Add rockchip,rk3576-spi compatible

Fabio Estevam (3):
      dt-bindings: trivial-devices: Document elgin,jg10309-01
      spi: spidev: Add an entry for elgin,jg10309-01
      spi: mxs: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS()

Frank Li (1):
      spi: dt-bindings: convert spi-sc18is602.txt to yaml format

Haibo Chen (3):
      dt-bindings: spi: nxp-fspi: add imx8ulp support
      spi: fspi: involve lut_num for struct nxp_fspi_devtype_data
      spi: fspi: add support for imx8ulp

Hongbo Li (1):
      spi: spi-ppc4xx: Remove duplicate included header file linux/platform_device.h

Jinjie Ruan (16):
      spi: cadence: Make cdns_mrvl_xspi_clk_div_list static
      spi: s3c64xx: Fix module autoloading
      spi: bcm63xx: Fix module autoloading
      spi: bcm63xx: Fix missing pm_runtime_disable()
      spi: wpcm-fiu: Use devm_platform_ioremap_resource_byname()
      spi: atmel-quadspi: Simpify resource lookup
      spi: bcmbca-hsspi: Simpify resource lookup
      spi: bcmbca-hsspi: Fix missing pm_runtime_disable()
      spi: bcmbca-hsspi: Use devm_spi_alloc_host()
      spi: atmel-quadspi: Fix uninitialized res
      spi: atmel-quadspi: Simplify with dev_err_probe()
      spi: wpcm-fiu: Fix uninitialized res
      spi: wpcm-fiu: Simplify with dev_err_probe()
      spi: zynqmp-gqspi: Use devm_spi_alloc_host()
      spi: zynqmp-gqspi: Simplify with dev_err_probe()
      spi: geni-qcom: Use devm functions to simplify code

Krzysztof Kozlowski (1):
      spi: cadence-quadspi: Simplify with scoped for each OF child loop

Kuan-Wei Chiu (1):
      spi: zynq-qspi: Replace kzalloc with kmalloc for buffer allocation

Ma Ke (2):
      spi: ppc4xx: handle irq_of_parse_and_map() errors
      spi: ppc4xx: handle irq_of_parse_and_map() errors

Marcelo Schmitt (5):
      spi: Enable controllers to extend the SPI protocol with MOSI idle configuration
      spi: bitbang: Implement support for MOSI idle state configuration
      spi: spi-gpio: Add support for MOSI idle state configuration
      spi: spi-axi-spi-engine: Add support for MOSI idle configuration
      dt-bindings: iio: adc: Add AD4000

Mark Brown (9):
      Add support for AD4000 series of ADCs
      Marvell HW overlay support for Cadence xSPI
      spi: Add dummy definitions for ACPI lookup functions
      spi: bcm63xx: Fix two bugs
      spi: wpcm-fiu: Fix uninitialized res
      spi: bcmbca-hsspi: Fix missing pm_runtime_disable()
      spi: atmel-quadspi: Fix uninitialized res
      Add device tree for ArmSoM Sige 5 board
      spi: Merge up fixes

Nathan Chancellor (1):
      spi: Revert "spi: Insert the missing pci_dev_put()before return"

Pierre-Henry Moussay (1):
      dt-bindings: spi: add PIC64GX SPI/QSPI compatibility to MPFS SPI/QSPI bindings

Rafał Miłecki (1):
      spi: dt-bindings: mediatek,spi-mt65xx: add compatible for MT7981

Witold Sadowski (10):
      spi: dt-bindings: cadence: Add Marvell overlay bindings documentation for Cadence XSPI
      spi: cadence: Add static PHY configuration in Marvell overlay
      spi: cadence: Add clock configuration for Marvell xSPI overlay
      spi: cadence: Add Marvell SDMA operations
      spi: cadence: Add Marvell xSPI interrupt changes
      spi: cadence: Add Marvell xfer operation support
      spi: cadence: Change resource mapping
      spi: cadence: Change cs property reading.
      spi: cadence: Try to read spi-tx/rx-bus width property using ACPI
      spi: cadence: Add 64BIT Kconfig dependency

Yan Zhen (1):
      spi: nxp-fspi: Use max macro

Yang Ruibin (1):
      spi: Insert the missing pci_dev_put()before return

Yang Yingliang (7):
      spi: switch to use spi_controller_is_target()
      spi: slave-time: switch to use spi_target_abort()
      spi: slave-system-control: switch to use spi_target_abort()
      spi: spidev: switch to use spi_target_abort()
      spi: slave-mt27xx: switch to use target_abort
      platform/olpc: olpc-xo175-ec: switch to use spi_target_abort().
      spi: remove spi_controller_is_slave() and spi_slave_abort()

zhang jiao (1):
      spi: spidev_fdx: Fix the wrong format specifier

 .../devicetree/bindings/iio/adc/adi,ad4000.yaml    | 197 ++++++
 .../devicetree/bindings/spi/cdns,xspi.yaml         |  32 +-
 .../bindings/spi/mediatek,spi-mt65xx.yaml          |   1 +
 .../bindings/spi/microchip,mpfs-spi.yaml           |   7 +-
 .../devicetree/bindings/spi/nxp,sc18is.yaml        |  51 ++
 .../devicetree/bindings/spi/spi-nxp-fspi.yaml      |   1 +
 .../devicetree/bindings/spi/spi-rockchip.yaml      |   1 +
 .../devicetree/bindings/spi/spi-sc18is602.txt      |  23 -
 .../devicetree/bindings/trivial-devices.yaml       |   2 +
 Documentation/spi/spi-summary.rst                  |  83 +++
 MAINTAINERS                                        |   7 +
 drivers/platform/olpc/olpc-xo175-ec.c              |   4 +-
 drivers/spi/Kconfig                                |   2 +-
 drivers/spi/atmel-quadspi.c                        |  31 +-
 drivers/spi/spi-axi-spi-engine.c                   |  17 +-
 drivers/spi/spi-bcm63xx.c                          |   9 +-
 drivers/spi/spi-bcmbca-hsspi.c                     |  25 +-
 drivers/spi/spi-bitbang.c                          |  24 +
 drivers/spi/spi-cadence-quadspi.c                  |   9 +-
 drivers/spi/spi-cadence-xspi.c                     | 692 ++++++++++++++++++++-
 drivers/spi/spi-davinci.c                          |   8 +-
 drivers/spi/spi-geni-qcom.c                        |  63 +-
 drivers/spi/spi-gpio.c                             |  12 +-
 drivers/spi/spi-meson-spicc.c                      |  22 +-
 drivers/spi/spi-mt65xx.c                           |  40 +-
 drivers/spi/spi-mxs.c                              |  11 +-
 drivers/spi/spi-nxp-fspi.c                         |  57 +-
 drivers/spi/spi-ppc4xx.c                           |  22 +-
 drivers/spi/spi-rpc-if.c                           |   7 +
 drivers/spi/spi-s3c64xx.c                          |   1 +
 drivers/spi/spi-slave-mt27xx.c                     |  12 +-
 drivers/spi/spi-slave-system-control.c             |   2 +-
 drivers/spi/spi-slave-time.c                       |   2 +-
 drivers/spi/spi-wpcm-fiu.c                         |  17 +-
 drivers/spi/spi-zynq-qspi.c                        |   2 +-
 drivers/spi/spi-zynqmp-gqspi.c                     |  32 +-
 drivers/spi/spi.c                                  |  27 +-
 drivers/spi/spidev.c                               |   2 +-
 include/linux/spi/spi.h                            |  12 +-
 include/linux/spi/spi_bitbang.h                    |   1 +
 include/uapi/linux/spi/spi.h                       |   5 +-
 tools/spi/spidev_fdx.c                             |   2 +-
 42 files changed, 1305 insertions(+), 272 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
 create mode 100644 Documentation/devicetree/bindings/spi/nxp,sc18is.yaml
 delete mode 100644 Documentation/devicetree/bindings/spi/spi-sc18is602.txt

.
Date: Mon, 16 Sep 2024 01:24:35 -0700
From: Kees Cook <kees@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org,
	"Guilherme G. Piccoli" <gpiccoli@igalia.com>,
	Kees Cook <kees@kernel.org>, linux-hardening@vger.kernel.org,
	Mike Rapoport <rppt@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Tony Luck <tony.luck@intel.com>, Wen Yang <wen.yang@linux.dev>
Subject: [GIT PULL] pstore updates for v6.12-rc1

Hi Linus,

Please pull these pstore updates for v6.12-rc1.

Thanks!

-Kees

The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed:

  Linux 6.11-rc2 (2024-08-04 13:50:53 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/pstore-v6.12-rc1

for you to fetch changes up to 1bf8012fc6997f2117f6919369cde16659db60e0:

  pstore: replace spinlock_t by raw_spinlock_t (2024-08-26 13:33:50 -0700)

----------------------------------------------------------------
pstore updates for v6.12-rc1

- ramoops: Fix .rst typo (Steven Rostedt)

- pstore: replace spinlock_t by raw_spinlock_t (Wen Yang)

----------------------------------------------------------------
Steven Rostedt (1):
      pstore/ramoops: Fix typo as there is no "reserver"

Wen Yang (1):
      pstore: replace spinlock_t by raw_spinlock_t

 Documentation/admin-guide/ramoops.rst | 2 +-
 fs/pstore/platform.c                  | 8 ++++----
 include/linux/pstore.h                | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

-- 
Kees Cook

.
Date: Mon, 16 Sep 2024 10:38:34 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] core/debugobjects for v6.12-rc1

Linus,

please pull the latest core/debugobjects branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-debugobject=
s-2024-09-16

up to:  63a4a9b52c3c: debugobjects: Remove redundant checks in fill_pool()


A set of updates for debugobjects:

  - Use the threshold to check for the pool refill condition and not the
    run time recorded all time low fill value, which is lower than the
    threshold and therefore causes refills to be delayed.

  - KCSAN annotation updates and simplification of the fill_pool() code.

Thanks,

	tglx

------------------>
Zhen Lei (3):
      debugobjects: Fix the compilation attributes of some global variables
      debugobjects: Fix conditions in fill_pool()
      debugobjects: Remove redundant checks in fill_pool()


 lib/debugobjects.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index 7cea91e193a8..5ce473ad499b 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -70,10 +70,10 @@ static HLIST_HEAD(obj_to_free);
  * made at debug_stats_show(). Both obj_pool_min_free and obj_pool_max_used
  * can be off.
  */
-static int			obj_pool_min_free =3D ODEBUG_POOL_SIZE;
-static int			obj_pool_free =3D ODEBUG_POOL_SIZE;
+static int __data_racy		obj_pool_min_free =3D ODEBUG_POOL_SIZE;
+static int __data_racy		obj_pool_free =3D ODEBUG_POOL_SIZE;
 static int			obj_pool_used;
-static int			obj_pool_max_used;
+static int __data_racy		obj_pool_max_used;
 static bool			obj_freeing;
 /* The number of objs on the global free list */
 static int			obj_nr_tofree;
@@ -84,9 +84,9 @@ static int __data_racy			debug_objects_fixups __read_mostly;
 static int __data_racy			debug_objects_warnings __read_mostly;
 static int __data_racy			debug_objects_enabled __read_mostly
 					=3D CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT;
-static int __data_racy			debug_objects_pool_size __read_mostly
+static int				debug_objects_pool_size __ro_after_init
 					=3D ODEBUG_POOL_SIZE;
-static int __data_racy			debug_objects_pool_min_level __read_mostly
+static int				debug_objects_pool_min_level __ro_after_init
 					=3D ODEBUG_POOL_MIN_LEVEL;
=20
 static const struct debug_obj_descr *descr_test  __read_mostly;
@@ -95,8 +95,8 @@ static struct kmem_cache	*obj_cache __ro_after_init;
 /*
  * Track numbers of kmem_cache_alloc()/free() calls done.
  */
-static int			debug_objects_allocated;
-static int			debug_objects_freed;
+static int __data_racy		debug_objects_allocated;
+static int __data_racy		debug_objects_freed;
=20
 static void free_obj_work(struct work_struct *work);
 static DECLARE_DELAYED_WORK(debug_obj_work, free_obj_work);
@@ -135,20 +135,19 @@ static void fill_pool(void)
 		return;
=20
 	/*
-	 * Reuse objs from the global free list; they will be reinitialized
-	 * when allocating.
+	 * Reuse objs from the global obj_to_free list; they will be
+	 * reinitialized when allocating.
 	 *
-	 * Both obj_nr_tofree and obj_pool_free are checked locklessly; the
-	 * READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical
-	 * sections.
+	 * obj_nr_tofree is checked locklessly; the READ_ONCE() pairs with
+	 * the WRITE_ONCE() in pool_lock critical sections.
 	 */
-	while (READ_ONCE(obj_nr_tofree) && (READ_ONCE(obj_pool_free) < obj_pool_min=
_free)) {
+	if (READ_ONCE(obj_nr_tofree)) {
 		raw_spin_lock_irqsave(&pool_lock, flags);
 		/*
 		 * Recheck with the lock held as the worker thread might have
 		 * won the race and freed the global free list already.
 		 */
-		while (obj_nr_tofree && (obj_pool_free < obj_pool_min_free)) {
+		while (obj_nr_tofree && (obj_pool_free < debug_objects_pool_min_level)) {
 			obj =3D hlist_entry(obj_to_free.first, typeof(*obj), node);
 			hlist_del(&obj->node);
 			WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1);


.
Date: Mon, 16 Sep 2024 10:38:37 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] smp/core for v6.12-rc1

Linus,

please pull the latest smp/core branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git smp-core-2024-09=
-16

up to:  1d07085402d1: smp: Mark smp_prepare_boot_cpu() __init

A set of updates for CPU hotplug:

  - Prepare the core for supporting parallel hotplug on loongarch

  - A small set of cleanups and enhancements


Thanks,

	tglx

------------------>
Bibo Mao (1):
      smp: Mark smp_prepare_boot_cpu() __init

Jiaxun Yang (2):
      cpu/hotplug: Make HOTPLUG_PARALLEL independent of HOTPLUG_SMT
      cpu/hotplug: Provide weak fallback for arch_cpuhp_init_parallel_bringup=
()

Thorsten Blum (1):
      cpu: Fix W=3D1 build kernel-doc warning


 arch/loongarch/kernel/smp.c |  2 +-
 arch/mips/kernel/smp.c      |  2 +-
 arch/powerpc/kernel/smp.c   |  2 +-
 include/linux/smp.h         |  2 +-
 kernel/cpu.c                | 20 +++++++++++++++++---
 5 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c
index ca405ab86aae..be2655c4c414 100644
--- a/arch/loongarch/kernel/smp.c
+++ b/arch/loongarch/kernel/smp.c
@@ -476,7 +476,7 @@ core_initcall(ipi_pm_init);
 #endif
=20
 /* Preload SMP state for boot cpu */
-void smp_prepare_boot_cpu(void)
+void __init smp_prepare_boot_cpu(void)
 {
 	unsigned int cpu, node, rr_node;
=20
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 0362fc5df7b0..39e193cad2b9 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -439,7 +439,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 }
=20
 /* preload SMP state for boot cpu */
-void smp_prepare_boot_cpu(void)
+void __init smp_prepare_boot_cpu(void)
 {
 	if (mp_ops->prepare_boot_cpu)
 		mp_ops->prepare_boot_cpu();
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 46e6d2cd7a2d..4ab9b8cee77a 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1166,7 +1166,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 	cpu_smt_set_num_threads(num_threads, threads_per_core);
 }
=20
-void smp_prepare_boot_cpu(void)
+void __init smp_prepare_boot_cpu(void)
 {
 	BUG_ON(smp_processor_id() !=3D boot_cpuid);
 #ifdef CONFIG_PPC64
diff --git a/include/linux/smp.h b/include/linux/smp.h
index fcd61dfe2af3..6a0813c905d0 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -109,7 +109,7 @@ static inline void on_each_cpu_cond(smp_cond_func_t cond_=
func,
  * Architecture specific boot CPU setup.  Defined as empty weak function in
  * init/main.c. Architectures can override it.
  */
-void smp_prepare_boot_cpu(void);
+void __init smp_prepare_boot_cpu(void);
=20
 #ifdef CONFIG_SMP
=20
diff --git a/kernel/cpu.c b/kernel/cpu.c
index b1fd2a3db91a..0c9c5dfc8ddd 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1808,6 +1808,7 @@ static int __init parallel_bringup_parse_param(char *ar=
g)
 }
 early_param("cpuhp.parallel", parallel_bringup_parse_param);
=20
+#ifdef CONFIG_HOTPLUG_SMT
 static inline bool cpuhp_smt_aware(void)
 {
 	return cpu_smt_max_threads > 1;
@@ -1817,6 +1818,21 @@ static inline const struct cpumask *cpuhp_get_primary_=
thread_mask(void)
 {
 	return cpu_primary_thread_mask;
 }
+#else
+static inline bool cpuhp_smt_aware(void)
+{
+	return false;
+}
+static inline const struct cpumask *cpuhp_get_primary_thread_mask(void)
+{
+	return cpu_none_mask;
+}
+#endif
+
+bool __weak arch_cpuhp_init_parallel_bringup(void)
+{
+	return true;
+}
=20
 /*
  * On architectures which have enabled parallel bringup this invokes all BP
@@ -2689,9 +2705,7 @@ int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
 	return ret;
 }
=20
-/**
- * Check if the core a CPU belongs to is online
- */
+/* Check if the core a CPU belongs to is online */
 #if !defined(topology_is_core_online)
 static inline bool topology_is_core_online(unsigned int cpu)
 {


.
Date: Mon, 16 Sep 2024 10:38:39 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] timers/clocksource for v6.12-rc1

Linus,

please pull the latest timers/clocksource branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-clocksour=
ce-2024-09-16

up to:  4ac1dd3245b9: clocksource: Set cs_watchdog_read() checks based on .un=
certainty_margin


Updates for the clocksource watchdog:

  - Make the uncertainty margin handling more robust to prevent false
    positives

  - Clarify comments


Thanks,

	tglx

------------------>
Borislav Petkov (1):
      clocksource: Improve comments for watchdog skew bounds

Paul E. McKenney (2):
      clocksource: Fix comments on WATCHDOG_THRESHOLD & WATCHDOG_MAX_SKEW
      clocksource: Set cs_watchdog_read() checks based on .uncertainty_margin


 kernel/time/clocksource.c | 45 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 32 insertions(+), 13 deletions(-)

diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
index d0538a75f4c6..23336eecb4f4 100644
--- a/kernel/time/clocksource.c
+++ b/kernel/time/clocksource.c
@@ -113,7 +113,6 @@ static u64 suspend_start;
=20
 /*
  * Threshold: 0.0312s, when doubled: 0.0625s.
- * Also a default for cs->uncertainty_margin when registering clocks.
  */
 #define WATCHDOG_THRESHOLD (NSEC_PER_SEC >> 5)
=20
@@ -125,6 +124,13 @@ static u64 suspend_start;
  *
  * The default of 500 parts per million is based on NTP's limits.
  * If a clocksource is good enough for NTP, it is good enough for us!
+ *
+ * In other words, by default, even if a clocksource is extremely
+ * precise (for example, with a sub-nanosecond period), the maximum
+ * permissible skew between the clocksource watchdog and the clocksource
+ * under test is not permitted to go below the 500ppm minimum defined
+ * by MAX_SKEW_USEC.  This 500ppm minimum may be overridden using the
+ * CLOCKSOURCE_WATCHDOG_MAX_SKEW_US Kconfig option.
  */
 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US
 #define MAX_SKEW_USEC	CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US
@@ -132,6 +138,13 @@ static u64 suspend_start;
 #define MAX_SKEW_USEC	(125 * WATCHDOG_INTERVAL / HZ)
 #endif
=20
+/*
+ * Default for maximum permissible skew when cs->uncertainty_margin is
+ * not specified, and the lower bound even when cs->uncertainty_margin
+ * is specified.  This is also the default that is used when registering
+ * clocks with unspecifed cs->uncertainty_margin, so this macro is used
+ * even in CONFIG_CLOCKSOURCE_WATCHDOG=3Dn kernels.
+ */
 #define WATCHDOG_MAX_SKEW (MAX_SKEW_USEC * NSEC_PER_USEC)
=20
 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
@@ -231,6 +244,7 @@ enum wd_read_status {
=20
 static enum wd_read_status cs_watchdog_read(struct clocksource *cs, u64 *csn=
ow, u64 *wdnow)
 {
+	int64_t md =3D 2 * watchdog->uncertainty_margin;
 	unsigned int nretries, max_retries;
 	int64_t wd_delay, wd_seq_delay;
 	u64 wd_end, wd_end2;
@@ -245,7 +259,7 @@ static enum wd_read_status cs_watchdog_read(struct clocks=
ource *cs, u64 *csnow,
 		local_irq_enable();
=20
 		wd_delay =3D cycles_to_nsec_safe(watchdog, *wdnow, wd_end);
-		if (wd_delay <=3D WATCHDOG_MAX_SKEW) {
+		if (wd_delay <=3D md + cs->uncertainty_margin) {
 			if (nretries > 1 && nretries >=3D max_retries) {
 				pr_warn("timekeeping watchdog on CPU%d: %s retried %d times before succe=
ss\n",
 					smp_processor_id(), watchdog->name, nretries);
@@ -258,12 +272,12 @@ static enum wd_read_status cs_watchdog_read(struct cloc=
ksource *cs, u64 *csnow,
 		 * there is too much external interferences that cause
 		 * significant delay in reading both clocksource and watchdog.
 		 *
-		 * If consecutive WD read-back delay > WATCHDOG_MAX_SKEW/2,
-		 * report system busy, reinit the watchdog and skip the current
+		 * If consecutive WD read-back delay > md, report
+		 * system busy, reinit the watchdog and skip the current
 		 * watchdog test.
 		 */
 		wd_seq_delay =3D cycles_to_nsec_safe(watchdog, wd_end, wd_end2);
-		if (wd_seq_delay > WATCHDOG_MAX_SKEW/2)
+		if (wd_seq_delay > md)
 			goto skip_test;
 	}
=20
@@ -1146,14 +1160,19 @@ void __clocksource_update_freq_scale(struct clocksour=
ce *cs, u32 scale, u32 freq
 	}
=20
 	/*
-	 * If the uncertainty margin is not specified, calculate it.
-	 * If both scale and freq are non-zero, calculate the clock
-	 * period, but bound below at 2*WATCHDOG_MAX_SKEW.  However,
-	 * if either of scale or freq is zero, be very conservative and
-	 * take the tens-of-milliseconds WATCHDOG_THRESHOLD value for the
-	 * uncertainty margin.  Allow stupidly small uncertainty margins
-	 * to be specified by the caller for testing purposes, but warn
-	 * to discourage production use of this capability.
+	 * If the uncertainty margin is not specified, calculate it.  If
+	 * both scale and freq are non-zero, calculate the clock period, but
+	 * bound below at 2*WATCHDOG_MAX_SKEW, that is, 500ppm by default.
+	 * However, if either of scale or freq is zero, be very conservative
+	 * and take the tens-of-milliseconds WATCHDOG_THRESHOLD value
+	 * for the uncertainty margin.  Allow stupidly small uncertainty
+	 * margins to be specified by the caller for testing purposes,
+	 * but warn to discourage production use of this capability.
+	 *
+	 * Bottom line:  The sum of the uncertainty margins of the
+	 * watchdog clocksource and the clocksource under test will be at
+	 * least 500ppm by default.  For more information, please see the
+	 * comment preceding CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US above.
 	 */
 	if (scale && freq && !cs->uncertainty_margin) {
 		cs->uncertainty_margin =3D NSEC_PER_SEC / (scale * freq);


.
Date: Mon, 16 Sep 2024 10:38:41 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] timers/core for v6.12-rc1

Linus,

please pull the latest timers/core branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-core-2024=
-09-16

up to:  35b603f8a78b: ntp: Make sure RTC is synchronized when time goes backw=
ards

Updates for timers and timekeeping:

  - Core:

	- Overhaul of posix-timers in preparation of removing the
	  workaround for periodic timers which have signal delivery
	  ignored.

        - Remove the historical extra jiffie in msleep()

	  msleep() adds an extra jiffie to the timeout value to ensure
	  minimal sleep time. The timer wheel ensures minimal sleep
	  time since the large rewrite to a non-cascading wheel, but the
	  extra jiffie in msleep() remained unnoticed. Remove it.

        - Make the timer slack handling correct for realtime tasks.

	  The procfs interface is inconsistent and does neither reflect
	  reality nor conforms to the man page. Show the correct 0 slack
	  for real time tasks and enforce it at the core level instead of
	  having inconsistent individual checks in various timer setup
	  functions.

        - The usual set of updates and enhancements all over the place.

  - Drivers:

        - Allow the ACPI PM timer to be turned off during suspend
=09
	- No new drivers

	- The usual updates and enhancements in various drivers

Thanks,

	tglx

------------------>
Ankit Agrawal (1):
      clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_tim=
er_init()

Anna-Maria Behnsen (5):
      timers: Remove historical extra jiffie for timeout in msleep()
      timers: Annotate possible non critical data race of next_expiry
      timers: Rename next_expiry_recalc() to be unique
      cpu: Use already existing usleep_range()
      treewide: Fix wrong singular form of jiffies in comments

Benjamin ROBIN (1):
      ntp: Make sure RTC is synchronized when time goes backwards

Detlev Casanova (1):
      dt-bindings: timer: rockchip: Add rk3576 compatible

Felix Moessbauer (1):
      hrtimer: Use and report correct timerslack values for realtime tasks

Gaosheng Cui (2):
      clocksource/drivers/asm9260: Add missing clk_disable_unprepare in asm92=
60_timer_init
      clocksource/drivers/cadence-ttc: Add missing clk_disable_unprepare in t=
tc_setup_clockevent

Huan Yang (1):
      clocksource/drivers/ingenic: Use devm_clk_get_enabled() helpers

Marek Maslanka (3):
      clocksource: acpi_pm: Add external callback for suspend/resume
      platform/x86:intel/pmc: Enable the ACPI PM Timer to be turned off when =
suspended
      platform/x86:intel/pmc: Fix comment for the pmc_core_acpi_pm_timer_susp=
end_resume function

Sebastian Andrzej Siewior (2):
      timers: Add sparse annotation for timer_sync_wait_running().
      hrtimer: Annotate hrtimer_cpu_base_.*_expiry() for sparse.

Thomas Gleixner (24):
      selftests/timers/posix_timers: Simplify error handling
      selftests/timers/posix_timers: Add SIG_IGN test
      selftests/timers/posix_timers: Validate signal rules
      selftests/timers/posix-timers: Validate SIGEV_NONE
      selftests/timers/posix-timers: Validate timer_gettime()
      selftests/timers/posix-timers: Validate overrun after unblock
      posix-cpu-timers: Split up posix_cpu_timer_get()
      posix-cpu-timers: Save interval only for armed timers
      posix-cpu-timers: Handle interval timers correctly in timer_get()
      posix-cpu-timers: Handle SIGEV_NONE timers correctly in timer_get()
      posix-cpu-timers: Handle SIGEV_NONE timers correctly in timer_set()
      posix-cpu-timers: Replace old expiry retrieval in posix_cpu_timer_set()
      posix-cpu-timers: Do not arm SIGEV_NONE timers
      posix-cpu-timers: Use @now instead of @val for clarity
      posix-cpu-timers: Remove incorrect comment in posix_cpu_timer_set()
      posix-cpu-timers: Simplify posix_cpu_timer_set()
      posix-timers: Retrieve interval in common timer_settime() code
      posix-timers: Clear overrun in common_timer_set()
      posix-timers: Convert timer list to hlist
      posix-timers: Consolidate timer setup
      posix-cpu-timers: Make k_itimer::it_active consistent
      posix-timers: Consolidate signal queueing
      signal: Remove task argument from dequeue_signal()
      signal: Replace BUG_ON()s

Uros Bizjak (1):
      clocksource/drivers/jcore: Use request_percpu_irq()

Zhang Zekun (1):
      clocksource/drivers/arm_arch_timer: Using for_each_available_child_of_n=
ode_scoped()


 Documentation/admin-guide/media/vivid.rst          |   2 +-
 .../bindings/timer/rockchip,rk-timer.yaml          |   1 +
 Documentation/timers/timers-howto.rst              |   2 +-
 .../sp_SP/scheduler/sched-design-CFS.rst           |   2 +-
 arch/arm/mach-versatile/spc.c                      |   2 +-
 arch/m68k/q40/q40ints.c                            |   2 +-
 arch/x86/kernel/cpu/mce/dev-mcelog.c               |   2 +-
 drivers/char/ipmi/ipmi_ssif.c                      |   2 +-
 drivers/clocksource/acpi_pm.c                      |  32 ++
 drivers/clocksource/arm_arch_timer.c               |  11 +-
 drivers/clocksource/asm9260_timer.c                |   1 +
 drivers/clocksource/ingenic-ost.c                  |   7 +-
 drivers/clocksource/jcore-pit.c                    |   7 +-
 drivers/clocksource/timer-cadence-ttc.c            |   6 +-
 drivers/clocksource/timer-qcom.c                   |   7 +-
 drivers/dma-buf/st-dma-fence.c                     |   2 +-
 drivers/gpu/drm/i915/gem/i915_gem_wait.c           |   2 +-
 drivers/gpu/drm/i915/gt/selftest_execlists.c       |   4 +-
 drivers/gpu/drm/i915/i915_utils.c                  |   2 +-
 drivers/gpu/drm/v3d/v3d_bo.c                       |   2 +-
 drivers/isdn/mISDN/dsp_cmx.c                       |   2 +-
 drivers/net/ethernet/marvell/mvmdio.c              |   2 +-
 drivers/platform/x86/intel/pmc/adl.c               |   2 +
 drivers/platform/x86/intel/pmc/cnp.c               |   2 +
 drivers/platform/x86/intel/pmc/core.c              |  45 ++
 drivers/platform/x86/intel/pmc/core.h              |   8 +
 drivers/platform/x86/intel/pmc/icl.c               |   2 +
 drivers/platform/x86/intel/pmc/mtl.c               |   2 +
 drivers/platform/x86/intel/pmc/spt.c               |   2 +
 drivers/platform/x86/intel/pmc/tgl.c               |   2 +
 fs/proc/base.c                                     |  15 +-
 fs/select.c                                        |  11 +-
 fs/signalfd.c                                      |   4 +-
 fs/xfs/xfs_buf.h                                   |   2 +-
 include/linux/acpi_pmtmr.h                         |  13 +
 include/linux/jiffies.h                            |   2 +-
 include/linux/posix-timers.h                       |   2 +-
 include/linux/sched/signal.h                       |   7 +-
 include/linux/timekeeper_internal.h                |   2 +-
 init/init_task.c                                   |   2 +-
 kernel/cpu.c                                       |   2 +-
 kernel/fork.c                                      |   2 +-
 kernel/sched/syscalls.c                            |   8 +
 kernel/signal.c                                    |  34 +-
 kernel/sys.c                                       |   2 +
 kernel/time/alarmtimer.c                           |   9 +-
 kernel/time/clockevents.c                          |   2 +-
 kernel/time/hrtimer.c                              |  22 +-
 kernel/time/ntp.c                                  |  10 +-
 kernel/time/ntp_internal.h                         |   4 +-
 kernel/time/posix-cpu-timers.c                     | 207 ++++----
 kernel/time/posix-timers.c                         |  73 +--
 kernel/time/posix-timers.h                         |   3 +-
 kernel/time/timekeeping.c                          |   4 +-
 kernel/time/timer.c                                |  62 ++-
 lib/Kconfig.debug                                  |   2 +-
 net/batman-adv/types.h                             |   2 +-
 tools/testing/selftests/timers/posix_timers.c      | 550 +++++++++++++++++--=
--
 58 files changed, 848 insertions(+), 377 deletions(-)

diff --git a/Documentation/admin-guide/media/vivid.rst b/Documentation/admin-=
guide/media/vivid.rst
index 1306f19ecb5a..c9d301ab46a3 100644
--- a/Documentation/admin-guide/media/vivid.rst
+++ b/Documentation/admin-guide/media/vivid.rst
@@ -328,7 +328,7 @@ and an HDMI input, one input for each input type. Those a=
re described in more
 detail below.
=20
 Special attention has been given to the rate at which new frames become
-available. The jitter will be around 1 jiffie (that depends on the HZ
+available. The jitter will be around 1 jiffy (that depends on the HZ
 configuration of your kernel, so usually 1/100, 1/250 or 1/1000 of a second),
 but the long-term behavior is exactly following the framerate. So a
 framerate of 59.94 Hz is really different from 60 Hz. If the framerate
diff --git a/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml b=
/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml
index 19e56b7577a0..6d0eb0014eee 100644
--- a/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml
+++ b/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml
@@ -24,6 +24,7 @@ properties:
               - rockchip,rk3228-timer
               - rockchip,rk3229-timer
               - rockchip,rk3368-timer
+              - rockchip,rk3576-timer
               - rockchip,rk3588-timer
               - rockchip,px30-timer
           - const: rockchip,rk3288-timer
diff --git a/Documentation/timers/timers-howto.rst b/Documentation/timers/tim=
ers-howto.rst
index 5c169e3d29a8..ef7a4652ccc9 100644
--- a/Documentation/timers/timers-howto.rst
+++ b/Documentation/timers/timers-howto.rst
@@ -19,7 +19,7 @@ it really need to delay in atomic context?" If so...
=20
 ATOMIC CONTEXT:
 	You must use the `*delay` family of functions. These
-	functions use the jiffie estimation of clock speed
+	functions use the jiffy estimation of clock speed
 	and will busy wait for enough loop cycles to achieve
 	the desired delay:
=20
diff --git a/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst =
b/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst
index 90a153cad4e8..731c266beb1a 100644
--- a/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst
+++ b/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst
@@ -109,7 +109,7 @@ para que se ejecute, y la tarea en ejecuci=C3=B3n es inte=
rrumpida.
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
=20
 CFS usa una granularidad de nanosegundos y no depende de ning=C3=BAn
-jiffie o detalles como HZ. De este modo, el gestor de tareas CFS no tiene
+jiffy o detalles como HZ. De este modo, el gestor de tareas CFS no tiene
 noci=C3=B3n de "ventanas de tiempo" de la forma en que ten=C3=ADa el gestor =
de
 tareas previo, y tampoco tiene heur=C3=ADsticos. =C3=9Anicamente hay un par=
=C3=A1metro
 central ajustable (se ha de cambiar en CONFIG_SCHED_DEBUG):
diff --git a/arch/arm/mach-versatile/spc.c b/arch/arm/mach-versatile/spc.c
index 5e44170e1a9a..790092734cf6 100644
--- a/arch/arm/mach-versatile/spc.c
+++ b/arch/arm/mach-versatile/spc.c
@@ -73,7 +73,7 @@
=20
 /*
  * Even though the SPC takes max 3-5 ms to complete any OPP/COMMS
- * operation, the operation could start just before jiffie is about
+ * operation, the operation could start just before jiffy is about
  * to be incremented. So setting timeout value of 20ms =3D 2jiffies@100Hz
  */
 #define TIMEOUT_US	20000
diff --git a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c
index 10f1f294e91f..14b774b9d308 100644
--- a/arch/m68k/q40/q40ints.c
+++ b/arch/m68k/q40/q40ints.c
@@ -106,7 +106,7 @@ void __init q40_init_IRQ(void)
  * this stuff doesn't really belong here..
  */
=20
-int ql_ticks;              /* 200Hz ticks since last jiffie */
+int ql_ticks;              /* 200Hz ticks since last jiffy */
 static int sound_ticks;
=20
 #define SVOL 45
diff --git a/arch/x86/kernel/cpu/mce/dev-mcelog.c b/arch/x86/kernel/cpu/mce/d=
ev-mcelog.c
index a05ac0716ecf..a3aa0199222e 100644
--- a/arch/x86/kernel/cpu/mce/dev-mcelog.c
+++ b/arch/x86/kernel/cpu/mce/dev-mcelog.c
@@ -314,7 +314,7 @@ static ssize_t mce_chrdev_write(struct file *filp, const =
char __user *ubuf,
=20
 	/*
 	 * Need to give user space some time to set everything up,
-	 * so do it a jiffie or two later everywhere.
+	 * so do it a jiffy or two later everywhere.
 	 */
 	schedule_timeout(2);
=20
diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index 96ad571d041a..e093028391af 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -980,7 +980,7 @@ static void msg_written_handler(struct ssif_info *ssif_in=
fo, int result,
 			ipmi_ssif_unlock_cond(ssif_info, flags);
 			start_get(ssif_info);
 		} else {
-			/* Wait a jiffie then request the next message */
+			/* Wait a jiffy then request the next message */
 			ssif_info->waiting_alert =3D true;
 			ssif_info->retries_left =3D SSIF_RECV_RETRIES;
 			if (!ssif_info->stopping)
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c
index 82338773602c..b4330a01a566 100644
--- a/drivers/clocksource/acpi_pm.c
+++ b/drivers/clocksource/acpi_pm.c
@@ -25,6 +25,10 @@
 #include <asm/io.h>
 #include <asm/time.h>
=20
+static void *suspend_resume_cb_data;
+
+static void (*suspend_resume_callback)(void *data, bool suspend);
+
 /*
  * The I/O port the PMTMR resides at.
  * The location is detected during setup_arch(),
@@ -58,6 +62,32 @@ u32 acpi_pm_read_verified(void)
 	return v2;
 }
=20
+void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool=
 suspend), void *data)
+{
+	suspend_resume_callback =3D cb;
+	suspend_resume_cb_data =3D data;
+}
+EXPORT_SYMBOL_GPL(acpi_pmtmr_register_suspend_resume_callback);
+
+void acpi_pmtmr_unregister_suspend_resume_callback(void)
+{
+	suspend_resume_callback =3D NULL;
+	suspend_resume_cb_data =3D NULL;
+}
+EXPORT_SYMBOL_GPL(acpi_pmtmr_unregister_suspend_resume_callback);
+
+static void acpi_pm_suspend(struct clocksource *cs)
+{
+	if (suspend_resume_callback)
+		suspend_resume_callback(suspend_resume_cb_data, true);
+}
+
+static void acpi_pm_resume(struct clocksource *cs)
+{
+	if (suspend_resume_callback)
+		suspend_resume_callback(suspend_resume_cb_data, false);
+}
+
 static u64 acpi_pm_read(struct clocksource *cs)
 {
 	return (u64)read_pmtmr();
@@ -69,6 +99,8 @@ static struct clocksource clocksource_acpi_pm =3D {
 	.read		=3D acpi_pm_read,
 	.mask		=3D (u64)ACPI_PM_MASK,
 	.flags		=3D CLOCK_SOURCE_IS_CONTINUOUS,
+	.suspend	=3D acpi_pm_suspend,
+	.resume		=3D acpi_pm_resume,
 };
=20
=20
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_a=
rch_timer.c
index aeafc74181f0..03733101e231 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -1594,7 +1594,6 @@ static int __init arch_timer_mem_of_init(struct device_=
node *np)
 {
 	struct arch_timer_mem *timer_mem;
 	struct arch_timer_mem_frame *frame;
-	struct device_node *frame_node;
 	struct resource res;
 	int ret =3D -EINVAL;
 	u32 rate;
@@ -1608,33 +1607,29 @@ static int __init arch_timer_mem_of_init(struct devic=
e_node *np)
 	timer_mem->cntctlbase =3D res.start;
 	timer_mem->size =3D resource_size(&res);
=20
-	for_each_available_child_of_node(np, frame_node) {
+	for_each_available_child_of_node_scoped(np, frame_node) {
 		u32 n;
 		struct arch_timer_mem_frame *frame;
=20
 		if (of_property_read_u32(frame_node, "frame-number", &n)) {
 			pr_err(FW_BUG "Missing frame-number.\n");
-			of_node_put(frame_node);
 			goto out;
 		}
 		if (n >=3D ARCH_TIMER_MEM_MAX_FRAMES) {
 			pr_err(FW_BUG "Wrong frame-number, only 0-%u are permitted.\n",
 			       ARCH_TIMER_MEM_MAX_FRAMES - 1);
-			of_node_put(frame_node);
 			goto out;
 		}
 		frame =3D &timer_mem->frame[n];
=20
 		if (frame->valid) {
 			pr_err(FW_BUG "Duplicated frame-number.\n");
-			of_node_put(frame_node);
 			goto out;
 		}
=20
-		if (of_address_to_resource(frame_node, 0, &res)) {
-			of_node_put(frame_node);
+		if (of_address_to_resource(frame_node, 0, &res))
 			goto out;
-		}
+
 		frame->cntbase =3D res.start;
 		frame->size =3D resource_size(&res);
=20
diff --git a/drivers/clocksource/asm9260_timer.c b/drivers/clocksource/asm926=
0_timer.c
index 5b39d3701fa3..8f97ab0b01ec 100644
--- a/drivers/clocksource/asm9260_timer.c
+++ b/drivers/clocksource/asm9260_timer.c
@@ -210,6 +210,7 @@ static int __init asm9260_timer_init(struct device_node *=
np)
 			DRIVER_NAME, &event_dev);
 	if (ret) {
 		pr_err("Failed to setup irq!\n");
+		clk_disable_unprepare(clk);
 		return ret;
 	}
=20
diff --git a/drivers/clocksource/ingenic-ost.c b/drivers/clocksource/ingenic-=
ost.c
index 9f7c280a1336..e0ec33307c84 100644
--- a/drivers/clocksource/ingenic-ost.c
+++ b/drivers/clocksource/ingenic-ost.c
@@ -93,14 +93,10 @@ static int __init ingenic_ost_probe(struct platform_devic=
e *pdev)
 		return PTR_ERR(map);
 	}
=20
-	ost->clk =3D devm_clk_get(dev, "ost");
+	ost->clk =3D devm_clk_get_enabled(dev, "ost");
 	if (IS_ERR(ost->clk))
 		return PTR_ERR(ost->clk);
=20
-	err =3D clk_prepare_enable(ost->clk);
-	if (err)
-		return err;
-
 	/* Clear counter high/low registers */
 	if (soc_info->is64bit)
 		regmap_write(map, TCU_REG_OST_CNTL, 0);
@@ -129,7 +125,6 @@ static int __init ingenic_ost_probe(struct platform_devic=
e *pdev)
 	err =3D clocksource_register_hz(cs, rate);
 	if (err) {
 		dev_err(dev, "clocksource registration failed");
-		clk_disable_unprepare(ost->clk);
 		return err;
 	}
=20
diff --git a/drivers/clocksource/jcore-pit.c b/drivers/clocksource/jcore-pit.c
index a4a991101fa3..a3fe98cd3838 100644
--- a/drivers/clocksource/jcore-pit.c
+++ b/drivers/clocksource/jcore-pit.c
@@ -120,7 +120,7 @@ static int jcore_pit_local_init(unsigned cpu)
=20
 static irqreturn_t jcore_timer_interrupt(int irq, void *dev_id)
 {
-	struct jcore_pit *pit =3D this_cpu_ptr(dev_id);
+	struct jcore_pit *pit =3D dev_id;
=20
 	if (clockevent_state_oneshot(&pit->ced))
 		jcore_pit_disable(pit);
@@ -168,9 +168,8 @@ static int __init jcore_pit_init(struct device_node *node)
 		return -ENOMEM;
 	}
=20
-	err =3D request_irq(pit_irq, jcore_timer_interrupt,
-			  IRQF_TIMER | IRQF_PERCPU,
-			  "jcore_pit", jcore_pit_percpu);
+	err =3D request_percpu_irq(pit_irq, jcore_timer_interrupt,
+				 "jcore_pit", jcore_pit_percpu);
 	if (err) {
 		pr_err("pit irq request failed: %d\n", err);
 		free_percpu(jcore_pit_percpu);
diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/ti=
mer-cadence-ttc.c
index ca7a06489c40..b8a1cf59b9d6 100644
--- a/drivers/clocksource/timer-cadence-ttc.c
+++ b/drivers/clocksource/timer-cadence-ttc.c
@@ -435,7 +435,7 @@ static int __init ttc_setup_clockevent(struct clk *clk,
 				    &ttcce->ttc.clk_rate_change_nb);
 	if (err) {
 		pr_warn("Unable to register clock notifier.\n");
-		goto out_kfree;
+		goto out_clk_unprepare;
 	}
=20
 	ttcce->ttc.freq =3D clk_get_rate(ttcce->ttc.clk);
@@ -465,13 +465,15 @@ static int __init ttc_setup_clockevent(struct clk *clk,
 	err =3D request_irq(irq, ttc_clock_event_interrupt,
 			  IRQF_TIMER, ttcce->ce.name, ttcce);
 	if (err)
-		goto out_kfree;
+		goto out_clk_unprepare;
=20
 	clockevents_config_and_register(&ttcce->ce,
 			ttcce->ttc.freq / PRESCALE, 1, 0xfffe);
=20
 	return 0;
=20
+out_clk_unprepare:
+	clk_disable_unprepare(ttcce->ttc.clk);
 out_kfree:
 	kfree(ttcce);
 	return err;
diff --git a/drivers/clocksource/timer-qcom.c b/drivers/clocksource/timer-qco=
m.c
index b4afe3a67583..eac4c95c6127 100644
--- a/drivers/clocksource/timer-qcom.c
+++ b/drivers/clocksource/timer-qcom.c
@@ -233,6 +233,7 @@ static int __init msm_dt_timer_init(struct device_node *n=
p)
 	}
=20
 	if (of_property_read_u32(np, "clock-frequency", &freq)) {
+		iounmap(cpu0_base);
 		pr_err("Unknown frequency\n");
 		return -EINVAL;
 	}
@@ -243,7 +244,11 @@ static int __init msm_dt_timer_init(struct device_node *=
np)
 	freq /=3D 4;
 	writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL);
=20
-	return msm_timer_init(freq, 32, irq, !!percpu_offset);
+	ret =3D msm_timer_init(freq, 32, irq, !!percpu_offset);
+	if (ret)
+		iounmap(cpu0_base);
+
+	return ret;
 }
 TIMER_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init);
 TIMER_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init);
diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-fence.c
index 6a1bfcd0cc21..cf2ce3744ce6 100644
--- a/drivers/dma-buf/st-dma-fence.c
+++ b/drivers/dma-buf/st-dma-fence.c
@@ -402,7 +402,7 @@ static int test_wait_timeout(void *arg)
=20
 	if (dma_fence_wait_timeout(wt.f, false, 2) =3D=3D -ETIME) {
 		if (timer_pending(&wt.timer)) {
-			pr_notice("Timer did not fire within the jiffie!\n");
+			pr_notice("Timer did not fire within the jiffy!\n");
 			err =3D 0; /* not our fault! */
 		} else {
 			pr_err("Wait reported incomplete after timeout\n");
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_wait.c b/drivers/gpu/drm/i915/=
gem/i915_gem_wait.c
index d4b918fb11ce..1f55e62044a4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_wait.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_wait.c
@@ -266,7 +266,7 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, s=
truct drm_file *file)
 		if (ret =3D=3D -ETIME && !nsecs_to_jiffies(args->timeout_ns))
 			args->timeout_ns =3D 0;
=20
-		/* Asked to wait beyond the jiffie/scheduler precision? */
+		/* Asked to wait beyond the jiffy/scheduler precision? */
 		if (ret =3D=3D -ETIME && args->timeout_ns)
 			ret =3D -EAGAIN;
 	}
diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm/i=
915/gt/selftest_execlists.c
index 4202df5b8c12..222ca7c44951 100644
--- a/drivers/gpu/drm/i915/gt/selftest_execlists.c
+++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c
@@ -93,7 +93,7 @@ static int wait_for_reset(struct intel_engine_cs *engine,
 		return -EINVAL;
 	}
=20
-	/* Give the request a jiffie to complete after flushing the worker */
+	/* Give the request a jiffy to complete after flushing the worker */
 	if (i915_request_wait(rq, 0,
 			      max(0l, (long)(timeout - jiffies)) + 1) < 0) {
 		pr_err("%s: hanging request %llx:%lld did not complete\n",
@@ -3426,7 +3426,7 @@ static int live_preempt_timeout(void *arg)
 			cpu_relax();
=20
 		saved_timeout =3D engine->props.preempt_timeout_ms;
-		engine->props.preempt_timeout_ms =3D 1; /* in ms, -> 1 jiffie */
+		engine->props.preempt_timeout_ms =3D 1; /* in ms, -> 1 jiffy */
=20
 		i915_request_get(rq);
 		i915_request_add(rq);
diff --git a/drivers/gpu/drm/i915/i915_utils.c b/drivers/gpu/drm/i915/i915_ut=
ils.c
index 6f9e7b354b54..f2ba51c20e97 100644
--- a/drivers/gpu/drm/i915/i915_utils.c
+++ b/drivers/gpu/drm/i915/i915_utils.c
@@ -110,7 +110,7 @@ void set_timer_ms(struct timer_list *t, unsigned long tim=
eout)
 	 * Paranoia to make sure the compiler computes the timeout before
 	 * loading 'jiffies' as jiffies is volatile and may be updated in
 	 * the background by a timer tick. All to reduce the complexity
-	 * of the addition and reduce the risk of losing a jiffie.
+	 * of the addition and reduce the risk of losing a jiffy.
 	 */
 	barrier();
=20
diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c
index a165cbcdd27b..9eafe53a8f41 100644
--- a/drivers/gpu/drm/v3d/v3d_bo.c
+++ b/drivers/gpu/drm/v3d/v3d_bo.c
@@ -279,7 +279,7 @@ v3d_wait_bo_ioctl(struct drm_device *dev, void *data,
 	else
 		args->timeout_ns =3D 0;
=20
-	/* Asked to wait beyond the jiffie/scheduler precision? */
+	/* Asked to wait beyond the jiffy/scheduler precision? */
 	if (ret =3D=3D -ETIME && args->timeout_ns)
 		ret =3D -EAGAIN;
=20
diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
index 61cb45c5d0d8..53fad9487574 100644
--- a/drivers/isdn/mISDN/dsp_cmx.c
+++ b/drivers/isdn/mISDN/dsp_cmx.c
@@ -82,7 +82,7 @@
  *  - has multiple clocks.
  *  - has no usable clock due to jitter or packet loss (VoIP).
  * In this case the system's clock is used. The clock resolution depends on
- * the jiffie resolution.
+ * the jiffy resolution.
  *
  * If a member joins a conference:
  *
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/mar=
vell/mvmdio.c
index 9190eff6c0bb..e1d003fdbc2e 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -104,7 +104,7 @@ static int orion_mdio_wait_ready(const struct orion_mdio_=
ops *ops,
 			return 0;
 	} else {
 		/* wait_event_timeout does not guarantee a delay of at
-		 * least one whole jiffie, so timeout must be no less
+		 * least one whole jiffy, so timeout must be no less
 		 * than two.
 		 */
 		timeout =3D max(usecs_to_jiffies(MVMDIO_SMI_TIMEOUT), 2);
diff --git a/drivers/platform/x86/intel/pmc/adl.c b/drivers/platform/x86/inte=
l/pmc/adl.c
index e7878558fd90..9d9c07f44ff6 100644
--- a/drivers/platform/x86/intel/pmc/adl.c
+++ b/drivers/platform/x86/intel/pmc/adl.c
@@ -295,6 +295,8 @@ const struct pmc_reg_map adl_reg_map =3D {
 	.ppfear_buckets =3D CNP_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.ltr_ignore_max =3D ADL_NUM_IP_IGN_ALLOWED,
 	.lpm_num_modes =3D ADL_LPM_NUM_MODES,
 	.lpm_num_maps =3D ADL_LPM_NUM_MAPS,
diff --git a/drivers/platform/x86/intel/pmc/cnp.c b/drivers/platform/x86/inte=
l/pmc/cnp.c
index dd72974bf71e..513c02670c5a 100644
--- a/drivers/platform/x86/intel/pmc/cnp.c
+++ b/drivers/platform/x86/intel/pmc/cnp.c
@@ -200,6 +200,8 @@ const struct pmc_reg_map cnp_reg_map =3D {
 	.ppfear_buckets =3D CNP_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.ltr_ignore_max =3D CNP_NUM_IP_IGN_ALLOWED,
 	.etr3_offset =3D ETR3_OFFSET,
 };
diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/int=
el/pmc/core.c
index 01ae71c6df59..e2b4c74ce7f6 100644
--- a/drivers/platform/x86/intel/pmc/core.c
+++ b/drivers/platform/x86/intel/pmc/core.c
@@ -11,6 +11,7 @@
=20
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
=20
+#include <linux/acpi_pmtmr.h>
 #include <linux/bitfield.h>
 #include <linux/debugfs.h>
 #include <linux/delay.h>
@@ -1208,6 +1209,38 @@ static bool pmc_core_is_pson_residency_enabled(struct =
pmc_dev *pmcdev)
 	return val =3D=3D 1;
 }
=20
+/*
+ * Enable or disable ACPI PM Timer
+ *
+ * This function is intended to be a callback for ACPI PM suspend/resume eve=
nt.
+ * The ACPI PM Timer is enabled on resume only if it was enabled during susp=
end.
+ */
+static void pmc_core_acpi_pm_timer_suspend_resume(void *data, bool suspend)
+{
+	struct pmc_dev *pmcdev =3D data;
+	struct pmc *pmc =3D pmcdev->pmcs[PMC_IDX_MAIN];
+	const struct pmc_reg_map *map =3D pmc->map;
+	bool enabled;
+	u32 reg;
+
+	if (!map->acpi_pm_tmr_ctl_offset)
+		return;
+
+	guard(mutex)(&pmcdev->lock);
+
+	if (!suspend && !pmcdev->enable_acpi_pm_timer_on_resume)
+		return;
+
+	reg =3D pmc_core_reg_read(pmc, map->acpi_pm_tmr_ctl_offset);
+	enabled =3D !(reg & map->acpi_pm_tmr_disable_bit);
+	if (suspend)
+		reg |=3D map->acpi_pm_tmr_disable_bit;
+	else
+		reg &=3D ~map->acpi_pm_tmr_disable_bit;
+	pmc_core_reg_write(pmc, map->acpi_pm_tmr_ctl_offset, reg);
+
+	pmcdev->enable_acpi_pm_timer_on_resume =3D suspend && enabled;
+}
=20
 static void pmc_core_dbgfs_unregister(struct pmc_dev *pmcdev)
 {
@@ -1404,6 +1437,7 @@ static int pmc_core_probe(struct platform_device *pdev)
 	struct pmc_dev *pmcdev;
 	const struct x86_cpu_id *cpu_id;
 	int (*core_init)(struct pmc_dev *pmcdev);
+	const struct pmc_reg_map *map;
 	struct pmc *primary_pmc;
 	int ret;
=20
@@ -1462,6 +1496,11 @@ static int pmc_core_probe(struct platform_device *pdev)
 	pm_report_max_hw_sleep(FIELD_MAX(SLP_S0_RES_COUNTER_MASK) *
 			       pmc_core_adjust_slp_s0_step(primary_pmc, 1));
=20
+	map =3D primary_pmc->map;
+	if (map->acpi_pm_tmr_ctl_offset)
+		acpi_pmtmr_register_suspend_resume_callback(pmc_core_acpi_pm_timer_suspend=
_resume,
+							 pmcdev);
+
 	device_initialized =3D true;
 	dev_info(&pdev->dev, " initialized\n");
=20
@@ -1471,6 +1510,12 @@ static int pmc_core_probe(struct platform_device *pdev)
 static void pmc_core_remove(struct platform_device *pdev)
 {
 	struct pmc_dev *pmcdev =3D platform_get_drvdata(pdev);
+	const struct pmc *pmc =3D pmcdev->pmcs[PMC_IDX_MAIN];
+	const struct pmc_reg_map *map =3D pmc->map;
+
+	if (map->acpi_pm_tmr_ctl_offset)
+		acpi_pmtmr_unregister_suspend_resume_callback();
+
 	pmc_core_dbgfs_unregister(pmcdev);
 	pmc_core_clean_structure(pdev);
 }
diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/int=
el/pmc/core.h
index ea04de7eb9e8..4d37ef7113d7 100644
--- a/drivers/platform/x86/intel/pmc/core.h
+++ b/drivers/platform/x86/intel/pmc/core.h
@@ -68,6 +68,8 @@ struct telem_endpoint;
 #define SPT_PMC_LTR_SCC				0x3A0
 #define SPT_PMC_LTR_ISH				0x3A4
=20
+#define SPT_PMC_ACPI_PM_TMR_CTL_OFFSET		0x18FC
+
 /* Sunrise Point: PGD PFET Enable Ack Status Registers */
 enum ppfear_regs {
 	SPT_PMC_XRAM_PPFEAR0A =3D 0x590,
@@ -148,6 +150,8 @@ enum ppfear_regs {
 #define SPT_PMC_VRIC1_SLPS0LVEN			BIT(13)
 #define SPT_PMC_VRIC1_XTALSDQDIS		BIT(22)
=20
+#define SPT_PMC_BIT_ACPI_PM_TMR_DISABLE		BIT(1)
+
 /* Cannonlake Power Management Controller register offsets */
 #define CNP_PMC_SLPS0_DBG_OFFSET		0x10B4
 #define CNP_PMC_PM_CFG_OFFSET			0x1818
@@ -351,6 +355,8 @@ struct pmc_reg_map {
 	const u8  *lpm_reg_index;
 	const u32 pson_residency_offset;
 	const u32 pson_residency_counter_step;
+	const u32 acpi_pm_tmr_ctl_offset;
+	const u32 acpi_pm_tmr_disable_bit;
 };
=20
 /**
@@ -424,6 +430,8 @@ struct pmc_dev {
 	u32 die_c6_offset;
 	struct telem_endpoint *punit_ep;
 	struct pmc_info *regmap_list;
+
+	bool enable_acpi_pm_timer_on_resume;
 };
=20
 enum pmc_index {
diff --git a/drivers/platform/x86/intel/pmc/icl.c b/drivers/platform/x86/inte=
l/pmc/icl.c
index 71b0fd6cb7d8..cbbd44054468 100644
--- a/drivers/platform/x86/intel/pmc/icl.c
+++ b/drivers/platform/x86/intel/pmc/icl.c
@@ -46,6 +46,8 @@ const struct pmc_reg_map icl_reg_map =3D {
 	.ppfear_buckets =3D ICL_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.ltr_ignore_max =3D ICL_NUM_IP_IGN_ALLOWED,
 	.etr3_offset =3D ETR3_OFFSET,
 };
diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/inte=
l/pmc/mtl.c
index c7d15d864039..91f2fa728f5c 100644
--- a/drivers/platform/x86/intel/pmc/mtl.c
+++ b/drivers/platform/x86/intel/pmc/mtl.c
@@ -462,6 +462,8 @@ const struct pmc_reg_map mtl_socm_reg_map =3D {
 	.ppfear_buckets =3D MTL_SOCM_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.lpm_num_maps =3D ADL_LPM_NUM_MAPS,
 	.ltr_ignore_max =3D MTL_SOCM_NUM_IP_IGN_ALLOWED,
 	.lpm_res_counter_step_x2 =3D TGL_PMC_LPM_RES_COUNTER_STEP_X2,
diff --git a/drivers/platform/x86/intel/pmc/spt.c b/drivers/platform/x86/inte=
l/pmc/spt.c
index ab993a69e33e..2cd2b3c68e46 100644
--- a/drivers/platform/x86/intel/pmc/spt.c
+++ b/drivers/platform/x86/intel/pmc/spt.c
@@ -130,6 +130,8 @@ const struct pmc_reg_map spt_reg_map =3D {
 	.ppfear_buckets =3D SPT_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D SPT_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D SPT_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.ltr_ignore_max =3D SPT_NUM_IP_IGN_ALLOWED,
 	.pm_vric1_offset =3D SPT_PMC_VRIC1_OFFSET,
 };
diff --git a/drivers/platform/x86/intel/pmc/tgl.c b/drivers/platform/x86/inte=
l/pmc/tgl.c
index e0580de18077..371b4e30f142 100644
--- a/drivers/platform/x86/intel/pmc/tgl.c
+++ b/drivers/platform/x86/intel/pmc/tgl.c
@@ -197,6 +197,8 @@ const struct pmc_reg_map tgl_reg_map =3D {
 	.ppfear_buckets =3D ICL_PPFEAR_NUM_ENTRIES,
 	.pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET,
 	.pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT,
+	.acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
+	.acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
 	.ltr_ignore_max =3D TGL_NUM_IP_IGN_ALLOWED,
 	.lpm_num_maps =3D TGL_LPM_NUM_MAPS,
 	.lpm_res_counter_step_x2 =3D TGL_PMC_LPM_RES_COUNTER_STEP_X2,
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 72a1acd03675..afe573e8d8f1 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2456,13 +2456,13 @@ static void *timers_start(struct seq_file *m, loff_t =
*pos)
 	if (!tp->sighand)
 		return ERR_PTR(-ESRCH);
=20
-	return seq_list_start(&tp->task->signal->posix_timers, *pos);
+	return seq_hlist_start(&tp->task->signal->posix_timers, *pos);
 }
=20
 static void *timers_next(struct seq_file *m, void *v, loff_t *pos)
 {
 	struct timers_private *tp =3D m->private;
-	return seq_list_next(v, &tp->task->signal->posix_timers, pos);
+	return seq_hlist_next(v, &tp->task->signal->posix_timers, pos);
 }
=20
 static void timers_stop(struct seq_file *m, void *v)
@@ -2491,7 +2491,7 @@ static int show_timer(struct seq_file *m, void *v)
 		[SIGEV_THREAD] =3D "thread",
 	};
=20
-	timer =3D list_entry((struct list_head *)v, struct k_itimer, list);
+	timer =3D hlist_entry((struct hlist_node *)v, struct k_itimer, list);
 	notify =3D timer->it_sigev_notify;
=20
 	seq_printf(m, "ID: %d\n", timer->it_id);
@@ -2569,10 +2569,11 @@ static ssize_t timerslack_ns_write(struct file *file,=
 const char __user *buf,
 	}
=20
 	task_lock(p);
-	if (slack_ns =3D=3D 0)
-		p->timer_slack_ns =3D p->default_timer_slack_ns;
-	else
-		p->timer_slack_ns =3D slack_ns;
+	if (task_is_realtime(p))
+		slack_ns =3D 0;
+	else if (slack_ns =3D=3D 0)
+		slack_ns =3D p->default_timer_slack_ns;
+	p->timer_slack_ns =3D slack_ns;
 	task_unlock(p);
=20
 out:
diff --git a/fs/select.c b/fs/select.c
index 9515c3fa1a03..ad171b7a5c11 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -77,19 +77,16 @@ u64 select_estimate_accuracy(struct timespec64 *tv)
 {
 	u64 ret;
 	struct timespec64 now;
+	u64 slack =3D current->timer_slack_ns;
=20
-	/*
-	 * Realtime tasks get a slack of 0 for obvious reasons.
-	 */
-
-	if (rt_task(current))
+	if (slack =3D=3D 0)
 		return 0;
=20
 	ktime_get_ts64(&now);
 	now =3D timespec64_sub(*tv, now);
 	ret =3D __estimate_accuracy(&now);
-	if (ret < current->timer_slack_ns)
-		return current->timer_slack_ns;
+	if (ret < slack)
+		return slack;
 	return ret;
 }
=20
diff --git a/fs/signalfd.c b/fs/signalfd.c
index ec7b2da2477a..d0333bce015e 100644
--- a/fs/signalfd.c
+++ b/fs/signalfd.c
@@ -159,7 +159,7 @@ static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx,=
 kernel_siginfo_t *info
 	DECLARE_WAITQUEUE(wait, current);
=20
 	spin_lock_irq(&current->sighand->siglock);
-	ret =3D dequeue_signal(current, &ctx->sigmask, info, &type);
+	ret =3D dequeue_signal(&ctx->sigmask, info, &type);
 	switch (ret) {
 	case 0:
 		if (!nonblock)
@@ -174,7 +174,7 @@ static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx,=
 kernel_siginfo_t *info
 	add_wait_queue(&current->sighand->signalfd_wqh, &wait);
 	for (;;) {
 		set_current_state(TASK_INTERRUPTIBLE);
-		ret =3D dequeue_signal(current, &ctx->sigmask, info, &type);
+		ret =3D dequeue_signal(&ctx->sigmask, info, &type);
 		if (ret !=3D 0)
 			break;
 		if (signal_pending(current)) {
diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
index b1580644501f..209a389f2abc 100644
--- a/fs/xfs/xfs_buf.h
+++ b/fs/xfs/xfs_buf.h
@@ -210,7 +210,7 @@ struct xfs_buf {
 	 * success the write is considered to be failed permanently and the
 	 * iodone handler will take appropriate action.
 	 *
-	 * For retry timeouts, we record the jiffie of the first failure. This
+	 * For retry timeouts, we record the jiffy of the first failure. This
 	 * means that we can change the retry timeout for buffers already under
 	 * I/O and thus avoid getting stuck in a retry loop with a long timeout.
 	 *
diff --git a/include/linux/acpi_pmtmr.h b/include/linux/acpi_pmtmr.h
index 50d88bf1498d..0ded9220d379 100644
--- a/include/linux/acpi_pmtmr.h
+++ b/include/linux/acpi_pmtmr.h
@@ -26,6 +26,19 @@ static inline u32 acpi_pm_read_early(void)
 	return acpi_pm_read_verified() & ACPI_PM_MASK;
 }
=20
+/**
+ * Register callback for suspend and resume event
+ *
+ * @cb Callback triggered on suspend and resume
+ * @data Data passed with the callback
+ */
+void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool=
 suspend), void *data);
+
+/**
+ * Remove registered callback for suspend and resume event
+ */
+void acpi_pmtmr_unregister_suspend_resume_callback(void);
+
 #else
=20
 static inline u32 acpi_pm_read_early(void)
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index d9f1435a5a13..1220f0fbe5bf 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -418,7 +418,7 @@ extern unsigned long preset_lpj;
 #define NSEC_CONVERSION ((unsigned long)((((u64)1 << NSEC_JIFFIE_SC) +\
                                         TICK_NSEC -1) / (u64)TICK_NSEC))
 /*
- * The maximum jiffie value is (MAX_INT >> 1).  Here we translate that
+ * The maximum jiffy value is (MAX_INT >> 1).  Here we translate that
  * into seconds.  The 64-bit case will overflow if we are not careful,
  * so use the messy SH_DIV macro to do it.  Still all constants.
  */
diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
index dc7b738de299..453691710839 100644
--- a/include/linux/posix-timers.h
+++ b/include/linux/posix-timers.h
@@ -158,7 +158,7 @@ static inline void posix_cputimers_init_work(void) { }
  * @rcu:		RCU head for freeing the timer.
  */
 struct k_itimer {
-	struct list_head	list;
+	struct hlist_node	list;
 	struct hlist_node	t_hash;
 	spinlock_t		it_lock;
 	const struct k_clock	*kclock;
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index 0a0e23c45406..c8ed09ac29ac 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -137,7 +137,7 @@ struct signal_struct {
=20
 	/* POSIX.1b Interval Timers */
 	unsigned int		next_posix_timer_id;
-	struct list_head	posix_timers;
+	struct hlist_head	posix_timers;
=20
 	/* ITIMER_REAL timer for the process */
 	struct hrtimer real_timer;
@@ -276,8 +276,7 @@ static inline void signal_set_stop_flags(struct signal_st=
ruct *sig,
 extern void flush_signals(struct task_struct *);
 extern void ignore_signals(struct task_struct *);
 extern void flush_signal_handlers(struct task_struct *, int force_default);
-extern int dequeue_signal(struct task_struct *task, sigset_t *mask,
-			  kernel_siginfo_t *info, enum pid_type *type);
+extern int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info, enum pid_t=
ype *type);
=20
 static inline int kernel_dequeue_signal(void)
 {
@@ -287,7 +286,7 @@ static inline int kernel_dequeue_signal(void)
 	int ret;
=20
 	spin_lock_irq(&task->sighand->siglock);
-	ret =3D dequeue_signal(task, &task->blocked, &__info, &__type);
+	ret =3D dequeue_signal(&task->blocked, &__info, &__type);
 	spin_unlock_irq(&task->sighand->siglock);
=20
 	return ret;
diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_i=
nternal.h
index 84ff2844df2a..902c20ef495a 100644
--- a/include/linux/timekeeper_internal.h
+++ b/include/linux/timekeeper_internal.h
@@ -73,7 +73,7 @@ struct tk_read_base {
  * @overflow_seen:	Overflow warning flag (DEBUG_TIMEKEEPING)
  *
  * Note: For timespec(64) based interfaces wall_to_monotonic is what
- * we need to add to xtime (or xtime corrected for sub jiffie times)
+ * we need to add to xtime (or xtime corrected for sub jiffy times)
  * to get to monotonic time.  Monotonic is pegged at zero at system
  * boot time, so wall_to_monotonic will be negative, however, we will
  * ALWAYS keep the tv_nsec part positive so we can use the usual
diff --git a/init/init_task.c b/init/init_task.c
index eeb110c65fe2..5d0399bc8d2f 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -29,7 +29,7 @@ static struct signal_struct init_signals =3D {
 	.cred_guard_mutex =3D __MUTEX_INITIALIZER(init_signals.cred_guard_mutex),
 	.exec_update_lock =3D __RWSEM_INITIALIZER(init_signals.exec_update_lock),
 #ifdef CONFIG_POSIX_TIMERS
-	.posix_timers =3D LIST_HEAD_INIT(init_signals.posix_timers),
+	.posix_timers	=3D HLIST_HEAD_INIT,
 	.cputimer	=3D {
 		.cputime_atomic	=3D INIT_CPUTIME_ATOMIC,
 	},
diff --git a/kernel/cpu.c b/kernel/cpu.c
index b1fd2a3db91a..5bfc2fdd7da0 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -330,7 +330,7 @@ static bool cpuhp_wait_for_sync_state(unsigned int cpu, e=
num cpuhp_sync_state st
 			/* Poll for one millisecond */
 			arch_cpuhp_sync_state_poll();
 		} else {
-			usleep_range_state(USEC_PER_MSEC, 2 * USEC_PER_MSEC, TASK_UNINTERRUPTIBLE=
);
+			usleep_range(USEC_PER_MSEC, 2 * USEC_PER_MSEC);
 		}
 		sync =3D atomic_read(st);
 	}
diff --git a/kernel/fork.c b/kernel/fork.c
index cc760491f201..c1b343cba560 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1861,7 +1861,7 @@ static int copy_signal(unsigned long clone_flags, struc=
t task_struct *tsk)
 	prev_cputime_init(&sig->prev_cputime);
=20
 #ifdef CONFIG_POSIX_TIMERS
-	INIT_LIST_HEAD(&sig->posix_timers);
+	INIT_HLIST_HEAD(&sig->posix_timers);
 	hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
 	sig->real_timer.function =3D it_real_fn;
 #endif
diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c
index ae1b42775ef9..195d2f2834a9 100644
--- a/kernel/sched/syscalls.c
+++ b/kernel/sched/syscalls.c
@@ -406,6 +406,14 @@ static void __setscheduler_params(struct task_struct *p,
 	else if (fair_policy(policy))
 		p->static_prio =3D NICE_TO_PRIO(attr->sched_nice);
=20
+	/* rt-policy tasks do not have a timerslack */
+	if (task_is_realtime(p)) {
+		p->timer_slack_ns =3D 0;
+	} else if (p->timer_slack_ns =3D=3D 0) {
+		/* when switching back to non-rt policy, restore timerslack */
+		p->timer_slack_ns =3D p->default_timer_slack_ns;
+	}
+
 	/*
 	 * __sched_setscheduler() ensures attr->sched_priority =3D=3D 0 when
 	 * !rt_policy. Always setting this ensures that things like
diff --git a/kernel/signal.c b/kernel/signal.c
index 60c737e423a1..6f3a5aa39b09 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -618,20 +618,18 @@ static int __dequeue_signal(struct sigpending *pending,=
 sigset_t *mask,
 }
=20
 /*
- * Dequeue a signal and return the element to the caller, which is
- * expected to free it.
- *
- * All callers have to hold the siglock.
+ * Try to dequeue a signal. If a deliverable signal is found fill in the
+ * caller provided siginfo and return the signal number. Otherwise return
+ * 0.
  */
-int dequeue_signal(struct task_struct *tsk, sigset_t *mask,
-		   kernel_siginfo_t *info, enum pid_type *type)
+int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info, enum pid_type *ty=
pe)
 {
+	struct task_struct *tsk =3D current;
 	bool resched_timer =3D false;
 	int signr;
=20
-	/* We only dequeue private signals from ourselves, we don't let
-	 * signalfd steal them
-	 */
+	lockdep_assert_held(&tsk->sighand->siglock);
+
 	*type =3D PIDTYPE_PID;
 	signr =3D __dequeue_signal(&tsk->pending, mask, info, &resched_timer);
 	if (!signr) {
@@ -1940,10 +1938,11 @@ struct sigqueue *sigqueue_alloc(void)
=20
 void sigqueue_free(struct sigqueue *q)
 {
-	unsigned long flags;
 	spinlock_t *lock =3D &current->sighand->siglock;
+	unsigned long flags;
=20
-	BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
+	if (WARN_ON_ONCE(!(q->flags & SIGQUEUE_PREALLOC)))
+		return;
 	/*
 	 * We must hold ->siglock while testing q->list
 	 * to serialize with collect_signal() or with
@@ -1971,7 +1970,10 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid,=
 enum pid_type type)
 	unsigned long flags;
 	int ret, result;
=20
-	BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
+	if (WARN_ON_ONCE(!(q->flags & SIGQUEUE_PREALLOC)))
+		return 0;
+	if (WARN_ON_ONCE(q->info.si_code !=3D SI_TIMER))
+		return 0;
=20
 	ret =3D -1;
 	rcu_read_lock();
@@ -2006,7 +2008,6 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid, =
enum pid_type type)
 		 * If an SI_TIMER entry is already queue just increment
 		 * the overrun count.
 		 */
-		BUG_ON(q->info.si_code !=3D SI_TIMER);
 		q->info.si_overrun++;
 		result =3D TRACE_SIGNAL_ALREADY_PENDING;
 		goto out;
@@ -2793,8 +2794,7 @@ bool get_signal(struct ksignal *ksig)
 		type =3D PIDTYPE_PID;
 		signr =3D dequeue_synchronous_signal(&ksig->info);
 		if (!signr)
-			signr =3D dequeue_signal(current, &current->blocked,
-					       &ksig->info, &type);
+			signr =3D dequeue_signal(&current->blocked, &ksig->info, &type);
=20
 		if (!signr)
 			break; /* will return 0 */
@@ -3648,7 +3648,7 @@ static int do_sigtimedwait(const sigset_t *which, kerne=
l_siginfo_t *info,
 	signotset(&mask);
=20
 	spin_lock_irq(&tsk->sighand->siglock);
-	sig =3D dequeue_signal(tsk, &mask, info, &type);
+	sig =3D dequeue_signal(&mask, info, &type);
 	if (!sig && timeout) {
 		/*
 		 * None ready, temporarily unblock those we're interested
@@ -3667,7 +3667,7 @@ static int do_sigtimedwait(const sigset_t *which, kerne=
l_siginfo_t *info,
 		spin_lock_irq(&tsk->sighand->siglock);
 		__set_task_blocked(tsk, &tsk->real_blocked);
 		sigemptyset(&tsk->real_blocked);
-		sig =3D dequeue_signal(tsk, &mask, info, &type);
+		sig =3D dequeue_signal(&mask, info, &type);
 	}
 	spin_unlock_irq(&tsk->sighand->siglock);
=20
diff --git a/kernel/sys.c b/kernel/sys.c
index 3a2df1bd9f64..e3c4cffb520c 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -2557,6 +2557,8 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2=
, unsigned long, arg3,
 			error =3D current->timer_slack_ns;
 		break;
 	case PR_SET_TIMERSLACK:
+		if (task_is_realtime(current))
+			break;
 		if (arg2 <=3D 0)
 			current->timer_slack_ns =3D
 					current->default_timer_slack_ns;
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index 5abfa4390673..8bf888641694 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -493,7 +493,7 @@ static u64 __alarm_forward_now(struct alarm *alarm, ktime=
_t interval, bool throt
 		 * promised in the context of posix_timer_fn() never
 		 * materialized, but someone should really work on it.
 		 *
-		 * To prevent DOS fake @now to be 1 jiffie out which keeps
+		 * To prevent DOS fake @now to be 1 jiffy out which keeps
 		 * the overrun accounting correct but creates an
 		 * inconsistency vs. timer_gettime(2).
 		 */
@@ -574,15 +574,10 @@ static enum alarmtimer_restart alarm_handle_timer(struc=
t alarm *alarm,
 					    it.alarm.alarmtimer);
 	enum alarmtimer_restart result =3D ALARMTIMER_NORESTART;
 	unsigned long flags;
-	int si_private =3D 0;
=20
 	spin_lock_irqsave(&ptr->it_lock, flags);
=20
-	ptr->it_active =3D 0;
-	if (ptr->it_interval)
-		si_private =3D ++ptr->it_requeue_pending;
-
-	if (posix_timer_event(ptr, si_private) && ptr->it_interval) {
+	if (posix_timer_queue_signal(ptr) && ptr->it_interval) {
 		/*
 		 * Handle ignored signals and rearm the timer. This will go
 		 * away once we handle ignored signals proper. Ensure that
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index 60a6484831b1..78c7bd64d0dd 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -190,7 +190,7 @@ int clockevents_tick_resume(struct clock_event_device *de=
v)
=20
 #ifdef CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST
=20
-/* Limit min_delta to a jiffie */
+/* Limit min_delta to a jiffy */
 #define MIN_DELTA_LIMIT		(NSEC_PER_SEC / HZ)
=20
 /**
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index b8ee320208d4..e834b2bd83df 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1177,7 +1177,7 @@ static inline ktime_t hrtimer_update_lowres(struct hrti=
mer *timer, ktime_t tim,
 	/*
 	 * CONFIG_TIME_LOW_RES indicates that the system has no way to return
 	 * granular time values. For relative timers we add hrtimer_resolution
-	 * (i.e. one jiffie) to prevent short timeouts.
+	 * (i.e. one jiffy) to prevent short timeouts.
 	 */
 	timer->is_rel =3D mode & HRTIMER_MODE_REL;
 	if (timer->is_rel)
@@ -1351,11 +1351,13 @@ static void hrtimer_cpu_base_init_expiry_lock(struct =
hrtimer_cpu_base *base)
 }
=20
 static void hrtimer_cpu_base_lock_expiry(struct hrtimer_cpu_base *base)
+	__acquires(&base->softirq_expiry_lock)
 {
 	spin_lock(&base->softirq_expiry_lock);
 }
=20
 static void hrtimer_cpu_base_unlock_expiry(struct hrtimer_cpu_base *base)
+	__releases(&base->softirq_expiry_lock)
 {
 	spin_unlock(&base->softirq_expiry_lock);
 }
@@ -2072,14 +2074,9 @@ long hrtimer_nanosleep(ktime_t rqtp, const enum hrtime=
r_mode mode,
 	struct restart_block *restart;
 	struct hrtimer_sleeper t;
 	int ret =3D 0;
-	u64 slack;
-
-	slack =3D current->timer_slack_ns;
-	if (rt_task(current))
-		slack =3D 0;
=20
 	hrtimer_init_sleeper_on_stack(&t, clockid, mode);
-	hrtimer_set_expires_range_ns(&t.timer, rqtp, slack);
+	hrtimer_set_expires_range_ns(&t.timer, rqtp, current->timer_slack_ns);
 	ret =3D do_nanosleep(&t, mode);
 	if (ret !=3D -ERESTART_RESTARTBLOCK)
 		goto out;
@@ -2249,7 +2246,7 @@ void __init hrtimers_init(void)
 /**
  * schedule_hrtimeout_range_clock - sleep until timeout
  * @expires:	timeout value (ktime_t)
- * @delta:	slack in expires timeout (ktime_t) for SCHED_OTHER tasks
+ * @delta:	slack in expires timeout (ktime_t)
  * @mode:	timer mode
  * @clock_id:	timer clock to be used
  */
@@ -2276,13 +2273,6 @@ schedule_hrtimeout_range_clock(ktime_t *expires, u64 d=
elta,
 		return -EINTR;
 	}
=20
-	/*
-	 * Override any slack passed by the user if under
-	 * rt contraints.
-	 */
-	if (rt_task(current))
-		delta =3D 0;
-
 	hrtimer_init_sleeper_on_stack(&t, clock_id, mode);
 	hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
 	hrtimer_sleeper_start_expires(&t, mode);
@@ -2302,7 +2292,7 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_range_clock);
 /**
  * schedule_hrtimeout_range - sleep until timeout
  * @expires:	timeout value (ktime_t)
- * @delta:	slack in expires timeout (ktime_t) for SCHED_OTHER tasks
+ * @delta:	slack in expires timeout (ktime_t)
  * @mode:	timer mode
  *
  * Make the current task sleep until the given expiry time has
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 8d2dd214ec68..802b336f4b8c 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -660,8 +660,16 @@ static void sync_hw_clock(struct work_struct *work)
 	sched_sync_hw_clock(offset_nsec, res !=3D 0);
 }
=20
-void ntp_notify_cmos_timer(void)
+void ntp_notify_cmos_timer(bool offset_set)
 {
+	/*
+	 * If the time jumped (using ADJ_SETOFFSET) cancels sync timer,
+	 * which may have been running if the time was synchronized
+	 * prior to the ADJ_SETOFFSET call.
+	 */
+	if (offset_set)
+		hrtimer_cancel(&sync_hrtimer);
+
 	/*
 	 * When the work is currently executed but has not yet the timer
 	 * rearmed this queues the work immediately again. No big issue,
diff --git a/kernel/time/ntp_internal.h b/kernel/time/ntp_internal.h
index 23d1b74c3065..5a633dce9057 100644
--- a/kernel/time/ntp_internal.h
+++ b/kernel/time/ntp_internal.h
@@ -14,9 +14,9 @@ extern int __do_adjtimex(struct __kernel_timex *txc,
 extern void __hardpps(const struct timespec64 *phase_ts, const struct timesp=
ec64 *raw_ts);
=20
 #if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
-extern void ntp_notify_cmos_timer(void);
+extern void ntp_notify_cmos_timer(bool offset_set);
 #else
-static inline void ntp_notify_cmos_timer(void) { }
+static inline void ntp_notify_cmos_timer(bool offset_set) { }
 #endif
=20
 #endif /* _LINUX_NTP_INTERNAL_H */
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index e9c6f9d0e42c..6bcee4704059 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -453,6 +453,7 @@ static void disarm_timer(struct k_itimer *timer, struct t=
ask_struct *p)
 	struct cpu_timer *ctmr =3D &timer->it.cpu;
 	struct posix_cputimer_base *base;
=20
+	timer->it_active =3D 0;
 	if (!cpu_timer_dequeue(ctmr))
 		return;
=20
@@ -559,6 +560,7 @@ static void arm_timer(struct k_itimer *timer, struct task=
_struct *p)
 	struct cpu_timer *ctmr =3D &timer->it.cpu;
 	u64 newexp =3D cpu_timer_getexpires(ctmr);
=20
+	timer->it_active =3D 1;
 	if (!cpu_timer_enqueue(&base->tqhead, ctmr))
 		return;
=20
@@ -584,12 +586,8 @@ static void cpu_timer_fire(struct k_itimer *timer)
 {
 	struct cpu_timer *ctmr =3D &timer->it.cpu;
=20
-	if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) =3D=3D SIGEV_NONE) {
-		/*
-		 * User don't want any signal.
-		 */
-		cpu_timer_setexpires(ctmr, 0);
-	} else if (unlikely(timer->sigq =3D=3D NULL)) {
+	timer->it_active =3D 0;
+	if (unlikely(timer->sigq =3D=3D NULL)) {
 		/*
 		 * This a special case for clock_nanosleep,
 		 * not a normal timer from sys_timer_create.
@@ -600,9 +598,9 @@ static void cpu_timer_fire(struct k_itimer *timer)
 		/*
 		 * One-shot timer.  Clear it as soon as it's fired.
 		 */
-		posix_timer_event(timer, 0);
+		posix_timer_queue_signal(timer);
 		cpu_timer_setexpires(ctmr, 0);
-	} else if (posix_timer_event(timer, ++timer->it_requeue_pending)) {
+	} else if (posix_timer_queue_signal(timer)) {
 		/*
 		 * The signal did not get queued because the signal
 		 * was ignored, so we won't get any callback to
@@ -614,6 +612,8 @@ static void cpu_timer_fire(struct k_itimer *timer)
 	}
 }
=20
+static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec6=
4 *itp, u64 now);
+
 /*
  * Guts of sys_timer_settime for CPU timers.
  * This is called with the timer locked and interrupts disabled.
@@ -623,9 +623,10 @@ static void cpu_timer_fire(struct k_itimer *timer)
 static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags,
 			       struct itimerspec64 *new, struct itimerspec64 *old)
 {
+	bool sigev_none =3D timer->it_sigev_notify =3D=3D SIGEV_NONE;
 	clockid_t clkid =3D CPUCLOCK_WHICH(timer->it_clock);
-	u64 old_expires, new_expires, old_incr, val;
 	struct cpu_timer *ctmr =3D &timer->it.cpu;
+	u64 old_expires, new_expires, now;
 	struct sighand_struct *sighand;
 	struct task_struct *p;
 	unsigned long flags;
@@ -662,10 +663,7 @@ static int posix_cpu_timer_set(struct k_itimer *timer, i=
nt timer_flags,
 		return -ESRCH;
 	}
=20
-	/*
-	 * Disarm any old timer after extracting its expiry time.
-	 */
-	old_incr =3D timer->it_interval;
+	/* Retrieve the current expiry time before disarming the timer */
 	old_expires =3D cpu_timer_getexpires(ctmr);
=20
 	if (unlikely(timer->it.cpu.firing)) {
@@ -673,157 +671,122 @@ static int posix_cpu_timer_set(struct k_itimer *timer=
, int timer_flags,
 		ret =3D TIMER_RETRY;
 	} else {
 		cpu_timer_dequeue(ctmr);
+		timer->it_active =3D 0;
 	}
=20
 	/*
-	 * We need to sample the current value to convert the new
-	 * value from to relative and absolute, and to convert the
-	 * old value from absolute to relative.  To set a process
-	 * timer, we need a sample to balance the thread expiry
-	 * times (in arm_timer).  With an absolute time, we must
-	 * check if it's already passed.  In short, we need a sample.
+	 * Sample the current clock for saving the previous setting
+	 * and for rearming the timer.
 	 */
 	if (CPUCLOCK_PERTHREAD(timer->it_clock))
-		val =3D cpu_clock_sample(clkid, p);
+		now =3D cpu_clock_sample(clkid, p);
 	else
-		val =3D cpu_clock_sample_group(clkid, p, true);
+		now =3D cpu_clock_sample_group(clkid, p, !sigev_none);
=20
+	/* Retrieve the previous expiry value if requested. */
 	if (old) {
-		if (old_expires =3D=3D 0) {
-			old->it_value.tv_sec =3D 0;
-			old->it_value.tv_nsec =3D 0;
-		} else {
-			/*
-			 * Update the timer in case it has overrun already.
-			 * If it has, we'll report it as having overrun and
-			 * with the next reloaded timer already ticking,
-			 * though we are swallowing that pending
-			 * notification here to install the new setting.
-			 */
-			u64 exp =3D bump_cpu_timer(timer, val);
-
-			if (val < exp) {
-				old_expires =3D exp - val;
-				old->it_value =3D ns_to_timespec64(old_expires);
-			} else {
-				old->it_value.tv_nsec =3D 1;
-				old->it_value.tv_sec =3D 0;
-			}
-		}
+		old->it_value =3D (struct timespec64){ };
+		if (old_expires)
+			__posix_cpu_timer_get(timer, old, now);
 	}
=20
+	/* Retry if the timer expiry is running concurrently */
 	if (unlikely(ret)) {
-		/*
-		 * We are colliding with the timer actually firing.
-		 * Punt after filling in the timer's old value, and
-		 * disable this firing since we are already reporting
-		 * it as an overrun (thanks to bump_cpu_timer above).
-		 */
 		unlock_task_sighand(p, &flags);
 		goto out;
 	}
=20
-	if (new_expires !=3D 0 && !(timer_flags & TIMER_ABSTIME)) {
-		new_expires +=3D val;
-	}
+	/* Convert relative expiry time to absolute */
+	if (new_expires && !(timer_flags & TIMER_ABSTIME))
+		new_expires +=3D now;
+
+	/* Set the new expiry time (might be 0) */
+	cpu_timer_setexpires(ctmr, new_expires);
=20
 	/*
-	 * Install the new expiry time (or zero).
-	 * For a timer with no notification action, we don't actually
-	 * arm the timer (we'll just fake it for timer_gettime).
+	 * Arm the timer if it is not disabled, the new expiry value has
+	 * not yet expired and the timer requires signal delivery.
+	 * SIGEV_NONE timers are never armed. In case the timer is not
+	 * armed, enforce the reevaluation of the timer base so that the
+	 * process wide cputime counter can be disabled eventually.
 	 */
-	cpu_timer_setexpires(ctmr, new_expires);
-	if (new_expires !=3D 0 && val < new_expires) {
-		arm_timer(timer, p);
+	if (likely(!sigev_none)) {
+		if (new_expires && now < new_expires)
+			arm_timer(timer, p);
+		else
+			trigger_base_recalc_expires(timer, p);
 	}
=20
 	unlock_task_sighand(p, &flags);
+
+	posix_timer_set_common(timer, new);
+
 	/*
-	 * Install the new reload setting, and
-	 * set up the signal and overrun bookkeeping.
+	 * If the new expiry time was already in the past the timer was not
+	 * queued. Fire it immediately even if the thread never runs to
+	 * accumulate more time on this clock.
 	 */
-	timer->it_interval =3D timespec64_to_ktime(new->it_interval);
+	if (!sigev_none && new_expires && now >=3D new_expires)
+		cpu_timer_fire(timer);
+out:
+	rcu_read_unlock();
+	return ret;
+}
+
+static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec6=
4 *itp, u64 now)
+{
+	bool sigev_none =3D timer->it_sigev_notify =3D=3D SIGEV_NONE;
+	u64 expires, iv =3D timer->it_interval;
=20
 	/*
-	 * This acts as a modification timestamp for the timer,
-	 * so any automatic reload attempt will punt on seeing
-	 * that we have reset the timer manually.
+	 * Make sure that interval timers are moved forward for the
+	 * following cases:
+	 *  - SIGEV_NONE timers which are never armed
+	 *  - Timers which expired, but the signal has not yet been
+	 *    delivered
 	 */
-	timer->it_requeue_pending =3D (timer->it_requeue_pending + 2) &
-		~REQUEUE_PENDING;
-	timer->it_overrun_last =3D 0;
-	timer->it_overrun =3D -1;
-
-	if (val >=3D new_expires) {
-		if (new_expires !=3D 0) {
-			/*
-			 * The designated time already passed, so we notify
-			 * immediately, even if the thread never runs to
-			 * accumulate more time on this clock.
-			 */
-			cpu_timer_fire(timer);
-		}
+	if (iv && ((timer->it_requeue_pending & REQUEUE_PENDING) || sigev_none))
+		expires =3D bump_cpu_timer(timer, now);
+	else
+		expires =3D cpu_timer_getexpires(&timer->it.cpu);
=20
+	/*
+	 * Expired interval timers cannot have a remaining time <=3D 0.
+	 * The kernel has to move them forward so that the next
+	 * timer expiry is > @now.
+	 */
+	if (now < expires) {
+		itp->it_value =3D ns_to_timespec64(expires - now);
+	} else {
 		/*
-		 * Make sure we don't keep around the process wide cputime
-		 * counter or the tick dependency if they are not necessary.
+		 * A single shot SIGEV_NONE timer must return 0, when it is
+		 * expired! Timers which have a real signal delivery mode
+		 * must return a remaining time greater than 0 because the
+		 * signal has not yet been delivered.
 		 */
-		sighand =3D lock_task_sighand(p, &flags);
-		if (!sighand)
-			goto out;
-
-		if (!cpu_timer_queued(ctmr))
-			trigger_base_recalc_expires(timer, p);
-
-		unlock_task_sighand(p, &flags);
+		if (!sigev_none)
+			itp->it_value.tv_nsec =3D 1;
 	}
- out:
-	rcu_read_unlock();
-	if (old)
-		old->it_interval =3D ns_to_timespec64(old_incr);
-
-	return ret;
 }
=20
 static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 =
*itp)
 {
 	clockid_t clkid =3D CPUCLOCK_WHICH(timer->it_clock);
-	struct cpu_timer *ctmr =3D &timer->it.cpu;
-	u64 now, expires =3D cpu_timer_getexpires(ctmr);
 	struct task_struct *p;
+	u64 now;
=20
 	rcu_read_lock();
 	p =3D cpu_timer_task_rcu(timer);
-	if (!p)
-		goto out;
+	if (p && cpu_timer_getexpires(&timer->it.cpu)) {
+		itp->it_interval =3D ktime_to_timespec64(timer->it_interval);
=20
-	/*
-	 * Easy part: convert the reload time.
-	 */
-	itp->it_interval =3D ktime_to_timespec64(timer->it_interval);
-
-	if (!expires)
-		goto out;
-
-	/*
-	 * Sample the clock to take the difference with the expiry time.
-	 */
-	if (CPUCLOCK_PERTHREAD(timer->it_clock))
-		now =3D cpu_clock_sample(clkid, p);
-	else
-		now =3D cpu_clock_sample_group(clkid, p, false);
+		if (CPUCLOCK_PERTHREAD(timer->it_clock))
+			now =3D cpu_clock_sample(clkid, p);
+		else
+			now =3D cpu_clock_sample_group(clkid, p, false);
=20
-	if (now < expires) {
-		itp->it_value =3D ns_to_timespec64(expires - now);
-	} else {
-		/*
-		 * The timer should have expired already, but the firing
-		 * hasn't taken place yet.  Say it's just about to expire.
-		 */
-		itp->it_value.tv_nsec =3D 1;
-		itp->it_value.tv_sec =3D 0;
+		__posix_cpu_timer_get(timer, itp, now);
 	}
-out:
 	rcu_read_unlock();
 }
=20
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index b924f0f096fa..4576aaed13b2 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -277,10 +277,17 @@ void posixtimer_rearm(struct kernel_siginfo *info)
 	unlock_timer(timr, flags);
 }
=20
-int posix_timer_event(struct k_itimer *timr, int si_private)
+int posix_timer_queue_signal(struct k_itimer *timr)
 {
+	int ret, si_private =3D 0;
 	enum pid_type type;
-	int ret;
+
+	lockdep_assert_held(&timr->it_lock);
+
+	timr->it_active =3D 0;
+	if (timr->it_interval)
+		si_private =3D ++timr->it_requeue_pending;
+
 	/*
 	 * FIXME: if ->sigq is queued we can race with
 	 * dequeue_signal()->posixtimer_rearm().
@@ -309,19 +316,13 @@ int posix_timer_event(struct k_itimer *timr, int si_pri=
vate)
  */
 static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
 {
+	struct k_itimer *timr =3D container_of(timer, struct k_itimer, it.real.time=
r);
 	enum hrtimer_restart ret =3D HRTIMER_NORESTART;
-	struct k_itimer *timr;
 	unsigned long flags;
-	int si_private =3D 0;
=20
-	timr =3D container_of(timer, struct k_itimer, it.real.timer);
 	spin_lock_irqsave(&timr->it_lock, flags);
=20
-	timr->it_active =3D 0;
-	if (timr->it_interval !=3D 0)
-		si_private =3D ++timr->it_requeue_pending;
-
-	if (posix_timer_event(timr, si_private)) {
+	if (posix_timer_queue_signal(timr)) {
 		/*
 		 * The signal was not queued due to SIG_IGN. As a
 		 * consequence the timer is not going to be rearmed from
@@ -338,14 +339,14 @@ static enum hrtimer_restart posix_timer_fn(struct hrtim=
er *timer)
 			 * change to the signal handling code.
 			 *
 			 * For now let timers with an interval less than a
-			 * jiffie expire every jiffie and recheck for a
+			 * jiffy expire every jiffy and recheck for a
 			 * valid signal handler.
 			 *
 			 * This avoids interrupt starvation in case of a
 			 * very small interval, which would expire the
 			 * timer immediately again.
 			 *
-			 * Moving now ahead of time by one jiffie tricks
+			 * Moving now ahead of time by one jiffy tricks
 			 * hrtimer_forward() to expire the timer later,
 			 * while it still maintains the overrun accuracy
 			 * for the price of a slight inconsistency in the
@@ -515,7 +516,7 @@ static int do_timer_create(clockid_t which_clock, struct =
sigevent *event,
 	spin_lock_irq(&current->sighand->siglock);
 	/* This makes the timer valid in the hash table */
 	WRITE_ONCE(new_timer->it_signal, current->signal);
-	list_add(&new_timer->list, &current->signal->posix_timers);
+	hlist_add_head(&new_timer->list, &current->signal->posix_timers);
 	spin_unlock_irq(&current->sighand->siglock);
 	/*
 	 * After unlocking sighand::siglock @new_timer is subject to
@@ -856,6 +857,23 @@ static struct k_itimer *timer_wait_running(struct k_itim=
er *timer,
 	return lock_timer(timer_id, flags);
 }
=20
+/*
+ * Set up the new interval and reset the signal delivery data
+ */
+void posix_timer_set_common(struct k_itimer *timer, struct itimerspec64 *new=
_setting)
+{
+	if (new_setting->it_value.tv_sec || new_setting->it_value.tv_nsec)
+		timer->it_interval =3D timespec64_to_ktime(new_setting->it_interval);
+	else
+		timer->it_interval =3D 0;
+
+	/* Prevent reloading in case there is a signal pending */
+	timer->it_requeue_pending =3D (timer->it_requeue_pending + 2) & ~REQUEUE_PE=
NDING;
+	/* Reset overrun accounting */
+	timer->it_overrun_last =3D 0;
+	timer->it_overrun =3D -1LL;
+}
+
 /* Set a POSIX.1b interval timer. */
 int common_timer_set(struct k_itimer *timr, int flags,
 		     struct itimerspec64 *new_setting,
@@ -878,15 +896,12 @@ int common_timer_set(struct k_itimer *timr, int flags,
 		return TIMER_RETRY;
=20
 	timr->it_active =3D 0;
-	timr->it_requeue_pending =3D (timr->it_requeue_pending + 2) &
-		~REQUEUE_PENDING;
-	timr->it_overrun_last =3D 0;
+	posix_timer_set_common(timr, new_setting);
=20
-	/* Switch off the timer when it_value is zero */
+	/* Keep timer disarmed when it_value is zero */
 	if (!new_setting->it_value.tv_sec && !new_setting->it_value.tv_nsec)
 		return 0;
=20
-	timr->it_interval =3D timespec64_to_ktime(new_setting->it_interval);
 	expires =3D timespec64_to_ktime(new_setting->it_value);
 	if (flags & TIMER_ABSTIME)
 		expires =3D timens_ktime_to_host(timr->it_clock, expires);
@@ -904,7 +919,7 @@ static int do_timer_settime(timer_t timer_id, int tmr_fla=
gs,
 	const struct k_clock *kc;
 	struct k_itimer *timr;
 	unsigned long flags;
-	int error =3D 0;
+	int error;
=20
 	if (!timespec64_valid(&new_spec64->it_interval) ||
 	    !timespec64_valid(&new_spec64->it_value))
@@ -918,6 +933,9 @@ static int do_timer_settime(timer_t timer_id, int tmr_fla=
gs,
 	if (!timr)
 		return -EINVAL;
=20
+	if (old_spec64)
+		old_spec64->it_interval =3D ktime_to_timespec64(timr->it_interval);
+
 	kc =3D timr->kclock;
 	if (WARN_ON_ONCE(!kc || !kc->timer_set))
 		error =3D -EINVAL;
@@ -1021,7 +1039,7 @@ SYSCALL_DEFINE1(timer_delete, timer_t, timer_id)
 	}
=20
 	spin_lock(&current->sighand->siglock);
-	list_del(&timer->list);
+	hlist_del(&timer->list);
 	spin_unlock(&current->sighand->siglock);
 	/*
 	 * A concurrent lookup could check timer::it_signal lockless. It
@@ -1071,7 +1089,7 @@ static void itimer_delete(struct k_itimer *timer)
=20
 		goto retry_delete;
 	}
-	list_del(&timer->list);
+	hlist_del(&timer->list);
=20
 	/*
 	 * Setting timer::it_signal to NULL is technically not required
@@ -1092,22 +1110,19 @@ static void itimer_delete(struct k_itimer *timer)
  */
 void exit_itimers(struct task_struct *tsk)
 {
-	struct list_head timers;
-	struct k_itimer *tmr;
+	struct hlist_head timers;
=20
-	if (list_empty(&tsk->signal->posix_timers))
+	if (hlist_empty(&tsk->signal->posix_timers))
 		return;
=20
 	/* Protect against concurrent read via /proc/$PID/timers */
 	spin_lock_irq(&tsk->sighand->siglock);
-	list_replace_init(&tsk->signal->posix_timers, &timers);
+	hlist_move_list(&tsk->signal->posix_timers, &timers);
 	spin_unlock_irq(&tsk->sighand->siglock);
=20
 	/* The timers are not longer accessible via tsk::signal */
-	while (!list_empty(&timers)) {
-		tmr =3D list_first_entry(&timers, struct k_itimer, list);
-		itimer_delete(tmr);
-	}
+	while (!hlist_empty(&timers))
+		itimer_delete(hlist_entry(timers.first, struct k_itimer, list));
 }
=20
 SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
diff --git a/kernel/time/posix-timers.h b/kernel/time/posix-timers.h
index f32a2ebba9b8..4784ea65f685 100644
--- a/kernel/time/posix-timers.h
+++ b/kernel/time/posix-timers.h
@@ -36,10 +36,11 @@ extern const struct k_clock clock_process;
 extern const struct k_clock clock_thread;
 extern const struct k_clock alarm_clock;
=20
-int posix_timer_event(struct k_itimer *timr, int si_private);
+int posix_timer_queue_signal(struct k_itimer *timr);
=20
 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_settin=
g);
 int common_timer_set(struct k_itimer *timr, int flags,
 		     struct itimerspec64 *new_setting,
 		     struct itimerspec64 *old_setting);
+void posix_timer_set_common(struct k_itimer *timer, struct itimerspec64 *new=
_setting);
 int common_timer_del(struct k_itimer *timer);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 5391e4167d60..7e6f409bf311 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -2553,6 +2553,7 @@ int do_adjtimex(struct __kernel_timex *txc)
 {
 	struct timekeeper *tk =3D &tk_core.timekeeper;
 	struct audit_ntp_data ad;
+	bool offset_set =3D false;
 	bool clock_set =3D false;
 	struct timespec64 ts;
 	unsigned long flags;
@@ -2575,6 +2576,7 @@ int do_adjtimex(struct __kernel_timex *txc)
 		if (ret)
 			return ret;
=20
+		offset_set =3D delta.tv_sec !=3D 0;
 		audit_tk_injoffset(delta);
 	}
=20
@@ -2608,7 +2610,7 @@ int do_adjtimex(struct __kernel_timex *txc)
 	if (clock_set)
 		clock_was_set(CLOCK_SET_WALL);
=20
-	ntp_notify_cmos_timer();
+	ntp_notify_cmos_timer(offset_set);
=20
 	return ret;
 }
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 64b0d8a0aa0f..2b38f3035a3e 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -365,7 +365,7 @@ static unsigned long round_jiffies_common(unsigned long j=
, int cpu,
 	rem =3D j % HZ;
=20
 	/*
-	 * If the target jiffie is just after a whole second (which can happen
+	 * If the target jiffy is just after a whole second (which can happen
 	 * due to delays of the timer irq, long irq off times etc etc) then
 	 * we should round down to the whole second, not up. Use 1/4th second
 	 * as cutoff for this rounding as an extreme upper bound for this.
@@ -672,7 +672,7 @@ static void enqueue_timer(struct timer_base *base, struct=
 timer_list *timer,
 		 * Set the next expiry time and kick the CPU so it
 		 * can reevaluate the wheel:
 		 */
-		base->next_expiry =3D bucket_expiry;
+		WRITE_ONCE(base->next_expiry, bucket_expiry);
 		base->timers_pending =3D true;
 		base->next_expiry_recalc =3D false;
 		trigger_dyntick_cpu(base, timer);
@@ -1561,6 +1561,8 @@ static inline void timer_base_unlock_expiry(struct time=
r_base *base)
  * the waiter to acquire the lock and make progress.
  */
 static void timer_sync_wait_running(struct timer_base *base)
+	__releases(&base->lock) __releases(&base->expiry_lock)
+	__acquires(&base->expiry_lock) __acquires(&base->lock)
 {
 	if (atomic_read(&base->timer_waiters)) {
 		raw_spin_unlock_irq(&base->lock);
@@ -1898,7 +1900,7 @@ static int next_pending_bucket(struct timer_base *base,=
 unsigned offset,
  *
  * Store next expiry time in base->next_expiry.
  */
-static void next_expiry_recalc(struct timer_base *base)
+static void timer_recalc_next_expiry(struct timer_base *base)
 {
 	unsigned long clk, next, adj;
 	unsigned lvl, offset =3D 0;
@@ -1928,7 +1930,7 @@ static void next_expiry_recalc(struct timer_base *base)
 		 * bits are zero, we look at the next level as is. If not we
 		 * need to advance it by one because that's going to be the
 		 * next expiring bucket in that level. base->clk is the next
-		 * expiring jiffie. So in case of:
+		 * expiring jiffy. So in case of:
 		 *
 		 * LVL5 LVL4 LVL3 LVL2 LVL1 LVL0
 		 *  0    0    0    0    0    0
@@ -1964,7 +1966,7 @@ static void next_expiry_recalc(struct timer_base *base)
 		clk +=3D adj;
 	}
=20
-	base->next_expiry =3D next;
+	WRITE_ONCE(base->next_expiry, next);
 	base->next_expiry_recalc =3D false;
 	base->timers_pending =3D !(next =3D=3D base->clk + NEXT_TIMER_MAX_DELTA);
 }
@@ -1993,7 +1995,7 @@ static u64 cmp_next_hrtimer_event(u64 basem, u64 expire=
s)
 		return basem;
=20
 	/*
-	 * Round up to the next jiffie. High resolution timers are
+	 * Round up to the next jiffy. High resolution timers are
 	 * off, so the hrtimers are expired in the tick and we need to
 	 * make sure that this tick really expires the timer to avoid
 	 * a ping pong of the nohz stop code.
@@ -2007,7 +2009,7 @@ static unsigned long next_timer_interrupt(struct timer_=
base *base,
 					  unsigned long basej)
 {
 	if (base->next_expiry_recalc)
-		next_expiry_recalc(base);
+		timer_recalc_next_expiry(base);
=20
 	/*
 	 * Move next_expiry for the empty base into the future to prevent an
@@ -2018,7 +2020,7 @@ static unsigned long next_timer_interrupt(struct timer_=
base *base,
 	 * easy comparable to find out which base holds the first pending timer.
 	 */
 	if (!base->timers_pending)
-		base->next_expiry =3D basej + NEXT_TIMER_MAX_DELTA;
+		WRITE_ONCE(base->next_expiry, basej + NEXT_TIMER_MAX_DELTA);
=20
 	return base->next_expiry;
 }
@@ -2252,7 +2254,7 @@ static inline u64 __get_next_timer_interrupt(unsigned l=
ong basej, u64 basem,
 					     base_global, &tevt);
=20
 	/*
-	 * If the next event is only one jiffie ahead there is no need to call
+	 * If the next event is only one jiffy ahead there is no need to call
 	 * timer migration hierarchy related functions. The value for the next
 	 * global timer in @tevt struct equals then KTIME_MAX. This is also
 	 * true, when the timer base is idle.
@@ -2411,7 +2413,7 @@ static inline void __run_timers(struct timer_base *base)
 		 * jiffies to avoid endless requeuing to current jiffies.
 		 */
 		base->clk++;
-		next_expiry_recalc(base);
+		timer_recalc_next_expiry(base);
=20
 		while (levels--)
 			expire_timers(base, heads + levels);
@@ -2462,8 +2464,40 @@ static void run_local_timers(void)
 	hrtimer_run_queues();
=20
 	for (int i =3D 0; i < NR_BASES; i++, base++) {
-		/* Raise the softirq only if required. */
-		if (time_after_eq(jiffies, base->next_expiry) ||
+		/*
+		 * Raise the softirq only if required.
+		 *
+		 * timer_base::next_expiry can be written by a remote CPU while
+		 * holding the lock. If this write happens at the same time than
+		 * the lockless local read, sanity checker could complain about
+		 * data corruption.
+		 *
+		 * There are two possible situations where
+		 * timer_base::next_expiry is written by a remote CPU:
+		 *
+		 * 1. Remote CPU expires global timers of this CPU and updates
+		 * timer_base::next_expiry of BASE_GLOBAL afterwards in
+		 * next_timer_interrupt() or timer_recalc_next_expiry(). The
+		 * worst outcome is a superfluous raise of the timer softirq
+		 * when the not yet updated value is read.
+		 *
+		 * 2. A new first pinned timer is enqueued by a remote CPU
+		 * and therefore timer_base::next_expiry of BASE_LOCAL is
+		 * updated. When this update is missed, this isn't a
+		 * problem, as an IPI is executed nevertheless when the CPU
+		 * was idle before. When the CPU wasn't idle but the update
+		 * is missed, then the timer would expire one jiffy late -
+		 * bad luck.
+		 *
+		 * Those unlikely corner cases where the worst outcome is only a
+		 * one jiffy delay or a superfluous raise of the softirq are
+		 * not that expensive as doing the check always while holding
+		 * the lock.
+		 *
+		 * Possible remote writers are using WRITE_ONCE(). Local reader
+		 * uses therefore READ_ONCE().
+		 */
+		if (time_after_eq(jiffies, READ_ONCE(base->next_expiry)) ||
 		    (i =3D=3D BASE_DEF && tmigr_requires_handle_remote())) {
 			raise_softirq(TIMER_SOFTIRQ);
 			return;
@@ -2730,7 +2764,7 @@ void __init init_timers(void)
  */
 void msleep(unsigned int msecs)
 {
-	unsigned long timeout =3D msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout =3D msecs_to_jiffies(msecs);
=20
 	while (timeout)
 		timeout =3D schedule_timeout_uninterruptible(timeout);
@@ -2744,7 +2778,7 @@ EXPORT_SYMBOL(msleep);
  */
 unsigned long msleep_interruptible(unsigned int msecs)
 {
-	unsigned long timeout =3D msecs_to_jiffies(msecs) + 1;
+	unsigned long timeout =3D msecs_to_jiffies(msecs);
=20
 	while (timeout && !signal_pending(current))
 		timeout =3D schedule_timeout_interruptible(timeout);
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index a30c03a66172..a40aa606cd04 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -97,7 +97,7 @@ config BOOT_PRINTK_DELAY
 	  using "boot_delay=3DN".
=20
 	  It is likely that you would also need to use "lpj=3DM" to preset
-	  the "loops per jiffie" value.
+	  the "loops per jiffy" value.
 	  See a previous boot log for the "lpj" value to use for your
 	  system, and then set "lpj=3DM" before setting "boot_delay=3DN".
 	  NOTE:  Using this option may adversely affect SMP systems.
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index 00840d5784fe..04f6398b3a40 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -287,7 +287,7 @@ struct batadv_frag_table_entry {
 	/** @lock: lock to protect the list of fragments */
 	spinlock_t lock;
=20
-	/** @timestamp: time (jiffie) of last received fragment */
+	/** @timestamp: time (jiffy) of last received fragment */
 	unsigned long timestamp;
=20
 	/** @seqno: sequence number of the fragments in the list */
diff --git a/tools/testing/selftests/timers/posix_timers.c b/tools/testing/se=
lftests/timers/posix_timers.c
index 07c81c0093c0..16bd49492efa 100644
--- a/tools/testing/selftests/timers/posix_timers.c
+++ b/tools/testing/selftests/timers/posix_timers.c
@@ -6,10 +6,13 @@
  *
  * Kernel loop code stolen from Steven Rostedt <srostedt@redhat.com>
  */
-
+#define _GNU_SOURCE
 #include <sys/time.h>
+#include <sys/types.h>
 #include <stdio.h>
 #include <signal.h>
+#include <stdint.h>
+#include <string.h>
 #include <unistd.h>
 #include <time.h>
 #include <pthread.h>
@@ -18,6 +21,21 @@
=20
 #define DELAY 2
 #define USECS_PER_SEC 1000000
+#define NSECS_PER_SEC 1000000000
+
+static void __fatal_error(const char *test, const char *name, const char *wh=
at)
+{
+	char buf[64];
+
+	strerror_r(errno, buf, sizeof(buf));
+
+	if (name && strlen(name))
+		ksft_exit_fail_msg("%s %s %s %s\n", test, name, what, buf);
+	else
+		ksft_exit_fail_msg("%s %s %s\n", test, what, buf);
+}
+
+#define fatal_error(name, what)	__fatal_error(__func__, name, what)
=20
 static volatile int done;
=20
@@ -74,24 +92,13 @@ static int check_diff(struct timeval start, struct timeva=
l end)
 	return 0;
 }
=20
-static int check_itimer(int which)
+static void check_itimer(int which, const char *name)
 {
-	const char *name;
-	int err;
 	struct timeval start, end;
 	struct itimerval val =3D {
 		.it_value.tv_sec =3D DELAY,
 	};
=20
-	if (which =3D=3D ITIMER_VIRTUAL)
-		name =3D "ITIMER_VIRTUAL";
-	else if (which =3D=3D ITIMER_PROF)
-		name =3D "ITIMER_PROF";
-	else if (which =3D=3D ITIMER_REAL)
-		name =3D "ITIMER_REAL";
-	else
-		return -1;
-
 	done =3D 0;
=20
 	if (which =3D=3D ITIMER_VIRTUAL)
@@ -101,17 +108,11 @@ static int check_itimer(int which)
 	else if (which =3D=3D ITIMER_REAL)
 		signal(SIGALRM, sig_handler);
=20
-	err =3D gettimeofday(&start, NULL);
-	if (err < 0) {
-		ksft_perror("Can't call gettimeofday()");
-		return -1;
-	}
+	if (gettimeofday(&start, NULL) < 0)
+		fatal_error(name, "gettimeofday()");
=20
-	err =3D setitimer(which, &val, NULL);
-	if (err < 0) {
-		ksft_perror("Can't set timer");
-		return -1;
-	}
+	if (setitimer(which, &val, NULL) < 0)
+		fatal_error(name, "setitimer()");
=20
 	if (which =3D=3D ITIMER_VIRTUAL)
 		user_loop();
@@ -120,68 +121,41 @@ static int check_itimer(int which)
 	else if (which =3D=3D ITIMER_REAL)
 		idle_loop();
=20
-	err =3D gettimeofday(&end, NULL);
-	if (err < 0) {
-		ksft_perror("Can't call gettimeofday()");
-		return -1;
-	}
+	if (gettimeofday(&end, NULL) < 0)
+		fatal_error(name, "gettimeofday()");
=20
 	ksft_test_result(check_diff(start, end) =3D=3D 0, "%s\n", name);
-
-	return 0;
 }
=20
-static int check_timer_create(int which)
+static void check_timer_create(int which, const char *name)
 {
-	const char *type;
-	int err;
-	timer_t id;
 	struct timeval start, end;
 	struct itimerspec val =3D {
 		.it_value.tv_sec =3D DELAY,
 	};
-
-	if (which =3D=3D CLOCK_THREAD_CPUTIME_ID) {
-		type =3D "thread";
-	} else if (which =3D=3D CLOCK_PROCESS_CPUTIME_ID) {
-		type =3D "process";
-	} else {
-		ksft_print_msg("Unknown timer_create() type %d\n", which);
-		return -1;
-	}
+	timer_t id;
=20
 	done =3D 0;
-	err =3D timer_create(which, NULL, &id);
-	if (err < 0) {
-		ksft_perror("Can't create timer");
-		return -1;
-	}
-	signal(SIGALRM, sig_handler);
=20
-	err =3D gettimeofday(&start, NULL);
-	if (err < 0) {
-		ksft_perror("Can't call gettimeofday()");
-		return -1;
-	}
+	if (timer_create(which, NULL, &id) < 0)
+		fatal_error(name, "timer_create()");
=20
-	err =3D timer_settime(id, 0, &val, NULL);
-	if (err < 0) {
-		ksft_perror("Can't set timer");
-		return -1;
-	}
+	if (signal(SIGALRM, sig_handler) =3D=3D SIG_ERR)
+		fatal_error(name, "signal()");
+
+	if (gettimeofday(&start, NULL) < 0)
+		fatal_error(name, "gettimeofday()");
+
+	if (timer_settime(id, 0, &val, NULL) < 0)
+		fatal_error(name, "timer_settime()");
=20
 	user_loop();
=20
-	err =3D gettimeofday(&end, NULL);
-	if (err < 0) {
-		ksft_perror("Can't call gettimeofday()");
-		return -1;
-	}
+	if (gettimeofday(&end, NULL) < 0)
+		fatal_error(name, "gettimeofday()");
=20
 	ksft_test_result(check_diff(start, end) =3D=3D 0,
-			 "timer_create() per %s\n", type);
-
-	return 0;
+			 "timer_create() per %s\n", name);
 }
=20
 static pthread_t ctd_thread;
@@ -209,15 +183,14 @@ static void *ctd_thread_func(void *arg)
=20
 	ctd_count =3D 100;
 	if (timer_create(CLOCK_PROCESS_CPUTIME_ID, NULL, &id))
-		return "Can't create timer\n";
+		fatal_error(NULL, "timer_create()");
 	if (timer_settime(id, 0, &val, NULL))
-		return "Can't set timer\n";
-
+		fatal_error(NULL, "timer_settime()");
 	while (ctd_count > 0 && !ctd_failed)
 		;
=20
 	if (timer_delete(id))
-		return "Can't delete timer\n";
+		fatal_error(NULL, "timer_delete()");
=20
 	return NULL;
 }
@@ -225,19 +198,16 @@ static void *ctd_thread_func(void *arg)
 /*
  * Test that only the running thread receives the timer signal.
  */
-static int check_timer_distribution(void)
+static void check_timer_distribution(void)
 {
-	const char *errmsg;
+	if (signal(SIGALRM, ctd_sighandler) =3D=3D SIG_ERR)
+		fatal_error(NULL, "signal()");
=20
-	signal(SIGALRM, ctd_sighandler);
-
-	errmsg =3D "Can't create thread\n";
 	if (pthread_create(&ctd_thread, NULL, ctd_thread_func, NULL))
-		goto err;
+		fatal_error(NULL, "pthread_create()");
=20
-	errmsg =3D "Can't join thread\n";
-	if (pthread_join(ctd_thread, (void **)&errmsg) || errmsg)
-		goto err;
+	if (pthread_join(ctd_thread, NULL))
+		fatal_error(NULL, "pthread_join()");
=20
 	if (!ctd_failed)
 		ksft_test_result_pass("check signal distribution\n");
@@ -245,31 +215,399 @@ static int check_timer_distribution(void)
 		ksft_test_result_fail("check signal distribution\n");
 	else
 		ksft_test_result_skip("check signal distribution (old kernel)\n");
-	return 0;
-err:
-	ksft_print_msg("%s", errmsg);
-	return -1;
+}
+
+struct tmrsig {
+	int	signals;
+	int	overruns;
+};
+
+static void siginfo_handler(int sig, siginfo_t *si, void *uc)
+{
+	struct tmrsig *tsig =3D si ? si->si_ptr : NULL;
+
+	if (tsig) {
+		tsig->signals++;
+		tsig->overruns +=3D si->si_overrun;
+	}
+}
+
+static void *ignore_thread(void *arg)
+{
+	unsigned int *tid =3D arg;
+	sigset_t set;
+
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_BLOCK)");
+
+	*tid =3D gettid();
+	sleep(100);
+
+	if (sigprocmask(SIG_UNBLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)");
+	return NULL;
+}
+
+static void check_sig_ign(int thread)
+{
+	struct tmrsig tsig =3D { };
+	struct itimerspec its;
+	unsigned int tid =3D 0;
+	struct sigaction sa;
+	struct sigevent sev;
+	pthread_t pthread;
+	timer_t timerid;
+	sigset_t set;
+
+	if (thread) {
+		if (pthread_create(&pthread, NULL, ignore_thread, &tid))
+			fatal_error(NULL, "pthread_create()");
+		sleep(1);
+	}
+
+	sa.sa_flags =3D SA_SIGINFO;
+	sa.sa_sigaction =3D siginfo_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGUSR1, &sa, NULL))
+		fatal_error(NULL, "sigaction()");
+
+	/* Block the signal */
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_BLOCK)");
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_SIGNAL;
+	sev.sigev_signo =3D SIGUSR1;
+	sev.sigev_value.sival_ptr =3D &tsig;
+	if (thread) {
+		sev.sigev_notify =3D SIGEV_THREAD_ID;
+		sev._sigev_un._tid =3D tid;
+	}
+
+	if (timer_create(CLOCK_MONOTONIC, &sev, &timerid))
+		fatal_error(NULL, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	timer_settime(timerid, 0, &its, NULL);
+
+	sleep(1);
+
+	/* Set the signal to be ignored */
+	if (signal(SIGUSR1, SIG_IGN) =3D=3D SIG_ERR)
+		fatal_error(NULL, "signal(SIG_IGN)");
+
+	sleep(1);
+
+	if (thread) {
+		/* Stop the thread first. No signal should be delivered to it */
+		if (pthread_cancel(pthread))
+			fatal_error(NULL, "pthread_cancel()");
+		if (pthread_join(pthread, NULL))
+			fatal_error(NULL, "pthread_join()");
+	}
+
+	/* Restore the handler */
+	if (sigaction(SIGUSR1, &sa, NULL))
+		fatal_error(NULL, "sigaction()");
+
+	sleep(1);
+
+	/* Unblock it, which should deliver the signal in the !thread case*/
+	if (sigprocmask(SIG_UNBLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)");
+
+	if (timer_delete(timerid))
+		fatal_error(NULL, "timer_delete()");
+
+	if (!thread) {
+		ksft_test_result(tsig.signals =3D=3D 1 && tsig.overruns =3D=3D 29,
+				 "check_sig_ign SIGEV_SIGNAL\n");
+	} else {
+		ksft_test_result(tsig.signals =3D=3D 0 && tsig.overruns =3D=3D 0,
+				 "check_sig_ign SIGEV_THREAD_ID\n");
+	}
+}
+
+static void check_rearm(void)
+{
+	struct tmrsig tsig =3D { };
+	struct itimerspec its;
+	struct sigaction sa;
+	struct sigevent sev;
+	timer_t timerid;
+	sigset_t set;
+
+	sa.sa_flags =3D SA_SIGINFO;
+	sa.sa_sigaction =3D siginfo_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGUSR1, &sa, NULL))
+		fatal_error(NULL, "sigaction()");
+
+	/* Block the signal */
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_BLOCK)");
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_SIGNAL;
+	sev.sigev_signo =3D SIGUSR1;
+	sev.sigev_value.sival_ptr =3D &tsig;
+	if (timer_create(CLOCK_MONOTONIC, &sev, &timerid))
+		fatal_error(NULL, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	if (timer_settime(timerid, 0, &its, NULL))
+		fatal_error(NULL, "timer_settime()");
+
+	sleep(1);
+
+	/* Reprogram the timer to single shot */
+	its.it_value.tv_sec =3D 10;
+	its.it_value.tv_nsec =3D 0;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 0;
+	if (timer_settime(timerid, 0, &its, NULL))
+		fatal_error(NULL, "timer_settime()");
+
+	/* Unblock it, which should not deliver a signal */
+	if (sigprocmask(SIG_UNBLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)");
+
+	if (timer_delete(timerid))
+		fatal_error(NULL, "timer_delete()");
+
+	ksft_test_result(!tsig.signals, "check_rearm\n");
+}
+
+static void check_delete(void)
+{
+	struct tmrsig tsig =3D { };
+	struct itimerspec its;
+	struct sigaction sa;
+	struct sigevent sev;
+	timer_t timerid;
+	sigset_t set;
+
+	sa.sa_flags =3D SA_SIGINFO;
+	sa.sa_sigaction =3D siginfo_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGUSR1, &sa, NULL))
+		fatal_error(NULL, "sigaction()");
+
+	/* Block the signal */
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_BLOCK)");
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_SIGNAL;
+	sev.sigev_signo =3D SIGUSR1;
+	sev.sigev_value.sival_ptr =3D &tsig;
+	if (timer_create(CLOCK_MONOTONIC, &sev, &timerid))
+		fatal_error(NULL, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	if (timer_settime(timerid, 0, &its, NULL))
+		fatal_error(NULL, "timer_settime()");
+
+	sleep(1);
+
+	if (timer_delete(timerid))
+		fatal_error(NULL, "timer_delete()");
+
+	/* Unblock it, which should not deliver a signal */
+	if (sigprocmask(SIG_UNBLOCK, &set, NULL))
+		fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)");
+
+	ksft_test_result(!tsig.signals, "check_delete\n");
+}
+
+static inline int64_t calcdiff_ns(struct timespec t1, struct timespec t2)
+{
+	int64_t diff;
+
+	diff =3D NSECS_PER_SEC * (int64_t)((int) t1.tv_sec - (int) t2.tv_sec);
+	diff +=3D ((int) t1.tv_nsec - (int) t2.tv_nsec);
+	return diff;
+}
+
+static void check_sigev_none(int which, const char *name)
+{
+	struct timespec start, now;
+	struct itimerspec its;
+	struct sigevent sev;
+	timer_t timerid;
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_NONE;
+
+	if (timer_create(which, &sev, &timerid))
+		fatal_error(name, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	timer_settime(timerid, 0, &its, NULL);
+
+	if (clock_gettime(which, &start))
+		fatal_error(name, "clock_gettime()");
+
+	do {
+		if (clock_gettime(which, &now))
+			fatal_error(name, "clock_gettime()");
+	} while (calcdiff_ns(now, start) < NSECS_PER_SEC);
+
+	if (timer_gettime(timerid, &its))
+		fatal_error(name, "timer_gettime()");
+
+	if (timer_delete(timerid))
+		fatal_error(name, "timer_delete()");
+
+	ksft_test_result(its.it_value.tv_sec || its.it_value.tv_nsec,
+			 "check_sigev_none %s\n", name);
+}
+
+static void check_gettime(int which, const char *name)
+{
+	struct itimerspec its, prev;
+	struct timespec start, now;
+	struct sigevent sev;
+	timer_t timerid;
+	int wraps =3D 0;
+	sigset_t set;
+
+	/* Block the signal */
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(name, "sigprocmask(SIG_BLOCK)");
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_SIGNAL;
+	sev.sigev_signo =3D SIGUSR1;
+
+	if (timer_create(which, &sev, &timerid))
+		fatal_error(name, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	if (timer_settime(timerid, 0, &its, NULL))
+		fatal_error(name, "timer_settime()");
+
+	if (timer_gettime(timerid, &prev))
+		fatal_error(name, "timer_gettime()");
+
+	if (clock_gettime(which, &start))
+		fatal_error(name, "clock_gettime()");
+
+	do {
+		if (clock_gettime(which, &now))
+			fatal_error(name, "clock_gettime()");
+		if (timer_gettime(timerid, &its))
+			fatal_error(name, "timer_gettime()");
+		if (its.it_value.tv_nsec > prev.it_value.tv_nsec)
+			wraps++;
+		prev =3D its;
+
+	} while (calcdiff_ns(now, start) < NSECS_PER_SEC);
+
+	if (timer_delete(timerid))
+		fatal_error(name, "timer_delete()");
+
+	ksft_test_result(wraps > 1, "check_gettime %s\n", name);
+}
+
+static void check_overrun(int which, const char *name)
+{
+	struct timespec start, now;
+	struct tmrsig tsig =3D { };
+	struct itimerspec its;
+	struct sigaction sa;
+	struct sigevent sev;
+	timer_t timerid;
+	sigset_t set;
+
+	sa.sa_flags =3D SA_SIGINFO;
+	sa.sa_sigaction =3D siginfo_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGUSR1, &sa, NULL))
+		fatal_error(name, "sigaction()");
+
+	/* Block the signal */
+	sigemptyset(&set);
+	sigaddset(&set, SIGUSR1);
+	if (sigprocmask(SIG_BLOCK, &set, NULL))
+		fatal_error(name, "sigprocmask(SIG_BLOCK)");
+
+	memset(&sev, 0, sizeof(sev));
+	sev.sigev_notify =3D SIGEV_SIGNAL;
+	sev.sigev_signo =3D SIGUSR1;
+	sev.sigev_value.sival_ptr =3D &tsig;
+	if (timer_create(which, &sev, &timerid))
+		fatal_error(name, "timer_create()");
+
+	/* Start the timer to expire in 100ms and 100ms intervals */
+	its.it_value.tv_sec =3D 0;
+	its.it_value.tv_nsec =3D 100000000;
+	its.it_interval.tv_sec =3D 0;
+	its.it_interval.tv_nsec =3D 100000000;
+	if (timer_settime(timerid, 0, &its, NULL))
+		fatal_error(name, "timer_settime()");
+
+	if (clock_gettime(which, &start))
+		fatal_error(name, "clock_gettime()");
+
+	do {
+		if (clock_gettime(which, &now))
+			fatal_error(name, "clock_gettime()");
+	} while (calcdiff_ns(now, start) < NSECS_PER_SEC);
+
+	/* Unblock it, which should deliver a signal */
+	if (sigprocmask(SIG_UNBLOCK, &set, NULL))
+		fatal_error(name, "sigprocmask(SIG_UNBLOCK)");
+
+	if (timer_delete(timerid))
+		fatal_error(name, "timer_delete()");
+
+	ksft_test_result(tsig.signals =3D=3D 1 && tsig.overruns =3D=3D 9,
+			 "check_overrun %s\n", name);
 }
=20
 int main(int argc, char **argv)
 {
 	ksft_print_header();
-	ksft_set_plan(6);
+	ksft_set_plan(18);
=20
 	ksft_print_msg("Testing posix timers. False negative may happen on CPU exec=
ution \n");
 	ksft_print_msg("based timers if other threads run on the CPU...\n");
=20
-	if (check_itimer(ITIMER_VIRTUAL) < 0)
-		ksft_exit_fail();
-
-	if (check_itimer(ITIMER_PROF) < 0)
-		ksft_exit_fail();
-
-	if (check_itimer(ITIMER_REAL) < 0)
-		ksft_exit_fail();
-
-	if (check_timer_create(CLOCK_THREAD_CPUTIME_ID) < 0)
-		ksft_exit_fail();
+	check_itimer(ITIMER_VIRTUAL, "ITIMER_VIRTUAL");
+	check_itimer(ITIMER_PROF, "ITIMER_PROF");
+	check_itimer(ITIMER_REAL, "ITIMER_REAL");
+	check_timer_create(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");
=20
 	/*
 	 * It's unfortunately hard to reliably test a timer expiration
@@ -280,11 +618,21 @@ int main(int argc, char **argv)
 	 * to ensure true parallelism. So test only one thread until we
 	 * find a better solution.
 	 */
-	if (check_timer_create(CLOCK_PROCESS_CPUTIME_ID) < 0)
-		ksft_exit_fail();
-
-	if (check_timer_distribution() < 0)
-		ksft_exit_fail();
+	check_timer_create(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+	check_timer_distribution();
+
+	check_sig_ign(0);
+	check_sig_ign(1);
+	check_rearm();
+	check_delete();
+	check_sigev_none(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
+	check_sigev_none(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+	check_gettime(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
+	check_gettime(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+	check_gettime(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");
+	check_overrun(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
+	check_overrun(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+	check_overrun(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");
=20
 	ksft_finished();
 }


.
Date: Mon, 16 Sep 2024 10:38:36 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] irq/core for v6.12-rc1

Linus,

please pull the latest irq/core branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2024-09=
-16

up to:  a6fe30d1e365: genirq: Use cpumask_intersects()

Updates for the interrupt subsystem:

 - Core:
	- Remove a global lock in the affinity setting code

	  The lock protects a cpumask for intermediate results and the lock
	  causes a bottleneck on simultaneous start of multiple virtual
	  machines. Replace the lock and the static cpumask with a per CPU
	  cpumask which is nicely serialized by raw spinlock held when
	  executing this code.

	- Provide support for giving a suffix to interrupt domain names.

	  That's required to support devices with subfunctions so that the
	  domain names are distinct even if they originate from the same
	  device node.

	- The usual set of cleanups and enhancements all over the place

  - Drivers:

	- Support for longarch AVEC interrupt chip

	- Refurbishment of the Armada driver so it can be extended for new
          variants.

	- The usual set of cleanups and enhancements all over the place

Thanks,

	tglx

------------------>
Andy Shevchenko (2):
      irqdomain: Clarify checks for bus_token
      irqdomain: Remove stray '-' in the domain name

Anshuman Khandual (1):
      irqchip/gic-v4.1: Replace bare number with ID_AA64PFR0_EL1_GIC_V4P1

Caleb Sander Mateos (1):
      softirq: Remove unused 'action' parameter from action callback

Costa Shulyupin (3):
      genirq: Fix typo in struct comment
      genirq/cpuhotplug: Use cpumask_intersects()
      genirq: Use cpumask_intersects()

Hongbo Li (1):
      irqdomain: Use IS_ERR_OR_NULL() in irq_domain_trim_hierarchy()

Huacai Chen (4):
      irqchip/loongson-pch-msi: Switch to MSI parent domains
      LoongArch: Move irqchip function prototypes to irq-loongson.h
      LoongArch: Architectural preparation for AVEC irqchip
      irqchip/loongson-eiointc: Rename CPUHP_AP_IRQ_LOONGARCH_STARTING

Jeff Xie (2):
      genirq/proc: Correctly set file permissions for affinity control files
      genirq/proc: Change the return value for set affinity permission error

Jinjie Ruan (3):
      irqchip: Remove asmlinkage for handlers registered with set_handle_irq()
      genirq/proc: Use irq_move_pending() in show_irq_affinity()
      genirq/msi: Use kmemdup_array() instead of kmemdup()

Jiri Slaby (SUSE) (3):
      genirq/irq_sim: Remove unused irq_sim_work_ctx:: Irq_base
      genirq: Remove unused irq_chip_generic:: {type,polarity}_cache
      genirq: Remove irq_chip_regs:: Polarity

Konrad Dybcio (1):
      irqchip/apple-aic: Only access system registers on SoCs which provide t=
hem

Marc Zyngier (1):
      genirq: Get rid of global lock in irq_do_set_affinity()

Marek Beh=C3=BAn (41):
      irqchip/armada-370-xp: Drop _OFFS suffix from some register constants
      irqchip/armada-370-xp: Change register constant suffix from _MSK to _MA=
SK
      irqchip/armada-370-xp: Change spaces to tabs
      irqchip/armada-370-xp: Use BIT() and GENMASK() macros
      irqchip/armada-370-xp: Cosmetic fix parentheses in register constant de=
finitions
      irqchip/armada-370-xp: Change register constants prefix to MPIC_
      irqchip/armada-370-xp: Use correct type for cpu variable
      irqchip/armada-370-xp: Simplify is_percpu_irq() code
      irqchip/armada-370-xp: Change to SPDX license identifier
      irqchip/armada-370-xp: Declare iterators in for loop
      irqchip/armada-370-xp: Rename variable for consistency
      irqchip/armada-370-xp: Use unsigned int type for virqs
      irqchip/armada-370-xp: Use !virq instead of virq =3D=3D 0 in condition
      irqchip/armada-370-xp: Simplify ipi_resume() code
      irqchip/armada-370-xp: Improve indentation
      irqchip/armada-370-xp: Change symbol prefixes to mpic
      irqchip/armada-370-xp: Don't read number of supported interrupts multip=
le times
      irqchip/armada-370-xp: Use FIELD_GET() and named register constant
      irqchip/armada-370-xp: Refactor mpic_handle_msi_irq() code
      irqchip/armada-370-xp: Refactor handling IPI interrupts
      irqchip/armada-370-xp: Use consistent variable names for hwirqs
      irqchip/armada-370-xp: Use consistent types when iterating interrupts
      irqchip/armada-370-xp: Use consistent name for struct irq_data variables
      irqchip/armada-370-xp: Simplify mpic_reenable_percpu() and mpic_resume()
      irqchip/armada-370-xp: Drop redundant continue
      irqchip/armada-370-xp: Rename variable for consistency
      irqchip/armada-370-xp: Use u32 type instead of unsigned long where poss=
ieble
      irqchip/armada-370-xp: Refactor initial memory regions mapping
      irqchip/armada-370-xp: Print error and return error code on initializat=
ion failure
      irqchip/armada-370-xp: Drop IPI_DOORBELL_START and rename IPI_DOORBELL_=
END
      irqchip/armada-370-xp: Drop msi_doorbell_end()
      irqchip/armada-370-xp: Add the __init attribute to mpic_msi_init()
      irqchip/armada-370-xp: Put __init attribute after return type in mpic_i=
pi_init()
      irqchip/armada-370-xp: Put static variables into driver private structu=
re
      irqchip/armada-370-xp: Put MSI doorbell limits into the mpic structure
      irqchip/armada-370-xp: Pass around the driver private structure
      irqchip/armada-370-xp: Dynamically allocate the driver private structure
      irqchip/armada-370-xp: Fix reenabling last per-CPU interrupt
      irqchip/armada-370-xp: Iterate only valid bits of the per-CPU interrupt=
 cause register
      irqchip/armada-370-xp: Allow mapping only per-CPU interrupts
      irqchip/armada-370-xp: Use mpic_is_ipi_available() in mpic_of_init()

Matti Vaittinen (3):
      irqdomain: Simplify simple and legacy domain creation
      irqdomain: Allow giving name suffix for domain
      irqdomain: Always associate interrupts for legacy domains

Nick Chan (3):
      dt-bindings: apple,aic: Document A7-A11 compatibles
      irqchip/apple-aic: Skip unnecessary enabling of use_fast_ipi
      irqchip/apple-aic: Add a new "Global fast IPIs only" feature level

Thomas Gleixner (1):
      irqdomain: Cleanup domain name allocation

Tianyang Zhang (2):
      irqchip/loongson-pch-msi: Prepare get_pch_msi_handle() for AVECINTC
      irqchip/loongarch-avec: Add AVEC irqchip support

Zhang Zekun (1):
      irqchip/mbigen: Simplify code logic with for_each_child_of_node_scoped()


 .../bindings/interrupt-controller/apple,aic.yaml   |  14 +-
 arch/loongarch/Kconfig                             |   1 +
 arch/loongarch/include/asm/cpu-features.h          |   1 +
 arch/loongarch/include/asm/cpu.h                   |   2 +
 arch/loongarch/include/asm/hardirq.h               |   3 +-
 arch/loongarch/include/asm/irq.h                   |  31 +-
 arch/loongarch/include/asm/loongarch.h             |  18 +-
 arch/loongarch/include/asm/smp.h                   |   2 +
 arch/loongarch/kernel/cpu-probe.c                  |   3 +-
 arch/loongarch/kernel/irq.c                        |  12 +
 arch/loongarch/kernel/paravirt.c                   |   5 +
 arch/loongarch/kernel/smp.c                        |   6 +
 block/blk-mq.c                                     |   2 +-
 drivers/irqchip/Kconfig                            |   1 +
 drivers/irqchip/Makefile                           |   2 +-
 drivers/irqchip/irq-apple-aic.c                    |  59 +-
 drivers/irqchip/irq-armada-370-xp.c                | 861 +++++++++++--------=
--
 drivers/irqchip/irq-atmel-aic.c                    |   3 +-
 drivers/irqchip/irq-atmel-aic5.c                   |   3 +-
 drivers/irqchip/irq-clps711x.c                     |   2 +-
 drivers/irqchip/irq-davinci-cp-intc.c              |   3 +-
 drivers/irqchip/irq-ftintc010.c                    |   2 +-
 drivers/irqchip/irq-gic-v3.c                       |   2 +-
 drivers/irqchip/irq-gic-v4.c                       |   2 +-
 drivers/irqchip/irq-ixp4xx.c                       |   3 +-
 drivers/irqchip/irq-loongarch-avec.c               | 425 ++++++++++
 drivers/irqchip/irq-loongarch-cpu.c                |   7 +-
 drivers/irqchip/irq-loongson-eiointc.c             |   9 +-
 drivers/irqchip/irq-loongson-htvec.c               |   2 +
 drivers/irqchip/irq-loongson-liointc.c             |   2 +
 drivers/irqchip/irq-loongson-pch-lpc.c             |   2 +
 drivers/irqchip/irq-loongson-pch-msi.c             |  83 +-
 drivers/irqchip/irq-loongson-pch-pic.c             |   2 +
 drivers/irqchip/irq-loongson.h                     |  27 +
 drivers/irqchip/irq-mbigen.c                       |  24 +-
 drivers/irqchip/irq-omap-intc.c                    |   3 +-
 drivers/irqchip/irq-sa11x0.c                       |   3 +-
 drivers/irqchip/irq-versatile-fpga.c               |   2 +-
 include/linux/cpuhotplug.h                         |   3 +-
 include/linux/interrupt.h                          |   6 +-
 include/linux/irq.h                                |   6 -
 include/linux/irqdomain.h                          |   8 +
 kernel/irq/chip.c                                  |   2 +-
 kernel/irq/cpuhotplug.c                            |   4 +-
 kernel/irq/irq_sim.c                               |   1 -
 kernel/irq/irqdomain.c                             | 210 +++--
 kernel/irq/manage.c                                |  21 +-
 kernel/irq/migration.c                             |   4 +-
 kernel/irq/msi.c                                   |   2 +-
 kernel/irq/proc.c                                  |  17 +-
 kernel/rcu/tiny.c                                  |   2 +-
 kernel/rcu/tree.c                                  |   2 +-
 kernel/sched/fair.c                                |   2 +-
 kernel/softirq.c                                   |  15 +-
 kernel/time/hrtimer.c                              |   2 +-
 kernel/time/timer.c                                |   2 +-
 lib/irq_poll.c                                     |   2 +-
 net/core/dev.c                                     |   4 +-
 58 files changed, 1267 insertions(+), 682 deletions(-)
 create mode 100644 drivers/irqchip/irq-loongarch-avec.c
 create mode 100644 drivers/irqchip/irq-loongson.h

diff --git a/Documentation/devicetree/bindings/interrupt-controller/apple,aic=
.yaml b/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
index 698588e9aa86..4be9b596a790 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
@@ -31,13 +31,25 @@ description: |
   This device also represents the FIQ interrupt sources on platforms using A=
IC,
   which do not go through a discrete interrupt controller.
=20
+  IPIs may be performed via MMIO registers on all variants of AIC. Starting
+  from A11, system registers may also be used for "fast" IPIs. Starting from
+  M1, even faster IPIs within the same cluster may be achieved by writing to
+  a "local" fast IPI register as opposed to using the "global" fast IPI
+  register.
+
 allOf:
   - $ref: /schemas/interrupt-controller.yaml#
=20
 properties:
   compatible:
     items:
-      - const: apple,t8103-aic
+      - enum:
+          - apple,s5l8960x-aic
+          - apple,t7000-aic
+          - apple,s8000-aic
+          - apple,t8010-aic
+          - apple,t8015-aic
+          - apple,t8103-aic
       - const: apple,aic
=20
   interrupt-controller: true
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index 70f169210b52..0e3abf7b0bd3 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -85,6 +85,7 @@ config LOONGARCH
 	select GENERIC_ENTRY
 	select GENERIC_GETTIMEOFDAY
 	select GENERIC_IOREMAP if !ARCH_IOREMAP
+	select GENERIC_IRQ_MATRIX_ALLOCATOR
 	select GENERIC_IRQ_MULTI_HANDLER
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_SHOW
diff --git a/arch/loongarch/include/asm/cpu-features.h b/arch/loongarch/inclu=
de/asm/cpu-features.h
index 2eafe6a6aca8..16a716f88a5c 100644
--- a/arch/loongarch/include/asm/cpu-features.h
+++ b/arch/loongarch/include/asm/cpu-features.h
@@ -65,5 +65,6 @@
 #define cpu_has_guestid		cpu_opt(LOONGARCH_CPU_GUESTID)
 #define cpu_has_hypervisor	cpu_opt(LOONGARCH_CPU_HYPERVISOR)
 #define cpu_has_ptw		cpu_opt(LOONGARCH_CPU_PTW)
+#define cpu_has_avecint		cpu_opt(LOONGARCH_CPU_AVECINT)
=20
 #endif /* __ASM_CPU_FEATURES_H */
diff --git a/arch/loongarch/include/asm/cpu.h b/arch/loongarch/include/asm/cp=
u.h
index 48b9f7168bcc..843f9c4ec980 100644
--- a/arch/loongarch/include/asm/cpu.h
+++ b/arch/loongarch/include/asm/cpu.h
@@ -99,6 +99,7 @@ enum cpu_type_enum {
 #define CPU_FEATURE_GUESTID		24	/* CPU has GuestID feature */
 #define CPU_FEATURE_HYPERVISOR		25	/* CPU has hypervisor (running in VM) */
 #define CPU_FEATURE_PTW			26	/* CPU has hardware page table walker */
+#define CPU_FEATURE_AVECINT		27	/* CPU has avec interrupt */
=20
 #define LOONGARCH_CPU_CPUCFG		BIT_ULL(CPU_FEATURE_CPUCFG)
 #define LOONGARCH_CPU_LAM		BIT_ULL(CPU_FEATURE_LAM)
@@ -127,5 +128,6 @@ enum cpu_type_enum {
 #define LOONGARCH_CPU_GUESTID		BIT_ULL(CPU_FEATURE_GUESTID)
 #define LOONGARCH_CPU_HYPERVISOR	BIT_ULL(CPU_FEATURE_HYPERVISOR)
 #define LOONGARCH_CPU_PTW		BIT_ULL(CPU_FEATURE_PTW)
+#define LOONGARCH_CPU_AVECINT		BIT_ULL(CPU_FEATURE_AVECINT)
=20
 #endif /* _ASM_CPU_H */
diff --git a/arch/loongarch/include/asm/hardirq.h b/arch/loongarch/include/as=
m/hardirq.h
index 1d7feb719515..10da8d6961cb 100644
--- a/arch/loongarch/include/asm/hardirq.h
+++ b/arch/loongarch/include/asm/hardirq.h
@@ -12,12 +12,13 @@
 extern void ack_bad_irq(unsigned int irq);
 #define ack_bad_irq ack_bad_irq
=20
-#define NR_IPI	3
+#define NR_IPI	4
=20
 enum ipi_msg_type {
 	IPI_RESCHEDULE,
 	IPI_CALL_FUNCTION,
 	IPI_IRQ_WORK,
+	IPI_CLEAR_VECTOR,
 };
=20
 typedef struct {
diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/ir=
q.h
index 480418bc5071..9c2ca785faa9 100644
--- a/arch/loongarch/include/asm/irq.h
+++ b/arch/loongarch/include/asm/irq.h
@@ -39,11 +39,22 @@ void spurious_interrupt(void);
=20
 #define NR_IRQS_LEGACY 16
=20
+/*
+ * 256 Vectors Mapping for AVECINTC:
+ *
+ * 0 - 15: Mapping classic IPs, e.g. IP0-12.
+ * 16 - 255: Mapping vectors for external IRQ.
+ *
+ */
+#define NR_VECTORS		256
+#define NR_LEGACY_VECTORS	16
+#define IRQ_MATRIX_BITS		NR_VECTORS
+
 #define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
 void arch_trigger_cpumask_backtrace(const struct cpumask *mask, int exclude_=
cpu);
=20
 #define MAX_IO_PICS 2
-#define NR_IRQS	(64 + (256 * MAX_IO_PICS))
+#define NR_IRQS	(64 + NR_VECTORS * (NR_CPUS + MAX_IO_PICS))
=20
 struct acpi_vector_group {
 	int node;
@@ -65,7 +76,7 @@ extern struct acpi_vector_group msi_group[MAX_IO_PICS];
 #define LOONGSON_LPC_LAST_IRQ		(LOONGSON_LPC_IRQ_BASE + 15)
=20
 #define LOONGSON_CPU_IRQ_BASE		16
-#define LOONGSON_CPU_LAST_IRQ		(LOONGSON_CPU_IRQ_BASE + 14)
+#define LOONGSON_CPU_LAST_IRQ		(LOONGSON_CPU_IRQ_BASE + 15)
=20
 #define LOONGSON_PCH_IRQ_BASE		64
 #define LOONGSON_PCH_ACPI_IRQ		(LOONGSON_PCH_IRQ_BASE + 47)
@@ -88,20 +99,8 @@ struct acpi_madt_bio_pic;
 struct acpi_madt_msi_pic;
 struct acpi_madt_lpc_pic;
=20
-int liointc_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_lio_pic *acpi_liointc);
-int eiointc_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_eio_pic *acpi_eiointc);
-
-int htvec_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_ht_pic *acpi_htvec);
-int pch_lpc_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_lpc_pic *acpi_pchlpc);
-int pch_msi_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_msi_pic *acpi_pchmsi);
-int pch_pic_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_bio_pic *acpi_pchpic);
-int find_pch_pic(u32 gsi);
+void complete_irq_moving(void);
+
 struct fwnode_handle *get_pch_msi_handle(int pci_segment);
=20
 extern struct acpi_madt_lio_pic *acpi_liointc;
diff --git a/arch/loongarch/include/asm/loongarch.h b/arch/loongarch/include/=
asm/loongarch.h
index 04a78010fc72..631d249b3ef2 100644
--- a/arch/loongarch/include/asm/loongarch.h
+++ b/arch/loongarch/include/asm/loongarch.h
@@ -253,8 +253,8 @@
 #define  CSR_ESTAT_EXC_WIDTH		6
 #define  CSR_ESTAT_EXC			(_ULCAST_(0x3f) << CSR_ESTAT_EXC_SHIFT)
 #define  CSR_ESTAT_IS_SHIFT		0
-#define  CSR_ESTAT_IS_WIDTH		14
-#define  CSR_ESTAT_IS			(_ULCAST_(0x3fff) << CSR_ESTAT_IS_SHIFT)
+#define  CSR_ESTAT_IS_WIDTH		15
+#define  CSR_ESTAT_IS			(_ULCAST_(0x7fff) << CSR_ESTAT_IS_SHIFT)
=20
 #define LOONGARCH_CSR_ERA		0x6	/* ERA */
=20
@@ -649,6 +649,13 @@
=20
 #define LOONGARCH_CSR_CTAG		0x98	/* TagLo + TagHi */
=20
+#define LOONGARCH_CSR_ISR0		0xa0
+#define LOONGARCH_CSR_ISR1		0xa1
+#define LOONGARCH_CSR_ISR2		0xa2
+#define LOONGARCH_CSR_ISR3		0xa3
+
+#define LOONGARCH_CSR_IRR		0xa4
+
 #define LOONGARCH_CSR_PRID		0xc0
=20
 /* Shadow MCSR : 0xc0 ~ 0xff */
@@ -1011,7 +1018,7 @@
 /*
  * CSR_ECFG IM
  */
-#define ECFG0_IM		0x00001fff
+#define ECFG0_IM		0x00005fff
 #define ECFGB_SIP0		0
 #define ECFGF_SIP0		(_ULCAST_(1) << ECFGB_SIP0)
 #define ECFGB_SIP1		1
@@ -1054,6 +1061,7 @@
 #define  IOCSRF_EIODECODE		BIT_ULL(9)
 #define  IOCSRF_FLATMODE		BIT_ULL(10)
 #define  IOCSRF_VM			BIT_ULL(11)
+#define  IOCSRF_AVEC			BIT_ULL(15)
=20
 #define LOONGARCH_IOCSR_VENDOR		0x10
=20
@@ -1065,6 +1073,7 @@
 #define  IOCSR_MISC_FUNC_SOFT_INT	BIT_ULL(10)
 #define  IOCSR_MISC_FUNC_TIMER_RESET	BIT_ULL(21)
 #define  IOCSR_MISC_FUNC_EXT_IOI_EN	BIT_ULL(48)
+#define  IOCSR_MISC_FUNC_AVEC_EN	BIT_ULL(51)
=20
 #define LOONGARCH_IOCSR_CPUTEMP		0x428
=20
@@ -1387,9 +1396,10 @@ __BUILD_CSR_OP(tlbidx)
 #define INT_TI		11	/* Timer */
 #define INT_IPI		12
 #define INT_NMI		13
+#define INT_AVEC	14
=20
 /* ExcCodes corresponding to interrupts */
-#define EXCCODE_INT_NUM		(INT_NMI + 1)
+#define EXCCODE_INT_NUM		(INT_AVEC + 1)
 #define EXCCODE_INT_START	64
 #define EXCCODE_INT_END		(EXCCODE_INT_START + EXCCODE_INT_NUM - 1)
=20
diff --git a/arch/loongarch/include/asm/smp.h b/arch/loongarch/include/asm/sm=
p.h
index 50db503f44e3..3383c9d24e94 100644
--- a/arch/loongarch/include/asm/smp.h
+++ b/arch/loongarch/include/asm/smp.h
@@ -70,10 +70,12 @@ extern int __cpu_logical_map[NR_CPUS];
 #define ACTION_RESCHEDULE	1
 #define ACTION_CALL_FUNCTION	2
 #define ACTION_IRQ_WORK		3
+#define ACTION_CLEAR_VECTOR	4
 #define SMP_BOOT_CPU		BIT(ACTION_BOOT_CPU)
 #define SMP_RESCHEDULE		BIT(ACTION_RESCHEDULE)
 #define SMP_CALL_FUNCTION	BIT(ACTION_CALL_FUNCTION)
 #define SMP_IRQ_WORK		BIT(ACTION_IRQ_WORK)
+#define SMP_CLEAR_VECTOR	BIT(ACTION_CLEAR_VECTOR)
=20
 struct secondary_data {
 	unsigned long stack;
diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-pr=
obe.c
index 55320813ee08..14f0449f5452 100644
--- a/arch/loongarch/kernel/cpu-probe.c
+++ b/arch/loongarch/kernel/cpu-probe.c
@@ -106,7 +106,6 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c)
 		elf_hwcap |=3D HWCAP_LOONGARCH_CRC32;
 	}
=20
-
 	config =3D read_cpucfg(LOONGARCH_CPUCFG2);
 	if (config & CPUCFG2_LAM) {
 		c->options |=3D LOONGARCH_CPU_LAM;
@@ -174,6 +173,8 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c)
 		c->options |=3D LOONGARCH_CPU_FLATMODE;
 	if (config & IOCSRF_EIODECODE)
 		c->options |=3D LOONGARCH_CPU_EIODECODE;
+	if (config & IOCSRF_AVEC)
+		c->options |=3D LOONGARCH_CPU_AVECINT;
 	if (config & IOCSRF_VM)
 		c->options |=3D LOONGARCH_CPU_HYPERVISOR;
=20
diff --git a/arch/loongarch/kernel/irq.c b/arch/loongarch/kernel/irq.c
index f4991c03514f..414f5249d70a 100644
--- a/arch/loongarch/kernel/irq.c
+++ b/arch/loongarch/kernel/irq.c
@@ -87,6 +87,18 @@ static void __init init_vec_parent_group(void)
 	acpi_table_parse(ACPI_SIG_MCFG, early_pci_mcfg_parse);
 }
=20
+int __init arch_probe_nr_irqs(void)
+{
+	int nr_io_pics =3D bitmap_weight(loongson_sysconf.cores_io_master, NR_CPUS);
+
+	if (!cpu_has_avecint)
+		nr_irqs =3D (64 + NR_VECTORS * nr_io_pics);
+	else
+		nr_irqs =3D (64 + NR_VECTORS * (nr_cpu_ids + nr_io_pics));
+
+	return NR_IRQS_LEGACY;
+}
+
 void __init init_IRQ(void)
 {
 	int i;
diff --git a/arch/loongarch/kernel/paravirt.c b/arch/loongarch/kernel/paravir=
t.c
index 9c9b75b76f62..4d736a4e488d 100644
--- a/arch/loongarch/kernel/paravirt.c
+++ b/arch/loongarch/kernel/paravirt.c
@@ -134,6 +134,11 @@ static irqreturn_t pv_ipi_interrupt(int irq, void *dev)
 		info->ipi_irqs[IPI_IRQ_WORK]++;
 	}
=20
+	if (action & SMP_CLEAR_VECTOR) {
+		complete_irq_moving();
+		info->ipi_irqs[IPI_CLEAR_VECTOR]++;
+	}
+
 	return IRQ_HANDLED;
 }
=20
diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c
index ca405ab86aae..4adbbef3450a 100644
--- a/arch/loongarch/kernel/smp.c
+++ b/arch/loongarch/kernel/smp.c
@@ -72,6 +72,7 @@ static const char *ipi_types[NR_IPI] __tracepoint_string =
=3D {
 	[IPI_RESCHEDULE] =3D "Rescheduling interrupts",
 	[IPI_CALL_FUNCTION] =3D "Function call interrupts",
 	[IPI_IRQ_WORK] =3D "IRQ work interrupts",
+	[IPI_CLEAR_VECTOR] =3D "Clear vector interrupts",
 };
=20
 void show_ipi_list(struct seq_file *p, int prec)
@@ -248,6 +249,11 @@ static irqreturn_t loongson_ipi_interrupt(int irq, void =
*dev)
 		per_cpu(irq_stat, cpu).ipi_irqs[IPI_IRQ_WORK]++;
 	}
=20
+	if (action & SMP_CLEAR_VECTOR) {
+		complete_irq_moving();
+		per_cpu(irq_stat, cpu).ipi_irqs[IPI_CLEAR_VECTOR]++;
+	}
+
 	return IRQ_HANDLED;
 }
=20
diff --git a/block/blk-mq.c b/block/blk-mq.c
index e3c3c0c21b55..aa28157b1aaf 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1128,7 +1128,7 @@ static void blk_complete_reqs(struct llist_head *list)
 		rq->q->mq_ops->complete(rq);
 }
=20
-static __latent_entropy void blk_done_softirq(struct softirq_action *h)
+static __latent_entropy void blk_done_softirq(void)
 {
 	blk_complete_reqs(this_cpu_ptr(&blk_cpu_done));
 }
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index d078bdc48c38..341cd9ca5a05 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -685,6 +685,7 @@ config LOONGSON_PCH_MSI
 	depends on PCI
 	default MACH_LOONGSON64
 	select IRQ_DOMAIN_HIERARCHY
+	select IRQ_MSI_LIB
 	select PCI_MSI
 	help
 	  Support for the Loongson PCH MSI Controller.
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 15635812b2d6..e3679ec2b9f7 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -110,7 +110,7 @@ obj-$(CONFIG_LS1X_IRQ)			+=3D irq-ls1x.o
 obj-$(CONFIG_TI_SCI_INTR_IRQCHIP)	+=3D irq-ti-sci-intr.o
 obj-$(CONFIG_TI_SCI_INTA_IRQCHIP)	+=3D irq-ti-sci-inta.o
 obj-$(CONFIG_TI_PRUSS_INTC)		+=3D irq-pruss-intc.o
-obj-$(CONFIG_IRQ_LOONGARCH_CPU)		+=3D irq-loongarch-cpu.o
+obj-$(CONFIG_IRQ_LOONGARCH_CPU)		+=3D irq-loongarch-cpu.o irq-loongarch-avec=
.o
 obj-$(CONFIG_LOONGSON_LIOINTC)		+=3D irq-loongson-liointc.o
 obj-$(CONFIG_LOONGSON_EIOINTC)		+=3D irq-loongson-eiointc.o
 obj-$(CONFIG_LOONGSON_HTPIC)		+=3D irq-loongson-htpic.o
diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c
index 5c534d9fd2b0..da5250f0155c 100644
--- a/drivers/irqchip/irq-apple-aic.c
+++ b/drivers/irqchip/irq-apple-aic.c
@@ -234,7 +234,10 @@ enum fiq_hwirq {
 	AIC_NR_FIQ
 };
=20
+/* True if UNCORE/UNCORE2 and Sn_... IPI registers are present and used (A11=
+) */
 static DEFINE_STATIC_KEY_TRUE(use_fast_ipi);
+/* True if SYS_IMP_APL_IPI_RR_LOCAL_EL1 exists for local fast IPIs (M1+) */
+static DEFINE_STATIC_KEY_TRUE(use_local_fast_ipi);
=20
 struct aic_info {
 	int version;
@@ -252,6 +255,7 @@ struct aic_info {
=20
 	/* Features */
 	bool fast_ipi;
+	bool local_fast_ipi;
 };
=20
 static const struct aic_info aic1_info __initconst =3D {
@@ -270,17 +274,32 @@ static const struct aic_info aic1_fipi_info __initconst=
 =3D {
 	.fast_ipi	=3D true,
 };
=20
+static const struct aic_info aic1_local_fipi_info __initconst =3D {
+	.version	=3D 1,
+
+	.event		=3D AIC_EVENT,
+	.target_cpu	=3D AIC_TARGET_CPU,
+
+	.fast_ipi	=3D true,
+	.local_fast_ipi =3D true,
+};
+
 static const struct aic_info aic2_info __initconst =3D {
 	.version	=3D 2,
=20
 	.irq_cfg	=3D AIC2_IRQ_CFG,
=20
 	.fast_ipi	=3D true,
+	.local_fast_ipi =3D true,
 };
=20
 static const struct of_device_id aic_info_match[] =3D {
 	{
 		.compatible =3D "apple,t8103-aic",
+		.data =3D &aic1_local_fipi_info,
+	},
+	{
+		.compatible =3D "apple,t8015-aic",
 		.data =3D &aic1_fipi_info,
 	},
 	{
@@ -532,14 +551,9 @@ static void __exception_irq_entry aic_handle_fiq(struct =
pt_regs *regs)
 	 * we check for everything here, even things we don't support yet.
 	 */
=20
-	if (read_sysreg_s(SYS_IMP_APL_IPI_SR_EL1) & IPI_SR_PENDING) {
-		if (static_branch_likely(&use_fast_ipi)) {
-			aic_handle_ipi(regs);
-		} else {
-			pr_err_ratelimited("Fast IPI fired. Acking.\n");
-			write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1);
-		}
-	}
+	if (static_branch_likely(&use_fast_ipi) &&
+	    (read_sysreg_s(SYS_IMP_APL_IPI_SR_EL1) & IPI_SR_PENDING))
+		aic_handle_ipi(regs);
=20
 	if (TIMER_FIRING(read_sysreg(cntp_ctl_el0)))
 		generic_handle_domain_irq(aic_irqc->hw_domain,
@@ -574,8 +588,9 @@ static void __exception_irq_entry aic_handle_fiq(struct p=
t_regs *regs)
 					  AIC_FIQ_HWIRQ(irq));
 	}
=20
-	if (FIELD_GET(UPMCR0_IMODE, read_sysreg_s(SYS_IMP_APL_UPMCR0_EL1)) =3D=3D U=
PMCR0_IMODE_FIQ &&
-			(read_sysreg_s(SYS_IMP_APL_UPMSR_EL1) & UPMSR_IACT)) {
+	if (static_branch_likely(&use_fast_ipi) &&
+	    (FIELD_GET(UPMCR0_IMODE, read_sysreg_s(SYS_IMP_APL_UPMCR0_EL1)) =3D=3D =
UPMCR0_IMODE_FIQ) &&
+	    (read_sysreg_s(SYS_IMP_APL_UPMSR_EL1) & UPMSR_IACT)) {
 		/* Same story with uncore PMCs */
 		pr_err_ratelimited("Uncore PMC FIQ fired. Masking.\n");
 		sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE,
@@ -750,12 +765,12 @@ static void aic_ipi_send_fast(int cpu)
 	u64 cluster =3D MPIDR_CLUSTER(mpidr);
 	u64 idx =3D MPIDR_CPU(mpidr);
=20
-	if (MPIDR_CLUSTER(my_mpidr) =3D=3D cluster)
-		write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx),
-			       SYS_IMP_APL_IPI_RR_LOCAL_EL1);
-	else
+	if (static_branch_likely(&use_local_fast_ipi) && MPIDR_CLUSTER(my_mpidr) =
=3D=3D cluster) {
+		write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx), SYS_IMP_APL_IPI_RR_LOCAL_EL1);
+	} else {
 		write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx) | FIELD_PREP(IPI_RR_CLUSTER, cl=
uster),
 			       SYS_IMP_APL_IPI_RR_GLOBAL_EL1);
+	}
 	isb();
 }
=20
@@ -811,7 +826,8 @@ static int aic_init_cpu(unsigned int cpu)
 	/* Mask all hard-wired per-CPU IRQ/FIQ sources */
=20
 	/* Pending Fast IPI FIQs */
-	write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1);
+	if (static_branch_likely(&use_fast_ipi))
+		write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1);
=20
 	/* Timer FIQs */
 	sysreg_clear_set(cntp_ctl_el0, 0, ARCH_TIMER_CTRL_IT_MASK);
@@ -832,8 +848,10 @@ static int aic_init_cpu(unsigned int cpu)
 			   FIELD_PREP(PMCR0_IMODE, PMCR0_IMODE_OFF));
=20
 	/* Uncore PMC FIQ */
-	sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE,
-			   FIELD_PREP(UPMCR0_IMODE, UPMCR0_IMODE_OFF));
+	if (static_branch_likely(&use_fast_ipi)) {
+		sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE,
+				   FIELD_PREP(UPMCR0_IMODE, UPMCR0_IMODE_OFF));
+	}
=20
 	/* Commit all of the above */
 	isb();
@@ -987,11 +1005,12 @@ static int __init aic_of_ic_init(struct device_node *n=
ode, struct device_node *p
 	off +=3D sizeof(u32) * (irqc->max_irq >> 5); /* MASK_CLR */
 	off +=3D sizeof(u32) * (irqc->max_irq >> 5); /* HW_STATE */
=20
-	if (irqc->info.fast_ipi)
-		static_branch_enable(&use_fast_ipi);
-	else
+	if (!irqc->info.fast_ipi)
 		static_branch_disable(&use_fast_ipi);
=20
+	if (!irqc->info.local_fast_ipi)
+		static_branch_disable(&use_local_fast_ipi);
+
 	irqc->info.die_stride =3D off - start_off;
=20
 	irqc->hw_domain =3D irq_domain_create_tree(of_node_to_fwnode(node),
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada=
-370-xp.c
index dce2b80bf439..d7c5ef248474 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Marvell Armada 370 and Armada XP SoC IRQ handling
  *
@@ -7,13 +8,11 @@
  * Gregory CLEMENT <gregory.clement@free-electrons.com>
  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
  * Ben Dooks <ben.dooks@codethink.co.uk>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
  */
=20
+#include <linux/bitfield.h>
 #include <linux/bits.h>
+#include <linux/err.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -66,19 +65,17 @@
  *                   device
  *
  * The "global interrupt mask/unmask" is modified using the
- * ARMADA_370_XP_INT_SET_ENABLE_OFFS and
- * ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS registers, which are relative
- * to "main_int_base".
+ * MPIC_INT_SET_ENABLE and MPIC_INT_CLEAR_ENABLE
+ * registers, which are relative to "mpic->base".
  *
- * The "per-CPU mask/unmask" is modified using the
- * ARMADA_370_XP_INT_SET_MASK_OFFS and
- * ARMADA_370_XP_INT_CLEAR_MASK_OFFS registers, which are relative to
- * "per_cpu_int_base". This base address points to a special address,
+ * The "per-CPU mask/unmask" is modified using the MPIC_INT_SET_MASK
+ * and MPIC_INT_CLEAR_MASK registers, which are relative to
+ * "mpic->per_cpu". This base address points to a special address,
  * which automatically accesses the registers of the current CPU.
  *
  * The per-CPU mask/unmask can also be adjusted using the global
- * per-interrupt ARMADA_370_XP_INT_SOURCE_CTL register, which we use
- * to configure interrupt affinity.
+ * per-interrupt MPIC_INT_SOURCE_CTL register, which we use to
+ * configure interrupt affinity.
  *
  * Due to this model, all interrupts need to be mask/unmasked at two
  * different levels: at the global level and at the per-CPU level.
@@ -92,9 +89,8 @@
  *    the current CPU, running the ->map() code. This allows to have
  *    the interrupt unmasked at this level in non-SMP
  *    configurations. In SMP configurations, the ->set_affinity()
- *    callback is called, which using the
- *    ARMADA_370_XP_INT_SOURCE_CTL() readjusts the per-CPU mask/unmask
- *    for the interrupt.
+ *    callback is called, which using the MPIC_INT_SOURCE_CTL()
+ *    readjusts the per-CPU mask/unmask for the interrupt.
  *
  *    The ->mask() and ->unmask() operations only mask/unmask the
  *    interrupt at the "global" level.
@@ -116,58 +112,84 @@
  *    at the per-CPU level.
  */
=20
-/* Registers relative to main_int_base */
-#define ARMADA_370_XP_INT_CONTROL		(0x00)
-#define ARMADA_370_XP_SW_TRIG_INT_OFFS		(0x04)
-#define ARMADA_370_XP_INT_SET_ENABLE_OFFS	(0x30)
-#define ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS	(0x34)
-#define ARMADA_370_XP_INT_SOURCE_CTL(irq)	(0x100 + irq*4)
-#define ARMADA_370_XP_INT_SOURCE_CPU_MASK	0xF
-#define ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid)	((BIT(0) | BIT(8)) << cpuid)
-
-/* Registers relative to per_cpu_int_base */
-#define ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS	(0x08)
-#define ARMADA_370_XP_IN_DRBEL_MSK_OFFS		(0x0c)
-#define ARMADA_375_PPI_CAUSE			(0x10)
-#define ARMADA_370_XP_CPU_INTACK_OFFS		(0x44)
-#define ARMADA_370_XP_INT_SET_MASK_OFFS		(0x48)
-#define ARMADA_370_XP_INT_CLEAR_MASK_OFFS	(0x4C)
-#define ARMADA_370_XP_INT_FABRIC_MASK_OFFS	(0x54)
-#define ARMADA_370_XP_INT_CAUSE_PERF(cpu)	(1 << cpu)
-
-#define ARMADA_370_XP_MAX_PER_CPU_IRQS		(28)
+/* Registers relative to mpic->base */
+#define MPIC_INT_CONTROL			0x00
+#define MPIC_INT_CONTROL_NUMINT_MASK		GENMASK(12, 2)
+#define MPIC_SW_TRIG_INT			0x04
+#define MPIC_INT_SET_ENABLE			0x30
+#define MPIC_INT_CLEAR_ENABLE			0x34
+#define MPIC_INT_SOURCE_CTL(hwirq)		(0x100 + (hwirq) * 4)
+#define MPIC_INT_SOURCE_CPU_MASK		GENMASK(3, 0)
+#define MPIC_INT_IRQ_FIQ_MASK(cpuid)		((BIT(0) | BIT(8)) << (cpuid))
+
+/* Registers relative to mpic->per_cpu */
+#define MPIC_IN_DRBEL_CAUSE			0x08
+#define MPIC_IN_DRBEL_MASK			0x0c
+#define MPIC_PPI_CAUSE				0x10
+#define MPIC_CPU_INTACK				0x44
+#define MPIC_CPU_INTACK_IID_MASK		GENMASK(9, 0)
+#define MPIC_INT_SET_MASK			0x48
+#define MPIC_INT_CLEAR_MASK			0x4C
+#define MPIC_INT_FABRIC_MASK			0x54
+#define MPIC_INT_CAUSE_PERF(cpu)		BIT(cpu)
+
+#define MPIC_PER_CPU_IRQS_NR			29
=20
 /* IPI and MSI interrupt definitions for IPI platforms */
-#define IPI_DOORBELL_START                      (0)
-#define IPI_DOORBELL_END                        (8)
-#define IPI_DOORBELL_MASK                       0xFF
-#define PCI_MSI_DOORBELL_START                  (16)
-#define PCI_MSI_DOORBELL_NR                     (16)
-#define PCI_MSI_DOORBELL_END                    (32)
-#define PCI_MSI_DOORBELL_MASK                   0xFFFF0000
+#define IPI_DOORBELL_NR				8
+#define IPI_DOORBELL_MASK			GENMASK(7, 0)
+#define PCI_MSI_DOORBELL_START			16
+#define PCI_MSI_DOORBELL_NR			16
+#define PCI_MSI_DOORBELL_MASK			GENMASK(31, 16)
=20
 /* MSI interrupt definitions for non-IPI platforms */
 #define PCI_MSI_FULL_DOORBELL_START		0
 #define PCI_MSI_FULL_DOORBELL_NR		32
-#define PCI_MSI_FULL_DOORBELL_END		32
 #define PCI_MSI_FULL_DOORBELL_MASK		GENMASK(31, 0)
 #define PCI_MSI_FULL_DOORBELL_SRC0_MASK		GENMASK(15, 0)
 #define PCI_MSI_FULL_DOORBELL_SRC1_MASK		GENMASK(31, 16)
=20
-static void __iomem *per_cpu_int_base;
-static void __iomem *main_int_base;
-static struct irq_domain *armada_370_xp_mpic_domain;
-static u32 doorbell_mask_reg;
-static int parent_irq;
+/**
+ * struct mpic - MPIC private data structure
+ * @base:		MPIC registers base address
+ * @per_cpu:		per-CPU registers base address
+ * @parent_irq:		parent IRQ if MPIC is not top-level interrupt controller
+ * @domain:		MPIC main interrupt domain
+ * @ipi_domain:		IPI domain
+ * @msi_domain:		MSI domain
+ * @msi_inner_domain:	MSI inner domain
+ * @msi_used:		bitmap of used MSI numbers
+ * @msi_lock:		mutex serializing access to @msi_used
+ * @msi_doorbell_addr:	physical address of MSI doorbell register
+ * @msi_doorbell_mask:	mask of available doorbell bits for MSIs (either PCI_=
MSI_DOORBELL_MASK or
+ *			PCI_MSI_FULL_DOORBELL_MASK)
+ * @msi_doorbell_start:	first set bit in @msi_doorbell_mask
+ * @msi_doorbell_size:	number of set bits in @msi_doorbell_mask
+ * @doorbell_mask:	doorbell mask of MSIs and IPIs, stored on suspend, restor=
ed on resume
+ */
+struct mpic {
+	void __iomem *base;
+	void __iomem *per_cpu;
+	int parent_irq;
+	struct irq_domain *domain;
+#ifdef CONFIG_SMP
+	struct irq_domain *ipi_domain;
+#endif
 #ifdef CONFIG_PCI_MSI
-static struct irq_domain *armada_370_xp_msi_domain;
-static struct irq_domain *armada_370_xp_msi_inner_domain;
-static DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR);
-static DEFINE_MUTEX(msi_used_lock);
-static phys_addr_t msi_doorbell_addr;
+	struct irq_domain *msi_domain;
+	struct irq_domain *msi_inner_domain;
+	DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR);
+	struct mutex msi_lock;
+	phys_addr_t msi_doorbell_addr;
+	u32 msi_doorbell_mask;
+	unsigned int msi_doorbell_start, msi_doorbell_size;
 #endif
+	u32 doorbell_mask;
+};
+
+static struct mpic *mpic_data __ro_after_init;
=20
-static inline bool is_ipi_available(void)
+static inline bool mpic_is_ipi_available(struct mpic *mpic)
 {
 	/*
 	 * We distinguish IPI availability in the IC by the IC not having a
@@ -175,39 +197,12 @@ static inline bool is_ipi_available(void)
 	 * interrupt controller (e.g. GIC) that takes care of inter-processor
 	 * interrupts.
 	 */
-	return parent_irq <=3D 0;
-}
-
-static inline u32 msi_doorbell_mask(void)
-{
-	return is_ipi_available() ? PCI_MSI_DOORBELL_MASK :
-				    PCI_MSI_FULL_DOORBELL_MASK;
-}
-
-static inline unsigned int msi_doorbell_start(void)
-{
-	return is_ipi_available() ? PCI_MSI_DOORBELL_START :
-				    PCI_MSI_FULL_DOORBELL_START;
+	return mpic->parent_irq <=3D 0;
 }
=20
-static inline unsigned int msi_doorbell_size(void)
+static inline bool mpic_is_percpu_irq(irq_hw_number_t hwirq)
 {
-	return is_ipi_available() ? PCI_MSI_DOORBELL_NR :
-				    PCI_MSI_FULL_DOORBELL_NR;
-}
-
-static inline unsigned int msi_doorbell_end(void)
-{
-	return is_ipi_available() ? PCI_MSI_DOORBELL_END :
-				    PCI_MSI_FULL_DOORBELL_END;
-}
-
-static inline bool is_percpu_irq(irq_hw_number_t irq)
-{
-	if (irq <=3D ARMADA_370_XP_MAX_PER_CPU_IRQS)
-		return true;
-
-	return false;
+	return hwirq < MPIC_PER_CPU_IRQS_NR;
 }
=20
 /*
@@ -215,55 +210,53 @@ static inline bool is_percpu_irq(irq_hw_number_t irq)
  * For shared global interrupts, mask/unmask global enable bit
  * For CPU interrupts, mask/unmask the calling CPU's bit
  */
-static void armada_370_xp_irq_mask(struct irq_data *d)
+static void mpic_irq_mask(struct irq_data *d)
 {
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
 	irq_hw_number_t hwirq =3D irqd_to_hwirq(d);
=20
-	if (!is_percpu_irq(hwirq))
-		writel(hwirq, main_int_base +
-				ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS);
+	if (!mpic_is_percpu_irq(hwirq))
+		writel(hwirq, mpic->base + MPIC_INT_CLEAR_ENABLE);
 	else
-		writel(hwirq, per_cpu_int_base +
-				ARMADA_370_XP_INT_SET_MASK_OFFS);
+		writel(hwirq, mpic->per_cpu + MPIC_INT_SET_MASK);
 }
=20
-static void armada_370_xp_irq_unmask(struct irq_data *d)
+static void mpic_irq_unmask(struct irq_data *d)
 {
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
 	irq_hw_number_t hwirq =3D irqd_to_hwirq(d);
=20
-	if (!is_percpu_irq(hwirq))
-		writel(hwirq, main_int_base +
-				ARMADA_370_XP_INT_SET_ENABLE_OFFS);
+	if (!mpic_is_percpu_irq(hwirq))
+		writel(hwirq, mpic->base + MPIC_INT_SET_ENABLE);
 	else
-		writel(hwirq, per_cpu_int_base +
-				ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+		writel(hwirq, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
 }
=20
 #ifdef CONFIG_PCI_MSI
=20
-static struct irq_chip armada_370_xp_msi_irq_chip =3D {
-	.name =3D "MPIC MSI",
-	.irq_mask =3D pci_msi_mask_irq,
-	.irq_unmask =3D pci_msi_unmask_irq,
+static struct irq_chip mpic_msi_irq_chip =3D {
+	.name		=3D "MPIC MSI",
+	.irq_mask	=3D pci_msi_mask_irq,
+	.irq_unmask	=3D pci_msi_unmask_irq,
 };
=20
-static struct msi_domain_info armada_370_xp_msi_domain_info =3D {
+static struct msi_domain_info mpic_msi_domain_info =3D {
 	.flags	=3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
 		   MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX),
-	.chip	=3D &armada_370_xp_msi_irq_chip,
+	.chip	=3D &mpic_msi_irq_chip,
 };
=20
-static void armada_370_xp_compose_msi_msg(struct irq_data *data, struct msi_=
msg *msg)
+static void mpic_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
 {
-	unsigned int cpu =3D cpumask_first(irq_data_get_effective_affinity_mask(dat=
a));
+	unsigned int cpu =3D cpumask_first(irq_data_get_effective_affinity_mask(d));
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
=20
-	msg->address_lo =3D lower_32_bits(msi_doorbell_addr);
-	msg->address_hi =3D upper_32_bits(msi_doorbell_addr);
-	msg->data =3D BIT(cpu + 8) | (data->hwirq + msi_doorbell_start());
+	msg->address_lo =3D lower_32_bits(mpic->msi_doorbell_addr);
+	msg->address_hi =3D upper_32_bits(mpic->msi_doorbell_addr);
+	msg->data =3D BIT(cpu + 8) | (d->hwirq + mpic->msi_doorbell_start);
 }
=20
-static int armada_370_xp_msi_set_affinity(struct irq_data *irq_data,
-					  const struct cpumask *mask, bool force)
+static int mpic_msi_set_affinity(struct irq_data *d, const struct cpumask *m=
ask, bool force)
 {
 	unsigned int cpu;
=20
@@ -275,33 +268,34 @@ static int armada_370_xp_msi_set_affinity(struct irq_da=
ta *irq_data,
 	if (cpu >=3D nr_cpu_ids)
 		return -EINVAL;
=20
-	irq_data_update_effective_affinity(irq_data, cpumask_of(cpu));
+	irq_data_update_effective_affinity(d, cpumask_of(cpu));
=20
 	return IRQ_SET_MASK_OK;
 }
=20
-static struct irq_chip armada_370_xp_msi_bottom_irq_chip =3D {
+static struct irq_chip mpic_msi_bottom_irq_chip =3D {
 	.name			=3D "MPIC MSI",
-	.irq_compose_msi_msg	=3D armada_370_xp_compose_msi_msg,
-	.irq_set_affinity	=3D armada_370_xp_msi_set_affinity,
+	.irq_compose_msi_msg	=3D mpic_compose_msi_msg,
+	.irq_set_affinity	=3D mpic_msi_set_affinity,
 };
=20
-static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int v=
irq,
-				   unsigned int nr_irqs, void *args)
+static int mpic_msi_alloc(struct irq_domain *domain, unsigned int virq, unsi=
gned int nr_irqs,
+			  void *args)
 {
-	int hwirq, i;
+	struct mpic *mpic =3D domain->host_data;
+	int hwirq;
=20
-	mutex_lock(&msi_used_lock);
-	hwirq =3D bitmap_find_free_region(msi_used, msi_doorbell_size(),
+	mutex_lock(&mpic->msi_lock);
+	hwirq =3D bitmap_find_free_region(mpic->msi_used, mpic->msi_doorbell_size,
 					order_base_2(nr_irqs));
-	mutex_unlock(&msi_used_lock);
+	mutex_unlock(&mpic->msi_lock);
=20
 	if (hwirq < 0)
 		return -ENOSPC;
=20
-	for (i =3D 0; i < nr_irqs; i++) {
+	for (unsigned int i =3D 0; i < nr_irqs; i++) {
 		irq_domain_set_info(domain, virq + i, hwirq + i,
-				    &armada_370_xp_msi_bottom_irq_chip,
+				    &mpic_msi_bottom_irq_chip,
 				    domain->host_data, handle_simple_irq,
 				    NULL, NULL);
 	}
@@ -309,76 +303,84 @@ static int armada_370_xp_msi_alloc(struct irq_domain *d=
omain, unsigned int virq,
 	return 0;
 }
=20
-static void armada_370_xp_msi_free(struct irq_domain *domain,
-				   unsigned int virq, unsigned int nr_irqs)
+static void mpic_msi_free(struct irq_domain *domain, unsigned int virq, unsi=
gned int nr_irqs)
 {
 	struct irq_data *d =3D irq_domain_get_irq_data(domain, virq);
+	struct mpic *mpic =3D domain->host_data;
=20
-	mutex_lock(&msi_used_lock);
-	bitmap_release_region(msi_used, d->hwirq, order_base_2(nr_irqs));
-	mutex_unlock(&msi_used_lock);
+	mutex_lock(&mpic->msi_lock);
+	bitmap_release_region(mpic->msi_used, d->hwirq, order_base_2(nr_irqs));
+	mutex_unlock(&mpic->msi_lock);
 }
=20
-static const struct irq_domain_ops armada_370_xp_msi_domain_ops =3D {
-	.alloc	=3D armada_370_xp_msi_alloc,
-	.free	=3D armada_370_xp_msi_free,
+static const struct irq_domain_ops mpic_msi_domain_ops =3D {
+	.alloc	=3D mpic_msi_alloc,
+	.free	=3D mpic_msi_free,
 };
=20
-static void armada_370_xp_msi_reenable_percpu(void)
+static void mpic_msi_reenable_percpu(struct mpic *mpic)
 {
 	u32 reg;
=20
 	/* Enable MSI doorbell mask and combined cpu local interrupt */
-	reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
-	reg |=3D msi_doorbell_mask();
-	writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK);
+	reg |=3D mpic->msi_doorbell_mask;
+	writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK);
=20
 	/* Unmask local doorbell interrupt */
-	writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+	writel(1, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
 }
=20
-static int armada_370_xp_msi_init(struct device_node *node,
-				  phys_addr_t main_int_phys_base)
+static int __init mpic_msi_init(struct mpic *mpic, struct device_node *node,
+				phys_addr_t main_int_phys_base)
 {
-	msi_doorbell_addr =3D main_int_phys_base +
-		ARMADA_370_XP_SW_TRIG_INT_OFFS;
+	mpic->msi_doorbell_addr =3D main_int_phys_base + MPIC_SW_TRIG_INT;
+
+	mutex_init(&mpic->msi_lock);
+
+	if (mpic_is_ipi_available(mpic)) {
+		mpic->msi_doorbell_start =3D PCI_MSI_DOORBELL_START;
+		mpic->msi_doorbell_size =3D PCI_MSI_DOORBELL_NR;
+		mpic->msi_doorbell_mask =3D PCI_MSI_DOORBELL_MASK;
+	} else {
+		mpic->msi_doorbell_start =3D PCI_MSI_FULL_DOORBELL_START;
+		mpic->msi_doorbell_size =3D PCI_MSI_FULL_DOORBELL_NR;
+		mpic->msi_doorbell_mask =3D PCI_MSI_FULL_DOORBELL_MASK;
+	}
=20
-	armada_370_xp_msi_inner_domain =3D
-		irq_domain_add_linear(NULL, msi_doorbell_size(),
-				      &armada_370_xp_msi_domain_ops, NULL);
-	if (!armada_370_xp_msi_inner_domain)
+	mpic->msi_inner_domain =3D irq_domain_add_linear(NULL, mpic->msi_doorbell_s=
ize,
+						       &mpic_msi_domain_ops, mpic);
+	if (!mpic->msi_inner_domain)
 		return -ENOMEM;
=20
-	armada_370_xp_msi_domain =3D
-		pci_msi_create_irq_domain(of_node_to_fwnode(node),
-					  &armada_370_xp_msi_domain_info,
-					  armada_370_xp_msi_inner_domain);
-	if (!armada_370_xp_msi_domain) {
-		irq_domain_remove(armada_370_xp_msi_inner_domain);
+	mpic->msi_domain =3D pci_msi_create_irq_domain(of_node_to_fwnode(node), &mp=
ic_msi_domain_info,
+						     mpic->msi_inner_domain);
+	if (!mpic->msi_domain) {
+		irq_domain_remove(mpic->msi_inner_domain);
 		return -ENOMEM;
 	}
=20
-	armada_370_xp_msi_reenable_percpu();
+	mpic_msi_reenable_percpu(mpic);
=20
 	/* Unmask low 16 MSI irqs on non-IPI platforms */
-	if (!is_ipi_available())
-		writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+	if (!mpic_is_ipi_available(mpic))
+		writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
=20
 	return 0;
 }
 #else
-static __maybe_unused void armada_370_xp_msi_reenable_percpu(void) {}
+static __maybe_unused void mpic_msi_reenable_percpu(struct mpic *mpic) {}
=20
-static inline int armada_370_xp_msi_init(struct device_node *node,
-					 phys_addr_t main_int_phys_base)
+static inline int mpic_msi_init(struct mpic *mpic, struct device_node *node,
+				phys_addr_t main_int_phys_base)
 {
 	return 0;
 }
 #endif
=20
-static void armada_xp_mpic_perf_init(void)
+static void mpic_perf_init(struct mpic *mpic)
 {
-	unsigned long cpuid;
+	u32 cpuid;
=20
 	/*
 	 * This Performance Counter Overflow interrupt is specific for
@@ -390,38 +392,39 @@ static void armada_xp_mpic_perf_init(void)
 	cpuid =3D cpu_logical_map(smp_processor_id());
=20
 	/* Enable Performance Counter Overflow interrupts */
-	writel(ARMADA_370_XP_INT_CAUSE_PERF(cpuid),
-	       per_cpu_int_base + ARMADA_370_XP_INT_FABRIC_MASK_OFFS);
+	writel(MPIC_INT_CAUSE_PERF(cpuid), mpic->per_cpu + MPIC_INT_FABRIC_MASK);
 }
=20
 #ifdef CONFIG_SMP
-static struct irq_domain *ipi_domain;
-
-static void armada_370_xp_ipi_mask(struct irq_data *d)
+static void mpic_ipi_mask(struct irq_data *d)
 {
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
 	u32 reg;
-	reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+
+	reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK);
 	reg &=3D ~BIT(d->hwirq);
-	writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK);
 }
=20
-static void armada_370_xp_ipi_unmask(struct irq_data *d)
+static void mpic_ipi_unmask(struct irq_data *d)
 {
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
 	u32 reg;
-	reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+
+	reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK);
 	reg |=3D BIT(d->hwirq);
-	writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK);
 }
=20
-static void armada_370_xp_ipi_send_mask(struct irq_data *d,
-					const struct cpumask *mask)
+static void mpic_ipi_send_mask(struct irq_data *d, const struct cpumask *mas=
k)
 {
-	unsigned long map =3D 0;
-	int cpu;
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
+	unsigned int cpu;
+	u32 map =3D 0;
=20
 	/* Convert our logical CPU mask into a physical one. */
 	for_each_cpu(cpu, mask)
-		map |=3D 1 << cpu_logical_map(cpu);
+		map |=3D BIT(cpu_logical_map(cpu));
=20
 	/*
 	 * Ensure that stores to Normal memory are visible to the
@@ -430,451 +433,465 @@ static void armada_370_xp_ipi_send_mask(struct irq_da=
ta *d,
 	dsb();
=20
 	/* submit softirq */
-	writel((map << 8) | d->hwirq, main_int_base +
-		ARMADA_370_XP_SW_TRIG_INT_OFFS);
+	writel((map << 8) | d->hwirq, mpic->base + MPIC_SW_TRIG_INT);
 }
=20
-static void armada_370_xp_ipi_ack(struct irq_data *d)
+static void mpic_ipi_ack(struct irq_data *d)
 {
-	writel(~BIT(d->hwirq), per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS=
);
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
+
+	writel(~BIT(d->hwirq), mpic->per_cpu + MPIC_IN_DRBEL_CAUSE);
 }
=20
-static struct irq_chip ipi_irqchip =3D {
+static struct irq_chip mpic_ipi_irqchip =3D {
 	.name		=3D "IPI",
-	.irq_ack	=3D armada_370_xp_ipi_ack,
-	.irq_mask	=3D armada_370_xp_ipi_mask,
-	.irq_unmask	=3D armada_370_xp_ipi_unmask,
-	.ipi_send_mask	=3D armada_370_xp_ipi_send_mask,
+	.irq_ack	=3D mpic_ipi_ack,
+	.irq_mask	=3D mpic_ipi_mask,
+	.irq_unmask	=3D mpic_ipi_unmask,
+	.ipi_send_mask	=3D mpic_ipi_send_mask,
 };
=20
-static int armada_370_xp_ipi_alloc(struct irq_domain *d,
-					 unsigned int virq,
-					 unsigned int nr_irqs, void *args)
+static int mpic_ipi_alloc(struct irq_domain *d, unsigned int virq,
+			  unsigned int nr_irqs, void *args)
 {
-	int i;
-
-	for (i =3D 0; i < nr_irqs; i++) {
+	for (unsigned int i =3D 0; i < nr_irqs; i++) {
 		irq_set_percpu_devid(virq + i);
-		irq_domain_set_info(d, virq + i, i, &ipi_irqchip,
-				    d->host_data,
-				    handle_percpu_devid_irq,
-				    NULL, NULL);
+		irq_domain_set_info(d, virq + i, i, &mpic_ipi_irqchip, d->host_data,
+				    handle_percpu_devid_irq, NULL, NULL);
 	}
=20
 	return 0;
 }
=20
-static void armada_370_xp_ipi_free(struct irq_domain *d,
-					 unsigned int virq,
-					 unsigned int nr_irqs)
+static void mpic_ipi_free(struct irq_domain *d, unsigned int virq,
+			  unsigned int nr_irqs)
 {
 	/* Not freeing IPIs */
 }
=20
-static const struct irq_domain_ops ipi_domain_ops =3D {
-	.alloc	=3D armada_370_xp_ipi_alloc,
-	.free	=3D armada_370_xp_ipi_free,
+static const struct irq_domain_ops mpic_ipi_domain_ops =3D {
+	.alloc	=3D mpic_ipi_alloc,
+	.free	=3D mpic_ipi_free,
 };
=20
-static void ipi_resume(void)
+static void mpic_ipi_resume(struct mpic *mpic)
 {
-	int i;
-
-	for (i =3D 0; i < IPI_DOORBELL_END; i++) {
-		int irq;
+	for (irq_hw_number_t i =3D 0; i < IPI_DOORBELL_NR; i++) {
+		unsigned int virq =3D irq_find_mapping(mpic->ipi_domain, i);
+		struct irq_data *d;
=20
-		irq =3D irq_find_mapping(ipi_domain, i);
-		if (irq <=3D 0)
+		if (!virq || !irq_percpu_is_enabled(virq))
 			continue;
-		if (irq_percpu_is_enabled(irq)) {
-			struct irq_data *d;
-			d =3D irq_domain_get_irq_data(ipi_domain, irq);
-			armada_370_xp_ipi_unmask(d);
-		}
+
+		d =3D irq_domain_get_irq_data(mpic->ipi_domain, virq);
+		mpic_ipi_unmask(d);
 	}
 }
=20
-static __init void armada_xp_ipi_init(struct device_node *node)
+static int __init mpic_ipi_init(struct mpic *mpic, struct device_node *node)
 {
 	int base_ipi;
=20
-	ipi_domain =3D irq_domain_create_linear(of_node_to_fwnode(node),
-					      IPI_DOORBELL_END,
-					      &ipi_domain_ops, NULL);
-	if (WARN_ON(!ipi_domain))
-		return;
+	mpic->ipi_domain =3D irq_domain_create_linear(of_node_to_fwnode(node), IPI_=
DOORBELL_NR,
+						    &mpic_ipi_domain_ops, mpic);
+	if (WARN_ON(!mpic->ipi_domain))
+		return -ENOMEM;
=20
-	irq_domain_update_bus_token(ipi_domain, DOMAIN_BUS_IPI);
-	base_ipi =3D irq_domain_alloc_irqs(ipi_domain, IPI_DOORBELL_END, NUMA_NO_NO=
DE, NULL);
+	irq_domain_update_bus_token(mpic->ipi_domain, DOMAIN_BUS_IPI);
+	base_ipi =3D irq_domain_alloc_irqs(mpic->ipi_domain, IPI_DOORBELL_NR, NUMA_=
NO_NODE, NULL);
 	if (WARN_ON(!base_ipi))
-		return;
+		return -ENOMEM;
+
+	set_smp_ipi_range(base_ipi, IPI_DOORBELL_NR);
=20
-	set_smp_ipi_range(base_ipi, IPI_DOORBELL_END);
+	return 0;
 }
=20
-static int armada_xp_set_affinity(struct irq_data *d,
-				  const struct cpumask *mask_val, bool force)
+static int mpic_set_affinity(struct irq_data *d, const struct cpumask *mask_=
val, bool force)
 {
+	struct mpic *mpic =3D irq_data_get_irq_chip_data(d);
 	irq_hw_number_t hwirq =3D irqd_to_hwirq(d);
-	int cpu;
+	unsigned int cpu;
=20
 	/* Select a single core from the affinity mask which is online */
 	cpu =3D cpumask_any_and(mask_val, cpu_online_mask);
=20
-	atomic_io_modify(main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq),
-			 ARMADA_370_XP_INT_SOURCE_CPU_MASK,
-			 BIT(cpu_logical_map(cpu)));
+	atomic_io_modify(mpic->base + MPIC_INT_SOURCE_CTL(hwirq),
+			 MPIC_INT_SOURCE_CPU_MASK, BIT(cpu_logical_map(cpu)));
=20
 	irq_data_update_effective_affinity(d, cpumask_of(cpu));
=20
 	return IRQ_SET_MASK_OK;
 }
=20
-static void armada_xp_mpic_smp_cpu_init(void)
+static void mpic_smp_cpu_init(struct mpic *mpic)
 {
-	u32 control;
-	int nr_irqs, i;
-
-	control =3D readl(main_int_base + ARMADA_370_XP_INT_CONTROL);
-	nr_irqs =3D (control >> 2) & 0x3ff;
+	for (irq_hw_number_t i =3D 0; i < mpic->domain->hwirq_max; i++)
+		writel(i, mpic->per_cpu + MPIC_INT_SET_MASK);
=20
-	for (i =3D 0; i < nr_irqs; i++)
-		writel(i, per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS);
-
-	if (!is_ipi_available())
+	if (!mpic_is_ipi_available(mpic))
 		return;
=20
 	/* Disable all IPIs */
-	writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	writel(0, mpic->per_cpu + MPIC_IN_DRBEL_MASK);
=20
 	/* Clear pending IPIs */
-	writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
+	writel(0, mpic->per_cpu + MPIC_IN_DRBEL_CAUSE);
=20
 	/* Unmask IPI interrupt */
-	writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+	writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
 }
=20
-static void armada_xp_mpic_reenable_percpu(void)
+static void mpic_reenable_percpu(struct mpic *mpic)
 {
-	unsigned int irq;
-
 	/* Re-enable per-CPU interrupts that were enabled before suspend */
-	for (irq =3D 0; irq < ARMADA_370_XP_MAX_PER_CPU_IRQS; irq++) {
-		struct irq_data *data;
-		int virq;
-
-		virq =3D irq_linear_revmap(armada_370_xp_mpic_domain, irq);
-		if (virq =3D=3D 0)
-			continue;
-
-		data =3D irq_get_irq_data(virq);
+	for (irq_hw_number_t i =3D 0; i < MPIC_PER_CPU_IRQS_NR; i++) {
+		unsigned int virq =3D irq_linear_revmap(mpic->domain, i);
+		struct irq_data *d;
=20
-		if (!irq_percpu_is_enabled(virq))
+		if (!virq || !irq_percpu_is_enabled(virq))
 			continue;
=20
-		armada_370_xp_irq_unmask(data);
+		d =3D irq_get_irq_data(virq);
+		mpic_irq_unmask(d);
 	}
=20
-	if (is_ipi_available())
-		ipi_resume();
+	if (mpic_is_ipi_available(mpic))
+		mpic_ipi_resume(mpic);
=20
-	armada_370_xp_msi_reenable_percpu();
+	mpic_msi_reenable_percpu(mpic);
 }
=20
-static int armada_xp_mpic_starting_cpu(unsigned int cpu)
+static int mpic_starting_cpu(unsigned int cpu)
 {
-	armada_xp_mpic_perf_init();
-	armada_xp_mpic_smp_cpu_init();
-	armada_xp_mpic_reenable_percpu();
+	struct mpic *mpic =3D irq_get_default_host()->host_data;
+
+	mpic_perf_init(mpic);
+	mpic_smp_cpu_init(mpic);
+	mpic_reenable_percpu(mpic);
+
 	return 0;
 }
=20
 static int mpic_cascaded_starting_cpu(unsigned int cpu)
 {
-	armada_xp_mpic_perf_init();
-	armada_xp_mpic_reenable_percpu();
-	enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
+	struct mpic *mpic =3D mpic_data;
+
+	mpic_perf_init(mpic);
+	mpic_reenable_percpu(mpic);
+	enable_percpu_irq(mpic->parent_irq, IRQ_TYPE_NONE);
+
 	return 0;
 }
 #else
-static void armada_xp_mpic_smp_cpu_init(void) {}
-static void ipi_resume(void) {}
+static void mpic_smp_cpu_init(struct mpic *mpic) {}
+static void mpic_ipi_resume(struct mpic *mpic) {}
 #endif
=20
-static struct irq_chip armada_370_xp_irq_chip =3D {
+static struct irq_chip mpic_irq_chip =3D {
 	.name		=3D "MPIC",
-	.irq_mask       =3D armada_370_xp_irq_mask,
-	.irq_mask_ack   =3D armada_370_xp_irq_mask,
-	.irq_unmask     =3D armada_370_xp_irq_unmask,
+	.irq_mask	=3D mpic_irq_mask,
+	.irq_mask_ack	=3D mpic_irq_mask,
+	.irq_unmask	=3D mpic_irq_unmask,
 #ifdef CONFIG_SMP
-	.irq_set_affinity =3D armada_xp_set_affinity,
+	.irq_set_affinity =3D mpic_set_affinity,
 #endif
 	.flags		=3D IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND,
 };
=20
-static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
-				      unsigned int virq, irq_hw_number_t hw)
+static int mpic_irq_map(struct irq_domain *domain, unsigned int virq, irq_hw=
_number_t hwirq)
 {
+	struct mpic *mpic =3D domain->host_data;
+
 	/* IRQs 0 and 1 cannot be mapped, they are handled internally */
-	if (hw <=3D 1)
+	if (hwirq <=3D 1)
 		return -EINVAL;
=20
-	armada_370_xp_irq_mask(irq_get_irq_data(virq));
-	if (!is_percpu_irq(hw))
-		writel(hw, per_cpu_int_base +
-			ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+	irq_set_chip_data(virq, mpic);
+
+	mpic_irq_mask(irq_get_irq_data(virq));
+	if (!mpic_is_percpu_irq(hwirq))
+		writel(hwirq, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
 	else
-		writel(hw, main_int_base + ARMADA_370_XP_INT_SET_ENABLE_OFFS);
+		writel(hwirq, mpic->base + MPIC_INT_SET_ENABLE);
 	irq_set_status_flags(virq, IRQ_LEVEL);
=20
-	if (is_percpu_irq(hw)) {
+	if (mpic_is_percpu_irq(hwirq)) {
 		irq_set_percpu_devid(virq);
-		irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip,
-					handle_percpu_devid_irq);
+		irq_set_chip_and_handler(virq, &mpic_irq_chip, handle_percpu_devid_irq);
 	} else {
-		irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip,
-					handle_level_irq);
+		irq_set_chip_and_handler(virq, &mpic_irq_chip, handle_level_irq);
 		irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
 	}
 	irq_set_probe(virq);
-
 	return 0;
 }
=20
-static const struct irq_domain_ops armada_370_xp_mpic_irq_ops =3D {
-	.map =3D armada_370_xp_mpic_irq_map,
-	.xlate =3D irq_domain_xlate_onecell,
+static const struct irq_domain_ops mpic_irq_ops =3D {
+	.map	=3D mpic_irq_map,
+	.xlate	=3D irq_domain_xlate_onecell,
 };
=20
 #ifdef CONFIG_PCI_MSI
-static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chain=
ed)
+static void mpic_handle_msi_irq(struct mpic *mpic)
 {
-	u32 msimask, msinr;
-
-	msimask =3D readl_relaxed(per_cpu_int_base +
-				ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
-	msimask &=3D msi_doorbell_mask();
+	unsigned long cause;
+	unsigned int i;
=20
-	writel(~msimask, per_cpu_int_base +
-	       ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
+	cause =3D readl_relaxed(mpic->per_cpu + MPIC_IN_DRBEL_CAUSE);
+	cause &=3D mpic->msi_doorbell_mask;
+	writel(~cause, mpic->per_cpu + MPIC_IN_DRBEL_CAUSE);
=20
-	for (msinr =3D msi_doorbell_start();
-	     msinr < msi_doorbell_end(); msinr++) {
-		unsigned int irq;
+	for_each_set_bit(i, &cause, BITS_PER_LONG)
+		generic_handle_domain_irq(mpic->msi_inner_domain, i - mpic->msi_doorbell_s=
tart);
+}
+#else
+static void mpic_handle_msi_irq(struct mpic *mpic) {}
+#endif
=20
-		if (!(msimask & BIT(msinr)))
-			continue;
+#ifdef CONFIG_SMP
+static void mpic_handle_ipi_irq(struct mpic *mpic)
+{
+	unsigned long cause;
+	irq_hw_number_t i;
=20
-		irq =3D msinr - msi_doorbell_start();
+	cause =3D readl_relaxed(mpic->per_cpu + MPIC_IN_DRBEL_CAUSE);
+	cause &=3D IPI_DOORBELL_MASK;
=20
-		generic_handle_domain_irq(armada_370_xp_msi_inner_domain, irq);
-	}
+	for_each_set_bit(i, &cause, IPI_DOORBELL_NR)
+		generic_handle_domain_irq(mpic->ipi_domain, i);
 }
 #else
-static void armada_370_xp_handle_msi_irq(struct pt_regs *r, bool b) {}
+static inline void mpic_handle_ipi_irq(struct mpic *mpic) {}
 #endif
=20
-static void armada_370_xp_mpic_handle_cascade_irq(struct irq_desc *desc)
+static void mpic_handle_cascade_irq(struct irq_desc *desc)
 {
+	struct mpic *mpic =3D irq_desc_get_handler_data(desc);
 	struct irq_chip *chip =3D irq_desc_get_chip(desc);
-	unsigned long irqmap, irqn, irqsrc, cpuid;
+	unsigned long cause;
+	u32 irqsrc, cpuid;
+	irq_hw_number_t i;
=20
 	chained_irq_enter(chip, desc);
=20
-	irqmap =3D readl_relaxed(per_cpu_int_base + ARMADA_375_PPI_CAUSE);
+	cause =3D readl_relaxed(mpic->per_cpu + MPIC_PPI_CAUSE);
 	cpuid =3D cpu_logical_map(smp_processor_id());
=20
-	for_each_set_bit(irqn, &irqmap, BITS_PER_LONG) {
-		irqsrc =3D readl_relaxed(main_int_base +
-				       ARMADA_370_XP_INT_SOURCE_CTL(irqn));
+	for_each_set_bit(i, &cause, MPIC_PER_CPU_IRQS_NR) {
+		irqsrc =3D readl_relaxed(mpic->base + MPIC_INT_SOURCE_CTL(i));
=20
 		/* Check if the interrupt is not masked on current CPU.
 		 * Test IRQ (0-1) and FIQ (8-9) mask bits.
 		 */
-		if (!(irqsrc & ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid)))
+		if (!(irqsrc & MPIC_INT_IRQ_FIQ_MASK(cpuid)))
 			continue;
=20
-		if (irqn =3D=3D 0 || irqn =3D=3D 1) {
-			armada_370_xp_handle_msi_irq(NULL, true);
+		if (i =3D=3D 0 || i =3D=3D 1) {
+			mpic_handle_msi_irq(mpic);
 			continue;
 		}
=20
-		generic_handle_domain_irq(armada_370_xp_mpic_domain, irqn);
+		generic_handle_domain_irq(mpic->domain, i);
 	}
=20
 	chained_irq_exit(chip, desc);
 }
=20
-static void __exception_irq_entry
-armada_370_xp_handle_irq(struct pt_regs *regs)
+static void __exception_irq_entry mpic_handle_irq(struct pt_regs *regs)
 {
-	u32 irqstat, irqnr;
+	struct mpic *mpic =3D irq_get_default_host()->host_data;
+	irq_hw_number_t i;
+	u32 irqstat;
=20
 	do {
-		irqstat =3D readl_relaxed(per_cpu_int_base +
-					ARMADA_370_XP_CPU_INTACK_OFFS);
-		irqnr =3D irqstat & 0x3FF;
+		irqstat =3D readl_relaxed(mpic->per_cpu + MPIC_CPU_INTACK);
+		i =3D FIELD_GET(MPIC_CPU_INTACK_IID_MASK, irqstat);
=20
-		if (irqnr > 1022)
+		if (i > 1022)
 			break;
=20
-		if (irqnr > 1) {
-			generic_handle_domain_irq(armada_370_xp_mpic_domain,
-						  irqnr);
-			continue;
-		}
+		if (i > 1)
+			generic_handle_domain_irq(mpic->domain, i);
=20
 		/* MSI handling */
-		if (irqnr =3D=3D 1)
-			armada_370_xp_handle_msi_irq(regs, false);
+		if (i =3D=3D 1)
+			mpic_handle_msi_irq(mpic);
=20
-#ifdef CONFIG_SMP
 		/* IPI Handling */
-		if (irqnr =3D=3D 0) {
-			unsigned long ipimask;
-			int ipi;
-
-			ipimask =3D readl_relaxed(per_cpu_int_base +
-						ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS)
-				& IPI_DOORBELL_MASK;
-
-			for_each_set_bit(ipi, &ipimask, IPI_DOORBELL_END)
-				generic_handle_domain_irq(ipi_domain, ipi);
-		}
-#endif
-
+		if (i =3D=3D 0)
+			mpic_handle_ipi_irq(mpic);
 	} while (1);
 }
=20
-static int armada_370_xp_mpic_suspend(void)
+static int mpic_suspend(void)
 {
-	doorbell_mask_reg =3D readl(per_cpu_int_base +
-				  ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	struct mpic *mpic =3D mpic_data;
+
+	mpic->doorbell_mask =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK);
+
 	return 0;
 }
=20
-static void armada_370_xp_mpic_resume(void)
+static void mpic_resume(void)
 {
+	struct mpic *mpic =3D mpic_data;
 	bool src0, src1;
-	int nirqs;
-	irq_hw_number_t irq;
=20
 	/* Re-enable interrupts */
-	nirqs =3D (readl(main_int_base + ARMADA_370_XP_INT_CONTROL) >> 2) & 0x3ff;
-	for (irq =3D 0; irq < nirqs; irq++) {
-		struct irq_data *data;
-		int virq;
+	for (irq_hw_number_t i =3D 0; i < mpic->domain->hwirq_max; i++) {
+		unsigned int virq =3D irq_linear_revmap(mpic->domain, i);
+		struct irq_data *d;
=20
-		virq =3D irq_linear_revmap(armada_370_xp_mpic_domain, irq);
-		if (virq =3D=3D 0)
+		if (!virq)
 			continue;
=20
-		data =3D irq_get_irq_data(virq);
+		d =3D irq_get_irq_data(virq);
=20
-		if (!is_percpu_irq(irq)) {
+		if (!mpic_is_percpu_irq(i)) {
 			/* Non per-CPU interrupts */
-			writel(irq, per_cpu_int_base +
-			       ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
-			if (!irqd_irq_disabled(data))
-				armada_370_xp_irq_unmask(data);
+			writel(i, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
+			if (!irqd_irq_disabled(d))
+				mpic_irq_unmask(d);
 		} else {
 			/* Per-CPU interrupts */
-			writel(irq, main_int_base +
-			       ARMADA_370_XP_INT_SET_ENABLE_OFFS);
+			writel(i, mpic->base + MPIC_INT_SET_ENABLE);
=20
 			/*
-			 * Re-enable on the current CPU,
-			 * armada_xp_mpic_reenable_percpu() will take
-			 * care of secondary CPUs when they come up.
+			 * Re-enable on the current CPU, mpic_reenable_percpu()
+			 * will take care of secondary CPUs when they come up.
 			 */
 			if (irq_percpu_is_enabled(virq))
-				armada_370_xp_irq_unmask(data);
+				mpic_irq_unmask(d);
 		}
 	}
=20
 	/* Reconfigure doorbells for IPIs and MSIs */
-	writel(doorbell_mask_reg,
-	       per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	writel(mpic->doorbell_mask, mpic->per_cpu + MPIC_IN_DRBEL_MASK);
=20
-	if (is_ipi_available()) {
-		src0 =3D doorbell_mask_reg & IPI_DOORBELL_MASK;
-		src1 =3D doorbell_mask_reg & PCI_MSI_DOORBELL_MASK;
+	if (mpic_is_ipi_available(mpic)) {
+		src0 =3D mpic->doorbell_mask & IPI_DOORBELL_MASK;
+		src1 =3D mpic->doorbell_mask & PCI_MSI_DOORBELL_MASK;
 	} else {
-		src0 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC0_MASK;
-		src1 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC1_MASK;
+		src0 =3D mpic->doorbell_mask & PCI_MSI_FULL_DOORBELL_SRC0_MASK;
+		src1 =3D mpic->doorbell_mask & PCI_MSI_FULL_DOORBELL_SRC1_MASK;
 	}
=20
 	if (src0)
-		writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+		writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
 	if (src1)
-		writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+		writel(1, mpic->per_cpu + MPIC_INT_CLEAR_MASK);
=20
-	if (is_ipi_available())
-		ipi_resume();
+	if (mpic_is_ipi_available(mpic))
+		mpic_ipi_resume(mpic);
 }
=20
-static struct syscore_ops armada_370_xp_mpic_syscore_ops =3D {
-	.suspend	=3D armada_370_xp_mpic_suspend,
-	.resume		=3D armada_370_xp_mpic_resume,
+static struct syscore_ops mpic_syscore_ops =3D {
+	.suspend	=3D mpic_suspend,
+	.resume		=3D mpic_resume,
 };
=20
-static int __init armada_370_xp_mpic_of_init(struct device_node *node,
-					     struct device_node *parent)
+static int __init mpic_map_region(struct device_node *np, int index,
+				  void __iomem **base, phys_addr_t *phys_base)
 {
-	struct resource main_int_res, per_cpu_int_res;
-	int nr_irqs, i;
-	u32 control;
+	struct resource res;
+	int err;
+
+	err =3D of_address_to_resource(np, index, &res);
+	if (WARN_ON(err))
+		goto fail;
+
+	if (WARN_ON(!request_mem_region(res.start, resource_size(&res), np->full_na=
me))) {
+		err =3D -EBUSY;
+		goto fail;
+	}
+
+	*base =3D ioremap(res.start, resource_size(&res));
+	if (WARN_ON(!*base)) {
+		err =3D -ENOMEM;
+		goto fail;
+	}
=20
-	BUG_ON(of_address_to_resource(node, 0, &main_int_res));
-	BUG_ON(of_address_to_resource(node, 1, &per_cpu_int_res));
+	if (phys_base)
+		*phys_base =3D res.start;
=20
-	BUG_ON(!request_mem_region(main_int_res.start,
-				   resource_size(&main_int_res),
-				   node->full_name));
-	BUG_ON(!request_mem_region(per_cpu_int_res.start,
-				   resource_size(&per_cpu_int_res),
-				   node->full_name));
+	return 0;
+
+fail:
+	pr_err("%pOF: Unable to map resource %d: %pE\n", np, index, ERR_PTR(err));
+	return err;
+}
=20
-	main_int_base =3D ioremap(main_int_res.start,
-				resource_size(&main_int_res));
-	BUG_ON(!main_int_base);
+static int __init mpic_of_init(struct device_node *node, struct device_node =
*parent)
+{
+	phys_addr_t phys_base;
+	unsigned int nr_irqs;
+	struct mpic *mpic;
+	int err;
+
+	mpic =3D kzalloc(sizeof(*mpic), GFP_KERNEL);
+	if (WARN_ON(!mpic))
+		return -ENOMEM;
=20
-	per_cpu_int_base =3D ioremap(per_cpu_int_res.start,
-				   resource_size(&per_cpu_int_res));
-	BUG_ON(!per_cpu_int_base);
+	mpic_data =3D mpic;
=20
-	control =3D readl(main_int_base + ARMADA_370_XP_INT_CONTROL);
-	nr_irqs =3D (control >> 2) & 0x3ff;
+	err =3D mpic_map_region(node, 0, &mpic->base, &phys_base);
+	if (err)
+		return err;
=20
-	for (i =3D 0; i < nr_irqs; i++)
-		writel(i, main_int_base + ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS);
+	err =3D mpic_map_region(node, 1, &mpic->per_cpu, NULL);
+	if (err)
+		return err;
=20
-	armada_370_xp_mpic_domain =3D
-		irq_domain_add_linear(node, nr_irqs,
-				&armada_370_xp_mpic_irq_ops, NULL);
-	BUG_ON(!armada_370_xp_mpic_domain);
-	irq_domain_update_bus_token(armada_370_xp_mpic_domain, DOMAIN_BUS_WIRED);
+	nr_irqs =3D FIELD_GET(MPIC_INT_CONTROL_NUMINT_MASK, readl(mpic->base + MPIC=
_INT_CONTROL));
+
+	for (irq_hw_number_t i =3D 0; i < nr_irqs; i++)
+		writel(i, mpic->base + MPIC_INT_CLEAR_ENABLE);
+
+	/*
+	 * Initialize mpic->parent_irq before calling any other functions, since
+	 * it is used to distinguish between IPI and non-IPI platforms.
+	 */
+	mpic->parent_irq =3D irq_of_parse_and_map(node, 0);
=20
 	/*
-	 * Initialize parent_irq before calling any other functions, since it is
-	 * used to distinguish between IPI and non-IPI platforms.
+	 * On non-IPI platforms the driver currently supports only the per-CPU
+	 * interrupts (the first 29 interrupts). See mpic_handle_cascade_irq().
 	 */
-	parent_irq =3D irq_of_parse_and_map(node, 0);
+	if (!mpic_is_ipi_available(mpic))
+		nr_irqs =3D MPIC_PER_CPU_IRQS_NR;
+
+	mpic->domain =3D irq_domain_add_linear(node, nr_irqs, &mpic_irq_ops, mpic);
+	if (!mpic->domain) {
+		pr_err("%pOF: Unable to add IRQ domain\n", node);
+		return -ENOMEM;
+	}
+
+	irq_domain_update_bus_token(mpic->domain, DOMAIN_BUS_WIRED);
=20
 	/* Setup for the boot CPU */
-	armada_xp_mpic_perf_init();
-	armada_xp_mpic_smp_cpu_init();
+	mpic_perf_init(mpic);
+	mpic_smp_cpu_init(mpic);
=20
-	armada_370_xp_msi_init(node, main_int_res.start);
+	err =3D mpic_msi_init(mpic, node, phys_base);
+	if (err) {
+		pr_err("%pOF: Unable to initialize MSI domain\n", node);
+		return err;
+	}
=20
-	if (parent_irq <=3D 0) {
-		irq_set_default_host(armada_370_xp_mpic_domain);
-		set_handle_irq(armada_370_xp_handle_irq);
+	if (mpic_is_ipi_available(mpic)) {
+		irq_set_default_host(mpic->domain);
+		set_handle_irq(mpic_handle_irq);
 #ifdef CONFIG_SMP
-		armada_xp_ipi_init(node);
+		err =3D mpic_ipi_init(mpic, node);
+		if (err) {
+			pr_err("%pOF: Unable to initialize IPI domain\n", node);
+			return err;
+		}
+
 		cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_ARMADA_XP_STARTING,
 					  "irqchip/armada/ipi:starting",
-					  armada_xp_mpic_starting_cpu, NULL);
+					  mpic_starting_cpu, NULL);
 #endif
 	} else {
 #ifdef CONFIG_SMP
@@ -882,13 +899,13 @@ static int __init armada_370_xp_mpic_of_init(struct dev=
ice_node *node,
 					  "irqchip/armada/cascade:starting",
 					  mpic_cascaded_starting_cpu, NULL);
 #endif
-		irq_set_chained_handler(parent_irq,
-					armada_370_xp_mpic_handle_cascade_irq);
+		irq_set_chained_handler_and_data(mpic->parent_irq,
+						 mpic_handle_cascade_irq, mpic);
 	}
=20
-	register_syscore_ops(&armada_370_xp_mpic_syscore_ops);
+	register_syscore_ops(&mpic_syscore_ops);
=20
 	return 0;
 }
=20
-IRQCHIP_DECLARE(armada_370_xp_mpic, "marvell,mpic", armada_370_xp_mpic_of_in=
it);
+IRQCHIP_DECLARE(marvell_mpic, "marvell,mpic", mpic_of_init);
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 4631f6847953..3839ad79ad31 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -57,8 +57,7 @@
=20
 static struct irq_domain *aic_domain;
=20
-static asmlinkage void __exception_irq_entry
-aic_handle(struct pt_regs *regs)
+static void __exception_irq_entry aic_handle(struct pt_regs *regs)
 {
 	struct irq_domain_chip_generic *dgc =3D aic_domain->gc;
 	struct irq_chip_generic *gc =3D dgc->gc[0];
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic=
5.c
index 145535bd7560..c0f55dc7b050 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -67,8 +67,7 @@
=20
 static struct irq_domain *aic5_domain;
=20
-static asmlinkage void __exception_irq_entry
-aic5_handle(struct pt_regs *regs)
+static void __exception_irq_entry aic5_handle(struct pt_regs *regs)
 {
 	struct irq_chip_generic *bgc =3D irq_get_domain_generic_chip(aic5_domain, 0=
);
 	u32 irqnr;
diff --git a/drivers/irqchip/irq-clps711x.c b/drivers/irqchip/irq-clps711x.c
index e731e0784f7e..806ebb1de201 100644
--- a/drivers/irqchip/irq-clps711x.c
+++ b/drivers/irqchip/irq-clps711x.c
@@ -69,7 +69,7 @@ static struct {
 	struct irq_domain_ops	ops;
 } *clps711x_intc;
=20
-static asmlinkage void __exception_irq_entry clps711x_irqh(struct pt_regs *r=
egs)
+static void __exception_irq_entry clps711x_irqh(struct pt_regs *regs)
 {
 	u32 irqstat;
=20
diff --git a/drivers/irqchip/irq-davinci-cp-intc.c b/drivers/irqchip/irq-davi=
nci-cp-intc.c
index 7482c8ed34b2..f4f8e9fadbbf 100644
--- a/drivers/irqchip/irq-davinci-cp-intc.c
+++ b/drivers/irqchip/irq-davinci-cp-intc.c
@@ -116,8 +116,7 @@ static struct irq_chip davinci_cp_intc_irq_chip =3D {
 	.flags		=3D IRQCHIP_SKIP_SET_WAKE,
 };
=20
-static asmlinkage void __exception_irq_entry
-davinci_cp_intc_handle_irq(struct pt_regs *regs)
+static void __exception_irq_entry davinci_cp_intc_handle_irq(struct pt_regs =
*regs)
 {
 	int gpir, irqnr, none;
=20
diff --git a/drivers/irqchip/irq-ftintc010.c b/drivers/irqchip/irq-ftintc010.c
index 359efc1d1be7..b91c358ea6db 100644
--- a/drivers/irqchip/irq-ftintc010.c
+++ b/drivers/irqchip/irq-ftintc010.c
@@ -125,7 +125,7 @@ static struct irq_chip ft010_irq_chip =3D {
 /* Local static for the IRQ entry call */
 static struct ft010_irq_data firq;
=20
-static asmlinkage void __exception_irq_entry ft010_irqchip_handle_irq(struct=
 pt_regs *regs)
+static void __exception_irq_entry ft010_irqchip_handle_irq(struct pt_regs *r=
egs)
 {
 	struct ft010_irq_data *f =3D &firq;
 	int irq;
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index c19083bfb943..0efa3443c323 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -930,7 +930,7 @@ static void __gic_handle_irq_from_irqsoff(struct pt_regs =
*regs)
 	__gic_handle_nmi(irqnr, regs);
 }
=20
-static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *=
regs)
+static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
 {
 	if (unlikely(gic_supports_nmi() && !interrupts_enabled(regs)))
 		__gic_handle_irq_from_irqsoff(regs);
diff --git a/drivers/irqchip/irq-gic-v4.c b/drivers/irqchip/irq-gic-v4.c
index ca32ac19d284..58c28895f8c4 100644
--- a/drivers/irqchip/irq-gic-v4.c
+++ b/drivers/irqchip/irq-gic-v4.c
@@ -97,7 +97,7 @@ bool gic_cpuif_has_vsgi(void)
=20
 	fld =3D cpuid_feature_extract_unsigned_field(reg, ID_AA64PFR0_EL1_GIC_SHIFT=
);
=20
-	return fld >=3D 0x3;
+	return fld >=3D ID_AA64PFR0_EL1_GIC_V4P1;
 }
 #else
 bool gic_cpuif_has_vsgi(void)
diff --git a/drivers/irqchip/irq-ixp4xx.c b/drivers/irqchip/irq-ixp4xx.c
index 5fba907b9052..f23b02f62a5c 100644
--- a/drivers/irqchip/irq-ixp4xx.c
+++ b/drivers/irqchip/irq-ixp4xx.c
@@ -105,8 +105,7 @@ static void ixp4xx_irq_unmask(struct irq_data *d)
 	}
 }
=20
-static asmlinkage void __exception_irq_entry
-ixp4xx_handle_irq(struct pt_regs *regs)
+static void __exception_irq_entry ixp4xx_handle_irq(struct pt_regs *regs)
 {
 	struct ixp4xx_irq *ixi =3D &ixirq;
 	unsigned long status;
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loong=
arch-avec.c
new file mode 100644
index 000000000000..0f6e465dd309
--- /dev/null
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -0,0 +1,425 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020-2024 Loongson Technologies, Inc.
+ */
+
+#include <linux/cpuhotplug.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqchip.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
+#include <linux/kernel.h>
+#include <linux/msi.h>
+#include <linux/radix-tree.h>
+#include <linux/spinlock.h>
+
+#include <asm/loongarch.h>
+#include <asm/setup.h>
+
+#include "irq-msi-lib.h"
+#include "irq-loongson.h"
+
+#define VECTORS_PER_REG		64
+#define IRR_VECTOR_MASK		0xffUL
+#define IRR_INVALID_MASK	0x80000000UL
+#define AVEC_MSG_OFFSET		0x100000
+
+#ifdef CONFIG_SMP
+struct pending_list {
+	struct list_head	head;
+};
+
+static struct cpumask intersect_mask;
+static DEFINE_PER_CPU(struct pending_list, pending_list);
+#endif
+
+static DEFINE_PER_CPU(struct irq_desc * [NR_VECTORS], irq_map);
+
+struct avecintc_chip {
+	raw_spinlock_t		lock;
+	struct fwnode_handle	*fwnode;
+	struct irq_domain	*domain;
+	struct irq_matrix	*vector_matrix;
+	phys_addr_t		msi_base_addr;
+};
+
+static struct avecintc_chip loongarch_avec;
+
+struct avecintc_data {
+	struct list_head	entry;
+	unsigned int		cpu;
+	unsigned int		vec;
+	unsigned int		prev_cpu;
+	unsigned int		prev_vec;
+	unsigned int		moving;
+};
+
+static inline void avecintc_ack_irq(struct irq_data *d)
+{
+}
+
+static inline void avecintc_mask_irq(struct irq_data *d)
+{
+}
+
+static inline void avecintc_unmask_irq(struct irq_data *d)
+{
+}
+
+#ifdef CONFIG_SMP
+static inline void pending_list_init(int cpu)
+{
+	struct pending_list *plist =3D per_cpu_ptr(&pending_list, cpu);
+
+	INIT_LIST_HEAD(&plist->head);
+}
+
+static void avecintc_sync(struct avecintc_data *adata)
+{
+	struct pending_list *plist;
+
+	if (cpu_online(adata->prev_cpu)) {
+		plist =3D per_cpu_ptr(&pending_list, adata->prev_cpu);
+		list_add_tail(&adata->entry, &plist->head);
+		adata->moving =3D 1;
+		mp_ops.send_ipi_single(adata->prev_cpu, ACTION_CLEAR_VECTOR);
+	}
+}
+
+static int avecintc_set_affinity(struct irq_data *data, const struct cpumask=
 *dest, bool force)
+{
+	int cpu, ret, vector;
+	struct avecintc_data *adata;
+
+	scoped_guard(raw_spinlock, &loongarch_avec.lock) {
+		adata =3D irq_data_get_irq_chip_data(data);
+
+		if (adata->moving)
+			return -EBUSY;
+
+		if (cpu_online(adata->cpu) && cpumask_test_cpu(adata->cpu, dest))
+			return 0;
+
+		cpumask_and(&intersect_mask, dest, cpu_online_mask);
+
+		ret =3D irq_matrix_alloc(loongarch_avec.vector_matrix, &intersect_mask, fa=
lse, &cpu);
+		if (ret < 0)
+			return ret;
+
+		vector =3D ret;
+		adata->cpu =3D cpu;
+		adata->vec =3D vector;
+		per_cpu_ptr(irq_map, adata->cpu)[adata->vec] =3D irq_data_to_desc(data);
+		avecintc_sync(adata);
+	}
+
+	irq_data_update_effective_affinity(data, cpumask_of(cpu));
+
+	return IRQ_SET_MASK_OK;
+}
+
+static int avecintc_cpu_online(unsigned int cpu)
+{
+	if (!loongarch_avec.vector_matrix)
+		return 0;
+
+	guard(raw_spinlock)(&loongarch_avec.lock);
+
+	irq_matrix_online(loongarch_avec.vector_matrix);
+
+	pending_list_init(cpu);
+
+	return 0;
+}
+
+static int avecintc_cpu_offline(unsigned int cpu)
+{
+	struct pending_list *plist =3D per_cpu_ptr(&pending_list, cpu);
+
+	if (!loongarch_avec.vector_matrix)
+		return 0;
+
+	guard(raw_spinlock)(&loongarch_avec.lock);
+
+	if (!list_empty(&plist->head))
+		pr_warn("CPU#%d vector is busy\n", cpu);
+
+	irq_matrix_offline(loongarch_avec.vector_matrix);
+
+	return 0;
+}
+
+void complete_irq_moving(void)
+{
+	struct pending_list *plist =3D this_cpu_ptr(&pending_list);
+	struct avecintc_data *adata, *tdata;
+	int cpu, vector, bias;
+	uint64_t isr;
+
+	guard(raw_spinlock)(&loongarch_avec.lock);
+
+	list_for_each_entry_safe(adata, tdata, &plist->head, entry) {
+		cpu =3D adata->prev_cpu;
+		vector =3D adata->prev_vec;
+		bias =3D vector / VECTORS_PER_REG;
+		switch (bias) {
+		case 0:
+			isr =3D csr_read64(LOONGARCH_CSR_ISR0);
+			break;
+		case 1:
+			isr =3D csr_read64(LOONGARCH_CSR_ISR1);
+			break;
+		case 2:
+			isr =3D csr_read64(LOONGARCH_CSR_ISR2);
+			break;
+		case 3:
+			isr =3D csr_read64(LOONGARCH_CSR_ISR3);
+			break;
+		}
+
+		if (isr & (1UL << (vector % VECTORS_PER_REG))) {
+			mp_ops.send_ipi_single(cpu, ACTION_CLEAR_VECTOR);
+			continue;
+		}
+		list_del(&adata->entry);
+		irq_matrix_free(loongarch_avec.vector_matrix, cpu, vector, false);
+		this_cpu_write(irq_map[vector], NULL);
+		adata->moving =3D 0;
+		adata->prev_cpu =3D adata->cpu;
+		adata->prev_vec =3D adata->vec;
+	}
+}
+#endif
+
+static void avecintc_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
+{
+	struct avecintc_data *adata =3D irq_data_get_irq_chip_data(d);
+
+	msg->address_hi =3D 0x0;
+	msg->address_lo =3D (loongarch_avec.msi_base_addr | (adata->vec & 0xff) << =
4)
+			  | ((cpu_logical_map(adata->cpu & 0xffff)) << 12);
+	msg->data =3D 0x0;
+}
+
+static struct irq_chip avec_irq_controller =3D {
+	.name			=3D "AVECINTC",
+	.irq_ack		=3D avecintc_ack_irq,
+	.irq_mask		=3D avecintc_mask_irq,
+	.irq_unmask		=3D avecintc_unmask_irq,
+#ifdef CONFIG_SMP
+	.irq_set_affinity	=3D avecintc_set_affinity,
+#endif
+	.irq_compose_msi_msg	=3D avecintc_compose_msi_msg,
+};
+
+static void avecintc_irq_dispatch(struct irq_desc *desc)
+{
+	struct irq_chip *chip =3D irq_desc_get_chip(desc);
+	struct irq_desc *d;
+
+	chained_irq_enter(chip, desc);
+
+	while (true) {
+		unsigned long vector =3D csr_read64(LOONGARCH_CSR_IRR);
+		if (vector & IRR_INVALID_MASK)
+			break;
+
+		vector &=3D IRR_VECTOR_MASK;
+
+		d =3D this_cpu_read(irq_map[vector]);
+		if (d) {
+			generic_handle_irq_desc(d);
+		} else {
+			spurious_interrupt();
+			pr_warn("Unexpected IRQ occurs on CPU#%d [vector %ld]\n", smp_processor_i=
d(), vector);
+		}
+	}
+
+	chained_irq_exit(chip, desc);
+}
+
+static int avecintc_alloc_vector(struct irq_data *irqd, struct avecintc_data=
 *adata)
+{
+	int cpu, ret;
+
+	guard(raw_spinlock_irqsave)(&loongarch_avec.lock);
+
+	ret =3D irq_matrix_alloc(loongarch_avec.vector_matrix, cpu_online_mask, fal=
se, &cpu);
+	if (ret < 0)
+		return ret;
+
+	adata->prev_cpu =3D adata->cpu =3D cpu;
+	adata->prev_vec =3D adata->vec =3D ret;
+	per_cpu_ptr(irq_map, adata->cpu)[adata->vec] =3D irq_data_to_desc(irqd);
+
+	return 0;
+}
+
+static int avecintc_domain_alloc(struct irq_domain *domain, unsigned int vir=
q,
+				 unsigned int nr_irqs, void *arg)
+{
+	for (unsigned int i =3D 0; i < nr_irqs; i++) {
+		struct irq_data *irqd =3D irq_domain_get_irq_data(domain, virq + i);
+		struct avecintc_data *adata =3D kzalloc(sizeof(*adata), GFP_KERNEL);
+		int ret;
+
+		if (!adata)
+			return -ENOMEM;
+
+		ret =3D avecintc_alloc_vector(irqd, adata);
+		if (ret < 0) {
+			kfree(adata);
+			return ret;
+		}
+
+		irq_domain_set_info(domain, virq + i, virq + i, &avec_irq_controller,
+				    adata, handle_edge_irq, NULL, NULL);
+		irqd_set_single_target(irqd);
+		irqd_set_affinity_on_activate(irqd);
+	}
+
+	return 0;
+}
+
+static void avecintc_free_vector(struct irq_data *irqd, struct avecintc_data=
 *adata)
+{
+	guard(raw_spinlock_irqsave)(&loongarch_avec.lock);
+
+	per_cpu(irq_map, adata->cpu)[adata->vec] =3D NULL;
+	irq_matrix_free(loongarch_avec.vector_matrix, adata->cpu, adata->vec, false=
);
+
+#ifdef CONFIG_SMP
+	if (!adata->moving)
+		return;
+
+	per_cpu(irq_map, adata->prev_cpu)[adata->prev_vec] =3D NULL;
+	irq_matrix_free(loongarch_avec.vector_matrix, adata->prev_cpu, adata->prev_=
vec, false);
+	list_del_init(&adata->entry);
+#endif
+}
+
+static void avecintc_domain_free(struct irq_domain *domain, unsigned int vir=
q,
+				 unsigned int nr_irqs)
+{
+	for (unsigned int i =3D 0; i < nr_irqs; i++) {
+		struct irq_data *d =3D irq_domain_get_irq_data(domain, virq + i);
+
+		if (d) {
+			struct avecintc_data *adata =3D irq_data_get_irq_chip_data(d);
+
+			avecintc_free_vector(d, adata);
+			irq_domain_reset_irq_data(d);
+			kfree(adata);
+		}
+	}
+}
+
+static const struct irq_domain_ops avecintc_domain_ops =3D {
+	.alloc		=3D avecintc_domain_alloc,
+	.free		=3D avecintc_domain_free,
+	.select		=3D msi_lib_irq_domain_select,
+};
+
+static int __init irq_matrix_init(void)
+{
+	loongarch_avec.vector_matrix =3D irq_alloc_matrix(NR_VECTORS, 0, NR_VECTORS=
);
+	if (!loongarch_avec.vector_matrix)
+		return -ENOMEM;
+
+	for (int i =3D 0; i < NR_LEGACY_VECTORS; i++)
+		irq_matrix_assign_system(loongarch_avec.vector_matrix, i, false);
+
+	irq_matrix_online(loongarch_avec.vector_matrix);
+
+	return 0;
+}
+
+static int __init avecintc_init(struct irq_domain *parent)
+{
+	int ret, parent_irq;
+	unsigned long value;
+
+	raw_spin_lock_init(&loongarch_avec.lock);
+
+	loongarch_avec.fwnode =3D irq_domain_alloc_named_fwnode("AVECINTC");
+	if (!loongarch_avec.fwnode) {
+		pr_err("Unable to allocate domain handle\n");
+		ret =3D -ENOMEM;
+		goto out;
+	}
+
+	loongarch_avec.domain =3D irq_domain_create_tree(loongarch_avec.fwnode,
+						       &avecintc_domain_ops, NULL);
+	if (!loongarch_avec.domain) {
+		pr_err("Unable to create IRQ domain\n");
+		ret =3D -ENOMEM;
+		goto out_free_handle;
+	}
+
+	parent_irq =3D irq_create_mapping(parent, INT_AVEC);
+	if (!parent_irq) {
+		pr_err("Failed to mapping hwirq\n");
+		ret =3D -EINVAL;
+		goto out_remove_domain;
+	}
+
+	ret =3D irq_matrix_init();
+	if (ret < 0) {
+		pr_err("Failed to init irq matrix\n");
+		goto out_remove_domain;
+	}
+	irq_set_chained_handler_and_data(parent_irq, avecintc_irq_dispatch, NULL);
+
+#ifdef CONFIG_SMP
+	pending_list_init(0);
+	cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_AVECINTC_STARTING,
+				  "irqchip/loongarch/avecintc:starting",
+				  avecintc_cpu_online, avecintc_cpu_offline);
+#endif
+	value =3D iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
+	value |=3D IOCSR_MISC_FUNC_AVEC_EN;
+	iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC);
+
+	return ret;
+
+out_remove_domain:
+	irq_domain_remove(loongarch_avec.domain);
+out_free_handle:
+	irq_domain_free_fwnode(loongarch_avec.fwnode);
+out:
+	return ret;
+}
+
+static int __init pch_msi_parse_madt(union acpi_subtable_headers *header,
+				     const unsigned long end)
+{
+	struct acpi_madt_msi_pic *pchmsi_entry =3D (struct acpi_madt_msi_pic *)head=
er;
+
+	loongarch_avec.msi_base_addr =3D pchmsi_entry->msg_address - AVEC_MSG_OFFSE=
T;
+
+	return pch_msi_acpi_init_avec(loongarch_avec.domain);
+}
+
+static inline int __init acpi_cascade_irqdomain_init(void)
+{
+	return acpi_table_parse_madt(ACPI_MADT_TYPE_MSI_PIC, pch_msi_parse_madt, 1);
+}
+
+int __init avecintc_acpi_init(struct irq_domain *parent)
+{
+	int ret =3D avecintc_init(parent);
+	if (ret < 0) {
+		pr_err("Failed to init IRQ domain\n");
+		return ret;
+	}
+
+	ret =3D acpi_cascade_irqdomain_init();
+	if (ret < 0) {
+		pr_err("Failed to init cascade IRQ domain\n");
+		return ret;
+	}
+
+	return ret;
+}
diff --git a/drivers/irqchip/irq-loongarch-cpu.c b/drivers/irqchip/irq-loonga=
rch-cpu.c
index 9d8f2c406043..bcbd7fd33178 100644
--- a/drivers/irqchip/irq-loongarch-cpu.c
+++ b/drivers/irqchip/irq-loongarch-cpu.c
@@ -13,6 +13,8 @@
 #include <asm/loongarch.h>
 #include <asm/setup.h>
=20
+#include "irq-loongson.h"
+
 static struct irq_domain *irq_domain;
 struct fwnode_handle *cpuintc_handle;
=20
@@ -138,7 +140,10 @@ static int __init acpi_cascade_irqdomain_init(void)
 	if (r < 0)
 		return r;
=20
-	return 0;
+	if (cpu_has_avecint)
+		r =3D avecintc_acpi_init(irq_domain);
+
+	return r;
 }
=20
 static int __init cpuintc_acpi_init(union acpi_subtable_headers *header,
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loo=
ngson-eiointc.c
index b1f2080be2be..e24db71a8783 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -17,6 +17,8 @@
 #include <linux/syscore_ops.h>
 #include <asm/numa.h>
=20
+#include "irq-loongson.h"
+
 #define EIOINTC_REG_NODEMAP	0x14a0
 #define EIOINTC_REG_IPMAP	0x14c0
 #define EIOINTC_REG_ENABLE	0x1600
@@ -360,6 +362,9 @@ static int __init acpi_cascade_irqdomain_init(void)
 	if (r < 0)
 		return r;
=20
+	if (cpu_has_avecint)
+		return 0;
+
 	r =3D acpi_table_parse_madt(ACPI_MADT_TYPE_MSI_PIC, pch_msi_parse_madt, 1);
 	if (r < 0)
 		return r;
@@ -396,8 +401,8 @@ static int __init eiointc_init(struct eiointc_priv *priv,=
 int parent_irq,
=20
 	if (nr_pics =3D=3D 1) {
 		register_syscore_ops(&eiointc_syscore_ops);
-		cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_LOONGARCH_STARTING,
-					  "irqchip/loongarch/intc:starting",
+		cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_EIOINTC_STARTING,
+					  "irqchip/loongarch/eiointc:starting",
 					  eiointc_router_init, NULL);
 	}
=20
diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loong=
son-htvec.c
index 0bff728b25e3..5da02c7ad0b3 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -17,6 +17,8 @@
 #include <linux/of_irq.h>
 #include <linux/syscore_ops.h>
=20
+#include "irq-loongson.h"
+
 /* Registers */
 #define HTVEC_EN_OFF		0x20
 #define HTVEC_MAX_PARENT_IRQ	8
diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loo=
ngson-liointc.c
index 7c4fe7ab4b83..2b1bd4a96665 100644
--- a/drivers/irqchip/irq-loongson-liointc.c
+++ b/drivers/irqchip/irq-loongson-liointc.c
@@ -22,6 +22,8 @@
 #include <asm/loongson.h>
 #endif
=20
+#include "irq-loongson.h"
+
 #define LIOINTC_CHIP_IRQ	32
 #define LIOINTC_NUM_PARENT	4
 #define LIOINTC_NUM_CORES	4
diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-loo=
ngson-pch-lpc.c
index 9b35492fb6be..2d4c3ec128b8 100644
--- a/drivers/irqchip/irq-loongson-pch-lpc.c
+++ b/drivers/irqchip/irq-loongson-pch-lpc.c
@@ -15,6 +15,8 @@
 #include <linux/kernel.h>
 #include <linux/syscore_ops.h>
=20
+#include "irq-loongson.h"
+
 /* Registers */
 #define LPC_INT_CTL		0x00
 #define LPC_INT_ENA		0x04
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loo=
ngson-pch-msi.c
index dd4d699170f4..bd337ecddb40 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -15,6 +15,9 @@
 #include <linux/pci.h>
 #include <linux/slab.h>
=20
+#include "irq-msi-lib.h"
+#include "irq-loongson.h"
+
 static int nr_pics;
=20
 struct pch_msi_data {
@@ -27,26 +30,6 @@ struct pch_msi_data {
=20
 static struct fwnode_handle *pch_msi_handle[MAX_IO_PICS];
=20
-static void pch_msi_mask_msi_irq(struct irq_data *d)
-{
-	pci_msi_mask_irq(d);
-	irq_chip_mask_parent(d);
-}
-
-static void pch_msi_unmask_msi_irq(struct irq_data *d)
-{
-	irq_chip_unmask_parent(d);
-	pci_msi_unmask_irq(d);
-}
-
-static struct irq_chip pch_msi_irq_chip =3D {
-	.name			=3D "PCH PCI MSI",
-	.irq_mask		=3D pch_msi_mask_msi_irq,
-	.irq_unmask		=3D pch_msi_unmask_msi_irq,
-	.irq_ack		=3D irq_chip_ack_parent,
-	.irq_set_affinity	=3D irq_chip_set_affinity_parent,
-};
-
 static int pch_msi_allocate_hwirq(struct pch_msi_data *priv, int num_req)
 {
 	int first;
@@ -85,12 +68,6 @@ static void pch_msi_compose_msi_msg(struct irq_data *data,
 	msg->data =3D data->hwirq;
 }
=20
-static struct msi_domain_info pch_msi_domain_info =3D {
-	.flags	=3D MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
-		  MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX,
-	.chip	=3D &pch_msi_irq_chip,
-};
-
 static struct irq_chip middle_irq_chip =3D {
 	.name			=3D "PCH MSI",
 	.irq_mask		=3D irq_chip_mask_parent,
@@ -155,13 +132,31 @@ static void pch_msi_middle_domain_free(struct irq_domai=
n *domain,
 static const struct irq_domain_ops pch_msi_middle_domain_ops =3D {
 	.alloc	=3D pch_msi_middle_domain_alloc,
 	.free	=3D pch_msi_middle_domain_free,
+	.select	=3D msi_lib_irq_domain_select,
+};
+
+#define PCH_MSI_FLAGS_REQUIRED  (MSI_FLAG_USE_DEF_DOM_OPS |	\
+				 MSI_FLAG_USE_DEF_CHIP_OPS |	\
+				 MSI_FLAG_PCI_MSI_MASK_PARENT)
+
+#define PCH_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK |	\
+				 MSI_FLAG_PCI_MSIX      |	\
+				 MSI_FLAG_MULTI_PCI_MSI)
+
+static struct msi_parent_ops pch_msi_parent_ops =3D {
+	.required_flags		=3D PCH_MSI_FLAGS_REQUIRED,
+	.supported_flags	=3D PCH_MSI_FLAGS_SUPPORTED,
+	.bus_select_mask	=3D MATCH_PCI_MSI,
+	.bus_select_token	=3D DOMAIN_BUS_NEXUS,
+	.prefix			=3D "PCH-",
+	.init_dev_msi_info	=3D msi_lib_init_dev_msi_info,
 };
=20
 static int pch_msi_init_domains(struct pch_msi_data *priv,
 				struct irq_domain *parent,
 				struct fwnode_handle *domain_handle)
 {
-	struct irq_domain *middle_domain, *msi_domain;
+	struct irq_domain *middle_domain;
=20
 	middle_domain =3D irq_domain_create_hierarchy(parent, 0, priv->num_irqs,
 						    domain_handle,
@@ -174,14 +169,8 @@ static int pch_msi_init_domains(struct pch_msi_data *pri=
v,
=20
 	irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS);
=20
-	msi_domain =3D pci_msi_create_irq_domain(domain_handle,
-					       &pch_msi_domain_info,
-					       middle_domain);
-	if (!msi_domain) {
-		pr_err("Failed to create PCI MSI domain\n");
-		irq_domain_remove(middle_domain);
-		return -ENOMEM;
-	}
+	middle_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT;
+	middle_domain->msi_parent_ops =3D &pch_msi_parent_ops;
=20
 	return 0;
 }
@@ -266,17 +255,17 @@ IRQCHIP_DECLARE(pch_msi, "loongson,pch-msi-1.0", pch_ms=
i_of_init);
 #ifdef CONFIG_ACPI
 struct fwnode_handle *get_pch_msi_handle(int pci_segment)
 {
-	int i;
+	if (cpu_has_avecint)
+		return pch_msi_handle[0];
=20
-	for (i =3D 0; i < MAX_IO_PICS; i++) {
+	for (int i =3D 0; i < MAX_IO_PICS; i++) {
 		if (msi_group[i].pci_segment =3D=3D pci_segment)
 			return pch_msi_handle[i];
 	}
-	return NULL;
+	return pch_msi_handle[0];
 }
=20
-int __init pch_msi_acpi_init(struct irq_domain *parent,
-					struct acpi_madt_msi_pic *acpi_pchmsi)
+int __init pch_msi_acpi_init(struct irq_domain *parent, struct acpi_madt_msi=
_pic *acpi_pchmsi)
 {
 	int ret;
 	struct fwnode_handle *domain_handle;
@@ -289,4 +278,18 @@ int __init pch_msi_acpi_init(struct irq_domain *parent,
=20
 	return ret;
 }
+
+int __init pch_msi_acpi_init_avec(struct irq_domain *parent)
+{
+	if (pch_msi_handle[0])
+		return 0;
+
+	pch_msi_handle[0] =3D parent->fwnode;
+	irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS);
+
+	parent->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT;
+	parent->msi_parent_ops =3D &pch_msi_parent_ops;
+
+	return 0;
+}
 #endif
diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loo=
ngson-pch-pic.c
index cbaef65e804c..69efda35a8e7 100644
--- a/drivers/irqchip/irq-loongson-pch-pic.c
+++ b/drivers/irqchip/irq-loongson-pch-pic.c
@@ -17,6 +17,8 @@
 #include <linux/of_irq.h>
 #include <linux/syscore_ops.h>
=20
+#include "irq-loongson.h"
+
 /* Registers */
 #define PCH_PIC_MASK		0x20
 #define PCH_PIC_HTMSI_EN	0x40
diff --git a/drivers/irqchip/irq-loongson.h b/drivers/irqchip/irq-loongson.h
new file mode 100644
index 000000000000..11fa138d1f44
--- /dev/null
+++ b/drivers/irqchip/irq-loongson.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2024 Loongson Technology Corporation Limited
+ */
+
+#ifndef _DRIVERS_IRQCHIP_IRQ_LOONGSON_H
+#define _DRIVERS_IRQCHIP_IRQ_LOONGSON_H
+
+int find_pch_pic(u32 gsi);
+
+int liointc_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_lio_pic *acpi_liointc);
+int eiointc_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_eio_pic *acpi_eiointc);
+int avecintc_acpi_init(struct irq_domain *parent);
+
+int htvec_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_ht_pic *acpi_htvec);
+int pch_lpc_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_lpc_pic *acpi_pchlpc);
+int pch_pic_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_bio_pic *acpi_pchpic);
+int pch_msi_acpi_init(struct irq_domain *parent,
+					struct acpi_madt_msi_pic *acpi_pchmsi);
+int pch_msi_acpi_init_avec(struct irq_domain *parent);
+
+#endif /* _DRIVERS_IRQCHIP_IRQ_LOONGSON_H */
diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index 093fd42893a7..12919836dadb 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -222,37 +222,27 @@ static int mbigen_of_create_domain(struct platform_devi=
ce *pdev,
 				   struct mbigen_device *mgn_chip)
 {
 	struct platform_device *child;
-	struct device_node *np;
 	u32 num_pins;
-	int ret =3D 0;
=20
-	for_each_child_of_node(pdev->dev.of_node, np) {
+	for_each_child_of_node_scoped(pdev->dev.of_node, np) {
 		if (!of_property_read_bool(np, "interrupt-controller"))
 			continue;
=20
 		child =3D of_platform_device_create(np, NULL, NULL);
-		if (!child) {
-			ret =3D -ENOMEM;
-			break;
-		}
+		if (!child)
+			return -ENOMEM;
=20
 		if (of_property_read_u32(child->dev.of_node, "num-pins",
 					 &num_pins) < 0) {
 			dev_err(&pdev->dev, "No num-pins property\n");
-			ret =3D -EINVAL;
-			break;
+			return -EINVAL;
 		}
=20
-		if (!mbigen_create_device_domain(&child->dev, num_pins, mgn_chip)) {
-			ret =3D -ENOMEM;
-			break;
-		}
+		if (!mbigen_create_device_domain(&child->dev, num_pins, mgn_chip))
+			return -ENOMEM;
 	}
=20
-	if (ret)
-		of_node_put(np);
-
-	return ret;
+	return 0;
 }
=20
 #ifdef CONFIG_ACPI
diff --git a/drivers/irqchip/irq-omap-intc.c b/drivers/irqchip/irq-omap-intc.c
index dc82162ba763..ad84a2f03368 100644
--- a/drivers/irqchip/irq-omap-intc.c
+++ b/drivers/irqchip/irq-omap-intc.c
@@ -325,8 +325,7 @@ static int __init omap_init_irq(u32 base, struct device_n=
ode *node)
 	return ret;
 }
=20
-static asmlinkage void __exception_irq_entry
-omap_intc_handle_irq(struct pt_regs *regs)
+static void __exception_irq_entry omap_intc_handle_irq(struct pt_regs *regs)
 {
 	extern unsigned long irq_err_count;
 	u32 irqnr;
diff --git a/drivers/irqchip/irq-sa11x0.c b/drivers/irqchip/irq-sa11x0.c
index 31c202a1ae62..9d0b80271949 100644
--- a/drivers/irqchip/irq-sa11x0.c
+++ b/drivers/irqchip/irq-sa11x0.c
@@ -127,8 +127,7 @@ static int __init sa1100irq_init_devicefs(void)
=20
 device_initcall(sa1100irq_init_devicefs);
=20
-static asmlinkage void __exception_irq_entry
-sa1100_handle_irq(struct pt_regs *regs)
+static void __exception_irq_entry sa1100_handle_irq(struct pt_regs *regs)
 {
 	uint32_t icip, icmr, mask;
=20
diff --git a/drivers/irqchip/irq-versatile-fpga.c b/drivers/irqchip/irq-versa=
tile-fpga.c
index 5018a06060e6..ca471c6fee99 100644
--- a/drivers/irqchip/irq-versatile-fpga.c
+++ b/drivers/irqchip/irq-versatile-fpga.c
@@ -128,7 +128,7 @@ static int handle_one_fpga(struct fpga_irq_data *f, struc=
t pt_regs *regs)
  * Keep iterating over all registered FPGA IRQ controllers until there are
  * no pending interrupts.
  */
-static asmlinkage void __exception_irq_entry fpga_handle_irq(struct pt_regs =
*regs)
+static void __exception_irq_entry fpga_handle_irq(struct pt_regs *regs)
 {
 	int i, handled;
=20
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index 51ba681b915a..55a726d317d4 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -145,7 +145,8 @@ enum cpuhp_state {
 	CPUHP_AP_IRQ_ARMADA_XP_STARTING,
 	CPUHP_AP_IRQ_BCM2836_STARTING,
 	CPUHP_AP_IRQ_MIPS_GIC_STARTING,
-	CPUHP_AP_IRQ_LOONGARCH_STARTING,
+	CPUHP_AP_IRQ_EIOINTC_STARTING,
+	CPUHP_AP_IRQ_AVECINTC_STARTING,
 	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING,
 	CPUHP_AP_IRQ_RISCV_IMSIC_STARTING,
 	CPUHP_AP_ARM_MVEBU_COHERENCY,
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 3f30c88e0b4c..457151f9f263 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -276,7 +276,7 @@ struct irq_affinity_notify {
 #define	IRQ_AFFINITY_MAX_SETS  4
=20
 /**
- * struct irq_affinity - Description for automatic irq affinity assignements
+ * struct irq_affinity - Description for automatic irq affinity assignments
  * @pre_vectors:	Don't apply affinity to @pre_vectors at beginning of
  *			the MSI(-X) vector space
  * @post_vectors:	Don't apply affinity to @post_vectors at end of
@@ -594,7 +594,7 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
=20
 struct softirq_action
 {
-	void	(*action)(struct softirq_action *);
+	void	(*action)(void);
 };
=20
 asmlinkage void do_softirq(void);
@@ -609,7 +609,7 @@ static inline void do_softirq_post_smp_call_flush(unsigne=
d int unused)
 }
 #endif
=20
-extern void open_softirq(int nr, void (*action)(struct softirq_action *));
+extern void open_softirq(int nr, void (*action)(void));
 extern void softirq_init(void);
 extern void __raise_softirq_irqoff(unsigned int nr);
=20
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 1f5dbf1f92c9..fa711f80957b 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -991,7 +991,6 @@ void irq_init_desc(unsigned int irq);
  * @ack:	Ack register offset to reg_base
  * @eoi:	Eoi register offset to reg_base
  * @type:	Type configuration register offset to reg_base
- * @polarity:	Polarity configuration register offset to reg_base
  */
 struct irq_chip_regs {
 	unsigned long		enable;
@@ -1000,7 +999,6 @@ struct irq_chip_regs {
 	unsigned long		ack;
 	unsigned long		eoi;
 	unsigned long		type;
-	unsigned long		polarity;
 };
=20
 /**
@@ -1040,8 +1038,6 @@ struct irq_chip_type {
  * @irq_base:		Interrupt base nr for this chip
  * @irq_cnt:		Number of interrupts handled by this chip
  * @mask_cache:		Cached mask register shared between all chip types
- * @type_cache:		Cached type register
- * @polarity_cache:	Cached polarity register
  * @wake_enabled:	Interrupt can wakeup from suspend
  * @wake_active:	Interrupt is marked as an wakeup from suspend source
  * @num_ct:		Number of available irq_chip_type instances (usually 1)
@@ -1068,8 +1064,6 @@ struct irq_chip_generic {
 	unsigned int		irq_base;
 	unsigned int		irq_cnt;
 	u32			mask_cache;
-	u32			type_cache;
-	u32			polarity_cache;
 	u32			wake_enabled;
 	u32			wake_active;
 	unsigned int		num_ct;
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index de6105f68fec..e432b6a12a32 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -291,7 +291,12 @@ struct irq_domain_chip_generic_info;
  * @hwirq_max:		Maximum number of interrupts supported by controller
  * @direct_max:		Maximum value of direct maps;
  *			Use ~0 for no limit; 0 for no direct mapping
+ * @hwirq_base:		The first hardware interrupt number (legacy domains only)
+ * @virq_base:		The first Linux interrupt number for legacy domains to
+ *			immediately associate the interrupts after domain creation
  * @bus_token:		Domain bus token
+ * @name_suffix:	Optional name suffix to avoid collisions when multiple
+ *			domains are added using same fwnode
  * @ops:		Domain operation callbacks
  * @host_data:		Controller private data pointer
  * @dgc_info:		Geneneric chip information structure pointer used to
@@ -307,7 +312,10 @@ struct irq_domain_info {
 	unsigned int				size;
 	irq_hw_number_t				hwirq_max;
 	int					direct_max;
+	unsigned int				hwirq_base;
+	unsigned int				virq_base;
 	enum irq_domain_bus_token		bus_token;
+	const char				*name_suffix;
 	const struct irq_domain_ops		*ops;
 	void					*host_data;
 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index dc94e0bf2c94..271e9139de77 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -198,7 +198,7 @@ __irq_startup_managed(struct irq_desc *desc, const struct=
 cpumask *aff,
=20
 	irqd_clr_managed_shutdown(d);
=20
-	if (cpumask_any_and(aff, cpu_online_mask) >=3D nr_cpu_ids) {
+	if (!cpumask_intersects(aff, cpu_online_mask)) {
 		/*
 		 * Catch code which fiddles with enable_irq() on a managed
 		 * and potentially shutdown IRQ. Chained interrupt
diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c
index eb8628390156..15a7654eff68 100644
--- a/kernel/irq/cpuhotplug.c
+++ b/kernel/irq/cpuhotplug.c
@@ -37,7 +37,7 @@ static inline bool irq_needs_fixup(struct irq_data *d)
 	 * has been removed from the online mask already.
 	 */
 	if (cpumask_any_but(m, cpu) < nr_cpu_ids &&
-	    cpumask_any_and(m, cpu_online_mask) >=3D nr_cpu_ids) {
+	    !cpumask_intersects(m, cpu_online_mask)) {
 		/*
 		 * If this happens then there was a missed IRQ fixup at some
 		 * point. Warn about it and enforce fixup.
@@ -110,7 +110,7 @@ static bool migrate_one_irq(struct irq_desc *desc)
 	if (maskchip && chip->irq_mask)
 		chip->irq_mask(d);
=20
-	if (cpumask_any_and(affinity, cpu_online_mask) >=3D nr_cpu_ids) {
+	if (!cpumask_intersects(affinity, cpu_online_mask)) {
 		/*
 		 * If the interrupt is managed, then shut it down and leave
 		 * the affinity untouched.
diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
index 3d4036db15ac..1a3d483548e2 100644
--- a/kernel/irq/irq_sim.c
+++ b/kernel/irq/irq_sim.c
@@ -13,7 +13,6 @@
=20
 struct irq_sim_work_ctx {
 	struct irq_work		work;
-	int			irq_base;
 	unsigned int		irq_count;
 	unsigned long		*pending;
 	struct irq_domain	*domain;
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index cea8f6874b1f..e0bff21f30e0 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -128,72 +128,98 @@ void irq_domain_free_fwnode(struct fwnode_handle *fwnod=
e)
 }
 EXPORT_SYMBOL_GPL(irq_domain_free_fwnode);
=20
-static int irq_domain_set_name(struct irq_domain *domain,
-			       const struct fwnode_handle *fwnode,
-			       enum irq_domain_bus_token bus_token)
+static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain=
_bus_token bus_token)
+{
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		domain->name =3D kasprintf(GFP_KERNEL, "%s", base);
+	else
+		domain->name =3D kasprintf(GFP_KERNEL, "%s-%d", base, bus_token);
+	if (!domain->name)
+		return -ENOMEM;
+
+	domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
+	return 0;
+}
+
+static int alloc_fwnode_name(struct irq_domain *domain, const struct fwnode_=
handle *fwnode,
+			     enum irq_domain_bus_token bus_token, const char *suffix)
+{
+	const char *sep =3D suffix ? "-" : "";
+	const char *suf =3D suffix ? : "";
+	char *name;
+
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		name =3D kasprintf(GFP_KERNEL, "%pfw%s%s", fwnode, sep, suf);
+	else
+		name =3D kasprintf(GFP_KERNEL, "%pfw%s%s-%d", fwnode, sep, suf, bus_token);
+	if (!name)
+		return -ENOMEM;
+
+	/*
+	 * fwnode paths contain '/', which debugfs is legitimately unhappy
+	 * about. Replace them with ':', which does the trick and is not as
+	 * offensive as '\'...
+	 */
+	domain->name =3D strreplace(name, '/', ':');
+	domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
+	return 0;
+}
+
+static int alloc_unknown_name(struct irq_domain *domain, enum irq_domain_bus=
_token bus_token)
 {
 	static atomic_t unknown_domains;
-	struct irqchip_fwid *fwid;
+	int id =3D atomic_inc_return(&unknown_domains);
+
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d", id);
+	else
+		domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token);
+	if (!domain->name)
+		return -ENOMEM;
+
+	domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
+	return 0;
+}
+
+static int irq_domain_set_name(struct irq_domain *domain, const struct irq_d=
omain_info *info)
+{
+	enum irq_domain_bus_token bus_token =3D info->bus_token;
+	const struct fwnode_handle *fwnode =3D info->fwnode;
=20
 	if (is_fwnode_irqchip(fwnode)) {
-		fwid =3D container_of(fwnode, struct irqchip_fwid, fwnode);
+		struct irqchip_fwid *fwid =3D container_of(fwnode, struct irqchip_fwid, fw=
node);
+
+		/*
+		 * The name_suffix is only intended to be used to avoid a name
+		 * collision when multiple domains are created for a single
+		 * device and the name is picked using a real device node.
+		 * (Typical use-case is regmap-IRQ controllers for devices
+		 * providing more than one physical IRQ.) There should be no
+		 * need to use name_suffix with irqchip-fwnode.
+		 */
+		if (info->name_suffix)
+			return -EINVAL;
=20
 		switch (fwid->type) {
 		case IRQCHIP_FWNODE_NAMED:
 		case IRQCHIP_FWNODE_NAMED_ID:
-			domain->name =3D bus_token ?
-					kasprintf(GFP_KERNEL, "%s-%d",
-						  fwid->name, bus_token) :
-					kstrdup(fwid->name, GFP_KERNEL);
-			if (!domain->name)
-				return -ENOMEM;
-			domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
-			break;
+			return alloc_name(domain, fwid->name, bus_token);
 		default:
 			domain->name =3D fwid->name;
-			if (bus_token) {
-				domain->name =3D kasprintf(GFP_KERNEL, "%s-%d",
-							 fwid->name, bus_token);
-				if (!domain->name)
-					return -ENOMEM;
-				domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
-			}
-			break;
+			if (bus_token !=3D DOMAIN_BUS_ANY)
+				return alloc_name(domain, fwid->name, bus_token);
 		}
-	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) ||
-		   is_software_node(fwnode)) {
-		char *name;
-
-		/*
-		 * fwnode paths contain '/', which debugfs is legitimately
-		 * unhappy about. Replace them with ':', which does
-		 * the trick and is not as offensive as '\'...
-		 */
-		name =3D bus_token ?
-			kasprintf(GFP_KERNEL, "%pfw-%d", fwnode, bus_token) :
-			kasprintf(GFP_KERNEL, "%pfw", fwnode);
-		if (!name)
-			return -ENOMEM;
=20
-		domain->name =3D strreplace(name, '/', ':');
-		domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
+	} else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) || is_software=
_node(fwnode)) {
+		return alloc_fwnode_name(domain, fwnode, bus_token, info->name_suffix);
 	}
=20
-	if (!domain->name) {
-		if (fwnode)
-			pr_err("Invalid fwnode type for irqdomain\n");
-		domain->name =3D bus_token ?
-				kasprintf(GFP_KERNEL, "unknown-%d-%d",
-					  atomic_inc_return(&unknown_domains),
-					  bus_token) :
-				kasprintf(GFP_KERNEL, "unknown-%d",
-					  atomic_inc_return(&unknown_domains));
-		if (!domain->name)
-			return -ENOMEM;
-		domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
-	}
+	if (domain->name)
+		return 0;
=20
-	return 0;
+	if (fwnode)
+		pr_err("Invalid fwnode type for irqdomain\n");
+	return alloc_unknown_name(domain, bus_token);
 }
=20
 static struct irq_domain *__irq_domain_create(const struct irq_domain_info *=
info)
@@ -211,7 +237,7 @@ static struct irq_domain *__irq_domain_create(const struc=
t irq_domain_info *info
 	if (!domain)
 		return ERR_PTR(-ENOMEM);
=20
-	err =3D irq_domain_set_name(domain, info->fwnode, info->bus_token);
+	err =3D irq_domain_set_name(domain, info);
 	if (err) {
 		kfree(domain);
 		return ERR_PTR(err);
@@ -267,13 +293,20 @@ static void irq_domain_free(struct irq_domain *domain)
 	kfree(domain);
 }
=20
-/**
- * irq_domain_instantiate() - Instantiate a new irq domain data structure
- * @info: Domain information pointer pointing to the information for this do=
main
- *
- * Return: A pointer to the instantiated irq domain or an ERR_PTR value.
- */
-struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info)
+static void irq_domain_instantiate_descs(const struct irq_domain_info *info)
+{
+	if (!IS_ENABLED(CONFIG_SPARSE_IRQ))
+		return;
+
+	if (irq_alloc_descs(info->virq_base, info->virq_base, info->size,
+			    of_node_to_nid(to_of_node(info->fwnode))) < 0) {
+		pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n",
+			info->virq_base);
+	}
+}
+
+static struct irq_domain *__irq_domain_instantiate(const struct irq_domain_i=
nfo *info,
+						   bool cond_alloc_descs, bool force_associate)
 {
 	struct irq_domain *domain;
 	int err;
@@ -306,6 +339,19 @@ struct irq_domain *irq_domain_instantiate(const struct i=
rq_domain_info *info)
=20
 	__irq_domain_publish(domain);
=20
+	if (cond_alloc_descs && info->virq_base > 0)
+		irq_domain_instantiate_descs(info);
+
+	/*
+	 * Legacy interrupt domains have a fixed Linux interrupt number
+	 * associated. Other interrupt domains can request association by
+	 * providing a Linux interrupt number > 0.
+	 */
+	if (force_associate || info->virq_base > 0) {
+		irq_domain_associate_many(domain, info->virq_base, info->hwirq_base,
+					  info->size - info->hwirq_base);
+	}
+
 	return domain;
=20
 err_domain_gc_remove:
@@ -315,6 +361,17 @@ struct irq_domain *irq_domain_instantiate(const struct i=
rq_domain_info *info)
 	irq_domain_free(domain);
 	return ERR_PTR(err);
 }
+
+/**
+ * irq_domain_instantiate() - Instantiate a new irq domain data structure
+ * @info: Domain information pointer pointing to the information for this do=
main
+ *
+ * Return: A pointer to the instantiated irq domain or an ERR_PTR value.
+ */
+struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info)
+{
+	return __irq_domain_instantiate(info, false, false);
+}
 EXPORT_SYMBOL_GPL(irq_domain_instantiate);
=20
 /**
@@ -413,28 +470,13 @@ struct irq_domain *irq_domain_create_simple(struct fwno=
de_handle *fwnode,
 		.fwnode		=3D fwnode,
 		.size		=3D size,
 		.hwirq_max	=3D size,
+		.virq_base	=3D first_irq,
 		.ops		=3D ops,
 		.host_data	=3D host_data,
 	};
-	struct irq_domain *domain;
-
-	domain =3D irq_domain_instantiate(&info);
-	if (IS_ERR(domain))
-		return NULL;
+	struct irq_domain *domain =3D __irq_domain_instantiate(&info, true, false);
=20
-	if (first_irq > 0) {
-		if (IS_ENABLED(CONFIG_SPARSE_IRQ)) {
-			/* attempt to allocated irq_descs */
-			int rc =3D irq_alloc_descs(first_irq, first_irq, size,
-						 of_node_to_nid(to_of_node(fwnode)));
-			if (rc < 0)
-				pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n",
-					first_irq);
-		}
-		irq_domain_associate_many(domain, first_irq, 0, size);
-	}
-
-	return domain;
+	return IS_ERR(domain) ? NULL : domain;
 }
 EXPORT_SYMBOL_GPL(irq_domain_create_simple);
=20
@@ -476,18 +518,14 @@ struct irq_domain *irq_domain_create_legacy(struct fwno=
de_handle *fwnode,
 		.fwnode		=3D fwnode,
 		.size		=3D first_hwirq + size,
 		.hwirq_max	=3D first_hwirq + size,
+		.hwirq_base	=3D first_hwirq,
+		.virq_base	=3D first_irq,
 		.ops		=3D ops,
 		.host_data	=3D host_data,
 	};
-	struct irq_domain *domain;
+	struct irq_domain *domain =3D __irq_domain_instantiate(&info, false, true);
=20
-	domain =3D irq_domain_instantiate(&info);
-	if (IS_ERR(domain))
-		return NULL;
-
-	irq_domain_associate_many(domain, first_irq, first_hwirq, size);
-
-	return domain;
+	return IS_ERR(domain) ? NULL : domain;
 }
 EXPORT_SYMBOL_GPL(irq_domain_create_legacy);
=20
@@ -1365,7 +1403,7 @@ static int irq_domain_trim_hierarchy(unsigned int virq)
 	tail =3D NULL;
=20
 	/* The first entry must have a valid irqchip */
-	if (!irq_data->chip || IS_ERR(irq_data->chip))
+	if (IS_ERR_OR_NULL(irq_data->chip))
 		return -EINVAL;
=20
 	/*
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index dd53298ef1a5..f0803d6bd296 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -218,21 +218,20 @@ static void irq_validate_effective_affinity(struct irq_=
data *data)
 static inline void irq_validate_effective_affinity(struct irq_data *data) { }
 #endif
=20
+static DEFINE_PER_CPU(struct cpumask, __tmp_mask);
+
 int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
 			bool force)
 {
+	struct cpumask *tmp_mask =3D this_cpu_ptr(&__tmp_mask);
 	struct irq_desc *desc =3D irq_data_to_desc(data);
 	struct irq_chip *chip =3D irq_data_get_irq_chip(data);
 	const struct cpumask  *prog_mask;
 	int ret;
=20
-	static DEFINE_RAW_SPINLOCK(tmp_mask_lock);
-	static struct cpumask tmp_mask;
-
 	if (!chip || !chip->irq_set_affinity)
 		return -EINVAL;
=20
-	raw_spin_lock(&tmp_mask_lock);
 	/*
 	 * If this is a managed interrupt and housekeeping is enabled on
 	 * it check whether the requested affinity mask intersects with
@@ -258,11 +257,11 @@ int irq_do_set_affinity(struct irq_data *data, const st=
ruct cpumask *mask,
=20
 		hk_mask =3D housekeeping_cpumask(HK_TYPE_MANAGED_IRQ);
=20
-		cpumask_and(&tmp_mask, mask, hk_mask);
-		if (!cpumask_intersects(&tmp_mask, cpu_online_mask))
+		cpumask_and(tmp_mask, mask, hk_mask);
+		if (!cpumask_intersects(tmp_mask, cpu_online_mask))
 			prog_mask =3D mask;
 		else
-			prog_mask =3D &tmp_mask;
+			prog_mask =3D tmp_mask;
 	} else {
 		prog_mask =3D mask;
 	}
@@ -272,16 +271,14 @@ int irq_do_set_affinity(struct irq_data *data, const st=
ruct cpumask *mask,
 	 * unless we are being asked to force the affinity (in which
 	 * case we do as we are told).
 	 */
-	cpumask_and(&tmp_mask, prog_mask, cpu_online_mask);
-	if (!force && !cpumask_empty(&tmp_mask))
-		ret =3D chip->irq_set_affinity(data, &tmp_mask, force);
+	cpumask_and(tmp_mask, prog_mask, cpu_online_mask);
+	if (!force && !cpumask_empty(tmp_mask))
+		ret =3D chip->irq_set_affinity(data, tmp_mask, force);
 	else if (force)
 		ret =3D chip->irq_set_affinity(data, mask, force);
 	else
 		ret =3D -EINVAL;
=20
-	raw_spin_unlock(&tmp_mask_lock);
-
 	switch (ret) {
 	case IRQ_SET_MASK_OK:
 	case IRQ_SET_MASK_OK_DONE:
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
index 61ca924ef4b4..eb150afd671f 100644
--- a/kernel/irq/migration.c
+++ b/kernel/irq/migration.c
@@ -26,7 +26,7 @@ bool irq_fixup_move_pending(struct irq_desc *desc, bool for=
ce_clear)
 	 * The outgoing CPU might be the last online target in a pending
 	 * interrupt move. If that's the case clear the pending move bit.
 	 */
-	if (cpumask_any_and(desc->pending_mask, cpu_online_mask) >=3D nr_cpu_ids) {
+	if (!cpumask_intersects(desc->pending_mask, cpu_online_mask)) {
 		irqd_clr_move_pending(data);
 		return false;
 	}
@@ -74,7 +74,7 @@ void irq_move_masked_irq(struct irq_data *idata)
 	 * For correct operation this depends on the caller
 	 * masking the irqs.
 	 */
-	if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids) {
+	if (cpumask_intersects(desc->pending_mask, cpu_online_mask)) {
 		int ret;
=20
 		ret =3D irq_do_set_affinity(data, desc->pending_mask, false);
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 5fa0547ece0c..1c7e5159064c 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -82,7 +82,7 @@ static struct msi_desc *msi_alloc_desc(struct device *dev, =
int nvec,
 	desc->dev =3D dev;
 	desc->nvec_used =3D nvec;
 	if (affinity) {
-		desc->affinity =3D kmemdup(affinity, nvec * sizeof(*desc->affinity), GFP_K=
ERNEL);
+		desc->affinity =3D kmemdup_array(affinity, nvec, sizeof(*desc->affinity), =
GFP_KERNEL);
 		if (!desc->affinity) {
 			kfree(desc);
 			return NULL;
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c
index 8cccdf40725a..9081ada81c3d 100644
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -52,10 +52,8 @@ static int show_irq_affinity(int type, struct seq_file *m)
 	case AFFINITY:
 	case AFFINITY_LIST:
 		mask =3D desc->irq_common_data.affinity;
-#ifdef CONFIG_GENERIC_PENDING_IRQ
-		if (irqd_is_setaffinity_pending(&desc->irq_data))
-			mask =3D desc->pending_mask;
-#endif
+		if (irq_move_pending(&desc->irq_data))
+			mask =3D irq_desc_get_pending_mask(desc);
 		break;
 	case EFFECTIVE:
 	case EFFECTIVE_LIST:
@@ -142,7 +140,7 @@ static ssize_t write_irq_affinity(int type, struct file *=
file,
 	int err;
=20
 	if (!irq_can_set_affinity_usr(irq) || no_irq_affinity)
-		return -EIO;
+		return -EPERM;
=20
 	if (!zalloc_cpumask_var(&new_value, GFP_KERNEL))
 		return -ENOMEM;
@@ -362,8 +360,13 @@ void register_irq_proc(unsigned int irq, struct irq_desc=
 *desc)
 		goto out_unlock;
=20
 #ifdef CONFIG_SMP
+	umode_t umode =3D S_IRUGO;
+
+	if (irq_can_set_affinity_usr(desc->irq_data.irq))
+		umode |=3D S_IWUSR;
+
 	/* create /proc/irq/<irq>/smp_affinity */
-	proc_create_data("smp_affinity", 0644, desc->dir,
+	proc_create_data("smp_affinity", umode, desc->dir,
 			 &irq_affinity_proc_ops, irqp);
=20
 	/* create /proc/irq/<irq>/affinity_hint */
@@ -371,7 +374,7 @@ void register_irq_proc(unsigned int irq, struct irq_desc =
*desc)
 			irq_affinity_hint_proc_show, irqp);
=20
 	/* create /proc/irq/<irq>/smp_affinity_list */
-	proc_create_data("smp_affinity_list", 0644, desc->dir,
+	proc_create_data("smp_affinity_list", umode, desc->dir,
 			 &irq_affinity_list_proc_ops, irqp);
=20
 	proc_create_single_data("node", 0444, desc->dir, irq_node_proc_show,
diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
index 4402d6f5f857..b3b3ce34df63 100644
--- a/kernel/rcu/tiny.c
+++ b/kernel/rcu/tiny.c
@@ -105,7 +105,7 @@ static inline bool rcu_reclaim_tiny(struct rcu_head *head)
 }
=20
 /* Invoke the RCU callbacks whose grace period has elapsed.  */
-static __latent_entropy void rcu_process_callbacks(struct softirq_action *un=
used)
+static __latent_entropy void rcu_process_callbacks(void)
 {
 	struct rcu_head *next, *list;
 	unsigned long flags;
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index e641cc681901..93bd665637c0 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -2855,7 +2855,7 @@ static __latent_entropy void rcu_core(void)
 		queue_work_on(rdp->cpu, rcu_gp_wq, &rdp->strict_work);
 }
=20
-static void rcu_core_si(struct softirq_action *h)
+static void rcu_core_si(void)
 {
 	rcu_core();
 }
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 9057584ec06d..8dc9385f6da4 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -12483,7 +12483,7 @@ static int sched_balance_newidle(struct rq *this_rq, =
struct rq_flags *rf)
  * - indirectly from a remote scheduler_tick() for NOHZ idle balancing
  *   through the SMP cross-call nohz_csd_func()
  */
-static __latent_entropy void sched_balance_softirq(struct softirq_action *h)
+static __latent_entropy void sched_balance_softirq(void)
 {
 	struct rq *this_rq =3D this_rq();
 	enum cpu_idle_type idle =3D this_rq->idle_balance;
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 02582017759a..d082e7840f88 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -551,7 +551,7 @@ static void handle_softirqs(bool ksirqd)
 		kstat_incr_softirqs_this_cpu(vec_nr);
=20
 		trace_softirq_entry(vec_nr);
-		h->action(h);
+		h->action();
 		trace_softirq_exit(vec_nr);
 		if (unlikely(prev_count !=3D preempt_count())) {
 			pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited wit=
h %08x?\n",
@@ -700,7 +700,7 @@ void __raise_softirq_irqoff(unsigned int nr)
 	or_softirq_pending(1UL << nr);
 }
=20
-void open_softirq(int nr, void (*action)(struct softirq_action *))
+void open_softirq(int nr, void (*action)(void))
 {
 	softirq_vec[nr].action =3D action;
 }
@@ -760,8 +760,7 @@ static bool tasklet_clear_sched(struct tasklet_struct *t)
 	return false;
 }
=20
-static void tasklet_action_common(struct softirq_action *a,
-				  struct tasklet_head *tl_head,
+static void tasklet_action_common(struct tasklet_head *tl_head,
 				  unsigned int softirq_nr)
 {
 	struct tasklet_struct *list;
@@ -805,16 +804,16 @@ static void tasklet_action_common(struct softirq_action=
 *a,
 	}
 }
=20
-static __latent_entropy void tasklet_action(struct softirq_action *a)
+static __latent_entropy void tasklet_action(void)
 {
 	workqueue_softirq_action(false);
-	tasklet_action_common(a, this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
+	tasklet_action_common(this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
 }
=20
-static __latent_entropy void tasklet_hi_action(struct softirq_action *a)
+static __latent_entropy void tasklet_hi_action(void)
 {
 	workqueue_softirq_action(true);
-	tasklet_action_common(a, this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
+	tasklet_action_common(this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
 }
=20
 void tasklet_setup(struct tasklet_struct *t,
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index b8ee320208d4..836157e09e25 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1757,7 +1757,7 @@ static void __hrtimer_run_queues(struct hrtimer_cpu_bas=
e *cpu_base, ktime_t now,
 	}
 }
=20
-static __latent_entropy void hrtimer_run_softirq(struct softirq_action *h)
+static __latent_entropy void hrtimer_run_softirq(void)
 {
 	struct hrtimer_cpu_base *cpu_base =3D this_cpu_ptr(&hrtimer_bases);
 	unsigned long flags;
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 64b0d8a0aa0f..760bbeb1f331 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -2440,7 +2440,7 @@ static void run_timer_base(int index)
 /*
  * This function runs timers and the timer-tq in bottom half context.
  */
-static __latent_entropy void run_timer_softirq(struct softirq_action *h)
+static __latent_entropy void run_timer_softirq(void)
 {
 	run_timer_base(BASE_LOCAL);
 	if (IS_ENABLED(CONFIG_NO_HZ_COMMON)) {
diff --git a/lib/irq_poll.c b/lib/irq_poll.c
index 2d5329a42105..08b242bbdbdf 100644
--- a/lib/irq_poll.c
+++ b/lib/irq_poll.c
@@ -75,7 +75,7 @@ void irq_poll_complete(struct irq_poll *iop)
 }
 EXPORT_SYMBOL(irq_poll_complete);
=20
-static void __latent_entropy irq_poll_softirq(struct softirq_action *h)
+static void __latent_entropy irq_poll_softirq(void)
 {
 	struct list_head *list =3D this_cpu_ptr(&blk_cpu_iopoll);
 	int rearm =3D 0, budget =3D irq_poll_budget;
diff --git a/net/core/dev.c b/net/core/dev.c
index 6ea1d20676fb..e24a3bcb496d 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5247,7 +5247,7 @@ int netif_rx(struct sk_buff *skb)
 }
 EXPORT_SYMBOL(netif_rx);
=20
-static __latent_entropy void net_tx_action(struct softirq_action *h)
+static __latent_entropy void net_tx_action(void)
 {
 	struct softnet_data *sd =3D this_cpu_ptr(&softnet_data);
=20
@@ -6920,7 +6920,7 @@ static int napi_threaded_poll(void *data)
 	return 0;
 }
=20
-static __latent_entropy void net_rx_action(struct softirq_action *h)
+static __latent_entropy void net_rx_action(void)
 {
 	struct softnet_data *sd =3D this_cpu_ptr(&softnet_data);
 	unsigned long time_limit =3D jiffies +


.
Date: Mon, 16 Sep 2024 01:39:39 -0700
From: Kees Cook <kees@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Allen Pais <apais@linux.microsoft.com>,
	Brian Mak <makb@juniper.net>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Jeff Xu <jeffxu@chromium.org>, Kees Cook <kees@kernel.org>,
	Roman Kisel <romank@linux.microsoft.com>
Subject: [GIT PULL] execve updates for v6.12-rc1

Hi Linus,

Please pull these execve updates for v6.12-rc1. Note there is a trivial
merge conflict between this and mm, which was resolved in -next with:
https://lore.kernel.org/linux-next/20240909171843.78c294da@canb.auug.org.au/

Thanks!

-Kees

The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed:

  Linux 6.11-rc2 (2024-08-04 13:50:53 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/execve-v6.12-rc1

for you to fetch changes up to 44f65d900698278a8451988abe0d5ca37fd46882:

  binfmt_elf: mseal address zero (2024-08-14 09:56:48 -0700)

----------------------------------------------------------------
execve updates for v6.12-rc1

- binfmt_elf: Dump smaller VMAs first in ELF cores (Brian Mak)

- binfmt_elf: mseal address zero (Jeff Xu)

- binfmt_elf, coredump: Log the reason of the failed core dumps
  (Roman Kisel)

----------------------------------------------------------------
Brian Mak (1):
      binfmt_elf: Dump smaller VMAs first in ELF cores

Jeff Xu (1):
      binfmt_elf: mseal address zero

Roman Kisel (2):
      coredump: Standartize and fix logging
      binfmt_elf, coredump: Log the reason of the failed core dumps

 fs/binfmt_elf.c          |  53 +++++++++++----
 fs/coredump.c            | 166 ++++++++++++++++++++++++++++++++++-------------
 include/linux/coredump.h |  30 ++++++++-
 include/linux/mm.h       |  10 +++
 kernel/signal.c          |  21 +++++-
 mm/mseal.c               |   2 +-
 6 files changed, 220 insertions(+), 62 deletions(-)

-- 
Kees Cook

.
Date: Mon, 16 Sep 2024 10:44:05 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] core/debugobjects for v6.12-rc1

Linus,

please pull the latest core/debugobjects branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-debugobject=
s-2024-09-16

up to:  63a4a9b52c3c: debugobjects: Remove redundant checks in fill_pool()


A set of updates for debugobjects:

  - Use the threshold to check for the pool refill condition and not the
    run time recorded all time low fill value, which is lower than the
    threshold and therefore causes refills to be delayed.

  - KCSAN annotation updates and simplification of the fill_pool() code.

Thanks,

	tglx

------------------>
Zhen Lei (3):
      debugobjects: Fix the compilation attributes of some global variables
      debugobjects: Fix conditions in fill_pool()
      debugobjects: Remove redundant checks in fill_pool()


 lib/debugobjects.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index 7cea91e193a8..5ce473ad499b 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -70,10 +70,10 @@ static HLIST_HEAD(obj_to_free);
  * made at debug_stats_show(). Both obj_pool_min_free and obj_pool_max_used
  * can be off.
  */
-static int			obj_pool_min_free =3D ODEBUG_POOL_SIZE;
-static int			obj_pool_free =3D ODEBUG_POOL_SIZE;
+static int __data_racy		obj_pool_min_free =3D ODEBUG_POOL_SIZE;
+static int __data_racy		obj_pool_free =3D ODEBUG_POOL_SIZE;
 static int			obj_pool_used;
-static int			obj_pool_max_used;
+static int __data_racy		obj_pool_max_used;
 static bool			obj_freeing;
 /* The number of objs on the global free list */
 static int			obj_nr_tofree;
@@ -84,9 +84,9 @@ static int __data_racy			debug_objects_fixups __read_mostly;
 static int __data_racy			debug_objects_warnings __read_mostly;
 static int __data_racy			debug_objects_enabled __read_mostly
 					=3D CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT;
-static int __data_racy			debug_objects_pool_size __read_mostly
+static int				debug_objects_pool_size __ro_after_init
 					=3D ODEBUG_POOL_SIZE;
-static int __data_racy			debug_objects_pool_min_level __read_mostly
+static int				debug_objects_pool_min_level __ro_after_init
 					=3D ODEBUG_POOL_MIN_LEVEL;
=20
 static const struct debug_obj_descr *descr_test  __read_mostly;
@@ -95,8 +95,8 @@ static struct kmem_cache	*obj_cache __ro_after_init;
 /*
  * Track numbers of kmem_cache_alloc()/free() calls done.
  */
-static int			debug_objects_allocated;
-static int			debug_objects_freed;
+static int __data_racy		debug_objects_allocated;
+static int __data_racy		debug_objects_freed;
=20
 static void free_obj_work(struct work_struct *work);
 static DECLARE_DELAYED_WORK(debug_obj_work, free_obj_work);
@@ -135,20 +135,19 @@ static void fill_pool(void)
 		return;
=20
 	/*
-	 * Reuse objs from the global free list; they will be reinitialized
-	 * when allocating.
+	 * Reuse objs from the global obj_to_free list; they will be
+	 * reinitialized when allocating.
 	 *
-	 * Both obj_nr_tofree and obj_pool_free are checked locklessly; the
-	 * READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical
-	 * sections.
+	 * obj_nr_tofree is checked locklessly; the READ_ONCE() pairs with
+	 * the WRITE_ONCE() in pool_lock critical sections.
 	 */
-	while (READ_ONCE(obj_nr_tofree) && (READ_ONCE(obj_pool_free) < obj_pool_min=
_free)) {
+	if (READ_ONCE(obj_nr_tofree)) {
 		raw_spin_lock_irqsave(&pool_lock, flags);
 		/*
 		 * Recheck with the lock held as the worker thread might have
 		 * won the race and freed the global free list already.
 		 */
-		while (obj_nr_tofree && (obj_pool_free < obj_pool_min_free)) {
+		while (obj_nr_tofree && (obj_pool_free < debug_objects_pool_min_level)) {
 			obj =3D hlist_entry(obj_to_free.first, typeof(*obj), node);
 			hlist_del(&obj->node);
 			WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1);


.
Date: Mon, 16 Sep 2024 02:39:12 -0700
From: Kees Cook <kees@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Andy Shevchenko <andy@kernel.org>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
	Dikshita Agarwal <quic_dikshita@quicinc.com>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Hongbo Li <lihongbo22@huawei.com>,
	Justin Stitt <justinstitt@google.com>, Kees Cook <kees@kernel.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Michal Wajdeczko <michal.wajdeczko@intel.com>,
	Miguel Ojeda <ojeda@kernel.org>,
	Vikash Garodia <quic_vgarodia@quicinc.com>
Subject: [GIT PULL] hardening updates for v6.12-rc1

Hi Linus,

Please pull these hardening updates for v6.12-rc1. Most of this is
string_choice additions, with some more straggling flexible array fixes,
selftest build improvements, and a new check for nonstring arguments.

A notable conflict is that str_up_down() got defined in drm too. So it
needs to be removed during the merge, which is rather awkward. It was
solved in linux-next with this:
https://lore.kernel.org/linux-next/20240909195939.067c1c13@canb.auug.org.au/

Thanks!

-Kees

The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed:

  Linux 6.11-rc2 (2024-08-04 13:50:53 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/hardening-v6.12-rc1

for you to fetch changes up to c121d5cc3a993cdbfab46a152bdd50227a4d5e8c:

  lib/string_choices: Add some comments to make more clear for string choices helpers. (2024-09-05 09:50:16 -0700)

----------------------------------------------------------------
hardening updates for v6.12-rc1

- lib/string_choices: Add str_up_down() helper (Michal Wajdeczko)

- lib/string_choices: Add str_true_false()/str_false_true() helper
  (Hongbo Li)

- lib/string_choices: Introduce several opposite string choice helpers
  (Hongbo Li)

- lib/string_helpers: rework overflow-dependent code (Justin Stitt)

- fortify: refactor test_fortify Makefile to fix some build problems
  (Masahiro Yamada)

- string: Check for "nonstring" attribute on strscpy() arguments

- virt: vbox: Replace 1-element arrays with flexible arrays

- media: venus: hfi_cmds: Replace 1-element arrays with flexible arrays

----------------------------------------------------------------
Hongbo Li (3):
      lib/string_choices: Add str_true_false()/str_false_true() helper
      lib/string_choices: Introduce several opposite string choice helpers
      lib/string_choices: Add some comments to make more clear for string choices helpers.

Justin Stitt (1):
      lib/string_helpers: rework overflow-dependent code

Kees Cook (6):
      string_choices: Add wrapper for str_down_up()
      coccinelle: Add rules to find str_down_up() replacements
      virt: vbox: struct vmmdev_hgcm_pagelist: Replace 1-element array with flexible array
      media: venus: hfi_cmds: struct hfi_session_release_buffer_pkt: Replace 1-element array with flexible array
      media: venus: hfi_cmds: struct hfi_session_release_buffer_pkt: Add __counted_by annotation
      string: Check for "nonstring" attribute on strscpy() arguments

Masahiro Yamada (3):
      fortify: refactor test_fortify Makefile to fix some build problems
      fortify: move test_fortify.sh to lib/test_fortify/
      fortify: use if_changed_dep to record header dependency in *.cmd files

Michal Wajdeczko (2):
      lib/string_choices: Add str_up_down() helper
      coccinelle: Add rules to find str_up_down() replacements

 MAINTAINERS                                   |  1 -
 drivers/media/platform/qcom/venus/hfi_cmds.h  |  2 +-
 include/linux/compiler.h                      |  3 ++
 include/linux/compiler_types.h                |  7 ++++
 include/linux/string.h                        | 12 ++++---
 include/linux/string_choices.h                | 29 +++++++++++++++++
 include/uapi/linux/vbox_vmmdev_types.h        |  5 ++-
 lib/.gitignore                                |  2 --
 lib/Makefile                                  | 38 +---------------------
 lib/string_helpers.c                          |  3 ++
 lib/test_fortify/.gitignore                   |  2 ++
 lib/test_fortify/Makefile                     | 28 ++++++++++++++++
 {scripts => lib/test_fortify}/test_fortify.sh |  0
 scripts/coccinelle/api/string_choices.cocci   | 46 +++++++++++++++++++++++++++
 scripts/remove-stale-files                    |  2 ++
 15 files changed, 134 insertions(+), 46 deletions(-)
 create mode 100644 lib/test_fortify/.gitignore
 create mode 100644 lib/test_fortify/Makefile
 rename {scripts => lib/test_fortify}/test_fortify.sh (100%)

-- 
Kees Cook

.
Date: Mon, 16 Sep 2024 11:45:42 +0200
From: Vlastimil Babka <vbabka@suse.cz>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: David Rientjes <rientjes@google.com>, Christoph Lameter <cl@linux.com>,
 Andrew Morton <akpm@linux-foundation.org>,
 "linux-mm@kvack.org" <linux-mm@kvack.org>,
 LKML <linux-kernel@vger.kernel.org>,
 Roman Gushchin <roman.gushchin@linux.dev>,
 Hyeonggon Yoo <42.hyeyoo@gmail.com>, Christian Brauner <brauner@kernel.org>,
 RCU <rcu@vger.kernel.org>, Shakeel Butt <shakeel.butt@linux.dev>,
 "Uladzislau Rezki (Sony)" <urezki@gmail.com>
Subject: [GIT PULL] slab updates for 6.11

Hi Linus,

please pull the latest slab updates from:

  git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git tags/slab-for-6.12

There's a small conflict with the rcu tree:
https://lore.kernel.org/lkml/20240812124748.3725011b@canb.auug.org.au/

For Christian's kmem_cache_create refactoring series, a commit in the vfs.file
tree was merged as a prerequisity, and you have already merged vfs.file. Due to
vfs.tree based on 6.11-rc4 and slab on v6.11-rc5, the git pull-rq generated
diffstat below now however seems to contain also changes from rc5 commits. The
shortlog is accurate.

Thanks,
Vlastimil

======================================

This time it's mostly refactoring and improving APIs for slab users in the
kernel, along with some debugging improvements.

* kmem_cache_create() refactoring (Christian Brauner)

  Over the years have been growing new parameters to kmem_cache_create() where
  most of them are needed only for a small number of caches - most recently the
  rcu_freeptr_offset parameter. To avoid adding new parameters to
  kmem_cache_create() and adjusting all its callers, or creating new wrappers
  such as kmem_cache_create_rcu(), we can now pass extra parameters using the
  new struct kmem_cache_args. Not explicitly initialized fields default to values
  interpreted as unused. kmem_cache_create() is for now a wrapper that works both
  with the new form: kmem_cache_create(name, object_size, args, flags) and the
  legacy form: kmem_cache_create(name, object_size, align, flags, ctor)

* kmem_cache_destroy() waits for kfree_rcu()'s in flight (Vlastimil Babka,
  Uladislau Rezki)

  Since SLOB removal, kfree() is allowed for freeing objects allocated by
  kmem_cache_create(). By extension kfree_rcu() as allowed as well, which can
  allow converting simple call_rcu() callbacks that only do kmem_cache_free(),
  as there was never a kmem_cache_free_rcu() variant. However, for caches that
  can be destroyed e.g. on module removal, the cache owners knew to issue
  rcu_barrier() first to wait for the pending call_rcu()'s, and this is not
  sufficient for pending kfree_rcu()'s due to its internal batching
  optimizations. Ulad has provided a new kvfree_rcu_barrier() and to make the
  usage less error-prone, kmem_cache_destroy() calls it. Additionally, destroying
  SLAB_TYPESAFE_BY_RCU caches now again issues rcu_barrier() synchronously
  instead of using an async work, because the past motivation for async work no
  longer applies. Users of custom call_rcu() callbacks should however keep
  calling rcu_barrier() before cache destruction.

* Debugging use-after-free in SLAB_TYPESAFE_BY_RCU caches (Jann Horn)

  Currently, KASAN cannot catch UAFs in such caches as it is legal to access
  them within a grace period, and we only track the grace period when trying to
  free the underlying slab page. The new CONFIG_SLUB_RCU_DEBUG option changes the
  freeing of individual object to be RCU-delayed, after which KASAN can poison
  them.

* Delayed memcg charging (Shakeel Butt)

  In some cases, the memcg is uknown at allocation time, such as receiving network
  packets in softirq context. With kmem_cache_charge() these may be now charged
  later when the user and its memcg is known.

* Misc fixes and improvements (Pedro Falcato, Axel Rasmussen, Christoph Lameter,
  Yan Zhen, Peng Fan, Xavier).

----------------------------------------------------------------
Axel Rasmussen (1):
      mm, slub: print CPU id (and its node) on slab OOM

Christian Brauner (17):
      slab: s/__kmem_cache_create/do_kmem_cache_create/g
      slab: add struct kmem_cache_args
      slab: port kmem_cache_create() to struct kmem_cache_args
      slab: port kmem_cache_create_rcu() to struct kmem_cache_args
      slab: port kmem_cache_create_usercopy() to struct kmem_cache_args
      slab: pass struct kmem_cache_args to create_cache()
      slab: pull kmem_cache_open() into do_kmem_cache_create()
      slab: pass struct kmem_cache_args to do_kmem_cache_create()
      slab: remove rcu_freeptr_offset from struct kmem_cache
      slab: port KMEM_CACHE() to struct kmem_cache_args
      slab: port KMEM_CACHE_USERCOPY() to struct kmem_cache_args
      slab: create kmem_cache_create() compatibility layer
      file: port to struct kmem_cache_args
      slab: remove kmem_cache_create_rcu()
      slab: make kmem_cache_create_usercopy() static inline
      slab: make __kmem_cache_create() static inline
      io_uring: port to struct kmem_cache_args

Christoph Lameter (1):
      Reenable NUMA policy support in the slab allocator

Jann Horn (2):
      kasan: catch invalid free before SLUB reinitializes the object
      slub: Introduce CONFIG_SLUB_RCU_DEBUG

Pedro Falcato (1):
      slab: Warn on duplicate cache names when DEBUG_VM=y

Peng Fan (1):
      mm, slub: avoid zeroing kmalloc redzone

Shakeel Butt (1):
      memcg: add charging of already allocated slab objects

Uladzislau Rezki (Sony) (1):
      rcu/kvfree: Add kvfree_rcu_barrier() API

Vlastimil Babka (10):
      mm, slab: dissolve shutdown_cache() into its caller
      mm, slab: unlink slabinfo, sysfs and debugfs immediately
      mm, slab: move kfence_shutdown_cache() outside slab_mutex
      mm, slab: reintroduce rcu_barrier() into kmem_cache_destroy()
      mm, slab: call kvfree_rcu_barrier() from kmem_cache_destroy()
      kunit, slub: add test_kfree_rcu() and test_leak_destroy()
      Merge branch 'vfs.file' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs into slab/for-6.12/kmem_cache_args
      mm, slab: restore kerneldoc for kmem_cache_create()
      Merge branch 'slab/for-6.12/rcu_barriers' into slab/for-next
      Merge branch 'slab/for-6.12/kmem_cache_args' into slab/for-next

Xavier (1):
      mm/slab: Optimize the code logic in find_mergeable()

Yan Zhen (1):
      mm, slab: use kmem_cache_free() to free from kmem_buckets_cache

 Documentation/core-api/workqueue.rst               |   2 +-
 .../bindings/input/touchscreen/edt-ft5x06.yaml     |   1 +
 Documentation/filesystems/erofs.rst                |   2 +-
 Documentation/filesystems/smb/ksmbd.rst            |  26 +-
 Documentation/kbuild/llvm.rst                      |   2 +-
 MAINTAINERS                                        |  36 +-
 Makefile                                           |   4 +-
 arch/arm64/kvm/mmu.c                               |   9 +-
 arch/arm64/kvm/sys_regs.c                          |   6 +
 arch/arm64/kvm/vgic/vgic-debug.c                   |   2 +-
 arch/arm64/kvm/vgic/vgic-init.c                    |   9 +-
 arch/arm64/kvm/vgic/vgic.c                         |   5 +
 arch/arm64/kvm/vgic/vgic.h                         |   7 +
 arch/mips/kernel/cevt-r4k.c                        |  15 +-
 arch/mips/kernel/cpu-probe.c                       |   4 +
 arch/s390/Kconfig                                  |  13 +
 arch/s390/boot/startup.c                           |  58 +--
 arch/s390/boot/vmem.c                              |  14 +-
 arch/s390/boot/vmlinux.lds.S                       |   7 +-
 arch/s390/include/asm/page.h                       |   3 +-
 arch/s390/kernel/setup.c                           |  19 +-
 arch/s390/kernel/vmlinux.lds.S                     |   2 +-
 arch/s390/tools/relocs.c                           |   2 +-
 block/blk-lib.c                                    |  25 +-
 drivers/accessibility/speakup/genmap.c             |   1 -
 drivers/accessibility/speakup/makemapdata.c        |   1 -
 drivers/acpi/video_detect.c                        |  22 ++
 drivers/ata/pata_macio.c                           |  30 +-
 drivers/bluetooth/btintel.c                        |  10 -
 drivers/bluetooth/btintel_pcie.c                   |   3 -
 drivers/bluetooth/btmtksdio.c                      |   3 -
 drivers/bluetooth/btrtl.c                          |   1 -
 drivers/bluetooth/btusb.c                          |   4 +-
 drivers/bluetooth/hci_qca.c                        |   4 +-
 drivers/bluetooth/hci_vhci.c                       |   2 -
 drivers/cxl/core/pci.c                             |  10 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c      |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c         |   3 +
 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c             |   5 +-
 drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c             |  18 +-
 drivers/gpu/drm/i915/display/intel_dp_hdcp.c       |   4 +-
 drivers/gpu/drm/msm/adreno/adreno_gpu.c            |   2 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c        |   4 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c     |   4 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h            |  14 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c          |  20 +-
 drivers/gpu/drm/msm/dp/dp_ctrl.c                   |   2 +
 drivers/gpu/drm/msm/dp/dp_panel.c                  |  19 +-
 drivers/gpu/drm/msm/msm_mdss.c                     |   2 +-
 drivers/gpu/drm/nouveau/nvkm/core/firmware.c       |   9 +-
 drivers/gpu/drm/nouveau/nvkm/falcon/fw.c           |   6 +
 drivers/gpu/drm/xe/Makefile                        |   2 +
 drivers/gpu/drm/xe/display/xe_display.c            |  28 +-
 drivers/gpu/drm/xe/display/xe_dsb_buffer.c         |   8 +
 drivers/gpu/drm/xe/display/xe_fb_pin.c             |   3 +
 drivers/gpu/drm/xe/regs/xe_gt_regs.h               |   9 +
 drivers/gpu/drm/xe/xe_bo.c                         |   6 +-
 drivers/gpu/drm/xe/xe_device.c                     |  32 ++
 drivers/gpu/drm/xe/xe_device.h                     |   1 +
 drivers/gpu/drm/xe/xe_exec_queue.c                 |  24 +-
 drivers/gpu/drm/xe/xe_exec_queue_types.h           |   2 -
 drivers/gpu/drm/xe/xe_gsc.c                        |   8 +-
 drivers/gpu/drm/xe/xe_gt.c                         |  55 +++
 drivers/gpu/drm/xe/xe_gt_pagefault.c               |  18 +-
 drivers/gpu/drm/xe/xe_gt_types.h                   |   6 +
 drivers/gpu/drm/xe/xe_guc_submit.c                 |   4 +-
 drivers/gpu/drm/xe/xe_hw_fence.c                   |   9 +-
 drivers/gpu/drm/xe/xe_hw_fence_types.h             |   7 +-
 drivers/gpu/drm/xe/xe_mmio.c                       |  28 +-
 drivers/gpu/drm/xe/xe_observation.c                |   1 -
 drivers/gpu/drm/xe/xe_pat.c                        |  11 +-
 drivers/gpu/drm/xe/xe_pm.c                         |  11 +-
 drivers/gpu/drm/xe/xe_preempt_fence.c              |   3 +-
 drivers/gpu/drm/xe/xe_preempt_fence_types.h        |   2 +
 drivers/gpu/drm/xe/xe_sched_job.c                  |   3 +-
 drivers/gpu/drm/xe/xe_trace.h                      |   2 +-
 drivers/gpu/drm/xe/xe_wa.c                         |  18 +
 drivers/gpu/drm/xe/xe_wa_oob.rules                 |   1 +
 drivers/hid/amd-sfh-hid/amd_sfh_hid.c              |   4 +-
 drivers/hid/hid-asus.c                             |   3 +
 drivers/hid/hid-cougar.c                           |   2 +-
 drivers/hid/hid-ids.h                              |   3 +
 drivers/hid/hid-multitouch.c                       |  33 ++
 drivers/hid/wacom_wac.c                            |   4 +-
 drivers/input/joystick/adc-joystick.c              |   7 +-
 drivers/input/misc/uinput.c                        |  14 +
 drivers/input/mouse/synaptics.c                    |   1 +
 drivers/input/serio/i8042-acpipnpio.h              |  29 +-
 drivers/input/serio/i8042.c                        |  10 +-
 drivers/input/touchscreen/ads7846.c                |   2 +-
 drivers/input/touchscreen/edt-ft5x06.c             |   6 +
 drivers/input/touchscreen/himax_hx83112b.c         |  14 +-
 drivers/iommu/iommufd/device.c                     |   2 +-
 drivers/iommu/iommufd/selftest.c                   |   2 +-
 drivers/mmc/core/mmc_test.c                        |   9 +-
 drivers/mmc/host/dw_mmc.c                          |   8 +
 drivers/mmc/host/mtk-sd.c                          |   8 +-
 drivers/net/bonding/bond_main.c                    |  21 +-
 drivers/net/bonding/bond_options.c                 |   2 +-
 drivers/net/dsa/microchip/ksz_ptp.c                |   5 +-
 drivers/net/dsa/mv88e6xxx/global1_atu.c            |   3 +-
 drivers/net/dsa/ocelot/felix.c                     | 126 +++++-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |   4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h          |   2 -
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c  |   4 -
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c      |   5 -
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c  |   3 +-
 .../net/ethernet/freescale/dpaa2/dpaa2-switch.c    |   7 +-
 .../net/ethernet/intel/ice/devlink/devlink_port.c  |   4 +-
 drivers/net/ethernet/intel/ice/ice_base.c          |  21 +-
 drivers/net/ethernet/intel/ice/ice_txrx.c          |  47 +--
 drivers/net/ethernet/intel/igb/igb_main.c          |   1 +
 .../net/ethernet/marvell/octeontx2/af/rvu_cpt.c    |  23 +-
 drivers/net/ethernet/mellanox/mlx5/core/en.h       |   1 +
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c  |  21 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c    |  26 +-
 .../mellanox/mlx5/core/lib/ipsec_fs_roce.c         |   6 +-
 drivers/net/ethernet/mscc/ocelot.c                 | 279 ++++++++++++-
 drivers/net/ethernet/mscc/ocelot_fdma.c            |   3 +-
 drivers/net/ethernet/mscc/ocelot_vcap.c            |   1 +
 drivers/net/ethernet/mscc/ocelot_vsc7514.c         |   4 +
 drivers/net/ethernet/wangxun/ngbe/ngbe_mdio.c      |   8 +-
 drivers/net/ethernet/xilinx/xilinx_axienet.h       |   1 +
 drivers/net/ethernet/xilinx/xilinx_axienet_main.c  |  25 +-
 drivers/net/phy/realtek.c                          |   3 +-
 drivers/net/virtio_net.c                           |   2 +-
 drivers/nvme/host/core.c                           |   2 +-
 drivers/nvme/host/nvme.h                           |   1 -
 drivers/platform/surface/aggregator/controller.c   |   3 +-
 .../platform/surface/surface_aggregator_registry.c |  58 ++-
 drivers/platform/x86/asus-wmi.c                    |  16 +-
 drivers/platform/x86/dell/Kconfig                  |   1 +
 drivers/platform/x86/dell/dell-uart-backlight.c    |   8 +
 .../x86/intel/speed_select_if/isst_tpmi_core.c     |   3 +-
 drivers/pmdomain/imx/imx93-pd.c                    |   5 +-
 drivers/pmdomain/imx/scu-pd.c                      |   5 -
 drivers/power/sequencing/pwrseq-qcom-wcn.c         |   2 +-
 drivers/s390/crypto/ap_bus.c                       |   7 +-
 drivers/scsi/sd.c                                  |   3 +
 drivers/spi/spi-cadence-quadspi.c                  |  14 +-
 drivers/spi/spi-fsl-lpspi.c                        |  31 +-
 drivers/spi/spi-pxa2xx-pci.c                       |  15 +-
 drivers/spi/spi-pxa2xx-platform.c                  |  26 +-
 drivers/spi/spi-pxa2xx.c                           |  20 +-
 drivers/spi/spi-pxa2xx.h                           |   3 +-
 drivers/spi/spi-zynqmp-gqspi.c                     |  30 +-
 .../staging/media/atomisp/include/linux/atomisp.h  |   1 -
 drivers/thermal/thermal_debugfs.c                  |   6 +-
 drivers/thermal/thermal_of.c                       |  23 +-
 drivers/ufs/core/ufshcd.c                          |   6 +-
 drivers/ufs/host/ufs-qcom.c                        |   6 +-
 fs/bcachefs/alloc_background.c                     |  66 ++--
 fs/bcachefs/alloc_background_format.h              |   1 +
 fs/bcachefs/bcachefs_format.h                      |   3 +-
 fs/bcachefs/btree_cache.c                          |  25 ++
 fs/bcachefs/btree_cache.h                          |   2 +
 fs/bcachefs/btree_iter.h                           |   9 +
 fs/bcachefs/btree_key_cache.c                      |  31 +-
 fs/bcachefs/btree_update_interior.c                |  46 ++-
 fs/bcachefs/buckets.c                              |  74 ++--
 fs/bcachefs/buckets_waiting_for_journal.c          |   4 +-
 fs/bcachefs/data_update.c                          | 209 +++++-----
 fs/bcachefs/extents.c                              |  41 ++
 fs/bcachefs/extents.h                              |   1 +
 fs/bcachefs/fs-io-buffered.c                       |   2 +-
 fs/bcachefs/fs-ioctl.c                             |   3 +-
 fs/bcachefs/fsck.c                                 |   6 +-
 fs/bcachefs/journal.c                              |   2 +-
 fs/bcachefs/journal_sb.c                           |  15 +
 fs/bcachefs/movinggc.c                             |   2 +-
 fs/bcachefs/recovery.c                             |   9 +-
 fs/bcachefs/replicas.c                             |   3 +-
 fs/bcachefs/sb-downgrade.c                         |   8 +-
 fs/bcachefs/util.c                                 |   1 -
 fs/bcachefs/xattr.c                                |  12 +-
 fs/erofs/dir.c                                     |  35 +-
 fs/erofs/inode.c                                   |  18 +-
 fs/erofs/internal.h                                |   2 +-
 fs/erofs/super.c                                   |  26 +-
 fs/erofs/zutil.c                                   |   3 +-
 fs/file_table.c                                    |  11 +-
 fs/nfs/callback_xdr.c                              |   6 +-
 fs/nfs/delegation.c                                |  15 +-
 fs/nfs/nfs4proc.c                                  |  12 +-
 fs/nfs/pnfs.c                                      |   5 +-
 fs/nfs/super.c                                     |   2 +
 fs/smb/client/cifsfs.c                             |   6 +-
 fs/smb/client/cifsglob.h                           |   6 +-
 fs/smb/client/connect.c                            |   3 +
 fs/smb/client/file.c                               |   4 +-
 fs/smb/client/ioctl.c                              |   2 +
 fs/smb/client/link.c                               |   1 +
 fs/smb/client/reparse.c                            |  11 +-
 fs/smb/server/connection.c                         |  34 +-
 fs/smb/server/connection.h                         |   3 +-
 fs/smb/server/mgmt/user_session.c                  |   9 +
 fs/smb/server/oplock.c                             |   2 +-
 fs/smb/server/smb2pdu.c                            |  31 +-
 fs/smb/server/smb_common.h                         |   4 +-
 fs/super.c                                         |   4 +-
 include/acpi/video.h                               |   1 +
 include/linux/blkdev.h                             |   7 +-
 include/linux/dsa/ocelot.h                         |  47 +++
 include/linux/kasan.h                              |  63 ++-
 include/linux/panic.h                              |   1 +
 include/linux/rcutiny.h                            |   5 +
 include/linux/rcutree.h                            |   1 +
 include/linux/slab.h                               | 228 ++++++++++-
 include/net/bluetooth/hci.h                        |  17 +-
 include/net/bluetooth/hci_core.h                   |   2 +-
 include/net/dsa.h                                  |  16 +-
 include/net/kcm.h                                  |   1 +
 include/scsi/scsi_cmnd.h                           |   2 +-
 include/soc/mscc/ocelot.h                          |  12 +-
 include/soc/mscc/ocelot_vcap.h                     |   2 +
 include/trace/events/rpcrdma.h                     |  36 ++
 include/uapi/drm/xe_drm.h                          |   8 +-
 include/ufs/ufshcd.h                               |   8 +
 io_uring/io_uring.c                                |  14 +-
 io_uring/kbuf.c                                    |   9 +-
 kernel/cgroup/cpuset.c                             |  38 +-
 kernel/panic.c                                     |   8 +-
 kernel/printk/printk.c                             |   2 +-
 kernel/rcu/tree.c                                  | 109 +++++-
 kernel/workqueue.c                                 |  50 +--
 lib/slub_kunit.c                                   |  31 ++
 mm/Kconfig.debug                                   |  32 ++
 mm/kasan/common.c                                  |  62 +--
 mm/kasan/kasan_test.c                              |  46 +++
 mm/slab.h                                          |  13 +-
 mm/slab_common.c                                   | 354 ++++++-----------
 mm/slub.c                                          | 412 +++++++++++++-------
 net/bluetooth/hci_core.c                           |  19 +-
 net/bluetooth/hci_event.c                          |   2 +-
 net/bluetooth/mgmt.c                               |   4 +
 net/bluetooth/smp.c                                | 144 +++----
 net/core/netpoll.c                                 |   2 -
 net/dsa/tag.c                                      |   5 +-
 net/dsa/tag.h                                      | 135 +++++--
 net/dsa/tag_ocelot.c                               |  37 +-
 net/ipv4/inet_connection_sock.c                    |   5 +-
 net/ipv4/tcp_ipv4.c                                |  14 +
 net/ipv4/udp_offload.c                             |   3 +-
 net/ipv6/ip6_output.c                              |  10 +
 net/ipv6/ip6_tunnel.c                              |  12 +-
 net/iucv/iucv.c                                    |   4 +-
 net/kcm/kcmsock.c                                  |   4 +
 net/mctp/test/route-test.c                         |   2 +-
 net/mptcp/pm.c                                     |  13 -
 net/mptcp/pm_netlink.c                             | 142 ++++---
 net/mptcp/protocol.h                               |   3 -
 net/netfilter/nf_flow_table_inet.c                 |   3 +
 net/netfilter/nf_flow_table_ip.c                   |   3 +
 net/netfilter/nft_counter.c                        |   9 +-
 net/openvswitch/datapath.c                         |   2 +-
 net/sched/sch_netem.c                              |  47 ++-
 net/sunrpc/xprtrdma/ib_client.c                    |   6 +-
 samples/trace_events/trace_custom_sched.c          |   1 -
 scripts/Makefile.build                             |   2 +-
 scripts/Makefile.lib                               |  28 +-
 scripts/Makefile.modfinal                          |   2 +-
 scripts/Makefile.vmlinux                           |   2 +-
 scripts/Makefile.vmlinux_o                         |   2 +-
 scripts/kconfig/merge_config.sh                    |   2 +
 scripts/link-vmlinux.sh                            |   3 +-
 sound/soc/codecs/cs42l42.c                         |   1 -
 tools/testing/cxl/Kbuild                           |   1 +
 tools/testing/cxl/test/mock.c                      |  12 +
 .../selftests/drivers/net/mlxsw/ethtool_lanes.sh   |   3 +-
 .../selftests/net/forwarding/bridge_vlan_aware.sh  |  54 ++-
 tools/testing/selftests/net/forwarding/lib.sh      |  57 +++
 .../selftests/net/forwarding/local_termination.sh  | 431 +++++++++++++++++----
 tools/testing/selftests/net/mptcp/mptcp_join.sh    |  76 +++-
 tools/testing/selftests/net/udpgro.sh              |  53 +--
 tools/testing/selftests/tc-testing/tdc.py          |   1 -
 275 files changed, 4049 insertions(+), 1673 deletions(-)

.
Date: Mon, 16 Sep 2024 12:07:47 +0200
From: Joerg Roedel <joro@8bytes.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Will Deacon <will@kernel.org>, linux-kernel@vger.kernel.org,
	iommu@lists.linux.dev
Subject: [git pull] IOMMU Updates for Linux v6.12

Hi Linus,

The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git tags/iommu-updates-v6.12

for you to fetch changes up to 97162f6093d263aa1c2c7e883912f922ea633512:

  Merge branches 'fixes', 'arm/smmu', 'intel/vt-d', 'amd/amd-vi' and 'core' into next (2024-09-13 12:53:05 +0200)

----------------------------------------------------------------
IOMMU Updates for Linux v6.12

Including:

	- Core changes:
	  - Allow ATS on VF when parent device is identity mapped.
	  - Optimize unmap path on ARM io-pagetable implementation.
	  - Use of_property_present().

	- ARM-SMMU changes:
	  - SMMUv2:
	    - Devicetree binding updates for Qualcomm MMU-500 implementations.
	    - Extend workarounds for broken Qualcomm hypervisor to avoid
	      touching features that are not available (e.g. 16KiB page
	      support, reserved context banks).
	  - SMMUv3:
	    - Support for NVIDIA's custom virtual command queue hardware.
	    - Fix Stage-2 stall configuration and extend tests to cover this
	      area.
	    - A bunch of driver cleanups, including simplification of the
	      master rbtree code.
	  - Plus minor cleanups and fixes across both drivers.

	- Intel VT-d changes:
	  - Retire si_domain and convert to use static identity domain.
	  - Batched IOTLB/dev-IOTLB invalidation.
	  - Small code refactoring and cleanups.

	- AMD-Vi changes:
	  - Cleanup and refactoring of io-pagetable code.
	  - Add parameter to limit the used io-pagesizes.
	  - Other cleanups and fixes.

----------------------------------------------------------------
Ashish Mhetre (1):
      iommu/io-pgtable-arm: Optimise non-coherent unmap

Dan Carpenter (2):
      iommu/arm-smmu-v3: Fix a NULL vs IS_ERR() check
      iommu/tegra241-cmdqv: Fix ioremap() error handling in probe()

Dmitry Baryshkov (1):
      iommu/arm-smmu-qcom: apply num_context_bank fixes for SDM630 / SDM660

Eliav Bar-ilan (1):
      iommu/amd: Fix argument order in amd_iommu_dev_flush_pasid_all()

Jason Gunthorpe (26):
      iommu: Allow ATS to work on VFs when the PF uses IDENTITY
      iommu/arm-smmu-v3: Add struct arm_smmu_impl_ops
      iommu/amd: Move allocation of the top table into v1_alloc_pgtable
      iommu/amd: Allocate the page table root using GFP_KERNEL
      iommu/amd: Set the pgsize_bitmap correctly
      iommu/amd: Remove amd_iommu_domain_update() from page table freeing
      iommu/amd: Remove the amd_iommu_domain_set_pt_root() and related
      iommu/amd: Rename struct amd_io_pgtable iopt to pgtbl
      iommu/amd: Remove amd_io_pgtable::pgtbl_cfg
      iommu/amd: Store the nid in io_pgtable_cfg instead of the domain
      iommu/amd: Narrow the use of struct protection_domain to invalidation
      iommu/amd: Remove conditions from domain free paths
      iommu/amd: Fix typo of , instead of ;
      iommu/amd: Remove the confusing dummy iommu_flush_ops tlb ops
      iommu/amd: Correct the reported page sizes from the V1 table
      iommu/amd: Do not set the D bit on AMD v2 table entries
      iommu/arm-smmu-v3: Use the new rb tree helpers
      iommu/arm-smmu-v3: Add arm_smmu_strtab_l1/2_idx()
      iommu/arm-smmu-v3: Add types for each level of the 2 level stream table
      iommu/arm-smmu-v3: Reorganize struct arm_smmu_strtab_cfg
      iommu/arm-smmu-v3: Remove strtab_base/cfg
      iommu/arm-smmu-v3: Do not use devm for the cd table allocations
      iommu/arm-smmu-v3: Shrink the cdtab l1_desc array
      iommu/arm-smmu-v3: Add types for each level of the CD table
      iommu/arm-smmu-v3: Reorganize struct arm_smmu_ctx_desc_cfg
      iommu/amd: Test for PAGING domains before freeing a domain

Joerg Roedel (2):
      iommu/amd: Add kernel parameters to limit V1 page-sizes
      Merge branches 'fixes', 'arm/smmu', 'intel/vt-d', 'amd/amd-vi' and 'core' into next

Konrad Dybcio (1):
      iommu/arm-smmu-qcom: Work around SDM845 Adreno SMMU w/ 16K pages

Lu Baolu (10):
      iommu/vt-d: Require DMA domain if hardware not support passthrough
      iommu/vt-d: Remove identity mappings from si_domain
      iommu/vt-d: Always reserve a domain ID for identity setup
      iommu/vt-d: Remove has_iotlb_device flag
      iommu/vt-d: Factor out helpers from domain_context_mapping_one()
      iommu/vt-d: Add support for static identity domain
      iommu/vt-d: Cleanup si_domain
      iommu/vt-d: Move PCI PASID enablement to probe path
      iommu/vt-d: Unconditionally flush device TLB for pasid table updates
      iommu/vt-d: Add qi_batch for dmar_domain

Marc Gonzalez (1):
      iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux

Mostafa Saleh (2):
      iommu/arm-smmu-v3: Match Stall behaviour for S2
      iommu/arm-smmu-v3-test: Test masters with stall enabled

Nate Watterson (1):
      iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV

Nicolin Chen (11):
      iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq
      iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_build_sync_cmd
      iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_init
      iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV
      iommu/arm-smmu-v3: Add ARM_SMMU_OPT_TEGRA241_CMDQV
      iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl
      iommu/arm-smmu-v3: Start a new batch if new command is not supported
      iommu/tegra241-cmdqv: Limit CMDs for VCMDQs of a guest owned VINTF
      iommu/tegra241-cmdqv: Fix -Wformat-truncation warnings in lvcmdq_error_header
      iommu/tegra241-cmdqv: Drop static at local variable
      iommu/tegra241-cmdqv: Do not allocate vcmdq until dma_set_mask_and_coherent

Nikunj Kela (1):
      dt-bindings: arm-smmu: document the support on SA8255p

Rob Clark (1):
      iommu/arm-smmu: Un-demote unhandled-fault msg

Rob Herring (Arm) (1):
      iommu: Use of_property_present()

Sanjay K Kumar (1):
      iommu/vt-d: Fix potential lockup if qi_submit_sync called with 0 count

Suravee Suthikulpanit (1):
      iommu/amd: Update PASID, GATS, GLX, SNPAVICSUP feature related macros

Tina Zhang (3):
      iommu/vt-d: Factor out invalidation descriptor composition
      iommu/vt-d: Refactor IOTLB and Dev-IOTLB flush for batching
      iommu/vt-d: Introduce batched cache invalidation

Vasant Hegde (9):
      iommu/amd: Add blocked domain support
      iommu/amd: Update event log pointer as soon as processing is complete
      iommu/amd: Make amd_iommu_is_attach_deferred() static
      iommu/amd: Remove unused DTE_GCR3_INDEX_* macros
      iommu/amd: Handle error path in amd_iommu_probe_device()
      iommu/amd: Make amd_iommu_dev_flush_pasid_all() static
      iommu/amd: Make amd_iommu_domain_flush_complete() static
      iommu/amd: Rework amd_iommu_update_and_flush_device_table()
      iommu/amd: Make amd_iommu_dev_update_dte() static

Will Deacon (1):
      Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates

Zhang Zekun (1):
      iommu/arm-smmu-v3: Remove the unused empty definition

Zhenhua Huang (1):
      dt-bindings: arm-smmu: Add compatible for QCS8300 SoC

 Documentation/admin-guide/kernel-parameters.txt    |  17 +-
 .../devicetree/bindings/iommu/arm,smmu.yaml        |   5 +
 MAINTAINERS                                        |   1 +
 drivers/iommu/Kconfig                              |  11 +
 drivers/iommu/amd/amd_iommu.h                      |  26 +-
 drivers/iommu/amd/amd_iommu_types.h                |  35 +-
 drivers/iommu/amd/init.c                           |  16 +-
 drivers/iommu/amd/io_pgtable.c                     | 105 +--
 drivers/iommu/amd/io_pgtable_v2.c                  |  56 +-
 drivers/iommu/amd/iommu.c                          | 210 +++--
 drivers/iommu/amd/pasid.c                          |   2 +-
 drivers/iommu/arm/arm-smmu-v3/Makefile             |   1 +
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c   |  83 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        | 578 +++++++------
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h        | 135 ++-
 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c     | 909 +++++++++++++++++++++
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c         |  28 +
 drivers/iommu/arm/arm-smmu/arm-smmu.c              |   2 +-
 drivers/iommu/fsl_pamu_domain.c                    |   4 +-
 drivers/iommu/intel/cache.c                        | 239 ++++--
 drivers/iommu/intel/dmar.c                         | 109 +--
 drivers/iommu/intel/iommu.c                        | 504 +++++-------
 drivers/iommu/intel/iommu.h                        | 128 ++-
 drivers/iommu/intel/nested.c                       |   3 +-
 drivers/iommu/intel/pasid.c                        |  12 +-
 drivers/iommu/intel/svm.c                          |   7 +-
 drivers/iommu/io-pgtable-arm.c                     |  31 +-
 drivers/iommu/of_iommu.c                           |   2 +-
 drivers/pci/ats.c                                  |  33 +
 include/linux/io-pgtable.h                         |   4 +
 include/linux/pci-ats.h                            |   3 +
 31 files changed, 2259 insertions(+), 1040 deletions(-)
 create mode 100644 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c

Please pull.

Thanks,

	Joerg

.
Date: Mon, 16 Sep 2024 11:50:34 +0000
From: Tzung-Bi Shih <tzungbi@kernel.org>
To: torvalds@linux-foundation.org
Cc: tzungbi@kernel.org, linux-kernel@vger.kernel.org,
	chrome-platform@lists.linux.dev
Subject: [GIT PULL] chrome-platform changes for v6.12


--I1sVqA+P9SxrzZQb
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi Linus,

Please pull chrome-platform changes for v6.12.

Thanks,
TzungBi
------

The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed:

  Linux 6.11-rc2 (2024-08-04 13:50:53 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git tags/chrome-platform-for-6.12

for you to fetch changes up to d1b35e6d34e9b46fbf98444dd7aa114c032e9ac0:

  platform/chrome: chromeos_laptop: Use kmemdup_array (2024-08-23 21:48:43 +0800)

----------------------------------------------------------------
chrome platform changes for 6.12

* Improvements

  - Adjust DMI match table for Framework Laptop for improving
    maintainabilities for both legacy and new models.

  - Add .remove driver callback for cros_ec_typec for allowing the
    driver to be rebound.

  - Use kmemdup_array() for taking care possible overflows.

----------------------------------------------------------------
Dustin L. Howett (1):
      platform/chrome: cros_ec_lpc: switch primary DMI data for Framework Laptop

Thadeu Lima de Souza Cascardo (1):
      platform/chrome: cros_ec_typec: add remove driver hook

Yu Jiaoliang (1):
      platform/chrome: chromeos_laptop: Use kmemdup_array

 drivers/platform/chrome/chromeos_laptop.c |  7 +++---
 drivers/platform/chrome/cros_ec_lpc.c     | 36 +++++++++++++++++++++++--------
 drivers/platform/chrome/cros_ec_typec.c   | 10 +++++++++
 3 files changed, 40 insertions(+), 13 deletions(-)

--I1sVqA+P9SxrzZQb
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEABYIAB0WIQS0yQeDP3cjLyifNRUrxTEGBto89AUCZugbigAKCRArxTEGBto8
9JbqAP4gSmeGYr+Wpp/WDYLezcR8Ag9Yg2oA6EDvttljrACQVwEA8KDshHAl52lt
VpLGWmcf5q8+WZ7M3t8GBRmvY1LGigI=
=E9hl
-----END PGP SIGNATURE-----

--I1sVqA+P9SxrzZQb--

.
Date: Mon, 16 Sep 2024 14:13:58 +0200
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: [GIT PULL] random number generator updates for 6.12-rc1

Hi Linus,

Originally I'd planned on sending each of the vDSO getrandom() architecture
ports to their respective arch trees. But as we started to work on this, we
found lots of interesting issues in the shared code and infrastructure, the
fixes for which the various archs needed to base their work. So in the end,
this turned into a nice collaborative effort fixing up issues and porting to
5 new architectures -- arm64, powerpc64, powerpc32, s390x, and loongarch64 --
with everybody pitching in and commenting on each other's code. It was a fun
development cycle.

This pull request contains:

- Numerous fixups to the vDSO selftest infrastructure, getting it running
  successfully on more platforms, and fixing bugs in it.

- Additions to the vDSO getrandom & chacha selftests. Basically every time
  manual review unearthed a bug in a revision of an arch patch, or an
  ambiguity, the tests were augmented. By the time the last arch was submitted
  for review, s390x, v1 of the series was essentially fine right out of the
  gate.

- Fixes to the the generic C implementation of vDSO getrandom, to build and
  run successfully on all archs, decoupling it from assumptions we had
  (unintentionally) made on x86_64 that didn't carry through to the other
  architectures.

- Port of vDSO getrandom to LoongArch64, from Xi Ruoyao and acked by Huacai
  Chen.

- Port of vDSO getrandom to ARM64, from Adhemerval Zanella and acked by Will
  Deacon.

- Port of vDSO getrandom to PowerPC, in both 32-bit and 64-bit varieties, from
  Christophe Leroy and acked by Michael Ellerman.

- Port of vDSO getrandom to S390X from Heiko Carstens, the arch maintainer.

While it'd be natural for there to be things to fix up over the course of the
6.12 cycle, these patches got a decent amount of review from a fairly diverse
crew of folks on the mailing lists, and, for the most part, they've been
cooking in linux-next, which has been helpful for ironing out build issues.

In terms of architectures, I think that mostly takes care of the important
64-bit archs with hardware still being produced and running production loads
in settings where vDSO getrandom is likely to help. Arguably there's still
RISC-V left, and we'll see for 6.13 whether they find it useful and submit a
port.

I haven't seen any merge conflicts from Stephen with linux-next. But this pull
does touch lots of different archs, so I was thinking it'd probably make sense
to merge this early in the cycle, before merging the architectures pulls from
the various archs. But you know best there, of course.

On a more personal note, sorry I'm unable to make it to Vienna this year; it
would have been nice to talk about things face to face. We'll see about next
year.

Please pull!

Thanks,
Jason

The following changes since commit d5d547aa7b51467b15d9caa86b116f8c2507c72a:

  Merge tag 'random-6.11-rc6-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random (2024-08-29 13:59:18 +1200)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git tags/random-6.12-rc1-for-linus

for you to fetch changes up to 210860e7f7337e47e77577fa5bb168767e2d8a1e:

  selftests: vDSO: check cpu caps before running chacha test (2024-09-16 13:22:04 +0200)

----------------------------------------------------------------
Random number generator updates for Linux 6.12-rc1.
----------------------------------------------------------------

Adhemerval Zanella (1):
      arm64: vDSO: Wire up getrandom() vDSO implementation

Christophe Leroy (21):
      selftests: vDSO: don't hard-code location of vDSO sources
      selftests: vDSO: fix include order in build of test_vdso_chacha
      selftests: vDSO: look for arch-specific function name in getrandom test
      selftests: vDSO: fix vDSO name for powerpc
      selftests: vDSO: fix vdso_config for powerpc
      selftests: vDSO: fix vDSO symbols lookup for powerpc64
      selftests: vDSO: fix the way vDSO functions are called for powerpc
      selftests: vDSO: use parse_vdso.h in vdso_test_abi
      random: vDSO: don't use 64-bit atomics on 32-bit architectures
      random: vDSO: add __arch_get_k_vdso_rng_data() helper for data page access
      random: vDSO: add missing c-getrandom-y in Makefile
      random: vDSO: avoid call to out of line memset()
      random: vDSO: minimize and simplify header includes
      selftests: vDSO: build tests with O2 optimization
      selftests: vDSO: also test counter in vdso_test_chacha
      powerpc/vdso: Fix VDSO data access when running in a non-root time namespace
      mm: Define VM_DROPPABLE for powerpc/32
      powerpc/vdso32: Add crtsavres
      powerpc/vdso: Refactor CFLAGS for CVDSO build
      powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32
      powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO64

Heiko Carstens (8):
      selftests: vDSO: fix vdso_config for s390
      s390/facility: Disable compile time optimization for decompressor code
      s390/alternatives: Remove ALT_FACILITY_EARLY
      s390/facility: Let test_facility() generate static branch if possible
      s390/module: Provide find_section() helper
      s390/vdso: Allow alternatives in vdso code
      s390/vdso: Move vdso symbol handling to separate header file
      s390/vdso: Wire up getrandom() vdso implementation

Jason A. Donenfeld (11):
      selftests: vDSO: simplify getrandom thread local storage and structs
      selftests: vDSO: separate LDLIBS from CFLAGS for libsodium
      selftests: vDSO: remove unnecessary command line defs from chacha test
      selftests: vDSO: skip getrandom test if architecture is unsupported
      selftests: vDSO: quash clang omitted parameter warning in getrandom test
      selftests: vDSO: ensure vgetrandom works in a time namespace
      random: vDSO: move prototype of arch chacha function to vdso/getrandom.h
      selftests: vDSO: open code basic chacha instead of linking to libsodium
      selftests: vDSO: fix cross build for getrandom and chacha tests
      selftests: vDSO: don't include generated headers for chacha test
      selftests: vDSO: check cpu caps before running chacha test

Jens Remus (1):
      selftests: vDSO: fix ELF hash table entry size for s390x

Mark Rutland (1):
      arm64: alternative: make alternative_has_cap_likely() VDSO compatible

Xi Ruoyao (4):
      selftests: vDSO: add --cflags for pkg-config command querying libsodium
      selftests: vDSO: use KHDR_INCLUDES for UAPI headers for getrandom test
      random: vDSO: add a __vdso_getrandom prototype for all architectures
      LoongArch: vDSO: Wire up getrandom() vDSO implementation

 Documentation/ABI/stable/vdso                      |   8 +-
 arch/arm64/Kconfig                                 |   1 +
 arch/arm64/include/asm/alternative-macros.h        |   4 +
 arch/arm64/include/asm/mman.h                      |   6 +-
 arch/arm64/include/asm/vdso/getrandom.h            |  50 +++
 arch/arm64/include/asm/vdso/vsyscall.h             |  15 +
 arch/arm64/kernel/vdso.c                           |   6 -
 arch/arm64/kernel/vdso/Makefile                    |  25 +-
 arch/arm64/kernel/vdso/vdso.lds.S                  |   4 +
 arch/arm64/kernel/vdso/vgetrandom-chacha.S         | 172 ++++++++++
 arch/arm64/kernel/vdso/vgetrandom.c                |  15 +
 arch/loongarch/Kconfig                             |   1 +
 arch/loongarch/include/asm/vdso/getrandom.h        |  39 +++
 arch/loongarch/include/asm/vdso/vdso.h             |   6 +
 arch/loongarch/include/asm/vdso/vsyscall.h         |   8 +
 arch/loongarch/kernel/vdso.c                       |   1 +
 arch/loongarch/vdso/Makefile                       |   7 +-
 arch/loongarch/vdso/vdso.lds.S                     |   1 +
 arch/loongarch/vdso/vgetrandom-chacha.S            | 242 ++++++++++++++
 arch/loongarch/vdso/vgetrandom.c                   |  10 +
 arch/powerpc/Kconfig                               |   1 +
 arch/powerpc/include/asm/mman.h                    |   2 +-
 arch/powerpc/include/asm/vdso/getrandom.h          |  54 +++
 arch/powerpc/include/asm/vdso/vsyscall.h           |   6 +
 arch/powerpc/include/asm/vdso_datapage.h           |  17 +
 arch/powerpc/kernel/asm-offsets.c                  |   3 +
 arch/powerpc/kernel/vdso/Makefile                  |  57 ++--
 arch/powerpc/kernel/vdso/cacheflush.S              |   2 +-
 arch/powerpc/kernel/vdso/datapage.S                |   4 +-
 arch/powerpc/kernel/vdso/getrandom.S               |  58 ++++
 arch/powerpc/kernel/vdso/gettimeofday.S            |  13 -
 arch/powerpc/kernel/vdso/vdso32.lds.S              |   1 +
 arch/powerpc/kernel/vdso/vdso64.lds.S              |   1 +
 arch/powerpc/kernel/vdso/vgetrandom-chacha.S       | 365 +++++++++++++++++++++
 arch/powerpc/kernel/vdso/vgetrandom.c              |  14 +
 arch/s390/Kconfig                                  |   1 +
 arch/s390/include/asm/alternative.h                |   6 +-
 arch/s390/include/asm/facility.h                   |  37 ++-
 arch/s390/include/asm/fpu-insn-asm.h               |  22 ++
 arch/s390/include/asm/module.h                     |  14 +
 arch/s390/include/asm/vdso-symbols.h               |  17 +
 arch/s390/include/asm/vdso.h                       |  12 -
 arch/s390/include/asm/vdso/getrandom.h             |  40 +++
 arch/s390/include/asm/vdso/vsyscall.h              |  15 +
 arch/s390/kernel/compat_signal.c                   |   2 +-
 arch/s390/kernel/entry.S                           |   2 +-
 arch/s390/kernel/signal.c                          |   2 +-
 arch/s390/kernel/vdso.c                            |  26 +-
 arch/s390/kernel/vdso64/Makefile                   |   9 +-
 arch/s390/kernel/vdso64/vdso.h                     |   1 +
 arch/s390/kernel/vdso64/vdso64.lds.S               |   7 +
 arch/s390/kernel/vdso64/vgetrandom-chacha.S        | 185 +++++++++++
 arch/s390/kernel/vdso64/vgetrandom.c               |  14 +
 arch/x86/entry/vdso/vgetrandom.c                   |   2 -
 arch/x86/entry/vdso/vma.c                          |   3 +
 arch/x86/include/asm/pvclock.h                     |   1 +
 arch/x86/include/asm/vdso/getrandom.h              |  13 -
 arch/x86/include/asm/vdso/vsyscall.h               |  10 +-
 drivers/char/random.c                              |  12 +-
 fs/proc/task_mmu.c                                 |   4 +-
 include/asm-generic/unaligned.h                    |  11 +-
 include/linux/mm.h                                 |   4 +-
 include/trace/events/mmflags.h                     |   4 +-
 include/vdso/getrandom.h                           |  28 ++
 include/vdso/helpers.h                             |   1 +
 include/vdso/unaligned.h                           |  15 +
 lib/vdso/Makefile                                  |   1 +
 lib/vdso/getrandom.c                               |  27 +-
 tools/arch/arm64/vdso                              |   1 +
 tools/arch/loongarch/vdso                          |   1 +
 tools/arch/powerpc/vdso                            |   1 +
 tools/arch/s390/vdso                               |   1 +
 tools/arch/x86/vdso                                |   1 +
 tools/include/asm/alternative.h                    |  10 +
 tools/include/generated/asm-offsets.h              |   0
 tools/include/generated/asm/cpucap-defs.h          |   0
 tools/include/generated/asm/sysreg-defs.h          |   0
 tools/include/linux/compiler.h                     |   4 +
 tools/include/linux/linkage.h                      |   4 +
 tools/testing/selftests/vDSO/Makefile              |  21 +-
 tools/testing/selftests/vDSO/parse_vdso.c          |  17 +-
 tools/testing/selftests/vDSO/vdso_call.h           |  70 ++++
 tools/testing/selftests/vDSO/vdso_config.h         |  18 +-
 tools/testing/selftests/vDSO/vdso_test_abi.c       |  14 +-
 tools/testing/selftests/vDSO/vdso_test_chacha.c    | 103 +++++-
 .../testing/selftests/vDSO/vdso_test_correctness.c |  21 +-
 tools/testing/selftests/vDSO/vdso_test_getcpu.c    |   3 +-
 tools/testing/selftests/vDSO/vdso_test_getrandom.c | 128 +++++---
 .../selftests/vDSO/vdso_test_gettimeofday.c        |   3 +-
 89 files changed, 1949 insertions(+), 239 deletions(-)
 create mode 100644 arch/arm64/include/asm/vdso/getrandom.h
 create mode 100644 arch/arm64/kernel/vdso/vgetrandom-chacha.S
 create mode 100644 arch/arm64/kernel/vdso/vgetrandom.c
 create mode 100644 arch/loongarch/include/asm/vdso/getrandom.h
 create mode 100644 arch/loongarch/vdso/vgetrandom-chacha.S
 create mode 100644 arch/loongarch/vdso/vgetrandom.c
 create mode 100644 arch/powerpc/include/asm/vdso/getrandom.h
 create mode 100644 arch/powerpc/kernel/vdso/getrandom.S
 create mode 100644 arch/powerpc/kernel/vdso/vgetrandom-chacha.S
 create mode 100644 arch/powerpc/kernel/vdso/vgetrandom.c
 create mode 100644 arch/s390/include/asm/vdso-symbols.h
 create mode 100644 arch/s390/include/asm/vdso/getrandom.h
 create mode 100644 arch/s390/kernel/vdso64/vgetrandom-chacha.S
 create mode 100644 arch/s390/kernel/vdso64/vgetrandom.c
 create mode 100644 include/vdso/unaligned.h
 create mode 120000 tools/arch/arm64/vdso
 create mode 120000 tools/arch/loongarch/vdso
 create mode 120000 tools/arch/powerpc/vdso
 create mode 120000 tools/arch/s390/vdso
 create mode 120000 tools/arch/x86/vdso
 create mode 100644 tools/include/generated/asm-offsets.h
 create mode 100644 tools/include/generated/asm/cpucap-defs.h
 create mode 100644 tools/include/generated/asm/sysreg-defs.h
 create mode 100644 tools/testing/selftests/vDSO/vdso_call.h

.
Date: Mon, 16 Sep 2024 07:35:05 -0600
From: Jonathan Corbet <corbet@lwn.net>
To: Linus Torvalds <torvalds@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org
Subject: [GIT PULL] Documentation for 6.12

The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6:

  Linux 6.11-rc6 (2024-09-01 19:46:02 +1200)

are available in the Git repository at:

  git://git.lwn.net/linux.git tags/docs-6.12

for you to fetch changes up to 4f77c3462308c62ffe7129cc18b9ac937f44b5a5:

  Remove duplicate "and" in 'Linux NVMe docs. (2024-09-10 15:44:20 -0600)

----------------------------------------------------------------
Another relatively mundane cycle for docs:

- The beginning of an EEVDF scheduler document

- More Chinese translations

- A rethrashing of our bisection documentation

...plus the usual array of smaller fixes, and more than the usual number of
typo fixes.

----------------------------------------------------------------
Abdul Rahim (1):
      Documentation: PCI: fix typo in pci.rst

Akira Yokosawa (1):
      docs: kerneldoc-preamble.sty: Suppress extra spaces in CJK literal bl=
ocks

Alyssa Ross (1):
      Documentation: ioctl: document 0x07 ioctl code

Amit Vadhavana (1):
      Documentation: Fix spelling mistakes

Andrew Kreimer (2):
      accel/qaic: Fix a typo
      docs/process: fix typos

Aryabhatta Dey (3):
      docs: process: fix typos in Documentation/process/backporting.rst
      docs: leds: fix typo in Documentation/leds/leds-mlxcpld.rst
      Documentation/gpu: Fix typo in Documentation/gpu/komeda-kms.rst

Benjamin Poirier (1):
      Documentation: Add detailed explanation for 'N' taint flag

Bibo Mao (1):
      Loongarch: KVM: Add KVM hypercalls documentation for LoongArch

Breno Leitao (1):
      docs: fault-injection: document cache-filter feature for failslab

Carlos Bilbao (1):
      docs: scheduler: Start documenting the EEVDF scheduler

Dave Martin (1):
      docs/core-api: memory-allocation: GFP_NOWAIT doesn't need __GFP_NOWARN

David Hunter (1):
      Documentation: Capitalize Fahrenheit in watchdog-api.rst

Dennis Lam (4):
      docs:mm: fix spelling mistakes in heterogeneous memory management page
      docs:mm: fixed spelling and grammar mistakes on vmalloc kernel stack =
page
      docs:filesystem: fix mispelled words on autofs page
      docs:filesystems: fix spelling and grammar mistakes

Dongliang Mu (6):
      docs/zh_CN: add the translation of kbuild/headers_install.rst
      scripts: fix all issues reported by pylint
      doc-guide: add help documentation checktransupdate.rst
      docs/zh_CN: fix a broken reference
      docs/zh_CN: update the translation of security-bugs
      docs/zh_CN: add the translation of kbuild/gcc-plugins.rst

Dr. David Alan Gilbert (1):
      Documentation/fs/9p: Expand goo.gl link

Gianfranco Trad (1):
      Fix typo "allocateed" to allocated

Guilherme G. Piccoli (1):
      Documentation: Document the kernel flag bdev_allow_write_mounted

Haoyang Liu (2):
      docs/zh_CN: Add dev-tools/kcsan Chinese translation
      docs: update dev-tools/kcsan.rst url about KTSAN

I Hsin Cheng (1):
      docs: scheduler: completion: Update member of struct completion

Jakub Kicinski (1):
      MAINTAINERS: add Documentation/dev-tools/ to workflows@

Jani Nikula (2):
      get_maintainer: add --bug option to print bug reporting info
      Documentation: admin-guide: direct people to bug trackers, if specifi=
ed

Jiamu Sun (1):
      docs: improve comment consistency in .muttrc example configuration

Jonathan Corbet (1):
      Merge tag 'v6.11-rc6' into docs-mw

Karol Przybylski (1):
      docs: block: Fix grammar and spelling mistakes in bfq-iosched.rst

Mark Brown (1):
      docs: submitting-patches: Advertise b4

Ming Lei (1):
      Documentation: add ublk driver ioctl numbers

Philipp Stanner (1):
      Documentation: devres: fix error about PCI devres

Sebastian Muxel (1):
      scripts: sphinx-pre-install: remove unnecessary double check for $cur=
_version

SeongJae Park (2):
      Docs/translations/ko_KR: link howto.rst with other language versions
      Docs/translations/ko_KR: link memory-barriers wrapper with other lang=
uage versions

Sergio Gonz=C3=A1lez Collado (1):
      docs/sp_Sp: Add translation to spanish of the documentation related t=
o EEVDF

Shibu Kumar (1):
      docs: dm-crypt: Removal of unexpected indentation error

Shivam Chaudhary (1):
      Remove duplicate "and" in 'Linux NVMe docs.

Thorsten Leemhuis (1):
      docs: bug-bisect: rewrite to better match the other bisecting text

Thorsten Scherer (1):
      doc: iio: Fix sysfs paths

ganjie (1):
      Documentation: dontdiff: remove 'utf8data.h'

 Documentation/PCI/pci.rst                          |   2 +-
 Documentation/accel/qaic/qaic.rst                  |   2 +-
 Documentation/admin-guide/bug-bisect.rst           | 208 +++++++++-----
 Documentation/admin-guide/bug-hunting.rst          |  17 +-
 .../admin-guide/device-mapper/dm-crypt.rst         |  11 +-
 Documentation/admin-guide/kernel-parameters.txt    |  12 +
 Documentation/admin-guide/tainted-kernels.rst      |   2 +
 .../arch/arm/stm32/stm32-dma-mdma-chaining.rst     |   4 +-
 Documentation/arch/arm64/cpu-hotplug.rst           |   2 +-
 Documentation/arch/powerpc/ultravisor.rst          |   2 +-
 Documentation/arch/riscv/vector.rst                |   2 +-
 Documentation/arch/x86/mds.rst                     |   2 +-
 Documentation/arch/x86/x86_64/fsgs.rst             |   4 +-
 Documentation/block/bfq-iosched.rst                |  22 +-
 Documentation/core-api/memory-allocation.rst       |   5 +-
 Documentation/dev-tools/kcsan.rst                  |   3 +-
 Documentation/doc-guide/checktransupdate.rst       |  54 ++++
 Documentation/doc-guide/index.rst                  |   1 +
 Documentation/dontdiff                             |   2 +-
 Documentation/driver-api/driver-model/devres.rst   |   2 +-
 Documentation/driver-api/iio/buffers.rst           |   8 +-
 Documentation/driver-api/iio/core.rst              |  14 +-
 Documentation/fault-injection/fault-injection.rst  |  22 +-
 Documentation/filesystems/9p.rst                   |   2 +-
 Documentation/filesystems/autofs.rst               |   4 +-
 Documentation/filesystems/journalling.rst          |   6 +-
 Documentation/gpu/komeda-kms.rst                   |   2 +-
 Documentation/leds/leds-mlxcpld.rst                |   2 +-
 Documentation/mm/hmm.rst                           |  10 +-
 Documentation/mm/vmalloced-kernel-stacks.rst       |   8 +-
 Documentation/nvme/feature-and-quirk-policy.rst    |   6 +-
 Documentation/process/backporting.rst              |   6 +-
 Documentation/process/coding-style.rst             |   2 +-
 Documentation/process/email-clients.rst            |   2 +-
 Documentation/process/maintainer-tip.rst           |   2 +-
 Documentation/process/submitting-patches.rst       |   8 +
 Documentation/scheduler/completion.rst             |   2 +-
 Documentation/scheduler/index.rst                  |   1 +
 Documentation/scheduler/sched-design-CFS.rst       |  10 +-
 Documentation/scheduler/sched-eevdf.rst            |  43 +++
 Documentation/sphinx/kerneldoc-preamble.sty        |   2 +
 .../ko_KR/core-api/wrappers/memory-barriers.rst    |  18 ++
 Documentation/translations/ko_KR/index.rst         |  16 +-
 .../translations/ko_KR/{ =3D> process}/howto.rst     |   0
 .../translations/sp_SP/scheduler/index.rst         |   1 +
 .../sp_SP/scheduler/sched-design-CFS.rst           |   8 +-
 .../translations/sp_SP/scheduler/sched-eevdf.rst   |  58 ++++
 .../translations/zh_CN/admin-guide/index.rst       |   1 -
 .../zh_CN/admin-guide/reporting-issues.rst         |   4 +-
 .../translations/zh_CN/dev-tools/index.rst         |   2 +-
 .../translations/zh_CN/dev-tools/kcsan.rst         | 320 +++++++++++++++++=
++++
 .../zh_CN/doc-guide/checktransupdate.rst           |  55 ++++
 .../translations/zh_CN/doc-guide/index.rst         |   1 +
 Documentation/translations/zh_CN/index.rst         |   2 +-
 .../translations/zh_CN/kbuild/gcc-plugins.rst      | 126 ++++++++
 .../translations/zh_CN/kbuild/headers_install.rst  |  39 +++
 Documentation/translations/zh_CN/kbuild/index.rst  |  35 +++
 Documentation/translations/zh_CN/process/index.rst |   3 +-
 .../{admin-guide =3D> process}/security-bugs.rst     |  42 +--
 .../zh_CN/process/submitting-patches.rst           |   2 +-
 .../zh_TW/admin-guide/reporting-issues.rst         |   4 +-
 .../zh_TW/process/submitting-patches.rst           |   2 +-
 Documentation/userspace-api/ioctl/ioctl-number.rst |   2 +
 Documentation/virt/kvm/index.rst                   |   1 +
 Documentation/virt/kvm/loongarch/hypercalls.rst    |  89 ++++++
 Documentation/virt/kvm/loongarch/index.rst         |  10 +
 Documentation/watchdog/watchdog-api.rst            |   2 +-
 MAINTAINERS                                        |   3 +
 scripts/checktransupdate.py                        | 214 +++++++++-----
 scripts/get_maintainer.pl                          |  17 +-
 scripts/sphinx-pre-install                         |   2 -
 71 files changed, 1329 insertions(+), 271 deletions(-)
 create mode 100644 Documentation/doc-guide/checktransupdate.rst
 create mode 100644 Documentation/scheduler/sched-eevdf.rst
 create mode 100644 Documentation/translations/ko_KR/core-api/wrappers/memo=
ry-barriers.rst
 rename Documentation/translations/ko_KR/{ =3D> process}/howto.rst (100%)
 create mode 100644 Documentation/translations/sp_SP/scheduler/sched-eevdf.=
rst
 create mode 100644 Documentation/translations/zh_CN/dev-tools/kcsan.rst
 create mode 100644 Documentation/translations/zh_CN/doc-guide/checktransup=
date.rst
 create mode 100644 Documentation/translations/zh_CN/kbuild/gcc-plugins.rst
 create mode 100644 Documentation/translations/zh_CN/kbuild/headers_install=
.rst
 create mode 100644 Documentation/translations/zh_CN/kbuild/index.rst
 rename Documentation/translations/zh_CN/{admin-guide =3D> process}/securit=
y-bugs.rst (57%)
 create mode 100644 Documentation/virt/kvm/loongarch/hypercalls.rst
 create mode 100644 Documentation/virt/kvm/loongarch/index.rst

.
Date: Mon, 16 Sep 2024 15:54:44 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <ukleinek@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, 
	Lee Jones <lee@kernel.org>, Linus Walleij <linus.walleij@linaro.org>, 
	Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [GIT PULL] pwm: Changes for 6.12-rc1


--adbwfppeizvdptnh
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello Linus,

the following changes since commit 10c48e9a8fd5e524d37559cf4a06039b4c25db48:

  pwm: stm32: Use the right CCxNP bit in stm32_pwm_enable() (2024-09-05 11:=
12:01 +0200)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git tags/p=
wm/for-6.12-rc1

for you to fetch changes up to d242feaf81d63b25d8c1fb1a68738dc33966a376:

  pwm: stm32: Fix a typo (2024-09-16 15:24:59 +0200)

This is mostly what is in next for a while, I just found a broken commit
hash in a Fixes line during my last-minute-pre-PR checks, so I rewrote
00576dc859b82267e65b600dedc762d258f35e43 to
a550d6ae4d73dc4b9f1a2b3ad3d8d9e355b396be. The commits above changed
their IDs accordingly and the top commit is relatively new (but an
obvious spelling fix in a code comment, so should be harmless).

Please pull for v6.12-rc1.

Greetings to Vienna,
Uwe

----------------------------------------------------------------
pwm: Changes for v6.12-rc1

This pull request contains some cleanups to the core and some mostly
minor updates to a bunch of drivers and device tree bindings. One thing
worth pointing out is that it contains an immutable branch containing
support for a new mfd chip (Analog Devices ADP5585) with several sub
drivers. So expect to get the four affected commits also from my fellow
MFD and GPIO maintainers.

Thanks go to Andrew Kreimer, Clark Wang, Conor Dooley, David Lechner,
Dmitry Rokosov, Frank Li, Geert Uytterhoeven, George Stark, Jiapeng
Chong, Krzysztof Kozlowski, Laurent Pinchart, Liao Chen, Liu Ying, Rob
Herring and Wolfram Sang for code contributions and reviews and to Lee
Jones for preparing the above mentioned immutable branch.

----------------------------------------------------------------
Andrew Kreimer (1):
      pwm: stm32: Fix a typo

Clark Wang (1):
      pwm: adp5585: Add Analog Devices ADP5585 support

David Lechner (1):
      pwm: axi-pwmgen: use shared macro for version reg

George Stark (2):
      dt-bindings: pwm: amlogic: Add optional power-domains
      dt-bindings: pwm: amlogic: Add new bindings for meson A1 PWM

Haibo Chen (2):
      mfd: adp5585: Add Analog Devices ADP5585 core support
      gpio: adp5585: Add Analog Devices ADP5585 support

Jiapeng Chong (1):
      pwm: lp3943: Fix an incorrect type in lp3943_pwm_parse_dt()

Krzysztof Kozlowski (1):
      dt-bindings: pwm: allwinner,sun4i-a10-pwm: add top-level constraints

Laurent Pinchart (1):
      dt-bindings: mfd: Add Analog Devices ADP5585

Liao Chen (2):
      pwm: atmel-hlcdc: Enable module autoloading
      pwm: atmel-hlcdc: Drop trailing comma

Liu Ying (1):
      pwm: adp5585: Set OSC_EN bit to 1 when PWM state is enabled

Rob Herring (Arm) (2):
      pwm: lp3943: Use of_property_count_u32_elems() to get property length
      pwm: omap-dmtimer: Use of_property_read_bool()

Uwe Kleine-K=F6nig (5):
      pwm: Make info in traces about affected pwm more useful
      pwm: Don't export pwm_capture()
      pwm: Simplify pwm_capture()
      Merge tag 'ib-mfd-gpio-pwm-v6.12' of https://git.kernel.org/pub/scm/l=
inux/kernel/git/lee/mfd
      pwm: Switch back to struct platform_driver::remove()

Wolfram Sang (2):
      dt-bindings: pwm: renesas,pwm-rcar: Add r8a779h0 support
      dt-bindings: pwm: renesas,tpu: Add r8a779h0 support

 .../devicetree/bindings/mfd/adi,adp5585.yaml       |  92 +++++++++
 .../bindings/pwm/allwinner,sun4i-a10-pwm.yaml      |   9 +-
 .../devicetree/bindings/pwm/pwm-amlogic.yaml       |  17 ++
 .../devicetree/bindings/pwm/renesas,pwm-rcar.yaml  |   1 +
 .../devicetree/bindings/pwm/renesas,tpu-pwm.yaml   |   1 +
 .../devicetree/bindings/trivial-devices.yaml       |   4 -
 MAINTAINERS                                        |  11 +
 drivers/gpio/Kconfig                               |   7 +
 drivers/gpio/Makefile                              |   1 +
 drivers/gpio/gpio-adp5585.c                        | 229 +++++++++++++++++=
++++
 drivers/mfd/Kconfig                                |  12 ++
 drivers/mfd/Makefile                               |   1 +
 drivers/mfd/adp5585.c                              | 205 ++++++++++++++++++
 drivers/pwm/Kconfig                                |   7 +
 drivers/pwm/Makefile                               |   1 +
 drivers/pwm/core.c                                 |  13 +-
 drivers/pwm/pwm-adp5585.c                          | 188 +++++++++++++++++
 drivers/pwm/pwm-atmel-hlcdc.c                      |   7 +-
 drivers/pwm/pwm-atmel-tcb.c                        |   2 +-
 drivers/pwm/pwm-axi-pwmgen.c                       |   3 +-
 drivers/pwm/pwm-clk.c                              |   2 +-
 drivers/pwm/pwm-hibvt.c                            |   2 +-
 drivers/pwm/pwm-img.c                              |   2 +-
 drivers/pwm/pwm-lp3943.c                           |  10 +-
 drivers/pwm/pwm-lpc18xx-sct.c                      |   2 +-
 drivers/pwm/pwm-omap-dmtimer.c                     |   4 +-
 drivers/pwm/pwm-rcar.c                             |   2 +-
 drivers/pwm/pwm-rockchip.c                         |   2 +-
 drivers/pwm/pwm-sifive.c                           |   2 +-
 drivers/pwm/pwm-stm32.c                            |   2 +-
 drivers/pwm/pwm-sun4i.c                            |   2 +-
 drivers/pwm/pwm-tegra.c                            |   2 +-
 drivers/pwm/pwm-tiecap.c                           |   2 +-
 drivers/pwm/pwm-tiehrpwm.c                         |   2 +-
 include/linux/mfd/adp5585.h                        | 126 ++++++++++++
 include/linux/pwm.h                                |  10 -
 include/trace/events/pwm.h                         |  10 +-
 37 files changed, 939 insertions(+), 56 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/adi,adp5585.yaml
 create mode 100644 drivers/gpio/gpio-adp5585.c
 create mode 100644 drivers/mfd/adp5585.c
 create mode 100644 drivers/pwm/pwm-adp5585.c
 create mode 100644 include/linux/mfd/adp5585.h

--adbwfppeizvdptnh
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEP4GsaTp6HlmJrf7Tj4D7WH0S/k4FAmboOJ0ACgkQj4D7WH0S
/k65/AgAoyg7UCCQCzgF67GIarTypBoLD8MqPL5gyZ5+BB55wChr/gMSfVcfDGDJ
VOo0H0U0ZNQk5FXfwvcYd4YKjEAs3fGxR+laNTs/QNCPZgyVQ+oqV+I/AEmYml/+
x/FJOVmbXNBmgFw4NlYirZK7uhayhRdVOtxu9Y67sp/z3FgqrMR0IScf/fBvkBLk
sqPeAB2HqyfxUtBkUSC0hOweYzTBmiVxD8Sc6q5g1Gm9+cNz7pgVuxB7dMmvDPqe
SE5R6uCi9ZarMH77a+IUce53UMCPgNBcL90iI+LSFRvtEqVNtocDn/WaHIaIHg57
ovIG3PqKLe1f/BpC9OyitzdKQ3BZbQ==
=24vQ
-----END PGP SIGNATURE-----

--adbwfppeizvdptnh--

.
Date: Mon, 16 Sep 2024 16:32:07 +0200
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Greg Ungerer <gerg@linux-m68k.org>,
	linux-m68k@lists.linux-m68k.org,
	linux-kernel@vger.kernel.org,
	Geert Uytterhoeven <geert@linux-m68k.org>
Subject: [GIT PULL] m68k updates for v6.12

	Hi Linus,

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git tags/m68k-for-v6.12-tag1

for you to fetch changes up to b90fae5df91744e45e683c17bb1a38e466770df3:

  m68k: defconfig: Update defconfigs for v6.11-rc1 (2024-08-26 10:25:02 +0200)

----------------------------------------------------------------
m68k updates for v6.12

  - Use swap() helper for __arch_xchg(),
  - Fix kernel_clone_args.flags in m68k_clone(),
  - Defconfig updates.

Thanks for pulling!

----------------------------------------------------------------
Finn Thain (1):
      m68k: Fix kernel_clone_args.flags in m68k_clone()

Geert Uytterhoeven (1):
      m68k: defconfig: Update defconfigs for v6.11-rc1

Thorsten Blum (1):
      m68k: cmpxchg: Use swap() to improve code

 arch/m68k/configs/amiga_defconfig    |  2 --
 arch/m68k/configs/apollo_defconfig   |  2 --
 arch/m68k/configs/atari_defconfig    |  2 --
 arch/m68k/configs/bvme6000_defconfig |  2 --
 arch/m68k/configs/hp300_defconfig    |  2 --
 arch/m68k/configs/mac_defconfig      |  2 --
 arch/m68k/configs/multi_defconfig    |  2 --
 arch/m68k/configs/mvme147_defconfig  |  2 --
 arch/m68k/configs/mvme16x_defconfig  |  2 --
 arch/m68k/configs/q40_defconfig      |  2 --
 arch/m68k/configs/sun3_defconfig     |  2 --
 arch/m68k/configs/sun3x_defconfig    |  2 --
 arch/m68k/include/asm/cmpxchg.h      | 15 +++++----------
 arch/m68k/kernel/process.c           |  2 +-
 14 files changed, 6 insertions(+), 35 deletions(-)

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

.
Date: Mon, 16 Sep 2024 16:43:55 +0200
From: Petr Mladek <pmladek@suse.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, live-patching@vger.kernel.org
Subject: [GIT PULL] livepatching for 6.12

Hi Linus,

please pull the latest changes for the kernel livepatching from

  git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching.git tags/livepatching-for-6.12

=======================================

- Small documentation improvement.

----------------------------------------------------------------
Bagas Sanjaya (1):
      Documentation: livepatch: Correct release locks antonym

 Documentation/livepatch/livepatch.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

.
Date: Mon, 16 Sep 2024 16:53:52 +0200
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Linus <torvalds@linux-foundation.org>,
	linux-mmc@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Subject: [GIT PULL] MMC updates for v6.12

Hi Linus,

Here's the pull-request for MMC v6.12.

Please note, this pull-request also introduces a new subsystem for so called
Replay Protected Memory Block (RPMB) in drivers/misc/. The first provider
that implements RPMB support is the MMC subsystem for eMMC cards, while the
consumer is the tee/optee subsystem.

More details are available in the commit message that introduces the RPMB
subsystem along with the usual highlights for MMC in the signed tag.

Please pull this in!

Kind regards
Ulf Hansson

The following changes since commit aea62c744a9ae2a8247c54ec42138405216414da:

  mmc: cqhci: Fix checking of CQHCI_HALT state (2024-09-03 14:20:51 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git tags/mmc-v6.12

for you to fetch changes up to cd3689b6772fbc1a4513934a5204fd2fa5b4426b:

  mmc: core: Use dev_err_probe for deferred regulators (2024-09-13 14:09:29 +0200)

----------------------------------------------------------------
MMC core:
 - Add documentation for the mmc-test driver
 - Register the eMMC RPMB partition with the RPMB subsystem
 - Some various cleanups

MMC host:
 - dw_mmc-rockchip: Add support for the RK3576 variant
 - renesas_sdhi: Add support for the RZ/V2H(P) variant
 - sdhci_am654: Add a retry mechanism for tuning
 - sdhci-atmel: Convert DT bindings to json schema
 - sdhci-of-dwcmshc: Add eMMC HW reset support for BlueField-3 SoC
 - sdhci-of-dwcmshc: Add support for the RK3576 variant
 - sdhci-of-dwcmshc: Add support for the Sophgo SG2042 variant
 - sdhci-of-ma35d1: Add new driver for the Nuvoton MA35D1 SDHCI

Misc/Tee:
 - Add Replay Protected Memory Block (RPMB) subsystem
 - Let optee probe RPMB device using RPMB subsystem

----------------------------------------------------------------
Alexander Stein (1):
      mmc: core: Use dev_err_probe for deferred regulators

Avri Altman (2):
      mmc: core Convert UNSTUFF_BITS macro to inline function
      Documentation: mmc: Add mmc-test doc

Chanwoo Lee (1):
      mmc: core: Replace the argument of mmc_sd_switch() with defines

Chen Wang (7):
      mmc: sdhci-of-dwcmshc: add common bulk optional clocks support
      mmc: sdhci-of-dwcmshc: move two rk35xx functions
      mmc: sdhci-of-dwcmshc: factor out code for th1520_init()
      mmc: sdhci-of-dwcmshc: factor out code into dwcmshc_rk35xx_init
      mmc: sdhci-of-dwcmshc: add dwcmshc_pltfm_data
      dt-bindings: mmc: sdhci-of-dwcmhsc: Add Sophgo SG2042 support
      mmc: sdhci-of-dwcmshc: Add support for Sophgo SG2042

Christophe JAILLET (1):
      mmc: core: Remove struct mmc_context_info

Dan Carpenter (1):
      optee: Fix a NULL vs IS_ERR() check

Detlev Casanova (3):
      dt-bindings: mmc: Add support for rk3576 dw-mshc
      mmc: dw_mmc-rockchip: Add support for rk3576 SoCs
      dt-bindings: mmc: Add support for rk3576 eMMC

Dharma Balasubiramani (1):
      dt-bindings: mmc: sdhci-atmel: Convert to json schema

Doug Brown (1):
      mmc: sdhci-pxav2: Remove unnecessary null pointer check

Jens Wiklander (7):
      rpmb: add Replay Protected Memory Block (RPMB) subsystem
      mmc: block: register RPMB partition with the RPMB subsystem
      tee: add tee_device_set_dev_groups()
      optee: probe RPMB device using RPMB subsystem
      mmc: block: add RPMB dependency
      optee: add RPMB dependency
      rpmb: fix error path in rpmb_dev_register()

Judith Mendez (2):
      mmc: sdhci_am654: Add retry tuning
      mmc: sdhci_am654: Add prints to tuning algorithm

Krzysztof Kozlowski (1):
      dt-bindings: mmc: renesas,sdhi: add top-level constraints

Lad Prabhakar (4):
      dt-bindings: mmc: renesas,sdhi: Document RZ/V2H(P) support
      mmc: tmio: Use MMC core APIs to control the vqmmc regulator
      mmc: renesas_sdhi: Add RZ/V2H(P) compatible string
      dt-bindings: mmc: renesas,sdhi: Remove duplicate compatible and add clock checks

Liming Sun (1):
      mmc: sdhci-of-dwcmshc: Add hw_reset() support for BlueField-3 SoC

Riyan Dhiman (2):
      mmc: core: Calculate size from pointer
      mmc: core: Convert simple_stroul to kstroul

Seunghwan Baek (1):
      mmc: cqhci: Make use of cqhci_halted() routine

Shan-Chun Hung (2):
      dt-bindings: mmc: nuvoton,ma35d1-sdhci: Document MA35D1 SDHCI controller
      mmc: sdhci-of-ma35d1: Add Nuvoton MA35D1 SDHCI driver

Shawn Lin (1):
      mmc: dw_mmc-rockchip: Add internal phase support

Thorsten Blum (1):
      mmc: mtk-sd: Improve data type in msdc_timeout_cal()

Ulf Hansson (3):
      mmc: Merge branch fixes into next
      mmc: Merge branch fixes into next
      mmc: Merge branch fixes into next

Vladimir Zapolskiy (1):
      mmc: core: remove left-over data structure declarations

 Documentation/ABI/testing/sysfs-class-tee          |  15 +
 .../bindings/mmc/atmel,sama5d2-sdhci.yaml          |  92 ++++
 .../bindings/mmc/nuvoton,ma35d1-sdhci.yaml         |  87 ++++
 .../devicetree/bindings/mmc/renesas,sdhi.yaml      |  13 +-
 .../devicetree/bindings/mmc/rockchip-dw-mshc.yaml  |   2 +
 .../devicetree/bindings/mmc/sdhci-atmel.txt        |  35 --
 .../bindings/mmc/snps,dwcmshc-sdhci.yaml           |  95 ++--
 Documentation/driver-api/mmc/index.rst             |   1 +
 Documentation/driver-api/mmc/mmc-test.rst          | 299 +++++++++++++
 MAINTAINERS                                        |   8 +
 drivers/misc/Kconfig                               |  10 +
 drivers/misc/Makefile                              |   1 +
 drivers/misc/rpmb-core.c                           | 231 ++++++++++
 drivers/mmc/core/Kconfig                           |   1 +
 drivers/mmc/core/block.c                           | 250 ++++++++++-
 drivers/mmc/core/mmc.c                             | 106 ++---
 drivers/mmc/core/mmc_ops.h                         |  14 +
 drivers/mmc/core/regulator.c                       |   8 +-
 drivers/mmc/core/sd.c                              | 133 +++---
 drivers/mmc/core/sd_ops.c                          |   3 +-
 drivers/mmc/host/Kconfig                           |  12 +
 drivers/mmc/host/Makefile                          |   1 +
 drivers/mmc/host/cqhci-core.c                      |  14 +-
 drivers/mmc/host/dw_mmc-rockchip.c                 | 217 +++++++++-
 drivers/mmc/host/mtk-sd.c                          |  11 +-
 drivers/mmc/host/renesas_sdhi_internal_dmac.c      |   1 +
 drivers/mmc/host/sdhci-of-dwcmshc.c                | 478 ++++++++++++++-------
 drivers/mmc/host/sdhci-of-ma35d1.c                 | 314 ++++++++++++++
 drivers/mmc/host/sdhci-pxav2.c                     |   2 +-
 drivers/mmc/host/sdhci_am654.c                     |  54 ++-
 drivers/mmc/host/tmio_mmc_core.c                   |   7 +-
 drivers/tee/optee/Kconfig                          |   1 +
 drivers/tee/optee/core.c                           |  96 ++++-
 drivers/tee/optee/device.c                         |   7 +
 drivers/tee/optee/ffa_abi.c                        |  14 +
 drivers/tee/optee/optee_ffa.h                      |   2 +
 drivers/tee/optee/optee_private.h                  |  26 +-
 drivers/tee/optee/optee_rpc_cmd.h                  |  35 ++
 drivers/tee/optee/optee_smc.h                      |   2 +
 drivers/tee/optee/rpc.c                            | 177 ++++++++
 drivers/tee/optee/smc_abi.c                        |  14 +
 drivers/tee/tee_core.c                             |  19 +-
 include/linux/mmc/core.h                           |  12 -
 include/linux/mmc/host.h                           |  27 +-
 include/linux/rpmb.h                               | 123 ++++++
 include/linux/tee_core.h                           |  12 +
 46 files changed, 2633 insertions(+), 449 deletions(-)
 create mode 100644 Documentation/ABI/testing/sysfs-class-tee
 create mode 100644 Documentation/devicetree/bindings/mmc/atmel,sama5d2-sdhci.yaml
 create mode 100644 Documentation/devicetree/bindings/mmc/nuvoton,ma35d1-sdhci.yaml
 delete mode 100644 Documentation/devicetree/bindings/mmc/sdhci-atmel.txt
 create mode 100644 Documentation/driver-api/mmc/mmc-test.rst
 create mode 100644 drivers/misc/rpmb-core.c
 create mode 100644 drivers/mmc/host/sdhci-of-ma35d1.c
 create mode 100644 include/linux/rpmb.h

.
Date: Mon, 16 Sep 2024 16:29:47 +0000
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Linus Torvalds" <torvalds@linux-foundation.org>
Cc: soc@kernel.org, linux-arm-kernel@lists.infradead.org,
 linux-kernel@vger.kernel.org
Subject: [GIT PULL 0/4] 

Hi Linus,

These are the usual four branches from the SoC tree, with around
900 non-merge changesets from 220 individual authors. I hope to
send one more pull request later for the conversion of ep93xx
to devicetree, but I still applied regression fixes to that one
today so I'm giving it some more time to make sure it won't
cause other stuff to fail.

There are four platforms that make up most of the changes
by size and number of patches:

 - NXP gets a lot of minor DT improvements as well as a
   good chunk of the driver updates, but only three new
   machines.
 - Rockchips and Aspeed have the largest size overall,
   mainly from new board additions, so there are fewer
   patches.
 - Qualcomm as usual has a lot of everything including
   several new Snapdragon X1E laptops.

Another small but notable addition is initial support for
the Raspberry Pi 5, which has taken a while to get into
shape.

The driver changes are somewhat larger than normal, but
are still dwarfed by the devicetree updates.

The most active contributers by number of patches are:
     62 Krzysztof Kozlowski
     43 Frank Li
     37 Herve Codina
     35 Nikita Shubin
     22 Heiko Stuebner
     18 Yang Chen
     16 Marek Beh=C3=BAn
     16 Geert Uytterhoeven
     15 Peng Fan
     14 Markus Niebel
     14 Lad Prabhakar
     14 Beleswar Padhi
     12 Xianwei Zhao
     12 Rayyan Ansari
     11 Svyatoslav Ryhel
     11 Peter Yin
     11 Konrad Dybcio
     11 Fabio Estevam
     11 Dang Huynh
     11 Cristian Marussi
     11 Alexander Stein
     10 Sudeep Holla
     10 Marek Vasut
     10 Diogo Ivo

Dirstat:
   0.4% Documentation/devicetree/bindings/arm/
   0.7% Documentation/devicetree/bindings/clock/
   0.6% Documentation/devicetree/bindings/pinctrl/
   0.7% Documentation/devicetree/bindings/soc/fsl/cpm_qe/
   0.3% Documentation/devicetree/bindings/soc/
   0.6% Documentation/devicetree/bindings/
  11.3% arch/arm/boot/dts/aspeed/
   1.6% arch/arm/boot/dts/broadcom/
   0.3% arch/arm/boot/dts/microchip/
   2.6% arch/arm/boot/dts/nvidia/
   2.1% arch/arm/boot/dts/nxp/imx/
   1.3% arch/arm/boot/dts/qcom/
   0.6% arch/arm/boot/dts/rockchip/
   1.9% arch/arm/boot/dts/st/
   0.3% arch/arm/boot/dts/
   0.4% arch/arm/
   2.1% arch/arm64/boot/dts/amlogic/
   0.5% arch/arm64/boot/dts/broadcom/
   9.8% arch/arm64/boot/dts/freescale/
   1.7% arch/arm64/boot/dts/mediatek/
   0.3% arch/arm64/boot/dts/nuvoton/
   1.6% arch/arm64/boot/dts/nvidia/
   9.5% arch/arm64/boot/dts/qcom/
   4.1% arch/arm64/boot/dts/renesas/
  20.2% arch/arm64/boot/dts/rockchip/
   2.8% arch/arm64/boot/dts/ti/
   0.6% arch/arm64/boot/dts/
   0.3% arch/riscv/boot/dts/sophgo/
   0.4% drivers/firmware/arm_ffa/
   1.0% drivers/firmware/arm_scmi/transports/
   4.5% drivers/firmware/arm_scmi/vendors/imx/
   1.6% drivers/firmware/arm_scmi/
   0.2% drivers/firmware/imx/
   0.8% drivers/firmware/
   0.3% drivers/input/keyboard/
   0.2% drivers/memory/samsung/
   0.8% drivers/memory/tegra/
   0.5% drivers/memory/
   1.1% drivers/reset/
   0.2% drivers/rtc/
   2.9% drivers/soc/fsl/qe/
   0.3% drivers/soc/mediatek/
   0.6% drivers/soc/qcom/
   0.5% drivers/soc/ti/
   0.3% drivers/soc/
   1.5% include/dt-bindings/clock/
   0.2% include/linux/

.
Date: Mon, 16 Sep 2024 09:45:26 -0700
From: Guenter Roeck <linux@roeck-us.net>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-hwmon@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [GIT PULL] hwmon updates for v6.12

Hi Linus,

Please pull hwmon updates for Linux v6.12 from signed tag:

    git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-for-v6.12

Thanks,
Guenter
------

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git tags/hwmon-for-v6.12

for you to fetch changes up to 2cb4acf2140be8a4f299c0b887cc314845ef6ec8:

  hwmon: Remove devm_hwmon_device_unregister() API function (2024-09-13 07:27:36 -0700)

----------------------------------------------------------------
hwmon updates for v6.12

* New drivers

  - Driver for Sophgo SG2042 external hardware monitor

  - Thermal sensor driver for Surface Aggregator Module

* Added support to existing drivers

  - oxp-sensors: Support for multiple new devices.

  - nct6775: Added G15CF to ASUS WMI monitoring list

* Modernizations

  - ina2xx: Driver cleanup and update to use with_info API

  - lm92: Driver cleanup and update to use regmap and with_info API

  - lm95234: Driver cleanup and update to use regmap and with_info API

  - max1619: Driver cleanup and update to use regmap and with_info API

  - max1668: Driver cleanup and update to use regmap and with_info API

  - max6697: Driver cleanup and update to use regmap and with_info API

* API updates

  - Removed unused devm_hwmon_device_unregister() API function

* Other notable changes

  - Implement and use generic bus access delay for pmbus drivers

  - Use with scoped for each OF child loop in several drivers

  - Module unloading fixes for gsc-hwmon and ntc_thermistor drivers

  - Converted various drivers to use multi-byte regmap operations

  - adt7475: Improved devicetree based configuration

  - ltc2947: Move to firmware agnostic API

  - ltc2978: Converted devicetree description to yaml

  - max16065: Addressed overflows when writing limit attributes

* Various other minor cleanups, fixes and improvements

----------------------------------------------------------------
Andy Shevchenko (2):
      hwmon: (sht21) Use %*ph to print small buffer
      hwmon: (sch5636) Print unknown ID in error string via %*pE

Armin Wolf (1):
      hwmon: (dell-smm) Add Dell Latitude 7320 to fan control whitelist

Chanh Nguyen (1):
      dt-bindings: hwmon: Add maxim max31790

Chris Packham (3):
      dt-bindings: hwmon: Add adt7475 fan/pwm properties
      dt-bindings: hwmon: adt7475: Deprecate adi,pwm-active-state
      hwmon: (adt7475) Add support for configuring initial PWM state

Christophe JAILLET (1):
      hwmon: (pmbus/mpq7932) Constify struct regulator_desc

Cryolitia PukNgae (1):
      hwmon: (oxp-sensors) Fix typo in driver documentation

Denis Pauk (1):
      hwmon: (nct6775) add G15CF to ASUS WMI monitoring list

Derek J. Clark (1):
      hwmon: (oxp-sensors) Add support for multiple new devices.

Frank Li (1):
      dt-bindings: hwmon: Convert ltc2978.txt to yaml

Guenter Roeck (56):
      hwmon: (adt7470) Use multi-byte regmap operations
      hwmon: (tmp401) Use multi-byte regmap operations
      hwmon: (lm95245) Use multi-byte regmap operations
      hwmon: (nct7802) Use multi-byte regmap operations
      hwmon: (adt7x10) Use multi-byte regmap operations
      hwmon: (tmp464) Use multi-byte regmap operations
      hwmon: (max6639) Use multi-byte regmap operations
      hwmon: (amc6821) Use multi-byte regmap operations
      hwmon: (lm95234) Reorder include files to be in alphabetic order
      hwmon: (lm95234) Use find_closest to find matching update interval
      hwmon: (lm95234) Convert to use regmap
      hwmon: (lm95234) Convert to with_info hwmon API
      hwmon: (lm95234) Add support for tempX_enable attribute
      hwmon: (lm95234) Use multi-byte regmap operations
      hwmon: (max16065) Fix overflows seen when writing limits
      hwmon: (max16065) Fix alarm attributes
      hwmon: (max6697) Reorder include files
      hwmon: (max6697) Drop platform data support
      hwmon: (max6697) Use bit operations where possible
      hwmon: (max6697) Convert to use regmap
      hwmon: (max6697) Convert to with_info hwmon API
      hwmon: (max6697) Add support for tempX_min and tempX_min_alarm
      hwmon: (max1668) Reorder include files to alphabetic order
      hwmon: (max1668) Use BIT macro
      hwmon: (max1668) Convert to use regmap
      hwmon: (max1668) Replace chip type with number of channels
      hwmon: (max1668) Convert to use with_info hwmon API
      hwmon: (max6697) Document discrepancy in overtemperature status bit values
      hwmon: (max1619) Clamp temperature range when writing limits
      hwmon: (max1619) Reorder include files to alphabetic order
      hwmon: (max1619) Mask valid alarm bits
      hwmon: (max1619) Convert to use regmap
      hwmon: (max1619) Convert to with_info API
      hwmon: (max1619) Add support for update_interval attribute
      hwmon: (max1619) Improve chip detection code
      hwmon: (lm92) Improve auto-detection accuracy
      hwmon: (lm92) Reorder include files to alphabetic order
      hwmon: (lm92) Replace chip IDs with limit register resolution
      hwmon: (lm92) Convert to use regmap
      hwmon: (lm92) Convert to with_info hwmon API
      hwmon: (lm92) Update documentation
      hwmon: (ina2xx) Reorder include files to alphabetic order
      hwmon: (ina2xx) Replace platform data with device properties
      hwmon: (ina2xx) Use bit operations
      hwmon: (ina2xx) Mark regmap_config as const
      hwmon: (ina2xx) Use local regmap pointer if used more than once
      hwmon: (ina2xx) Re-initialize chip using regmap functions
      hwmon: (ina2xx) Fix various overflow issues
      hwmon: (ina2xx) Consolidate chip initialization code
      hwmon: (ina2xx) Set alert latch
      hwmon: (ina2xx) Move ina2xx_get_value()
      hwmon: (ina2xx) Convert to use with_info hwmon API
      hwmon: (ina2xx) Pass register to alert limit write functions
      hwmon: (ina2xx) Add support for current limits
      hwmon: (ina2xx) Use shunt voltage to calculate current
      hwmon: Remove devm_hwmon_device_unregister() API function

Inochi Amaoto (2):
      dt-bindings: hwmon: Add Sophgo SG2042 external hardware monitor support
      hwmon: Add sophgo SG2042 external hardware monitor support

Javier Carrasco (2):
      hwmon: (ltc2992) use device_for_each_child_node_scoped() to access child nodes
      hwmon: (chipcap2) Drop cc2_disable() in the probe and return dev_err_probe()

Jinjie Ruan (8):
      hwmon: (aspeed-g6-pwm-tacho): Simplify with scoped for each OF child loop
      hwmon: (aspeed-pwm-tacho): Simplify with scoped for each OF child loop
      hwmon: (ina3221): Simplify with scoped for each OF child loop
      hwmon: (lm90): Simplify with scoped for each OF child loop
      hwmon: (nct7802): Simplify with scoped for each OF child loop
      hwmon: (npcm750-pwm-fan): Simplify with scoped for each OF child loop
      hwmon: (tmp421): Simplify with scoped for each OF child loop
      hwmon: (tmp464): Simplify with scoped for each OF child loop

Johannes Kirchmair (1):
      hwmon: (pwmfan) Do not force disable pwm controller

Liao Chen (1):
      hwmon: (gsc-hwmon) fix module autoloading

Mario Limonciello (1):
      hwmon: (k10temp): Use cpu_feature_enabled() for detecting zen

Maximilian Luz (1):
      hwmon: Add thermal sensor driver for Surface Aggregator Module

Nathan Chancellor (1):
      hwmon: (oxp-sensors) Add missing breaks to fix -Wimplicit-fallthrough with clang

Nuno Sa (1):
      hwmon: (ltc2947) Move to firmware agnostic API

Patrick Rudolph (5):
      hwmon: pmbus: Implement generic bus access delay
      hwmon: pmbus: max15301: Use generic code
      hwmon: pmbus: ucd9000: Use generic code
      hwmon: pmbus: zl6100: Use generic code
      hwmon: pmbus: pli12096bc: Add write delay

Rob Herring (Arm) (2):
      hwmon: (vexpress) Use of_property_present()
      hwmon: (stts751) Add "st" vendor prefix to "stts751" compatible string

Shen Lichuan (1):
      hwmon: (pc87360) Use min() macro

Yue Haibing (1):
      hwmon: (sch5627) Remove unused declaration sch56xx_watchdog_unregister()

Yuntao Liu (1):
      hwmon: (ntc_thermistor) fix module autoloading

 .../devicetree/bindings/hwmon/adt7475.yaml         |  37 +-
 .../devicetree/bindings/hwmon/lltc,ltc2978.yaml    |  94 +++
 .../devicetree/bindings/hwmon/ltc2978.txt          |  62 --
 .../devicetree/bindings/hwmon/maxim,max31790.yaml  |  70 ++
 .../bindings/hwmon/sophgo,sg2042-hwmon-mcu.yaml    |  43 +
 Documentation/hwmon/hwmon-kernel-api.rst           |   7 -
 Documentation/hwmon/ina2xx.rst                     |   4 +
 Documentation/hwmon/index.rst                      |   1 +
 Documentation/hwmon/lm92.rst                       |  26 +-
 Documentation/hwmon/max1619.rst                    |   4 -
 Documentation/hwmon/oxp-sensors.rst                |  56 +-
 Documentation/hwmon/sg2042-mcu.rst                 |  78 ++
 MAINTAINERS                                        |   6 +
 drivers/hwmon/Kconfig                              |  26 +-
 drivers/hwmon/Makefile                             |   2 +
 drivers/hwmon/adt7470.c                            |  22 +-
 drivers/hwmon/adt7475.c                            | 130 +++
 drivers/hwmon/adt7x10.c                            |  18 +-
 drivers/hwmon/amc6821.c                            |  30 +-
 drivers/hwmon/aspeed-g6-pwm-tach.c                 |   4 +-
 drivers/hwmon/aspeed-pwm-tacho.c                   |   8 +-
 drivers/hwmon/chipcap2.c                           |  33 +-
 drivers/hwmon/dell-smm-hwmon.c                     |   8 +
 drivers/hwmon/gsc-hwmon.c                          |   1 +
 drivers/hwmon/hwmon.c                              |  18 -
 drivers/hwmon/ina2xx.c                             | 895 +++++++++++---------
 drivers/hwmon/ina3221.c                            |   7 +-
 drivers/hwmon/k10temp.c                            |  26 +-
 drivers/hwmon/lm90.c                               |   7 +-
 drivers/hwmon/lm92.c                               | 457 +++++++----
 drivers/hwmon/lm95234.c                            | 869 ++++++++------------
 drivers/hwmon/lm95245.c                            | 110 +--
 drivers/hwmon/ltc2947-core.c                       |  20 +-
 drivers/hwmon/ltc2992.c                            |  19 +-
 drivers/hwmon/max16065.c                           |  17 +-
 drivers/hwmon/max1619.c                            | 495 ++++++-----
 drivers/hwmon/max1668.c                            | 487 ++++-------
 drivers/hwmon/max6639.c                            |  40 +-
 drivers/hwmon/max6697.c                            | 907 +++++++++------------
 drivers/hwmon/nct6775-platform.c                   |   1 +
 drivers/hwmon/nct7802.c                            |  69 +-
 drivers/hwmon/npcm750-pwm-fan.c                    |   5 +-
 drivers/hwmon/ntc_thermistor.c                     |   1 +
 drivers/hwmon/oxp-sensors.c                        | 301 ++++++-
 drivers/hwmon/pc87360.c                            |   2 +-
 drivers/hwmon/pmbus/max15301.c                     |  92 +--
 drivers/hwmon/pmbus/mpq7932.c                      |   2 +-
 drivers/hwmon/pmbus/pli1209bc.c                    |  26 +-
 drivers/hwmon/pmbus/pmbus.h                        |  10 +
 drivers/hwmon/pmbus/pmbus_core.c                   |  92 ++-
 drivers/hwmon/pmbus/ucd9000.c                      |  64 +-
 drivers/hwmon/pmbus/zl6100.c                       |  66 +-
 drivers/hwmon/pwm-fan.c                            |  11 +-
 drivers/hwmon/sch5636.c                            |   3 +-
 drivers/hwmon/sch56xx-common.h                     |   1 -
 drivers/hwmon/sg2042-mcu.c                         | 388 +++++++++
 drivers/hwmon/sht21.c                              |   5 +-
 drivers/hwmon/stts751.c                            |   2 +-
 drivers/hwmon/surface_temp.c                       | 235 ++++++
 drivers/hwmon/tmp401.c                             |  17 +-
 drivers/hwmon/tmp421.c                             |   7 +-
 drivers/hwmon/tmp464.c                             |  40 +-
 drivers/hwmon/vexpress-hwmon.c                     |   2 +-
 include/linux/hwmon.h                              |   1 -
 include/linux/platform_data/max6697.h              |  33 -
 65 files changed, 3740 insertions(+), 2880 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/hwmon/lltc,ltc2978.yaml
 delete mode 100644 Documentation/devicetree/bindings/hwmon/ltc2978.txt
 create mode 100644 Documentation/devicetree/bindings/hwmon/maxim,max31790.yaml
 create mode 100644 Documentation/devicetree/bindings/hwmon/sophgo,sg2042-hwmon-mcu.yaml
 create mode 100644 Documentation/hwmon/sg2042-mcu.rst
 create mode 100644 drivers/hwmon/sg2042-mcu.c
 create mode 100644 drivers/hwmon/surface_temp.c
 delete mode 100644 include/linux/platform_data/max6697.h

.
Date: Mon, 16 Sep 2024 20:26:08 +0200
From: Amir Goldstein <amir73il@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
	Christian Brauner <brauner@kernel.org>,
	linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	linux-unionfs@vger.kernel.org
Subject: [GIT PULL] overlayfs updates for 6.12

Hi Linus,

Please pull overlayfs updates for 6.12.

This branch has been sitting in linux-next for over a week and
it has gone through the usual overlayfs test routines.

The branch merges cleanly with master branch of the moment.

Thanks,
Amir.

----------------------------------------------------------------
The following changes since commit 3e9bff3bbe1355805de919f688bef4baefbfd436:

  Merge tag 'vfs-6.11-rc6.fixes' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs (2024-08-27 16:57:35 +1200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/overlayfs/vfs.git ovl-update-6.12

for you to fetch changes up to 6c4a5f96450415735c31ed70ff354f0ee5cbf67b:

  ovl: fail if trusted xattrs are needed but caller lacks permission (2024-09-08 15:36:59 +0200)

----------------------------------------------------------------
overlayfs updates for 6.12

- Increase robustness of overlayfs to crashes in the case of underlying
  filesystems that to not guarantee metadata ordering to persistent storage
  (problem was reported with ubifs).

- Deny mount inside container with features that require root privileges
  to work properly, instead of failing operations later.

- Some clarifications to overlayfs documentation.

----------------------------------------------------------------
Amir Goldstein (1):
      ovl: fsync after metadata copy-up

Haifeng Xu (1):
      ovl: don't set the superblock's errseq_t manually

Mike Baynton (1):
      ovl: fail if trusted xattrs are needed but caller lacks permission

Yuriy Belikov (1):
      overlayfs.rst: update metacopy section in overlayfs documentation

 Documentation/filesystems/overlayfs.rst |  7 ++++--
 fs/overlayfs/copy_up.c                  | 43 ++++++++++++++++++++++++++++++---
 fs/overlayfs/params.c                   | 38 +++++++++++++++++++++++++----
 fs/overlayfs/super.c                    | 10 ++------
 4 files changed, 79 insertions(+), 19 deletions(-)

.
Date: Mon, 16 Sep 2024 14:45:35 -0500
From: Dave Kleikamp <dave.kleikamp@oracle.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org,
        "jfs-discussion@lists.sourceforge.net" <jfs-discussion@lists.sourceforge.net>
Subject: [GIT PULL] jfs updates for v6.12

The following changes since commit 3d5f968a177d468cd13568ef901c5be84d83d32b:

   Merge tag 'pwrseq-fixes-for-v6.11-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux (2024-08-23 17:48:27 +0800)

are available in the Git repository at:

   git@github.com:kleikamp/linux-shaggy.git tags/jfs-6.12

for you to fetch changes up to 2b59ffad47db1c46af25ccad157bb3b25147c35c:

   jfs: Fix uninit-value access of new_ea in ea_buffer (2024-09-04 10:28:08 -0500)

----------------------------------------------------------------
A few fixes for jfs

----------------------------------------------------------------
Edward Adam Davis (2):
       jfs: Fix uaf in dbFreeBits
       jfs: check if leafidx greater than num leaves per dmap tree

Jeongjun Park (1):
       jfs: fix out-of-bounds in dbNextAG() and diAlloc()

Remington Brasga (1):
       jfs: UBSAN: shift-out-of-bounds in dbFindBits

Zhao Mengmeng (1):
       jfs: Fix uninit-value access of new_ea in ea_buffer

  fs/jfs/jfs_discard.c | 11 +++++++++--
  fs/jfs/jfs_dmap.c    | 11 +++++++----
  fs/jfs/jfs_imap.c    |  2 +-
  fs/jfs/xattr.c       |  2 ++
  4 files changed, 19 insertions(+), 7 deletions(-)

.
Date: Mon, 16 Sep 2024 17:37:52 -0600
From: Shuah Khan <skhan@linuxfoundation.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: shuah <shuah@kernel.org>, Shuah Khan <skhan@linuxfoundation.org>,
 =?UTF-8?Q?Thomas_Wei=C3=9Fschuh?= <linux@weissschuh.net>,
 Willy Tarreau <w@1wt.eu>, "Paul E. McKenney" <paulmck@kernel.org>,
 linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] nolibc for 6.12-rc1

This is a multi-part message in MIME format.
--------------ZQ3Vjn9X99yKUfzxIDogQqJT
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hi Linus,

Please pull the following nolibc update for Linux 6.12-rc1.

This nolibc update for Linux 6.12-rc1 consists of:

Highlights
----------

* Clang support (including LTO)

Other Changes
-------------

* stdbool.h support
* argc/argv/envp arguments for constructors
* Small #include ordering fix

Test Results:

Passed:
tools/testing/selftests/nolibc/run-tests.sh
tools/testing/selftests/nolibc/run-tests.sh -m user

diff is attached.

thanks,
-- Shuah


----------------------------------------------------------------
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

   Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest tags/linux_kselftest-nolibc-6.12-rc1

for you to fetch changes up to 248f6b935bbd8f7bc211cce2b6fd76be4c449848:

   Merge tag 'nolibc-20240824-for-6.12-1' of https://git.kernel.org/pub/scm/linux/kernel/git/nolibc/linux-nolibc into nolibc (2024-08-27 06:43:34 -0600)

----------------------------------------------------------------
linux_kselftest-nolibc-6.12-rc1

This nolibc update for Linux 6.12-rc1 consists of:

Highlights
----------

* Clang support (including LTO)

Other Changes
-------------

* stdbool.h support
* argc/argv/envp arguments for constructors
* Small #include ordering fix

----------------------------------------------------------------
Shuah Khan (1):
       Merge tag 'nolibc-20240824-for-6.12-1' of https://git.kernel.org/pub/scm/linux/kernel/git/nolibc/linux-nolibc into nolibc

Thomas Weißschuh (21):
       tools/nolibc: include arch.h from string.h
       tools/nolibc: add stdbool.h header
       tools/nolibc: pass argc, argv and envp to constructors
       tools/nolibc: arm: use clang-compatible asm syntax
       tools/nolibc: mips: load current function to $t9
       tools/nolibc: powerpc: limit stack-protector workaround to GCC
       tools/nolibc: compiler: introduce __nolibc_has_attribute()
       tools/nolibc: move entrypoint specifics to compiler.h
       tools/nolibc: compiler: use attribute((naked)) if available
       selftests/nolibc: report failure if no testcase passed
       selftests/nolibc: avoid passing NULL to printf("%s")
       selftests/nolibc: determine $(srctree) first
       selftests/nolibc: add support for LLVM= parameter
       selftests/nolibc: add cc-option compatible with clang cross builds
       selftests/nolibc: run-tests.sh: avoid overwriting CFLAGS_EXTRA
       selftests/nolibc: don't use libgcc when building with clang
       selftests/nolibc: use correct clang target for s390/systemz
       selftests/nolibc: run-tests.sh: allow building through LLVM
       tools/nolibc: crt: mark _start_c() as used
       tools/nolibc: stackprotector: mark implicitly used symbols as used
       tools/nolibc: x86_64: use local label in memcpy/memmove

  tools/include/nolibc/Makefile                |  1 +
  tools/include/nolibc/arch-aarch64.h          |  4 +--
  tools/include/nolibc/arch-arm.h              |  8 +++---
  tools/include/nolibc/arch-i386.h             |  4 +--
  tools/include/nolibc/arch-loongarch.h        |  4 +--
  tools/include/nolibc/arch-mips.h             |  8 ++++--
  tools/include/nolibc/arch-powerpc.h          |  6 ++--
  tools/include/nolibc/arch-riscv.h            |  4 +--
  tools/include/nolibc/arch-s390.h             |  4 +--
  tools/include/nolibc/arch-x86_64.h           |  8 +++---
  tools/include/nolibc/compiler.h              | 24 +++++++++++-----
  tools/include/nolibc/crt.h                   | 25 +++++++++--------
  tools/include/nolibc/nolibc.h                |  3 +-
  tools/include/nolibc/stackprotector.h        |  4 +--
  tools/include/nolibc/stdbool.h               | 16 +++++++++++
  tools/include/nolibc/string.h                |  1 +
  tools/testing/selftests/nolibc/Makefile      | 41 +++++++++++++++++++---------
  tools/testing/selftests/nolibc/nolibc-test.c |  9 +++---
  tools/testing/selftests/nolibc/run-tests.sh  | 16 ++++++++---
  19 files changed, 123 insertions(+), 67 deletions(-)
  create mode 100644 tools/include/nolibc/stdbool.h

----------------------------------------------------------------
--------------ZQ3Vjn9X99yKUfzxIDogQqJT
Content-Type: text/x-patch; charset=UTF-8;
 name="linux_kselftest-nolibc-6.12-rc1.diff"
Content-Disposition: attachment;
 filename="linux_kselftest-nolibc-6.12-rc1.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbm9saWJjL01ha2VmaWxlIGIvdG9vbHMvaW5j
bHVkZS9ub2xpYmMvTWFrZWZpbGUKaW5kZXggZTY5YzI2YWJlMWVhLi5hMWY1NWZiMjRiYjMg
MTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbm9saWJjL01ha2VmaWxlCisrKyBiL3Rvb2xz
L2luY2x1ZGUvbm9saWJjL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBAIGFsbF9maWxlcyA6
PSBcCiAJCXN0YWNrcHJvdGVjdG9yLmggXAogCQlzdGQuaCBcCiAJCXN0ZGFyZy5oIFwKKwkJ
c3RkYm9vbC5oIFwKIAkJc3RkaW50LmggXAogCQlzdGRsaWIuaCBcCiAJCXN0cmluZy5oIFwK
ZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtYWFyY2g2NC5oIGIvdG9v
bHMvaW5jbHVkZS9ub2xpYmMvYXJjaC1hYXJjaDY0LmgKaW5kZXggYjIzYWMxZjA0MDM1Li4w
NmZkZWY3YjI5MWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtYWFy
Y2g2NC5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtYWFyY2g2NC5oCkBAIC0x
NDIsMTMgKzE0MiwxMyBAQAogfSkKIAogLyogc3RhcnR1cCBjb2RlICovCi12b2lkIF9fYXR0
cmlidXRlX18oKHdlYWssIG5vcmV0dXJuLCBvcHRpbWl6ZSgiT3MiLCAib21pdC1mcmFtZS1w
b2ludGVyIikpKSBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3RhcnQodm9pZCkKK3ZvaWQgX19h
dHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4pKSBfX25vbGliY19lbnRyeXBvaW50IF9fbm9f
c3RhY2tfcHJvdGVjdG9yIF9zdGFydCh2b2lkKQogewogCV9fYXNtX18gdm9sYXRpbGUgKAog
CQkibW92IHgwLCBzcFxuIiAgICAgICAgICAvKiBzYXZlIHN0YWNrIHBvaW50ZXIgdG8geDAs
IGFzIGFyZzEgb2YgX3N0YXJ0X2MgKi8KIAkJImFuZCBzcCwgeDAsIC0xNlxuIiAgICAgLyog
c3AgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQgaW4gdGhlIGNhbGxlZSAgICAgICovCiAJCSJi
bCAgX3N0YXJ0X2NcbiIgICAgICAgIC8qIHRyYW5zZmVyIHRvIGMgcnVudGltZSAgICAgICAg
ICAgICAgICAgICAgICAgICAqLwogCSk7Ci0JX19idWlsdGluX3VucmVhY2hhYmxlKCk7CisJ
X19ub2xpYmNfZW50cnlwb2ludF9lcGlsb2d1ZSgpOwogfQogI2VuZGlmIC8qIF9OT0xJQkNf
QVJDSF9BQVJDSDY0X0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2Fy
Y2gtYXJtLmggYi90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLWFybS5oCmluZGV4IGNhZTRh
ZmE3YzFjNy4uNjE4MGZmOTlhYjQzIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL25vbGli
Yy9hcmNoLWFybS5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtYXJtLmgKQEAg
LTE4NSwxNSArMTg1LDE1IEBACiB9KQogCiAvKiBzdGFydHVwIGNvZGUgKi8KLXZvaWQgX19h
dHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4sIG9wdGltaXplKCJPcyIsICJvbWl0LWZyYW1l
LXBvaW50ZXIiKSkpIF9fbm9fc3RhY2tfcHJvdGVjdG9yIF9zdGFydCh2b2lkKQordm9pZCBf
X2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybikpIF9fbm9saWJjX2VudHJ5cG9pbnQgX19u
b19zdGFja19wcm90ZWN0b3IgX3N0YXJ0KHZvaWQpCiB7CiAJX19hc21fXyB2b2xhdGlsZSAo
Ci0JCSJtb3YgJXIwLCBzcFxuIiAgICAgICAgIC8qIHNhdmUgc3RhY2sgcG9pbnRlciB0byAl
cjAsIGFzIGFyZzEgb2YgX3N0YXJ0X2MgKi8KLQkJImFuZCBpcCwgJXIwLCAjLThcbiIgICAg
Lyogc3AgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBpbiB0aGUgY2FsbGVlICAgICAgICAqLwor
CQkibW92IHIwLCBzcFxuIiAgICAgICAgICAvKiBzYXZlIHN0YWNrIHBvaW50ZXIgdG8gJXIw
LCBhcyBhcmcxIG9mIF9zdGFydF9jICovCisJCSJhbmQgaXAsIHIwLCAjLThcbiIgICAgIC8q
IHNwIG11c3QgYmUgOC1ieXRlIGFsaWduZWQgaW4gdGhlIGNhbGxlZSAgICAgICAgKi8KIAkJ
Im1vdiBzcCwgaXBcbiIKIAkJImJsICBfc3RhcnRfY1xuIiAgICAgICAgLyogdHJhbnNmZXIg
dG8gYyBydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCSk7Ci0JX19idWls
dGluX3VucmVhY2hhYmxlKCk7CisJX19ub2xpYmNfZW50cnlwb2ludF9lcGlsb2d1ZSgpOwog
fQogCiAjZW5kaWYgLyogX05PTElCQ19BUkNIX0FSTV9IICovCmRpZmYgLS1naXQgYS90b29s
cy9pbmNsdWRlL25vbGliYy9hcmNoLWkzODYuaCBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2Fy
Y2gtaTM4Ni5oCmluZGV4IDI4YzI2YTAwYTc2Mi4uZmY1YWZjMzViYmQ4IDEwMDY0NAotLS0g
YS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLWkzODYuaAorKysgYi90b29scy9pbmNsdWRl
L25vbGliYy9hcmNoLWkzODYuaApAQCAtMTYyLDcgKzE2Miw3IEBACiAgKiAyKSBUaGUgZGVl
cGVzdCBzdGFjayBmcmFtZSBzaG91bGQgYmUgc2V0IHRvIHplcm8KICAqCiAgKi8KLXZvaWQg
X19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4sIG9wdGltaXplKCJPcyIsICJvbWl0LWZy
YW1lLXBvaW50ZXIiKSkpIF9fbm9fc3RhY2tfcHJvdGVjdG9yIF9zdGFydCh2b2lkKQordm9p
ZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybikpIF9fbm9saWJjX2VudHJ5cG9pbnQg
X19ub19zdGFja19wcm90ZWN0b3IgX3N0YXJ0KHZvaWQpCiB7CiAJX19hc21fXyB2b2xhdGls
ZSAoCiAJCSJ4b3IgICVlYnAsICVlYnBcbiIgICAgICAgLyogemVybyB0aGUgc3RhY2sgZnJh
bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzQsNyArMTc0LDcg
QEAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybiwgb3B0aW1pemUoIk9zIiwg
Im9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub18KIAkJImNhbGwgX3N0YXJ0X2NcbiIgICAg
ICAgICAvKiB0cmFuc2ZlciB0byBjIHJ1bnRpbWUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KIAkJImhsdFxuIiAgICAgICAgICAgICAgICAgICAvKiBlbnN1cmUgaXQgZG9l
cyBub3QgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAkpOwotCV9fYnVp
bHRpbl91bnJlYWNoYWJsZSgpOworCV9fbm9saWJjX2VudHJ5cG9pbnRfZXBpbG9ndWUoKTsK
IH0KIAogI2VuZGlmIC8qIF9OT0xJQkNfQVJDSF9JMzg2X0ggKi8KZGlmZiAtLWdpdCBhL3Rv
b2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtbG9vbmdhcmNoLmggYi90b29scy9pbmNsdWRlL25v
bGliYy9hcmNoLWxvb25nYXJjaC5oCmluZGV4IDNmOGVmOGY4NmMwZi4uZmI1MTk1NDU5NTll
IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLWxvb25nYXJjaC5oCisr
KyBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gtbG9vbmdhcmNoLmgKQEAgLTE0OSwxNCAr
MTQ5LDE0IEBACiAjZW5kaWYKIAogLyogc3RhcnR1cCBjb2RlICovCi12b2lkIF9fYXR0cmli
dXRlX18oKHdlYWssIG5vcmV0dXJuLCBvcHRpbWl6ZSgiT3MiLCAib21pdC1mcmFtZS1wb2lu
dGVyIikpKSBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3RhcnQodm9pZCkKK3ZvaWQgX19hdHRy
aWJ1dGVfXygod2Vhaywgbm9yZXR1cm4pKSBfX25vbGliY19lbnRyeXBvaW50IF9fbm9fc3Rh
Y2tfcHJvdGVjdG9yIF9zdGFydCh2b2lkKQogewogCV9fYXNtX18gdm9sYXRpbGUgKAogCQki
bW92ZSAgICAgICAgICAkYTAsICRzcFxuIiAgICAgICAgIC8qIHNhdmUgc3RhY2sgcG9pbnRl
ciB0byAkYTAsIGFzIGFyZzEgb2YgX3N0YXJ0X2MgKi8KIAkJTE9OR19CU1RSSU5TICIgJHNw
LCAkemVybywgMywgMFxuIiAvKiAkc3AgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQgICAgICAg
ICAgICAgICAgICAgICovCiAJCSJibCAgICAgICAgICAgIF9zdGFydF9jXG4iICAgICAgICAg
LyogdHJhbnNmZXIgdG8gYyBydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAqLwog
CSk7Ci0JX19idWlsdGluX3VucmVhY2hhYmxlKCk7CisJX19ub2xpYmNfZW50cnlwb2ludF9l
cGlsb2d1ZSgpOwogfQogCiAjZW5kaWYgLyogX05PTElCQ19BUkNIX0xPT05HQVJDSF9IICov
CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLW1pcHMuaCBiL3Rvb2xz
L2luY2x1ZGUvbm9saWJjL2FyY2gtbWlwcy5oCmluZGV4IDYyY2M1MGVmMzI4OC4uMTc5MWE4
Y2U1OGRhIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLW1pcHMuaAor
KysgYi90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLW1pcHMuaApAQCAtMTc5LDcgKzE3OSw3
IEBACiB9KQogCiAvKiBzdGFydHVwIGNvZGUsIG5vdGUgdGhhdCBpdCdzIGNhbGxlZCBfX3N0
YXJ0IG9uIE1JUFMgKi8KLXZvaWQgX19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4sIG9w
dGltaXplKCJPcyIsICJvbWl0LWZyYW1lLXBvaW50ZXIiKSkpIF9fbm9fc3RhY2tfcHJvdGVj
dG9yIF9fc3RhcnQodm9pZCkKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4p
KSBfX25vbGliY19lbnRyeXBvaW50IF9fbm9fc3RhY2tfcHJvdGVjdG9yIF9fc3RhcnQodm9p
ZCkKIHsKIAlfX2FzbV9fIHZvbGF0aWxlICgKIAkJIi5zZXQgcHVzaFxuIgpAQCAtMTk0LDEx
ICsxOTQsMTMgQEAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybiwgb3B0aW1p
emUoIk9zIiwgIm9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub18KIAkJImxpICAgICR0MCwg
LThcbiIKIAkJImFuZCAgICRzcCwgJHNwLCAkdDBcbiIgIC8qICRzcCBtdXN0IGJlIDgtYnl0
ZSBhbGlnbmVkICAgICAgICAgICAgICAgICAgICAgKi8KIAkJImFkZGl1ICRzcCwgJHNwLCAt
MTZcbiIgIC8qIHRoZSBjYWxsZWUgZXhwZWN0cyB0byBzYXZlIGEwLi5hMyB0aGVyZSAgICAg
ICAgKi8KLQkJImphbCAgIF9zdGFydF9jXG4iICAgICAgIC8qIHRyYW5zZmVyIHRvIGMgcnVu
dGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJImx1aSAkdDksICVoaShfc3Rh
cnRfYylcbiIgLyogQUJJIHJlcXVpcmVzIGN1cnJlbnQgZnVuY3Rpb24gYWRkcmVzcyBpbiAk
dDkgKi8KKwkJIm9yaSAkdDksICVsbyhfc3RhcnRfYylcbiIKKwkJImphbHIgJHQ5XG4iICAg
ICAgICAgICAgIC8qIHRyYW5zZmVyIHRvIGMgcnVudGltZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KIAkJIiBub3BcbiIgICAgICAgICAgICAgICAgIC8qIGRlbGF5ZWQgc2xvdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAkJIi5zZXQgcG9wXG4iCiAJ
KTsKLQlfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKwlfX25vbGliY19lbnRyeXBvaW50X2Vw
aWxvZ3VlKCk7CiB9CiAKICNlbmRpZiAvKiBfTk9MSUJDX0FSQ0hfTUlQU19IICovCmRpZmYg
LS1naXQgYS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLXBvd2VycGMuaCBiL3Rvb2xzL2lu
Y2x1ZGUvbm9saWJjL2FyY2gtcG93ZXJwYy5oCmluZGV4IGFjMjEyZTYxODViMi4uZWUyZmRi
OGQ2MDFkIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLXBvd2VycGMu
aAorKysgYi90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLXBvd2VycGMuaApAQCAtMTcyLDcg
KzE3Miw3IEBACiAJX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSkKIAotI2lmbmRlZiBfX3Bvd2VycGM2
NF9fCisjaWYgIWRlZmluZWQoX19wb3dlcnBjNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19f
KQogLyogRklYTUU6IEZvciAzMi1iaXQgUG93ZXJQQywgd2l0aCBuZXdlciBnY2MgY29tcGls
ZXJzIChlLmcuIGdjYyAxMy4xLjApLAogICogIm9taXQtZnJhbWUtcG9pbnRlciIgZmFpbHMg
d2l0aCBfX2F0dHJpYnV0ZV9fKChub19zdGFja19wcm90ZWN0b3IpKSBidXQKICAqIHdvcmtz
IHdpdGggX19hdHRyaWJ1dGVfXygoX19vcHRpbWl6ZV9fKCItZm5vLXN0YWNrLXByb3RlY3Rv
ciIpKSkKQEAgLTE4NCw3ICsxODQsNyBAQAogI2VuZGlmIC8qICFfX3Bvd2VycGM2NF9fICov
CiAKIC8qIHN0YXJ0dXAgY29kZSAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3Jl
dHVybiwgb3B0aW1pemUoIk9zIiwgIm9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub19zdGFj
a19wcm90ZWN0b3IgX3N0YXJ0KHZvaWQpCit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIG5v
cmV0dXJuKSkgX19ub2xpYmNfZW50cnlwb2ludCBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3Rh
cnQodm9pZCkKIHsKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjaWYgX0NBTExfRUxGID09IDIK
QEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIG5vcmV0dXJu
LCBvcHRpbWl6ZSgiT3MiLCAib21pdC1mcmFtZS1wb2ludGVyIikpKSBfX25vXwogCQkiYmwg
ICAgIF9zdGFydF9jXG4iICAgICAvKiB0cmFuc2ZlciB0byBjIHJ1bnRpbWUgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KIAkpOwogI2VuZGlmCi0JX19idWlsdGluX3VucmVhY2hhYmxl
KCk7CisJX19ub2xpYmNfZW50cnlwb2ludF9lcGlsb2d1ZSgpOwogfQogCiAjZW5kaWYgLyog
X05PTElCQ19BUkNIX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9u
b2xpYmMvYXJjaC1yaXNjdi5oIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvYXJjaC1yaXNjdi5o
CmluZGV4IDE5MjdjNjQzYzczOS4uODgyN2JmOTM2MjEyIDEwMDY0NAotLS0gYS90b29scy9p
bmNsdWRlL25vbGliYy9hcmNoLXJpc2N2LmgKKysrIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMv
YXJjaC1yaXNjdi5oCkBAIC0xNDAsNyArMTQwLDcgQEAKIH0pCiAKIC8qIHN0YXJ0dXAgY29k
ZSAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybiwgb3B0aW1pemUoIk9z
IiwgIm9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub19zdGFja19wcm90ZWN0b3IgX3N0YXJ0
KHZvaWQpCit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIG5vcmV0dXJuKSkgX19ub2xpYmNf
ZW50cnlwb2ludCBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3RhcnQodm9pZCkKIHsKIAlfX2Fz
bV9fIHZvbGF0aWxlICgKIAkJIi5vcHRpb24gcHVzaFxuIgpAQCAtMTUxLDcgKzE1MSw3IEBA
IHZvaWQgX19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4sIG9wdGltaXplKCJPcyIsICJv
bWl0LWZyYW1lLXBvaW50ZXIiKSkpIF9fbm9fCiAJCSJhbmRpIHNwLCBhMCwgLTE2XG4iICAg
ICAgLyogc3AgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQgICAgICAgICAgICAgICAgICAgICov
CiAJCSJjYWxsIF9zdGFydF9jXG4iICAgICAgICAgLyogdHJhbnNmZXIgdG8gYyBydW50aW1l
ICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJKTsKLQlfX2J1aWx0aW5fdW5yZWFjaGFi
bGUoKTsKKwlfX25vbGliY19lbnRyeXBvaW50X2VwaWxvZ3VlKCk7CiB9CiAKICNlbmRpZiAv
KiBfTk9MSUJDX0FSQ0hfUklTQ1ZfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9u
b2xpYmMvYXJjaC1zMzkwLmggYi90b29scy9pbmNsdWRlL25vbGliYy9hcmNoLXMzOTAuaApp
bmRleCA1ZDYwZmQ0M2Y4ODMuLjJlYzEzZDhiOWEyZCAxMDA2NDQKLS0tIGEvdG9vbHMvaW5j
bHVkZS9ub2xpYmMvYXJjaC1zMzkwLmgKKysrIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvYXJj
aC1zMzkwLmgKQEAgLTEzOSw3ICsxMzksNyBAQAogfSkKIAogLyogc3RhcnR1cCBjb2RlICov
Ci12b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIG5vcmV0dXJuLCBvcHRpbWl6ZSgiT3MiLCAi
b21pdC1mcmFtZS1wb2ludGVyIikpKSBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3RhcnQodm9p
ZCkKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4pKSBfX25vbGliY19lbnRy
eXBvaW50IF9fbm9fc3RhY2tfcHJvdGVjdG9yIF9zdGFydCh2b2lkKQogewogCV9fYXNtX18g
dm9sYXRpbGUgKAogCQkibGdyCSVyMiwgJXIxNVxuIiAgICAgICAgICAvKiBzYXZlIHN0YWNr
IHBvaW50ZXIgdG8gJXIyLCBhcyBhcmcxIG9mIF9zdGFydF9jICovCkBAIC0xNDcsNyArMTQ3
LDcgQEAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybiwgb3B0aW1pemUoIk9z
IiwgIm9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub18KIAkJInhjCTAoOCwlcjE1KSwgMCgl
cjE1KVxuIiAvKiBjbGVhciBiYWNrY2hhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCiAJCSJicmFzbAklcjE0LCBfc3RhcnRfY1xuIiAgICAgLyogdHJhbnNmZXIgdG8g
YyBydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCSk7Ci0JX19idWlsdGlu
X3VucmVhY2hhYmxlKCk7CisJX19ub2xpYmNfZW50cnlwb2ludF9lcGlsb2d1ZSgpOwogfQog
CiBzdHJ1Y3QgczM5MF9tbWFwX2FyZ19zdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5j
bHVkZS9ub2xpYmMvYXJjaC14ODZfNjQuaCBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gt
eDg2XzY0LmgKaW5kZXggNjg2MDlmNDIxOTM0Li4xZTQwNjIwYTJiMzMgMTAwNjQ0Ci0tLSBh
L3Rvb2xzL2luY2x1ZGUvbm9saWJjL2FyY2gteDg2XzY0LmgKKysrIGIvdG9vbHMvaW5jbHVk
ZS9ub2xpYmMvYXJjaC14ODZfNjQuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAgKiAyKSBUaGUg
ZGVlcGVzdCBzdGFjayBmcmFtZSBzaG91bGQgYmUgemVybyAodGhlICVyYnApLgogICoKICAq
Lwotdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBub3JldHVybiwgb3B0aW1pemUoIk9zIiwg
Im9taXQtZnJhbWUtcG9pbnRlciIpKSkgX19ub19zdGFja19wcm90ZWN0b3IgX3N0YXJ0KHZv
aWQpCit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIG5vcmV0dXJuKSkgX19ub2xpYmNfZW50
cnlwb2ludCBfX25vX3N0YWNrX3Byb3RlY3RvciBfc3RhcnQodm9pZCkKIHsKIAlfX2FzbV9f
IHZvbGF0aWxlICgKIAkJInhvciAgJWVicCwgJWVicFxuIiAgICAgICAvKiB6ZXJvIHRoZSBz
dGFjayBmcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTcwLDcgKzE3
MCw3IEBAIHZvaWQgX19hdHRyaWJ1dGVfXygod2Vhaywgbm9yZXR1cm4sIG9wdGltaXplKCJP
cyIsICJvbWl0LWZyYW1lLXBvaW50ZXIiKSkpIF9fbm9fCiAJCSJjYWxsIF9zdGFydF9jXG4i
ICAgICAgICAgLyogdHJhbnNmZXIgdG8gYyBydW50aW1lICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KIAkJImhsdFxuIiAgICAgICAgICAgICAgICAgICAvKiBlbnN1cmUgaXQgZG9l
cyBub3QgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAqLwogCSk7Ci0JX19idWlsdGlu
X3VucmVhY2hhYmxlKCk7CisJX19ub2xpYmNfZW50cnlwb2ludF9lcGlsb2d1ZSgpOwogfQog
CiAjZGVmaW5lIE5PTElCQ19BUkNIX0hBU19NRU1NT1ZFCkBAIC0xOTMsMTAgKzE5MywxMCBA
QCBfX2FzbV9fICgKIAkibW92cSAlcmRpLCAlcmR4XG5cdCIKIAkic3VicSAlcnNpLCAlcmR4
XG5cdCIKIAkiY21wcSAlcmN4LCAlcmR4XG5cdCIKLQkiamIgICAuTGJhY2t3YXJkX2NvcHlc
blx0IgorCSJqYiAgIDFmXG5cdCIKIAkicmVwIG1vdnNiXG5cdCIKIAkicmV0cVxuIgotIi5M
YmFja3dhcmRfY29weToiCisiMToiIC8qIGJhY2t3YXJkIGNvcHkgKi8KIAkibGVhcSAtMSgl
cmRpLCAlcmN4LCAxKSwgJXJkaVxuXHQiCiAJImxlYXEgLTEoJXJzaSwgJXJjeCwgMSksICVy
c2lcblx0IgogCSJzdGRcblx0IgpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9ub2xpYmMv
Y29tcGlsZXIuaCBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2NvbXBpbGVyLmgKaW5kZXggYmVk
ZGMzNjY1ZDY5Li45YmM2YTcwNmEzMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbm9s
aWJjL2NvbXBpbGVyLmgKKysrIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvY29tcGlsZXIuaApA
QCAtNiwyMCArNiwzMCBAQAogI2lmbmRlZiBfTk9MSUJDX0NPTVBJTEVSX0gKICNkZWZpbmUg
X05PTElCQ19DT01QSUxFUl9ICiAKKyNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkKKyMg
IGRlZmluZSBfX25vbGliY19oYXNfYXR0cmlidXRlKGF0dHIpIF9faGFzX2F0dHJpYnV0ZShh
dHRyKQorI2Vsc2UKKyMgIGRlZmluZSBfX25vbGliY19oYXNfYXR0cmlidXRlKGF0dHIpIDAK
KyNlbmRpZgorCisjaWYgX19ub2xpYmNfaGFzX2F0dHJpYnV0ZShuYWtlZCkKKyMgIGRlZmlu
ZSBfX25vbGliY19lbnRyeXBvaW50IF9fYXR0cmlidXRlX18oKG5ha2VkKSkKKyMgIGRlZmlu
ZSBfX25vbGliY19lbnRyeXBvaW50X2VwaWxvZ3VlKCkKKyNlbHNlCisjICBkZWZpbmUgX19u
b2xpYmNfZW50cnlwb2ludCBfX2F0dHJpYnV0ZV9fKChvcHRpbWl6ZSgiT3MiLCAib21pdC1m
cmFtZS1wb2ludGVyIikpKQorIyAgZGVmaW5lIF9fbm9saWJjX2VudHJ5cG9pbnRfZXBpbG9n
dWUoKSBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKQorI2VuZGlmIC8qIF9fbm9saWJjX2hhc19h
dHRyaWJ1dGUobmFrZWQpICovCisKICNpZiBkZWZpbmVkKF9fU1NQX18pIHx8IGRlZmluZWQo
X19TU1BfU1RST05HX18pIHx8IGRlZmluZWQoX19TU1BfQUxMX18pIHx8IGRlZmluZWQoX19T
U1BfRVhQTElDSVRfXykKIAogI2RlZmluZSBfTk9MSUJDX1NUQUNLUFJPVEVDVE9SCiAKICNl
bmRpZiAvKiBkZWZpbmVkKF9fU1NQX18pIC4uLiAqLwogCi0jaWYgZGVmaW5lZChfX2hhc19h
dHRyaWJ1dGUpCi0jICBpZiBfX2hhc19hdHRyaWJ1dGUobm9fc3RhY2tfcHJvdGVjdG9yKQot
IyAgICBkZWZpbmUgX19ub19zdGFja19wcm90ZWN0b3IgX19hdHRyaWJ1dGVfXygobm9fc3Rh
Y2tfcHJvdGVjdG9yKSkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIF9fbm9fc3RhY2tfcHJvdGVj
dG9yIF9fYXR0cmlidXRlX18oKF9fb3B0aW1pemVfXygiLWZuby1zdGFjay1wcm90ZWN0b3Ii
KSkpCi0jICBlbmRpZgorI2lmIF9fbm9saWJjX2hhc19hdHRyaWJ1dGUobm9fc3RhY2tfcHJv
dGVjdG9yKQorIyAgZGVmaW5lIF9fbm9fc3RhY2tfcHJvdGVjdG9yIF9fYXR0cmlidXRlX18o
KG5vX3N0YWNrX3Byb3RlY3RvcikpCiAjZWxzZQogIyAgZGVmaW5lIF9fbm9fc3RhY2tfcHJv
dGVjdG9yIF9fYXR0cmlidXRlX18oKF9fb3B0aW1pemVfXygiLWZuby1zdGFjay1wcm90ZWN0
b3IiKSkpCi0jZW5kaWYgLyogZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpICovCisjZW5kaWYg
LyogX19ub2xpYmNfaGFzX2F0dHJpYnV0ZShub19zdGFja19wcm90ZWN0b3IpICovCiAKICNl
bmRpZiAvKiBfTk9MSUJDX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1
ZGUvbm9saWJjL2NydC5oIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvY3J0LmgKaW5kZXggNDNi
NTUxNDY4YzJhLi5iYmNkNWZkMDk4MDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbm9s
aWJjL2NydC5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL2NydC5oCkBAIC0xMywyMyAr
MTMsMjQgQEAgY29uc3QgdW5zaWduZWQgbG9uZyAqX2F1eHYgX19hdHRyaWJ1dGVfXygod2Vh
aykpOwogc3RhdGljIHZvaWQgX19zdGFja19jaGtfaW5pdCh2b2lkKTsKIHN0YXRpYyB2b2lk
IGV4aXQoaW50KTsKIAotZXh0ZXJuIHZvaWQgKCpjb25zdCBfX3ByZWluaXRfYXJyYXlfc3Rh
cnRbXSkodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHZvaWQgKCpjb25z
dCBfX3ByZWluaXRfYXJyYXlfZW5kW10pKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsK
K2V4dGVybiB2b2lkICgqY29uc3QgX19wcmVpbml0X2FycmF5X3N0YXJ0W10pKGludCwgY2hh
ciAqKiwgY2hhcioqKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gdm9pZCAoKmNv
bnN0IF9fcHJlaW5pdF9hcnJheV9lbmRbXSkoaW50LCBjaGFyICoqLCBjaGFyKiopIF9fYXR0
cmlidXRlX18oKHdlYWspKTsKIAotZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2luaXRfYXJyYXlf
c3RhcnRbXSkodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHZvaWQgKCpj
b25zdCBfX2luaXRfYXJyYXlfZW5kW10pKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsK
K2V4dGVybiB2b2lkICgqY29uc3QgX19pbml0X2FycmF5X3N0YXJ0W10pKGludCwgY2hhciAq
KiwgY2hhcioqKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gdm9pZCAoKmNvbnN0
IF9faW5pdF9hcnJheV9lbmRbXSkoaW50LCBjaGFyICoqLCBjaGFyKiopIF9fYXR0cmlidXRl
X18oKHdlYWspKTsKIAogZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2ZpbmlfYXJyYXlfc3RhcnRb
XSkodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOwogZXh0ZXJuIHZvaWQgKCpjb25zdCBf
X2ZpbmlfYXJyYXlfZW5kW10pKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIAotX19h
dHRyaWJ1dGVfXygod2VhaykpCitfX2F0dHJpYnV0ZV9fKCh3ZWFrLHVzZWQpKQogdm9pZCBf
c3RhcnRfYyhsb25nICpzcCkKIHsKIAlsb25nIGFyZ2M7CiAJY2hhciAqKmFyZ3Y7CiAJY2hh
ciAqKmVudnA7CiAJaW50IGV4aXRjb2RlOwotCXZvaWQgKCogY29uc3QgKmZ1bmMpKHZvaWQp
OworCXZvaWQgKCogY29uc3QgKmN0b3JfZnVuYykoaW50LCBjaGFyICoqLCBjaGFyICoqKTsK
Kwl2b2lkICgqIGNvbnN0ICpkdG9yX2Z1bmMpKHZvaWQpOwogCWNvbnN0IHVuc2lnbmVkIGxv
bmcgKmF1eHY7CiAJLyogc2lsZW5jZSBwb3RlbnRpYWwgd2FybmluZzogY29uZmxpY3Rpbmcg
dHlwZXMgZm9yICdtYWluJyAqLwogCWludCBfbm9saWJjX21haW4oaW50LCBjaGFyICoqLCBj
aGFyICoqKSBfX2FzbV9fICgibWFpbiIpOwpAQCAtNjYsMTYgKzY3LDE2IEBAIHZvaWQgX3N0
YXJ0X2MobG9uZyAqc3ApCiAJCTsKIAlfYXV4diA9IGF1eHY7CiAKLQlmb3IgKGZ1bmMgPSBf
X3ByZWluaXRfYXJyYXlfc3RhcnQ7IGZ1bmMgPCBfX3ByZWluaXRfYXJyYXlfZW5kOyBmdW5j
KyspCi0JCSgqZnVuYykoKTsKLQlmb3IgKGZ1bmMgPSBfX2luaXRfYXJyYXlfc3RhcnQ7IGZ1
bmMgPCBfX2luaXRfYXJyYXlfZW5kOyBmdW5jKyspCi0JCSgqZnVuYykoKTsKKwlmb3IgKGN0
b3JfZnVuYyA9IF9fcHJlaW5pdF9hcnJheV9zdGFydDsgY3Rvcl9mdW5jIDwgX19wcmVpbml0
X2FycmF5X2VuZDsgY3Rvcl9mdW5jKyspCisJCSgqY3Rvcl9mdW5jKShhcmdjLCBhcmd2LCBl
bnZwKTsKKwlmb3IgKGN0b3JfZnVuYyA9IF9faW5pdF9hcnJheV9zdGFydDsgY3Rvcl9mdW5j
IDwgX19pbml0X2FycmF5X2VuZDsgY3Rvcl9mdW5jKyspCisJCSgqY3Rvcl9mdW5jKShhcmdj
LCBhcmd2LCBlbnZwKTsKIAogCS8qIGdvIHRvIGFwcGxpY2F0aW9uICovCiAJZXhpdGNvZGUg
PSBfbm9saWJjX21haW4oYXJnYywgYXJndiwgZW52cCk7CiAKLQlmb3IgKGZ1bmMgPSBfX2Zp
bmlfYXJyYXlfZW5kOyBmdW5jID4gX19maW5pX2FycmF5X3N0YXJ0OykKLQkJKCotLWZ1bmMp
KCk7CisJZm9yIChkdG9yX2Z1bmMgPSBfX2ZpbmlfYXJyYXlfZW5kOyBkdG9yX2Z1bmMgPiBf
X2ZpbmlfYXJyYXlfc3RhcnQ7KQorCQkoKi0tZHRvcl9mdW5jKSgpOwogCiAJZXhpdChleGl0
Y29kZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL25vbGliYy9ub2xpYmMuaCBi
L3Rvb2xzL2luY2x1ZGUvbm9saWJjL25vbGliYy5oCmluZGV4IDk4OWU3MDcyNjNhNC4uOTI0
MzZiMWU0NDQxIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL25vbGliYy9ub2xpYmMuaAor
KysgYi90b29scy9pbmNsdWRlL25vbGliYy9ub2xpYmMuaApAQCAtNzQsNyArNzQsOCBAQAog
ICogICAgICAgICAgICAtSS4uL25vbGliYyAtbyBoZWxsbyBoZWxsby5jIC1sZ2NjCiAgKgog
ICogVGhlIGF2YWlsYWJsZSBzdGFuZGFyZCAoYnV0IGxpbWl0ZWQpIGluY2x1ZGUgZmlsZXMg
YXJlOgotICogICBjdHlwZS5oLCBlcnJuby5oLCBzaWduYWwuaCwgc3RkYXJnLmgsIHN0ZGlv
LmgsIHN0ZGxpYi5oLCBzdHJpbmcuaCwgdGltZS5oCisgKiAgIGN0eXBlLmgsIGVycm5vLmgs
IHNpZ25hbC5oLCBzdGRhcmcuaCwgc3RkYm9vbC5oIHN0ZGlvLmgsIHN0ZGxpYi5oLAorICog
ICBzdHJpbmcuaCwgdGltZS5oCiAgKgogICogSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcg
b25lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNvbXBpbGVyOgogICog
ICBmbG9hdC5oLCBzdGRkZWYuaApkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9ub2xpYmMv
c3RhY2twcm90ZWN0b3IuaCBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL3N0YWNrcHJvdGVjdG9y
LmgKaW5kZXggMTNmMWQwZTYwMzg3Li4xZDBkNTI1OWVjNDEgMTAwNjQ0Ci0tLSBhL3Rvb2xz
L2luY2x1ZGUvbm9saWJjL3N0YWNrcHJvdGVjdG9yLmgKKysrIGIvdG9vbHMvaW5jbHVkZS9u
b2xpYmMvc3RhY2twcm90ZWN0b3IuaApAQCAtMTgsNyArMTgsNyBAQAogICogdHJpZ2dlcmlu
ZyBzdGFjayBwcm90ZWN0b3IgZXJyb3JzIHRoZW1zZWx2ZXMKICAqLwogCi1fX2F0dHJpYnV0
ZV9fKCh3ZWFrLG5vcmV0dXJuLHNlY3Rpb24oIi50ZXh0Lm5vbGliY19zdGFja19jaGsiKSkp
CitfX2F0dHJpYnV0ZV9fKCh3ZWFrLHVzZWQsbm9yZXR1cm4sc2VjdGlvbigiLnRleHQubm9s
aWJjX3N0YWNrX2NoayIpKSkKIHZvaWQgX19zdGFja19jaGtfZmFpbCh2b2lkKQogewogCXBp
ZF90IHBpZDsKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBfX3N0YWNrX2Noa19mYWlsX2xvY2Fs
KHZvaWQpCiAJX19zdGFja19jaGtfZmFpbCgpOwogfQogCi1fX2F0dHJpYnV0ZV9fKCh3ZWFr
LHNlY3Rpb24oIi5kYXRhLm5vbGliY19zdGFja19jaGsiKSkpCitfX2F0dHJpYnV0ZV9fKCh3
ZWFrLHVzZWQsc2VjdGlvbigiLmRhdGEubm9saWJjX3N0YWNrX2NoayIpKSkKIHVpbnRwdHJf
dCBfX3N0YWNrX2Noa19ndWFyZDsKIAogc3RhdGljIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHZv
aWQgX19zdGFja19jaGtfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9u
b2xpYmMvc3RkYm9vbC5oIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvc3RkYm9vbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjBmZWVjZTIyZjE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvdG9vbHMvaW5jbHVkZS9ub2xpYmMvc3RkYm9vbC5oCkBAIC0wLDAg
KzEsMTYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBNSVQg
Ki8KKy8qCisgKiBCb29sZWFuIHR5cGVzIHN1cHBvcnQgZm9yIE5PTElCQworICogQ29weXJp
Z2h0IChDKSAyMDI0IFRob21hcyBXZWnDn3NjaHVoIDxsaW51eEB3ZWlzc3NjaHVoLm5ldD4K
KyAqLworCisjaWZuZGVmIF9OT0xJQkNfU1REQk9PTF9ICisjZGVmaW5lIF9OT0xJQkNfU1RE
Qk9PTF9ICisKKyNkZWZpbmUgYm9vbCBfQm9vbAorI2RlZmluZSB0cnVlIDEKKyNkZWZpbmUg
ZmFsc2UgMAorCisjZGVmaW5lIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIDEKKwor
I2VuZGlmIC8qIF9OT0xJQkNfU1REQk9PTF9IICovCmRpZmYgLS1naXQgYS90b29scy9pbmNs
dWRlL25vbGliYy9zdHJpbmcuaCBiL3Rvb2xzL2luY2x1ZGUvbm9saWJjL3N0cmluZy5oCmlu
ZGV4IGY5YWIyODQyMWU2ZC4uOWVjOWMyNGYzOGMwIDEwMDY0NAotLS0gYS90b29scy9pbmNs
dWRlL25vbGliYy9zdHJpbmcuaAorKysgYi90b29scy9pbmNsdWRlL25vbGliYy9zdHJpbmcu
aApAQCAtNyw2ICs3LDcgQEAKICNpZm5kZWYgX05PTElCQ19TVFJJTkdfSAogI2RlZmluZSBf
Tk9MSUJDX1NUUklOR19ICiAKKyNpbmNsdWRlICJhcmNoLmgiCiAjaW5jbHVkZSAic3RkLmgi
CiAKIHN0YXRpYyB2b2lkICptYWxsb2Moc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS90b29s
cy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3Nl
bGZ0ZXN0cy9ub2xpYmMvTWFrZWZpbGUKaW5kZXggM2ZiYWJhYjQ2OTU4Li44ZGU5OGVhN2Fm
ODAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25vbGliYy9NYWtlZmls
ZQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvTWFrZWZpbGUKQEAgLTEs
MTkgKzEsMjEgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICMgTWFr
ZWZpbGUgZm9yIG5vbGliYyB0ZXN0cwotaW5jbHVkZSAuLi8uLi8uLi9zY3JpcHRzL01ha2Vm
aWxlLmluY2x1ZGUKLWluY2x1ZGUgLi4vLi4vLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrCi0j
IFdlIG5lZWQgdGhpcyBmb3IgdGhlICJjYy1vcHRpb24iIG1hY3JvLgotaW5jbHVkZSAuLi8u
Li8uLi9idWlsZC9CdWlsZC5pbmNsdWRlCisjIHdlJ3JlIGluICIuLi4vdG9vbHMvdGVzdGlu
Zy9zZWxmdGVzdHMvbm9saWJjIgoraWZlcSAoJChzcmN0cmVlKSwpCitzcmN0cmVlIDo9ICQo
cGF0c3Vic3QgJS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8sJSwkKGRpciAkKENVUkRJUikp
KQorZW5kaWYKKworaW5jbHVkZSAkKHNyY3RyZWUpL3Rvb2xzL3NjcmlwdHMvdXRpbGl0aWVz
Lm1haworIyBXZSBuZWVkIHRoaXMgZm9yIHRoZSAiX19jYy1vcHRpb24iIG1hY3JvLgoraW5j
bHVkZSAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUuY29tcGlsZXIKIAogaWZuZXEgKCQo
TyksKQogaWZuZXEgKCQoY2FsbCBpcy1hYnNvbHV0ZSwkKE8pKSx5KQogJChlcnJvciBPbmx5
IGFic29sdXRlIE89IHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZCkKIGVuZGlmCi1lbmRpZgot
Ci0jIHdlJ3JlIGluICIuLi4vdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbm9saWJjIgotaWZl
cSAoJChzcmN0cmVlKSwpCi1zcmN0cmVlIDo9ICQocGF0c3Vic3QgJS90b29scy90ZXN0aW5n
L3NlbGZ0ZXN0cy8sJSwkKGRpciAkKENVUkRJUikpKQorb2JqdHJlZSA6PSAkKE8pCitlbHNl
CitvYmp0cmVlID89ICQoc3JjdHJlZSkKIGVuZGlmCiAKIGlmZXEgKCQoQVJDSCksKQpAQCAt
MjEsNyArMjMsNyBAQCBpbmNsdWRlICQoc3JjdHJlZSkvc2NyaXB0cy9zdWJhcmNoLmluY2x1
ZGUKIEFSQ0ggPSAkKFNVQkFSQ0gpCiBlbmRpZgogCi1vYmp0cmVlID89ICQoc3JjdHJlZSkK
K2NjLW9wdGlvbiA9ICQoY2FsbCBfX2NjLW9wdGlvbiwgJChDQyksJChDTEFOR19DUk9TU19G
TEFHUyksJCgxKSwkKDIpKQogCiAjIFhBUkNIIGV4dGVuZHMgdGhlIGtlcm5lbCdzIEFSQ0gg
d2l0aCBhIGZldyB2YXJpYW50cyBvZiB0aGUgc2FtZQogIyBhcmNoaXRlY3R1cmUgdGhhdCBv
bmx5IGRpZmZlciBieSB0aGUgY29uZmlndXJhdGlvbiwgdGhlIHRvb2xjaGFpbgpAQCAtMTU1
LDkgKzE1NywyMiBAQCBDRkxBR1MgID89IC1PcyAtZm5vLWlkZW50IC1mbm8tYXN5bmNocm9u
b3VzLXVud2luZC10YWJsZXMgLXN0ZD1jODkgLVcgLVdhbGwgLVdleAogCQkkKENGTEFHU18k
KFhBUkNIKSkgJChDRkxBR1NfU1RBQ0tQUk9URUNUT1IpICQoQ0ZMQUdTX0VYVFJBKQogTERG
TEFHUyA6PQogCitMSUJHQ0MgOj0gLWxnY2MKKworaWZuZXEgKCQoTExWTSksKQorIyBOb3Qg
bmVlZGVkIGZvciBjbGFuZworTElCR0NDIDo9CitlbmRpZgorCisjIE1vZGlmeSBDRkxBR1Mg
YmFzZWQgb24gTExWTT0KK2luY2x1ZGUgJChzcmN0cmVlKS90b29scy9zY3JpcHRzL01ha2Vm
aWxlLmluY2x1ZGUKKworIyBHQ0MgdXNlcyAiczM5MCIsIGNsYW5nICJzeXN0ZW16IgorQ0xB
TkdfQ1JPU1NfRkxBR1MgOj0gJChzdWJzdCAtLXRhcmdldD1zMzkwLWxpbnV4LC0tdGFyZ2V0
PXN5c3RlbXotbGludXgsJChDTEFOR19DUk9TU19GTEFHUykpCisKIFJFUE9SVCAgPz0gYXdr
ICcvXFtPS1xdW1xyXSokJC97cCsrfSAvXFtGQUlMXF1bXHJdKiQkL3tpZiAoIWYpIHByaW50
ZigiXG4iKTsgZisrOyBwcmludDt9IC9cW1NLSVBQRURcXVtccl0qJCQve3MrK30gXAogCQlF
TkR7IHByaW50ZigiXG4lM2QgdGVzdChzKTogJTNkIHBhc3NlZCwgJTNkIHNraXBwZWQsICUz
ZCBmYWlsZWQgPT4gc3RhdHVzOiAiLCBwK3MrZiwgcCwgcywgZik7IFwKLQkJaWYgKGYpIHBy
aW50ZigiZmFpbHVyZVxuIik7IGVsc2UgaWYgKHMpIHByaW50Zigid2FybmluZ1xuIik7IGVs
c2UgcHJpbnRmKCJzdWNjZXNzXG4iKTs7IFwKKwkJaWYgKGYgfHwgIXApIHByaW50ZigiZmFp
bHVyZVxuIik7IGVsc2UgaWYgKHMpIHByaW50Zigid2FybmluZ1xuIik7IGVsc2UgcHJpbnRm
KCJzdWNjZXNzXG4iKTs7IFwKIAkJcHJpbnRmKCJcblNlZSBhbGwgcmVzdWx0cyBpbiAlc1xu
IiwgQVJHVlsxXSk7IH0nCiAKIGhlbHA6CkBAIC0yMDQsMTEgKzIxOSwxMSBAQCBzeXNyb290
LyQoQVJDSCkvaW5jbHVkZToKIGlmbmVxICgkKE5PTElCQ19TWVNST09UKSwwKQogbm9saWJj
LXRlc3Q6IG5vbGliYy10ZXN0LmMgbm9saWJjLXRlc3QtbGlua2FnZS5jIHN5c3Jvb3QvJChB
UkNIKS9pbmNsdWRlCiAJJChRVUlFVF9DQykkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAt
byAkQCBcCi0JICAtbm9zdGRsaWIgLW5vc3RkaW5jIC1zdGF0aWMgLUlzeXNyb290LyQoQVJD
SCkvaW5jbHVkZSBub2xpYmMtdGVzdC5jIG5vbGliYy10ZXN0LWxpbmthZ2UuYyAtbGdjYwor
CSAgLW5vc3RkbGliIC1ub3N0ZGluYyAtc3RhdGljIC1Jc3lzcm9vdC8kKEFSQ0gpL2luY2x1
ZGUgbm9saWJjLXRlc3QuYyBub2xpYmMtdGVzdC1saW5rYWdlLmMgJChMSUJHQ0MpCiBlbHNl
CiBub2xpYmMtdGVzdDogbm9saWJjLXRlc3QuYyBub2xpYmMtdGVzdC1saW5rYWdlLmMKIAkk
KFFVSUVUX0NDKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIFwKLQkgIC1ub3N0
ZGxpYiAtc3RhdGljIC1pbmNsdWRlICQoc3JjdHJlZSkvdG9vbHMvaW5jbHVkZS9ub2xpYmMv
bm9saWJjLmggbm9saWJjLXRlc3QuYyBub2xpYmMtdGVzdC1saW5rYWdlLmMgLWxnY2MKKwkg
IC1ub3N0ZGxpYiAtc3RhdGljIC1pbmNsdWRlICQoc3JjdHJlZSkvdG9vbHMvaW5jbHVkZS9u
b2xpYmMvbm9saWJjLmggbm9saWJjLXRlc3QuYyBub2xpYmMtdGVzdC1saW5rYWdlLmMgJChM
SUJHQ0MpCiBlbmRpZgogCiBsaWJjLXRlc3Q6IG5vbGliYy10ZXN0LmMgbm9saWJjLXRlc3Qt
bGlua2FnZS5jCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMv
bm9saWJjLXRlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25vbGliYy9ub2xpYmMt
dGVzdC5jCmluZGV4IDA5M2QwNTEyZjRjNS4uNmZiYTcwMjVjNWUzIDEwMDY0NAotLS0gYS90
b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvbm9saWJjLXRlc3QuYworKysgYi90b29s
cy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvbm9saWJjLXRlc3QuYwpAQCAtNTQyLDcgKzU0
Miw3IEBAIGludCBleHBlY3Rfc3RyenIoY29uc3QgY2hhciAqZXhwciwgaW50IGxsZW4pCiB7
CiAJaW50IHJldCA9IDA7CiAKLQlsbGVuICs9IHByaW50ZigiID0gPCVzPiAiLCBleHByKTsK
KwlsbGVuICs9IHByaW50ZigiID0gPCVzPiAiLCBleHByID8gZXhwciA6ICIobnVsbCkiKTsK
IAlpZiAoZXhwcikgewogCQlyZXQgPSAxOwogCQlyZXN1bHQobGxlbiwgRkFJTCk7CkBAIC01
NjEsNyArNTYxLDcgQEAgaW50IGV4cGVjdF9zdHJueihjb25zdCBjaGFyICpleHByLCBpbnQg
bGxlbikKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWxsZW4gKz0gcHJpbnRmKCIgPSA8JXM+ICIs
IGV4cHIpOworCWxsZW4gKz0gcHJpbnRmKCIgPSA8JXM+ICIsIGV4cHIgPyBleHByIDogIihu
dWxsKSIpOwogCWlmICghZXhwcikgewogCQlyZXQgPSAxOwogCQlyZXN1bHQobGxlbiwgRkFJ
TCk7CkBAIC02ODYsOSArNjg2LDEwIEBAIHN0YXRpYyB2b2lkIGNvbnN0cnVjdG9yMSh2b2lk
KQogfQogCiBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpCi1zdGF0aWMgdm9pZCBjb25z
dHJ1Y3RvcjIodm9pZCkKK3N0YXRpYyB2b2lkIGNvbnN0cnVjdG9yMihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YsIGNoYXIgKiplbnZwKQogewotCWNvbnN0cnVjdG9yX3Rlc3RfdmFsdWUgKj0g
MjsKKwlpZiAoYXJnYyAmJiBhcmd2ICYmIGVudnApCisJCWNvbnN0cnVjdG9yX3Rlc3RfdmFs
dWUgKj0gMjsKIH0KIAogaW50IHJ1bl9zdGFydHVwKGludCBtaW4sIGludCBtYXgpCmRpZmYg
LS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvcnVuLXRlc3RzLnNoIGIv
dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbm9saWJjL3J1bi10ZXN0cy5zaAppbmRleCAwNDQ2
ZTYzMjZhNDAuLmU3ZWNkYTRhZTc5NiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxm
dGVzdHMvbm9saWJjL3J1bi10ZXN0cy5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0
cy9ub2xpYmMvcnVuLXRlc3RzLnNoCkBAIC0xNSwxMCArMTUsMTEgQEAgZG93bmxvYWRfbG9j
YXRpb249IiR7Y2FjaGVfZGlyfS9jcm9zc3Rvb2xzLyIKIGJ1aWxkX2xvY2F0aW9uPSIkKHJl
YWxwYXRoICIke2NhY2hlX2Rpcn0iL25vbGliYy10ZXN0cy8pIgogcGVyZm9ybV9kb3dubG9h
ZD0wCiB0ZXN0X21vZGU9c3lzdGVtCi1DRkxBR1NfRVhUUkE9Ii1XZXJyb3IiCit3ZXJyb3I9
MQorbGx2bT0KIGFyY2hzPSJpMzg2IHg4Nl82NCBhcm02NCBhcm0gbWlwczMybGUgbWlwczMy
YmUgcHBjIHBwYzY0IHBwYzY0bGUgcmlzY3YgczM5MCBsb29uZ2FyY2giCiAKLVRFTVA9JChn
ZXRvcHQgLW8gJ2o6ZDpjOmI6YTptOnBlaCcgLW4gIiQwIiAtLSAiJEAiKQorVEVNUD0kKGdl
dG9wdCAtbyAnajpkOmM6YjphOm06cGVsaCcgLW4gIiQwIiAtLSAiJEAiKQogCiBldmFsIHNl
dCAtLSAiJFRFTVAiCiB1bnNldCBURU1QCkBAIC00Miw2ICs0Myw3IEBAIE9wdGlvbnM6CiAg
LWIgW0RJUl0gICAgICAgQnVpbGQgbG9jYXRpb24gKGRlZmF1bHQ6ICR7YnVpbGRfbG9jYXRp
b259KQogIC1tIFtNT0RFXSAgICAgIFRlc3QgbW9kZSB1c2VyL3N5c3RlbSAoZGVmYXVsdDog
JHt0ZXN0X21vZGV9KQogIC1lICAgICAgICAgICAgIERpc2FibGUgLVdlcnJvcgorIC1sICAg
ICAgICAgICAgIEJ1aWxkIHdpdGggTExWTS9jbGFuZwogRU9GCiB9CiAKQEAgLTY5LDcgKzcx
LDEwIEBAIHdoaWxlIHRydWU7IGRvCiAJCQl0ZXN0X21vZGU9IiQyIgogCQkJc2hpZnQgMjsg
Y29udGludWUgOzsKIAkJJy1lJykKLQkJCUNGTEFHU19FWFRSQT0iIgorCQkJd2Vycm9yPTAK
KwkJCXNoaWZ0OyBjb250aW51ZSA7OworCQknLWwnKQorCQkJbGx2bT0xCiAJCQlzaGlmdDsg
Y29udGludWUgOzsKIAkJJy1oJykKIAkJCXByaW50X3VzYWdlCkBAIC0xNDAsNyArMTQ1LDEw
IEBAIHRlc3RfYXJjaCgpIHsKIAljdF9hYmk9JChjcm9zc3Rvb2xfYWJpICIkMSIpCiAJY3Jv
c3NfY29tcGlsZT0kKHJlYWxwYXRoICIke2Rvd25sb2FkX2xvY2F0aW9ufWdjYy0ke2Nyb3Nz
dG9vbF92ZXJzaW9ufS1ub2xpYmMvJHtjdF9hcmNofS0ke2N0X2FiaX0vYmluLyR7Y3RfYXJj
aH0tJHtjdF9hYml9LSIpCiAJYnVpbGRfZGlyPSIke2J1aWxkX2xvY2F0aW9ufS8ke2FyY2h9
IgotCU1BS0U9KG1ha2UgLWoiJHtucHJvY30iIFhBUkNIPSIke2FyY2h9IiBDUk9TU19DT01Q
SUxFPSIke2Nyb3NzX2NvbXBpbGV9IiBPPSIke2J1aWxkX2Rpcn0iKQorCWlmIFsgIiR3ZXJy
b3IiIC1uZSAwIF07IHRoZW4KKwkJQ0ZMQUdTX0VYVFJBPSIkQ0ZMQUdTX0VYVFJBIC1XZXJy
b3IiCisJZmkKKwlNQUtFPShtYWtlIC1qIiR7bnByb2N9IiBYQVJDSD0iJHthcmNofSIgQ1JP
U1NfQ09NUElMRT0iJHtjcm9zc19jb21waWxlfSIgTExWTT0iJHtsbHZtfSIgTz0iJHtidWls
ZF9kaXJ9IikKIAogCW1rZGlyIC1wICIkYnVpbGRfZGlyIgogCWlmIFsgIiR0ZXN0X21vZGUi
ID0gInN5c3RlbSIgXSAmJiBbICEgLWYgIiR7YnVpbGRfZGlyfS8uY29uZmlnIiBdOyB0aGVu
Cg==

--------------ZQ3Vjn9X99yKUfzxIDogQqJT--

.
Date: Mon, 16 Sep 2024 18:13:16 -0600
From: Shuah Khan <skhan@linuxfoundation.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: shuah <shuah@kernel.org>, Shuah Khan <skhan@linuxfoundation.org>,
 linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] Kselftest update for Linux 6.12-rc1

This is a multi-part message in MIME format.
--------------CreUzoFYiIuW8Ze14BFG3Ot7
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi Linus,

Please pull the following kselftest next update for Linux 6.12-rc1.

This kselftest update for Linux 6.12-rc1 consists of:

-- test coverage for dup_fd() failure handling in unshare_fd()
-- new selftest for the acct() syscall
-- basic uprobe testcase
-- several small fixes and cleanups to existing tests
-- user and strscpy removal as they became kunit tests
-- fixes to build failures and warnings

diff is attached.

thanks,
-- Shuah

----------------------------------------------------------------
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

   Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest tags/linux_kselftest-next-6.12-rc1

for you to fetch changes up to a0474b8d5974e142461ac7584c996feea167bcc1:

   selftests: kselftest: Use strerror() on nolibc (2024-09-11 09:52:33 -0600)

----------------------------------------------------------------
linux_kselftest-next-6.12-rc1

This kselftest update for Linux 6.12-rc1 consists of:

-- test coverage for dup_fd() failure handling in unshare_fd()
-- new selftest for the acct() syscall
-- basic uprobe testcase
-- several small fixes and cleanups to existing tests
-- user and strscpy removal as they became kunit tests
-- fixes to build failures and warnings

----------------------------------------------------------------
Abdulrasaq Lawani (1):
       selftest: acct: Add selftest for the acct() syscall

Abhinav Jain (1):
       selftests: filesystems: fix warn_unused_result build warnings

Al Viro (1):
       selftests:core: test coverage for dup_fd() failure handling in unshare_fd()

Anders Roxell (2):
       selftests: rust: config: add trailing newline
       selftests: rust: config: disable GCC_PLUGINS

Chang Yu (1):
       selftests/exec: Fix grammar in an error message.

Masahiro Yamada (2):
       selftests: harness: remove unneeded __constructor_order_last()
       selftests: harness: rename __constructor_order for clarification

Masami Hiramatsu (Google) (3):
       selftests/uprobes: Add a basic uprobe testcase
       selftests/ftrace: Add required dependency for kprobe tests
       selftests/ftrace: Fix eventfs ownership testcase to find mount point

Muhammad Usama Anjum (3):
       selftests: tpm2: redirect python unittest logs to stdout
       selftests: user: remove user suite
       selftests: lib: remove strscpy test

Piotr Zalewski (1):
       kselftest: timers: Fix const correctness

Shreeya Patel (1):
       kselftest: cpufreq: Add RTC wakeup alarm

Shuah Khan (1):
       selftests:resctrl: Fix build failure on archs without __cpuid_count()

Steven Rostedt (Google) (2):
       tracing/selftests: Run the ownership test twice
       selftests/ftrace: Fix test to handle both old and new kernels

zhang jiao (2):
       selftests/timers: Remove unused NSEC_PER_SEC macro
       selftests: kselftest: Use strerror() on nolibc

  tools/testing/selftests/Makefile                   |  2 +-
  tools/testing/selftests/acct/.gitignore            |  3 +
  tools/testing/selftests/acct/Makefile              |  5 ++
  tools/testing/selftests/acct/acct_syscall.c        | 78 ++++++++++++++++++
  tools/testing/selftests/core/Makefile              |  2 +-
  tools/testing/selftests/core/unshare_test.c        | 94 ++++++++++++++++++++++
  tools/testing/selftests/cpufreq/cpufreq.sh         | 15 ++++
  tools/testing/selftests/cpufreq/main.sh            | 13 ++-
  .../drivers/s390x/uvdevice/test_uvdevice.c         |  6 --
  tools/testing/selftests/exec/execveat.c            |  2 +-
  .../filesystems/statmount/statmount_test_ns.c      |  7 +-
  .../ftrace/test.d/00basic/test_ownership.tc        | 46 +++++++----
  .../ftrace/test.d/dynevent/add_remove_uprobe.tc    | 26 ++++++
  .../ftrace/test.d/ftrace/func_set_ftrace_file.tc   |  9 ++-
  .../ftrace/test.d/kprobe/kprobe_args_char.tc       |  2 +-
  .../ftrace/test.d/kprobe/kprobe_args_string.tc     |  2 +-
  tools/testing/selftests/hid/hid_bpf.c              |  6 --
  tools/testing/selftests/kselftest.h                | 10 +--
  tools/testing/selftests/kselftest_harness.h        | 18 +----
  tools/testing/selftests/lib/Makefile               |  3 +-
  tools/testing/selftests/lib/config                 |  1 -
  tools/testing/selftests/lib/strscpy.sh             |  3 -
  tools/testing/selftests/resctrl/cat_test.c         |  7 +-
  tools/testing/selftests/rtc/rtctest.c              |  7 --
  tools/testing/selftests/rust/config                |  3 +-
  tools/testing/selftests/timers/change_skew.c       |  3 -
  tools/testing/selftests/timers/skew_consistency.c  |  2 -
  tools/testing/selftests/timers/threadtest.c        |  4 +-
  tools/testing/selftests/tpm2/test_async.sh         |  2 +-
  tools/testing/selftests/tpm2/test_smoke.sh         |  2 +-
  tools/testing/selftests/tpm2/test_space.sh         |  2 +-
  tools/testing/selftests/user/Makefile              |  9 ---
  tools/testing/selftests/user/config                |  1 -
  tools/testing/selftests/user/test_user_copy.sh     | 18 -----
  34 files changed, 302 insertions(+), 111 deletions(-)
  create mode 100644 tools/testing/selftests/acct/.gitignore
  create mode 100644 tools/testing/selftests/acct/Makefile
  create mode 100644 tools/testing/selftests/acct/acct_syscall.c
  create mode 100644 tools/testing/selftests/core/unshare_test.c
  create mode 100644 tools/testing/selftests/ftrace/test.d/dynevent/add_remove_uprobe.tc
  delete mode 100755 tools/testing/selftests/lib/strscpy.sh
  delete mode 100644 tools/testing/selftests/user/Makefile
  delete mode 100644 tools/testing/selftests/user/config
  delete mode 100755 tools/testing/selftests/user/test_user_copy.sh
----------------------------------------------------------------
--------------CreUzoFYiIuW8Ze14BFG3Ot7
Content-Type: text/x-patch; charset=UTF-8;
 name="linux_kselftest-next-6.12-rc1.diff"
Content-Disposition: attachment; filename="linux_kselftest-next-6.12-rc1.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMv
dGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKaW5kZXggYmM4ZmU5ZThmN2YyLi5mNTFmY2Nl
YjQ1ZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCisr
KyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAog
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorVEFSR0VUUyArPSBhY2N0CiBU
QVJHRVRTICs9IGFsc2EKIFRBUkdFVFMgKz0gYW1kLXBzdGF0ZQogVEFSR0VUUyArPSBhcm02
NApAQCAtMTA3LDcgKzEwOCw2IEBAIFRBUkdFVFMgKz0gdG1wZnMKIFRBUkdFVFMgKz0gdHBt
MgogVEFSR0VUUyArPSB0dHkKIFRBUkdFVFMgKz0gdWV2ZW50Ci1UQVJHRVRTICs9IHVzZXIK
IFRBUkdFVFMgKz0gdXNlcl9ldmVudHMKIFRBUkdFVFMgKz0gdkRTTwogVEFSR0VUUyArPSBt
bQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWNjdC8uZ2l0aWdub3Jl
IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWNjdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2U3OGFhYzE5MDM4Ci0tLSAvZGV2L251
bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWNjdC8uZ2l0aWdub3JlCkBAIC0w
LDAgKzEsMyBAQAorYWNjdF9zeXNjYWxsCitjb25maWcKK3Byb2Nlc3NfbG9nClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVz
dHMvYWNjdC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FjY3QvTWFrZWZp
bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ZTAyNTA5OWNm
NjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hY2N0L01h
a2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorVEVTVF9HRU5fUFJPR1MgOj0gYWNjdF9zeXNjYWxsCitDRkxBR1MgKz0gLVdhbGwK
KworaW5jbHVkZSAuLi9saWIubWsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hY2N0L2FjY3Rfc3lzY2FsbC5jIGIv
dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWNjdC9hY2N0X3N5c2NhbGwuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU0NGU4ZmUxZjRhMwotLS0gL2Rldi9u
dWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FjY3QvYWNjdF9zeXNjYWxsLmMK
QEAgLTAsMCArMSw3OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK
KworLyoga3NlbGZ0ZXN0IGZvciBhY2N0KCkgc3lzdGVtIGNhbGwKKyAqICBUaGUgYWNjdCgp
IHN5c3RlbSBjYWxsIGVuYWJsZXMgb3IgZGlzYWJsZXMgcHJvY2VzcyBhY2NvdW50aW5nLgor
ICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgIi4uL2tz
ZWxmdGVzdC5oIgorCitpbnQgbWFpbih2b2lkKQoreworCWNoYXIgZmlsZW5hbWVbXSA9ICJw
cm9jZXNzX2xvZyI7CisJRklMRSAqZnA7CisJcGlkX3QgY2hpbGRfcGlkOworCWludCBzejsK
KworCS8vIFNldHRpbmcgdXAga3NlbGZ0ZXN0IGZyYW1ld29yaworCWtzZnRfcHJpbnRfaGVh
ZGVyKCk7CisJa3NmdF9zZXRfcGxhbigxKTsKKworCS8vIENoZWNrIGlmIHRlc3QgaXMgcnVu
IGEgcm9vdAorCWlmIChnZXRldWlkKCkpIHsKKwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCJU
aGlzIHRlc3QgbmVlZHMgcm9vdCB0byBydW4hXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJ
Ly8gQ3JlYXRlIGZpbGUgdG8gbG9nIGNsb3NlZCBwcm9jZXNzZXMKKwlmcCA9IGZvcGVuKGZp
bGVuYW1lLCAidyIpOworCisJaWYgKCFmcCkgeworCQlrc2Z0X3Rlc3RfcmVzdWx0X2Vycm9y
KCIlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCWtzZnRfZmluaXNoZWQoKTsKKwkJcmV0
dXJuIDE7CisJfQorCisJYWNjdChmaWxlbmFtZSk7CisKKwkvLyBIYW5kbGUgZXJyb3IgY29u
ZGl0aW9ucworCWlmIChlcnJubykgeworCQlrc2Z0X3Rlc3RfcmVzdWx0X2Vycm9yKCIlcy5c
biIsIHN0cmVycm9yKGVycm5vKSk7CisJCWZjbG9zZShmcCk7CisJCWtzZnRfZmluaXNoZWQo
KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLy8gQ3JlYXRlIGNoaWxkIHByb2Nlc3MgYW5kIHdh
aXQgZm9yIGl0IHRvIHRlcm1pbmF0ZS4KKworCWNoaWxkX3BpZCA9IGZvcmsoKTsKKworCWlm
IChjaGlsZF9waWQgPCAwKSB7CisJCWtzZnRfdGVzdF9yZXN1bHRfZXJyb3IoIkNyZWF0aW5n
IGEgY2hpbGQgcHJvY2VzcyB0byBsb2cgZmFpbGVkXG4iKTsKKwkJYWNjdChOVUxMKTsKKwkJ
cmV0dXJuIDE7CisJfSBlbHNlIGlmIChjaGlsZF9waWQgPiAwKSB7CisJCXdhaXQoTlVMTCk7
CisJCWZzZWVrKGZwLCAwTCwgU0VFS19FTkQpOworCQlzeiA9IGZ0ZWxsKGZwKTsKKworCQlh
Y2N0KE5VTEwpOworCisJCWlmIChzeiA8PSAwKSB7CisJCQlrc2Z0X3Rlc3RfcmVzdWx0X2Zh
aWwoIlRlcm1pbmF0ZWQgY2hpbGQgcHJvY2VzcyBub3QgbG9nZ2VkXG4iKTsKKwkJCWtzZnRf
ZXhpdF9mYWlsKCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWtzZnRfdGVzdF9yZXN1bHRf
cGFzcygiU3VjY2Vzc2Z1bGx5IGxvZ2dlZCB0ZXJtaW5hdGVkIHByb2Nlc3MuXG4iKTsKKwkJ
ZmNsb3NlKGZwKTsKKwkJa3NmdF9leGl0X3Bhc3MoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ
cmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jb3Jl
L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY29yZS9NYWtlZmlsZQppbmRl
eCBjZTI2MmQwOTcyNjkuLjhlOTlmODdmNWQ3YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGlu
Zy9zZWxmdGVzdHMvY29yZS9NYWtlZmlsZQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0
cy9jb3JlL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMC1vbmx5CiBDRkxBR1MgKz0gLWcgJChLSERSX0lOQ0xVREVTKQogCi1U
RVNUX0dFTl9QUk9HUyA6PSBjbG9zZV9yYW5nZV90ZXN0CitURVNUX0dFTl9QUk9HUyA6PSBj
bG9zZV9yYW5nZV90ZXN0IHVuc2hhcmVfdGVzdAogCiBpbmNsdWRlIC4uL2xpYi5tawogCmRp
ZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jb3JlL3Vuc2hhcmVfdGVzdC5j
IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY29yZS91bnNoYXJlX3Rlc3QuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdmZWM5ZGZiMWIwZQotLS0gL2Rl
di9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2NvcmUvdW5zaGFyZV90ZXN0
LmMKQEAgLTAsMCArMSw5NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW1p
dHMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNjYWxs
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Cisj
aW5jbHVkZSA8bGludXgvY2xvc2VfcmFuZ2UuaD4KKworI2luY2x1ZGUgIi4uL2tzZWxmdGVz
dF9oYXJuZXNzLmgiCisjaW5jbHVkZSAiLi4vY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCIK
KworVEVTVCh1bnNoYXJlX0VNRklMRSkKK3sKKwlwaWRfdCBwaWQ7CisJaW50IHN0YXR1czsK
KwlzdHJ1Y3QgX19jbG9uZV9hcmdzIGFyZ3MgPSB7CisJCS5mbGFncyA9IENMT05FX0ZJTEVT
LAorCQkuZXhpdF9zaWduYWwgPSBTSUdDSExELAorCX07CisJaW50IGZkOworCXNzaXplX3Qg
biwgbjI7CisJc3RhdGljIGNoYXIgYnVmWzUxMl0sIGJ1ZjJbNTEyXTsKKwlzdHJ1Y3Qgcmxp
bWl0IHJsaW1pdDsKKwlpbnQgbnJfb3BlbjsKKworCWZkID0gb3BlbigiL3Byb2Mvc3lzL2Zz
L25yX29wZW4iLCBPX1JEV1IpOworCUFTU0VSVF9HRShmZCwgMCk7CisKKwluID0gcmVhZChm
ZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJQVNTRVJUX0dUKG4sIDApOworCUFTU0VSVF9FUShi
dWZbbiAtIDFdLCAnXG4nKTsKKworCUFTU0VSVF9FUShzc2NhbmYoYnVmLCAiJWQiLCAmbnJf
b3BlbiksIDEpOworCisJQVNTRVJUX0VRKDAsIGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAm
cmxpbWl0KSk7CisKKwkvKiBidW1wIGZzLm5yX29wZW4gKi8KKwluMiA9IHNwcmludGYoYnVm
MiwgIiVkXG4iLCBucl9vcGVuICsgMTAyNCk7CisJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsK
Kwl3cml0ZShmZCwgYnVmMiwgbjIpOworCisJLyogYnVtcCB1bGltaXQgLW4gKi8KKwlybGlt
aXQucmxpbV9jdXIgPSBucl9vcGVuICsgMTAyNDsKKwlybGltaXQucmxpbV9tYXggPSBucl9v
cGVuICsgMTAyNDsKKwlFWFBFQ1RfRVEoMCwgc2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZy
bGltaXQpKSB7CisJCWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CisJCXdyaXRlKGZkLCBidWYs
IG4pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogZ2V0IGEgZGVzY3JpcHRv
ciBwYXN0IHRoZSBvbGQgZnMubnJfb3BlbiAqLworCUVYUEVDVF9HRShkdXAyKDIsIG5yX29w
ZW4gKyA2NCksIDApIHsKKwkJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKKwkJd3JpdGUoZmQs
IGJ1Ziwgbik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBnZXQgZGVzY3Jp
cHRvciB0YWJsZSBzaGFyZWQgKi8KKwlwaWQgPSBzeXNfY2xvbmUzKCZhcmdzLCBzaXplb2Yo
YXJncykpOworCUVYUEVDVF9HRShwaWQsIDApIHsKKwkJbHNlZWsoZmQsIDAsIFNFRUtfU0VU
KTsKKwkJd3JpdGUoZmQsIGJ1Ziwgbik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisK
KwlpZiAocGlkID09IDApIHsKKwkJaW50IGVycjsKKworCQkvKiByZXN0b3JlIGZzLm5yX29w
ZW4gKi8KKwkJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKKwkJd3JpdGUoZmQsIGJ1Ziwgbik7
CisJCS8qIC4uLiBhbmQgbm93IHVuc2hhcmUoQ0xPTkVfRklMRVMpIG11c3QgZmFpbCB3aXRo
IEVNRklMRSAqLworCQllcnIgPSB1bnNoYXJlKENMT05FX0ZJTEVTKTsKKwkJRVhQRUNUX0VR
KGVyciwgLTEpCisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCUVYUEVDVF9FUShlcnJubywg
RU1GSUxFKQorCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQlleGl0KEVYSVRfU1VDQ0VTUyk7
CisJfQorCisJRVhQRUNUX0VRKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSwgcGlkKTsKKwlF
WFBFQ1RfRVEodHJ1ZSwgV0lGRVhJVEVEKHN0YXR1cykpOworCUVYUEVDVF9FUSgwLCBXRVhJ
VFNUQVRVUyhzdGF0dXMpKTsKK30KKworVEVTVF9IQVJORVNTX01BSU4KZGlmZiAtLWdpdCBh
L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2NwdWZyZXEvY3B1ZnJlcS5zaCBiL3Rvb2xzL3Rl
c3Rpbmcvc2VsZnRlc3RzL2NwdWZyZXEvY3B1ZnJlcS5zaAppbmRleCBhOGIxZGJjMGEzYTUu
LmUzNTBjNTIxYjQ2NyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY3B1
ZnJlcS9jcHVmcmVxLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2NwdWZyZXEv
Y3B1ZnJlcS5zaApAQCAtMjMxLDYgKzIzMSwyMSBAQCBkb19zdXNwZW5kKCkKIAogCQlmb3Ig
aSBpbiBgc2VxIDEgJDJgOyBkbwogCQkJcHJpbnRmICJTdGFydGluZyAkMVxuIgorCisJCQlp
ZiBbICIkMyIgPSAicnRjIiBdOyB0aGVuCisJCQkJaWYgISBjb21tYW5kIC12IHJ0Y3dha2Ug
Jj4gL2Rldi9udWxsOyB0aGVuCisJCQkJCXByaW50ZiAicnRjd2FrZSBjb3VsZCBub3QgYmUg
Zm91bmQsIHBsZWFzZSBpbnN0YWxsIGl0LlxuIgorCQkJCQlyZXR1cm4gMQorCQkJCWZpCisK
KwkJCQlydGN3YWtlIC1tICRmaWxlbmFtZSAtcyAxNQorCisJCQkJaWYgWyAkPyAtbmUgMCBd
OyB0aGVuCisJCQkJCXByaW50ZiAiRmFpbGVkIHRvIHN1c3BlbmQgdXNpbmcgUlRDIHdha2Ug
YWxhcm1cbiIKKwkJCQkJcmV0dXJuIDEKKwkJCQlmaQorCQkJZmkKKwogCQkJZWNobyAkZmls
ZW5hbWUgPiAkU1lTRlMvcG93ZXIvc3RhdGUKIAkJCXByaW50ZiAiQ2FtZSBvdXQgb2YgJDFc
biIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY3B1ZnJlcS9tYWlu
LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY3B1ZnJlcS9tYWluLnNoCmluZGV4IGEw
ZWI4NGNmNzE2Ny4uZjEyZmY3NDE2ZTQxIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3Nl
bGZ0ZXN0cy9jcHVmcmVxL21haW4uc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMv
Y3B1ZnJlcS9tYWluLnNoCkBAIC0yNCw2ICsyNCw4IEBAIGhlbHBtZSgpCiAJWy10IDxiYXNp
YzogQmFzaWMgY3B1ZnJlcSB0ZXN0aW5nCiAJICAgICBzdXNwZW5kOiBzdXNwZW5kL3Jlc3Vt
ZSwKIAkgICAgIGhpYmVybmF0ZTogaGliZXJuYXRlL3Jlc3VtZSwKKwkgICAgIHN1c3BlbmRf
cnRjOiBzdXNwZW5kL3Jlc3VtZSBiYWNrIHVzaW5nIHRoZSBSVEMgd2FrZXVwIGFsYXJtLAor
CSAgICAgaGliZXJuYXRlX3J0YzogaGliZXJuYXRlL3Jlc3VtZSBiYWNrIHVzaW5nIHRoZSBS
VEMgd2FrZXVwIGFsYXJtLAogCSAgICAgbW9kdGVzdDogdGVzdCBkcml2ZXIgb3IgZ292ZXJu
b3IgbW9kdWxlcy4gT25seSB0byBiZSB1c2VkIHdpdGggLWQgb3IgLWcgb3B0aW9ucywKIAkg
ICAgIHNwdGVzdDE6IFNpbXBsZSBnb3Zlcm5vciBzd2l0Y2ggdG8gcHJvZHVjZSBsb2NrZGVw
LgogCSAgICAgc3B0ZXN0MjogQ29uY3VycmVudCBnb3Zlcm5vciBzd2l0Y2ggdG8gcHJvZHVj
ZSBsb2NrZGVwLgpAQCAtNzYsNyArNzgsOCBAQCBwYXJzZV9hcmd1bWVudHMoKQogCQkJCWhl
bHBtZQogCQkJCTs7CiAKLQkJCXQpICMgLS1mdW5jX3R5cGUgKEZ1bmN0aW9uIHRvIHBlcmZv
cm06IGJhc2ljLCBzdXNwZW5kLCBoaWJlcm5hdGUsIG1vZHRlc3QsIHNwdGVzdDEvMi8zLzQg
KGRlZmF1bHQ6IGJhc2ljKSkKKwkJCXQpICMgLS1mdW5jX3R5cGUgKEZ1bmN0aW9uIHRvIHBl
cmZvcm06IGJhc2ljLCBzdXNwZW5kLCBoaWJlcm5hdGUsCisJCQkgICAjIHN1c3BlbmRfcnRj
LCBoaWJlcm5hdGVfcnRjLCBtb2R0ZXN0LCBzcHRlc3QxLzIvMy80IChkZWZhdWx0OiBiYXNp
YykpCiAJCQkJRlVOQz0kT1BUQVJHCiAJCQkJOzsKIApAQCAtMTIxLDYgKzEyNCwxNCBAQCBk
b190ZXN0KCkKIAkJZG9fc3VzcGVuZCAiaGliZXJuYXRlIiAxCiAJCTs7CiAKKwkJInN1c3Bl
bmRfcnRjIikKKyAgICAgICAgICAgICAgICBkb19zdXNwZW5kICJzdXNwZW5kIiAxIHJ0Ywor
ICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAiaGliZXJuYXRlX3J0YyIp
CisgICAgICAgICAgICAgICAgZG9fc3VzcGVuZCAiaGliZXJuYXRlIiAxIHJ0YworICAgICAg
ICAgICAgICAgIDs7CisKIAkJIm1vZHRlc3QiKQogCQkjIERvIHdlIGhhdmUgbW9kdWxlcyBp
biBwbGFjZT8KIAkJaWYgWyAteiAkRFJJVkVSX01PRCBdICYmIFsgLXogJEdPVkVSTk9SX01P
RCBdOyB0aGVuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJz
L3MzOTB4L3V2ZGV2aWNlL3Rlc3RfdXZkZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRl
c3RzL2RyaXZlcnMvczM5MHgvdXZkZXZpY2UvdGVzdF91dmRldmljZS5jCmluZGV4IGVhMGNk
YzM3YjQ0Zi4uN2VlNzQ5MjEzOGM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0
ZXN0cy9kcml2ZXJzL3MzOTB4L3V2ZGV2aWNlL3Rlc3RfdXZkZXZpY2UuYworKysgYi90b29s
cy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL3MzOTB4L3V2ZGV2aWNlL3Rlc3RfdXZkZXZp
Y2UuYwpAQCAtMjU3LDEyICsyNTcsNiBAQCBURVNUX0YoYXR0ZXN0X2ZpeHR1cmUsIGF0dF9p
bnZhbF9hZGRyKQogCWF0dF9pbnZhbF9hZGRyX3Rlc3QoJnNlbGYtPnV2aW9fYXR0ZXN0Lm1l
YXNfYWRkciwgX21ldGFkYXRhLCBzZWxmKTsKIH0KIAotc3RhdGljIHZvaWQgX19hdHRyaWJ1
dGVfXygoY29uc3RydWN0b3IpKSBfX2NvbnN0cnVjdG9yX29yZGVyX2xhc3Qodm9pZCkKLXsK
LQlpZiAoIV9fY29uc3RydWN0b3Jfb3JkZXIpCi0JCV9fY29uc3RydWN0b3Jfb3JkZXIgPSBf
Q09OU1RSVUNUT1JfT1JERVJfQkFDS1dBUkQ7Ci19Ci0KIGludCBtYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIHsKIAlpbnQgZmQgPSBvcGVuKFVWX1BBVEgsIE9fQUNDTU9ERSk7CmRp
ZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2V4ZWN2ZWF0LmMgYi90
b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2V4ZWN2ZWF0LmMKaW5kZXggNjQxOGRlZDQw
YmRkLi4wNzFlMDM1MzJjYmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz
L2V4ZWMvZXhlY3ZlYXQuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2V4
ZWN2ZWF0LmMKQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2V4ZWN2ZWF0
X2ludm9rZWRfcmMoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsCiAJfQog
CWlmICgoV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSBleHBlY3RlZF9yYykgJiYKIAkgICAgKFdF
WElUU1RBVFVTKHN0YXR1cykgIT0gZXhwZWN0ZWRfcmMyKSkgewotCQlrc2Z0X3ByaW50X21z
ZygiY2hpbGQgJWQgZXhpdGVkIHdpdGggJWQgbm90ICVkIG5vciAlZFxuIiwKKwkJa3NmdF9w
cmludF9tc2coImNoaWxkICVkIGV4aXRlZCB3aXRoICVkIG5laXRoZXIgJWQgbm9yICVkXG4i
LAogCQkJICAgICAgIGNoaWxkLCBXRVhJVFNUQVRVUyhzdGF0dXMpLCBleHBlY3RlZF9yYywK
IAkJCSAgICAgICBleHBlY3RlZF9yYzIpOwogCQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoIiVz
XG4iLCB0ZXN0X25hbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMv
ZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0X25zLmMgYi90b29scy90ZXN0
aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3RfbnMu
YwppbmRleCBlMDQ0ZjVmYzU3ZmQuLjcwY2IwYzhiMjFjZiAxMDA2NDQKLS0tIGEvdG9vbHMv
dGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0
X25zLmMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1v
dW50L3N0YXRtb3VudF90ZXN0X25zLmMKQEAgLTMxOSw4ICszMTksMTEgQEAgc3RhdGljIHZv
aWQgdGVzdF9saXN0bW91bnRfbnModm9pZCkKIAkJICogVGVsbCBvdXIgcGFyZW50IGhvdyBt
YW55IG1vdW50cyB3ZSBoYXZlLCBhbmQgdGhlbiB3YWl0IGZvciBpdAogCQkgKiB0byB0ZWxs
IHVzIHdlJ3JlIGRvbmUuCiAJCSAqLwotCQl3cml0ZShjaGlsZF9yZWFkeV9waXBlWzFdLCAm
bnJfbW91bnRzLCBzaXplb2YobnJfbW91bnRzKSk7Ci0JCXJlYWQocGFyZW50X3JlYWR5X3Bp
cGVbMF0sICZjdmFsLCBzaXplb2YoY3ZhbCkpOworCQlpZiAod3JpdGUoY2hpbGRfcmVhZHlf
cGlwZVsxXSwgJm5yX21vdW50cywgc2l6ZW9mKG5yX21vdW50cykpICE9CisJCQkJCXNpemVv
Zihucl9tb3VudHMpKQorCQkJcmV0ID0gTlNJRF9FUlJPUjsKKwkJaWYgKHJlYWQocGFyZW50
X3JlYWR5X3BpcGVbMF0sICZjdmFsLCBzaXplb2YoY3ZhbCkpICE9IHNpemVvZihjdmFsKSkK
KwkJCXJldCA9IE5TSURfRVJST1I7CiAJCWV4aXQoTlNJRF9QQVNTKTsKIAl9CiAKZGlmZiAt
LWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvMDBiYXNpYy90
ZXN0X293bmVyc2hpcC50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0
LmQvMDBiYXNpYy90ZXN0X293bmVyc2hpcC50YwppbmRleCBjNDUwOTRkMWUxZDIuLjA5NDQx
OWUxOTBjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rl
c3QuZC8wMGJhc2ljL3Rlc3Rfb3duZXJzaGlwLnRjCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs
ZnRlc3RzL2Z0cmFjZS90ZXN0LmQvMDBiYXNpYy90ZXN0X293bmVyc2hpcC50YwpAQCAtNiw2
ICs2LDE4IEBAIG9yaWdpbmFsX2dyb3VwPWBzdGF0IC1jICIlZyIgLmAKIG9yaWdpbmFsX293
bmVyPWBzdGF0IC1jICIldSIgLmAKIAogbW91bnRfcG9pbnQ9YHN0YXQgLWMgJyVtJyAuYAor
CisjIElmIHN0YXQgLWMgJyVtJyBkb2VzIG5vdCB3b3JrIChlLmcuIGJ1c3lib3gpIG9yIGZh
aWxlZCwgdHJ5IHRvIHVzZSB0aGUKKyMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAod2hp
Y2ggc2hvdWxkIGJlIGEgdHJhY2VmcykgYXMgdGhlIG1vdW50IHBvaW50LgoraWYgWyAhIC1k
ICIkbW91bnRfcG9pbnQiIF07IHRoZW4KKwlpZiBtb3VudCB8IGdyZXAgLXF3ICRQV0QgOyB0
aGVuCisJCW1vdW50X3BvaW50PSRQV0QKKwllbHNlCisJCSMgSWYgUFdEIGRvZXNuJ3Qgd29y
aywgdGhhdCBpcyBhbiBlbnZpcm9ubWVudGFsIHByb2JsZW0uCisJCWV4aXRfdW5yZXNvbHZl
ZAorCWZpCitmaQorCiBtb3VudF9vcHRpb25zPWBtb3VudCB8IGdyZXAgIiRtb3VudF9wb2lu
dCIgfCBzZWQgLWUgJ3MvLiooXCguKlwpKS4qL1wxLydgCiAKICMgZmluZCBhbm90aGVyIG93
bmVyIGFuZCBncm91cCB0aGF0IGlzIG5vdCB0aGUgb3JpZ2luYWwKQEAgLTgzLDMyICs5NSwz
OCBAQCBydW5fdGVzdHMoKSB7CiAJZG9uZQogfQogCi1tb3VudCAtbyByZW1vdW50LCIkbmV3
X29wdGlvbnMiIC4KKyMgUnVuIHRoZSB0ZXN0cyB0d2ljZSBhcyBsZWZ0b3ZlcnMgY2FuIGNh
dXNlIGlzc3VlcworZm9yIGxvb3AgaW4gMSAyIDsgZG8KIAotcnVuX3Rlc3RzCisJZWNobyAi
UnVubmluZyBpdGVyYXRpb24gJGxvb3AiCiAKLW1vdW50IC1vIHJlbW91bnQsIiRtb3VudF9v
cHRpb25zIiAuCisJbW91bnQgLW8gcmVtb3VudCwiJG5ld19vcHRpb25zIiAuCiAKLWZvciBk
IGluICIuIiAiZXZlbnRzIiAiZXZlbnRzL3NjaGVkIiAiZXZlbnRzL3NjaGVkL3NjaGVkX3N3
aXRjaCIgImV2ZW50cy9zY2hlZC9zY2hlZF9zd2l0Y2gvZW5hYmxlIiAkY2FuYXJ5OyBkbwot
CXRlc3QgIiRkIiAkb3JpZ2luYWxfZ3JvdXAKLWRvbmUKKwlydW5fdGVzdHMKKworCW1vdW50
IC1vIHJlbW91bnQsIiRtb3VudF9vcHRpb25zIiAuCisKKwlmb3IgZCBpbiAiLiIgImV2ZW50
cyIgImV2ZW50cy9zY2hlZCIgImV2ZW50cy9zY2hlZC9zY2hlZF9zd2l0Y2giICJldmVudHMv
c2NoZWQvc2NoZWRfc3dpdGNoL2VuYWJsZSIgJGNhbmFyeTsgZG8KKwkJdGVzdCAiJGQiICRv
cmlnaW5hbF9ncm91cAorCWRvbmUKIAogIyBjaGVjayBpbnN0YW5jZXMgYXMgd2VsbAogCi1j
aGdycCAkb3RoZXJfZ3JvdXAgaW5zdGFuY2VzCisJY2hncnAgJG90aGVyX2dyb3VwIGluc3Rh
bmNlcwogCi1pbnN0YW5jZT0iJChta3RlbXAgLXUgdGVzdC1YWFhYWFgpIgorCWluc3RhbmNl
PSIkKG1rdGVtcCAtdSB0ZXN0LVhYWFhYWCkiCiAKLW1rZGlyIGluc3RhbmNlcy8kaW5zdGFu
Y2UKKwlta2RpciBpbnN0YW5jZXMvJGluc3RhbmNlCiAKLWNkIGluc3RhbmNlcy8kaW5zdGFu
Y2UKKwljZCBpbnN0YW5jZXMvJGluc3RhbmNlCiAKLXJ1bl90ZXN0cworCXJ1bl90ZXN0cwog
Ci1jZCAuLi8uLgorCWNkIC4uLy4uCiAKLXJtZGlyIGluc3RhbmNlcy8kaW5zdGFuY2UKKwly
bWRpciBpbnN0YW5jZXMvJGluc3RhbmNlCiAKLWNoZ3JwICRvcmlnaW5hbF9ncm91cCBpbnN0
YW5jZXMKKwljaGdycCAkb3JpZ2luYWxfZ3JvdXAgaW5zdGFuY2VzCitkb25lCiAKIGV4aXQg
MApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9k
eW5ldmVudC9hZGRfcmVtb3ZlX3Vwcm9iZS50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz
L2Z0cmFjZS90ZXN0LmQvZHluZXZlbnQvYWRkX3JlbW92ZV91cHJvYmUudGMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMjc1ZGVjZGM4ODAKLS0tIC9kZXYv
bnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2R5bmV2
ZW50L2FkZF9yZW1vdmVfdXByb2JlLnRjCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAor
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIyBkZXNjcmlwdGlvbjogR2Vu
ZXJpYyBkeW5hbWljIGV2ZW50IC0gYWRkL3JlbW92ZS90ZXN0IHVwcm9iZSBldmVudHMKKyMg
cmVxdWlyZXM6IHVwcm9iZV9ldmVudHMKKworZWNobyAwID4gZXZlbnRzL2VuYWJsZQorZWNo
byA+IGR5bmFtaWNfZXZlbnRzCisKK2VjaG8gJ2NhdCAvcHJvYy8kJC9tYXBzJyB8IC9iaW4v
c2ggfCBcCisJZ3JlcCAici14cCAuKi9iaW4vLipzaCQiIHwgXAorCWF3ayAne3ByaW50ZiAi
cDpteWV2ZW50ICVzOjB4JXNcbiIsICQ2LCQzIH0nID4+IHVwcm9iZV9ldmVudHMKKworZ3Jl
cCAtcSBteWV2ZW50IHVwcm9iZV9ldmVudHMKK3Rlc3QgLWQgZXZlbnRzL3Vwcm9iZXMvbXll
dmVudAorCitlY2hvIDEgPiBldmVudHMvdXByb2Jlcy9teWV2ZW50L2VuYWJsZQorZWNobyAn
bHMnIHwgL2Jpbi9zaCA+IC9kZXYvbnVsbAorZWNobyAwID4gZXZlbnRzL3Vwcm9iZXMvbXll
dmVudC9lbmFibGUKK2dyZXAgLXEgbXlldmVudCB0cmFjZQorCitlY2hvICItOm15ZXZlbnQi
ID4+IHVwcm9iZV9ldmVudHMKKyEgZ3JlcCAtcSBteWV2ZW50IHVwcm9iZV9ldmVudHMKKwor
ZWNobyA+IHVwcm9iZV9ldmVudHMKKworY2xlYXJfdHJhY2UKZGlmZiAtLWdpdCBhL3Rvb2xz
L3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2Z1bmNfc2V0X2Z0cmFj
ZV9maWxlLnRjIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9mdHJh
Y2UvZnVuY19zZXRfZnRyYWNlX2ZpbGUudGMKaW5kZXggMDczYTc0OGI5MzgwLi4yNjNmNmI3
OThjODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0
LmQvZnRyYWNlL2Z1bmNfc2V0X2Z0cmFjZV9maWxlLnRjCisrKyBiL3Rvb2xzL3Rlc3Rpbmcv
c2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2Z1bmNfc2V0X2Z0cmFjZV9maWxlLnRj
CkBAIC0xOSw3ICsxOSwxNCBAQCBmYWlsKCkgeyAjIG1lc2cKIAogRklMVEVSPXNldF9mdHJh
Y2VfZmlsdGVyCiBGVU5DMT0ic2NoZWR1bGUiCi1GVU5DMj0ic2NoZWRfdGljayIKK2lmIGdy
ZXAgJ15zY2hlZF90aWNrXGInIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zOyB0aGVuCisg
ICAgRlVOQzI9InNjaGVkX3RpY2siCitlbGlmIGdyZXAgJ15zY2hlZHVsZXJfdGlja1xiJyBh
dmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uczsgdGhlbgorICAgIEZVTkMyPSJzY2hlZHVsZXJf
dGljayIKK2Vsc2UKKyAgICBleGl0X3VucmVzb2x2ZWQKK2ZpCisKIAogQUxMX0ZVTkNTPSIj
IyMjIGFsbCBmdW5jdGlvbnMgZW5hYmxlZCAjIyMjIgogCmRpZmYgLS1naXQgYS90b29scy90
ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9rcHJvYmVfYXJnc19jaGFy
LnRjIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3By
b2JlX2FyZ3NfY2hhci50YwppbmRleCBlMjFjOWMyN2VjZTQuLjc3ZjRjMDdjZGNiOCAxMDA2
NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUv
a3Byb2JlX2FyZ3NfY2hhci50YworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJh
Y2UvdGVzdC5kL2twcm9iZS9rcHJvYmVfYXJnc19jaGFyLnRjCkBAIC0xLDcgKzEsNyBAQAog
IyEvYmluL3NoCiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjIGRlc2Ny
aXB0aW9uOiBLcHJvYmUgZXZlbnQgY2hhciB0eXBlIGFyZ3VtZW50Ci0jIHJlcXVpcmVzOiBr
cHJvYmVfZXZlbnRzCisjIHJlcXVpcmVzOiBrcHJvYmVfZXZlbnRzIGF2YWlsYWJsZV9maWx0
ZXJfZnVuY3Rpb25zCiAKIGNhc2UgYHVuYW1lIC1tYCBpbgogeDg2XzY0KQpkaWZmIC0tZ2l0
IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3Byb2Jl
X2FyZ3Nfc3RyaW5nLnRjIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3Qu
ZC9rcHJvYmUva3Byb2JlX2FyZ3Nfc3RyaW5nLnRjCmluZGV4IDkzMjE3ZDQ1OTU1Ni4uMzkw
MDEwNzNmN2VkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2Uv
dGVzdC5kL2twcm9iZS9rcHJvYmVfYXJnc19zdHJpbmcudGMKKysrIGIvdG9vbHMvdGVzdGlu
Zy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3Byb2JlX2FyZ3Nfc3RyaW5nLnRj
CkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCiAjIGRlc2NyaXB0aW9uOiBLcHJvYmUgZXZlbnQgc3RyaW5nIHR5cGUgYXJn
dW1lbnQKLSMgcmVxdWlyZXM6IGtwcm9iZV9ldmVudHMKKyMgcmVxdWlyZXM6IGtwcm9iZV9l
dmVudHMgYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMKIAogY2FzZSBgdW5hbWUgLW1gIGlu
CiB4ODZfNjQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvaGlk
X2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2hpZF9icGYuYwppbmRleCBk
YzA0MDhhODMxZDAuLmYyYmQyMGNhODhiYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9z
ZWxmdGVzdHMvaGlkL2hpZF9icGYuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9o
aWQvaGlkX2JwZi5jCkBAIC0xMzMxLDEyICsxMzMxLDYgQEAgc3RhdGljIGludCBsaWJicGZf
cHJpbnRfZm4oZW51bSBsaWJicGZfcHJpbnRfbGV2ZWwgbGV2ZWwsCiAJcmV0dXJuIDA7CiB9
CiAKLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgX19jb25zdHJ1
Y3Rvcl9vcmRlcl9sYXN0KHZvaWQpCi17Ci0JaWYgKCFfX2NvbnN0cnVjdG9yX29yZGVyKQot
CQlfX2NvbnN0cnVjdG9yX29yZGVyID0gX0NPTlNUUlVDVE9SX09SREVSX0JBQ0tXQVJEOwot
fQotCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJLyogVXNlIGxpYmJw
ZiAxLjAgQVBJIG1vZGUgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz
L2tzZWxmdGVzdC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3NlbGZ0ZXN0LmgKaW5k
ZXggYjg5NjdiNmUyOWQ1Li4yOWZlZGY2MDk2MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rp
bmcvc2VsZnRlc3RzL2tzZWxmdGVzdC5oCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Rz
L2tzZWxmdGVzdC5oCkBAIC02MSw2ICs2MSw3IEBACiAjZGVmaW5lIEFSUkFZX1NJWkUoYXJy
KSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQogI2VuZGlmCiAKKyNpZiBkZWZp
bmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIC8qIGFyY2ggKi8KIC8qCiAg
KiBnY2MgY3B1aWQuaCBwcm92aWRlcyBfX2NwdWlkX2NvdW50KCkgc2luY2UgdjQuNC4KICAq
IENsYW5nL0xMVk0gY3B1aWQuaCBwcm92aWRlcyAgX19jcHVpZF9jb3VudCgpIHNpbmNlIHYz
LjQuMC4KQEAgLTc1LDYgKzc2LDcgQEAKIAkJCSAgICAgIDogIj1hIiAoYSksICI9YiIgKGIp
LCAiPWMiIChjKSwgIj1kIiAoZCkJXAogCQkJICAgICAgOiAiMCIgKGxldmVsKSwgIjIiIChj
b3VudCkpCiAjZW5kaWYKKyNlbmRpZiAvKiBlbmQgYXJjaCAqLwogCiAvKiBkZWZpbmUga3Nl
bGZ0ZXN0IGV4aXQgY29kZXMgKi8KICNkZWZpbmUgS1NGVF9QQVNTICAwCkBAIC0zNzEsMTUg
KzM3Myw3IEBAIHN0YXRpYyBpbmxpbmUgX19ub3JldHVybiBfX3ByaW50ZigxLCAyKSB2b2lk
IGtzZnRfZXhpdF9mYWlsX21zZyhjb25zdCBjaGFyICptc2csCiAKIHN0YXRpYyBpbmxpbmUg
X19ub3JldHVybiB2b2lkIGtzZnRfZXhpdF9mYWlsX3BlcnJvcihjb25zdCBjaGFyICptc2cp
CiB7Ci0jaWZuZGVmIE5PTElCQwogCWtzZnRfZXhpdF9mYWlsX21zZygiJXM6ICVzICglZClc
biIsIG1zZywgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7Ci0jZWxzZQotCS8qCi0JICogbm9s
aWJjIGRvZXNuJ3QgcHJvdmlkZSBzdHJlcnJvcigpIGFuZCBpdCBzZWVtcwotCSAqIGluYXBw
cm9wcmlhdGUgdG8gYWRkIG9uZSwganVzdCBwcmludCB0aGUgZXJybm8uCi0JICovCi0Ja3Nm
dF9leGl0X2ZhaWxfbXNnKCIlczogJWQpXG4iLCBtc2csIGVycm5vKTsKLSNlbmRpZgogfQog
CiBzdGF0aWMgaW5saW5lIF9fbm9yZXR1cm4gdm9pZCBrc2Z0X2V4aXRfeGZhaWwodm9pZCkK
ZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2tzZWxmdGVzdF9oYXJuZXNz
LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rc2VsZnRlc3RfaGFybmVzcy5oCmluZGV4
IDQwNzIzYTZhMDgzZi4uYTVhNzI0MTVlMzdiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5n
L3NlbGZ0ZXN0cy9rc2VsZnRlc3RfaGFybmVzcy5oCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs
ZnRlc3RzL2tzZWxmdGVzdF9oYXJuZXNzLmgKQEAgLTQ4OCwxMiArNDg4LDYgQEAKICAqIFVz
ZSBvbmNlIHRvIGFwcGVuZCBhIG1haW4oKSB0byB0aGUgdGVzdCBmaWxlLgogICovCiAjZGVm
aW5lIFRFU1RfSEFSTkVTU19NQUlOIFwKLQlzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChj
b25zdHJ1Y3RvcikpIFwKLQlfX2NvbnN0cnVjdG9yX29yZGVyX2xhc3Qodm9pZCkgXAotCXsg
XAotCQlpZiAoIV9fY29uc3RydWN0b3Jfb3JkZXIpIFwKLQkJCV9fY29uc3RydWN0b3Jfb3Jk
ZXIgPSBfQ09OU1RSVUNUT1JfT1JERVJfQkFDS1dBUkQ7IFwKLQl9IFwKIAlpbnQgbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpIHsgXAogCQlyZXR1cm4gdGVzdF9oYXJuZXNzX3J1bihh
cmdjLCBhcmd2KTsgXAogCX0KQEAgLTgyNCw3ICs4MTgsNyBAQAogCQlpdGVtLT5wcmV2ID0g
aXRlbTsgXAogCQlyZXR1cm47CVwKIAl9IFwKLQlpZiAoX19jb25zdHJ1Y3Rvcl9vcmRlciA9
PSBfQ09OU1RSVUNUT1JfT1JERVJfRk9SV0FSRCkgeyBcCisJaWYgKF9fY29uc3RydWN0b3Jf
b3JkZXJfZm9yd2FyZCkgeyBcCiAJCWl0ZW0tPm5leHQgPSBOVUxMOyBcCiAJCWl0ZW0tPnBy
ZXYgPSBoZWFkLT5wcmV2OyBcCiAJCWl0ZW0tPnByZXYtPm5leHQgPSBpdGVtOyBcCkBAIC04
ODgsMTAgKzg4Miw3IEBAIHN0cnVjdCBfX3Rlc3RfeGZhaWwgewogCX0KIAogc3RhdGljIHN0
cnVjdCBfX2ZpeHR1cmVfbWV0YWRhdGEgKl9fZml4dHVyZV9saXN0ID0gJl9maXh0dXJlX2ds
b2JhbDsKLXN0YXRpYyBpbnQgX19jb25zdHJ1Y3Rvcl9vcmRlcjsKLQotI2RlZmluZSBfQ09O
U1RSVUNUT1JfT1JERVJfRk9SV0FSRCAgIDEKLSNkZWZpbmUgX0NPTlNUUlVDVE9SX09SREVS
X0JBQ0tXQVJEIC0xCitzdGF0aWMgYm9vbCBfX2NvbnN0cnVjdG9yX29yZGVyX2ZvcndhcmQ7
CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlZ2lzdGVyX2ZpeHR1cmUoc3RydWN0IF9fZml4
dHVyZV9tZXRhZGF0YSAqZikKIHsKQEAgLTk0Miw3ICs5MzMsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgX190ZXN0X3Bhc3NlZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICptZXRhZGF0YSkK
ICAqIGxpc3Qgc28gdGVzdHMgYXJlIHJ1biBpbiBzb3VyY2UgZGVjbGFyYXRpb24gb3JkZXIu
CiAgKiBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjaW50L0luaXRpYWxpemF0
aW9uLmh0bWwKICAqIEhvd2V2ZXIsIGl0IHNlZW1zIG5vdCBhbGwgdG9vbGNoYWlucyBkbyB0
aGlzIGNvcnJlY3RseSwgc28gdXNlCi0gKiBfX2NvbnN0cnVjdG9yX29yZGVyIHRvIGRldGVj
dCB3aGljaCBkaXJlY3Rpb24gaXMgY2FsbGVkIGZpcnN0CisgKiBfX2NvbnN0cnVjdG9yX29y
ZGVyX2Zvd2FyZCB0byBkZXRlY3Qgd2hpY2ggZGlyZWN0aW9uIGlzIGNhbGxlZCBmaXJzdAog
ICogYW5kIGFkanVzdCBsaXN0IGJ1aWxkaW5nIGxvZ2ljIHRvIGdldCB0aGluZ3MgcnVubmlu
ZyBpbiB0aGUgcmlnaHQKICAqIGRpcmVjdGlvbi4KICAqLwpAQCAtMTMzNyw4ICsxMzI4LDcg
QEAgc3RhdGljIGludCB0ZXN0X2hhcm5lc3NfcnVuKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAogc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSBfX2NvbnN0cnVj
dG9yX29yZGVyX2ZpcnN0KHZvaWQpCiB7Ci0JaWYgKCFfX2NvbnN0cnVjdG9yX29yZGVyKQot
CQlfX2NvbnN0cnVjdG9yX29yZGVyID0gX0NPTlNUUlVDVE9SX09SREVSX0ZPUldBUkQ7CisJ
X19jb25zdHJ1Y3Rvcl9vcmRlcl9mb3J3YXJkID0gdHJ1ZTsKIH0KIAogI2VuZGlmICAvKiBf
X0tTRUxGVEVTVF9IQVJORVNTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2Vs
ZnRlc3RzL2xpYi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9NYWtl
ZmlsZQppbmRleCBlZTcxZmM5OWQ1YjUuLmM1MmZlM2FkOGU5OCAxMDA2NDQKLS0tIGEvdG9v
bHMvdGVzdGluZy9zZWxmdGVzdHMvbGliL01ha2VmaWxlCisrKyBiL3Rvb2xzL3Rlc3Rpbmcv
c2VsZnRlc3RzL2xpYi9NYWtlZmlsZQpAQCAtNCw2ICs0LDUgQEAKICMgTm8gYmluYXJpZXMs
IGJ1dCBtYWtlIHN1cmUgYXJnLWxlc3MgIm1ha2UiIGRvZXNuJ3QgdHJpZ2dlciAicnVuX3Rl
c3RzIgogYWxsOgogCi1URVNUX1BST0dTIDo9IHByaW50Zi5zaCBiaXRtYXAuc2ggcHJpbWVf
bnVtYmVycy5zaCBzY2FuZi5zaCBzdHJzY3B5LnNoCi0KK1RFU1RfUFJPR1MgOj0gcHJpbnRm
LnNoIGJpdG1hcC5zaCBwcmltZV9udW1iZXJzLnNoIHNjYW5mLnNoCiBpbmNsdWRlIC4uL2xp
Yi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliL2NvbmZpZyBi
L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9jb25maWcKaW5kZXggNjQ1ODM5YjUwYjBh
Li5kYzE1YWJhOGQwYTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xp
Yi9jb25maWcKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliL2NvbmZpZwpAQCAt
Miw1ICsyLDQgQEAgQ09ORklHX1RFU1RfUFJJTlRGPW0KIENPTkZJR19URVNUX1NDQU5GPW0K
IENPTkZJR19URVNUX0JJVE1BUD1tCiBDT05GSUdfUFJJTUVfTlVNQkVSUz1tCi1DT05GSUdf
VEVTVF9TVFJTQ1BZPW0KIENPTkZJR19URVNUX0JJVE9QUz1tCmRpZmYgLS1naXQgYS90b29s
cy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIvc3Ryc2NweS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs
ZnRlc3RzL2xpYi9zdHJzY3B5LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBi
ZTYwZWY2ZTFhN2YuLjAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0
cy9saWIvc3Ryc2NweS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyEvYmlu
L3NoCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwotJChkaXJuYW1lICQw
KS8uLi9rc2VsZnRlc3QvbW9kdWxlLnNoICJzdHJzY3B5KiIgdGVzdF9zdHJzY3B5CmRpZmYg
LS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZXNjdHJsL2NhdF90ZXN0LmMgYi90
b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZXNjdHJsL2NhdF90ZXN0LmMKaW5kZXggNzQyNzgy
NDM4Y2EzLi45NGNmZGJhNTMwOGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRl
c3RzL3Jlc2N0cmwvY2F0X3Rlc3QuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9y
ZXNjdHJsL2NhdF90ZXN0LmMKQEAgLTI5MCwxMiArMjkwLDEyIEBAIHN0YXRpYyBpbnQgY2F0
X3J1bl90ZXN0KGNvbnN0IHN0cnVjdCByZXNjdHJsX3Rlc3QgKnRlc3QsIGNvbnN0IHN0cnVj
dCB1c2VyX3BhcmFtCiAKIHN0YXRpYyBib29sIGFyY2hfc3VwcG9ydHNfbm9uY29udF9jYXQo
Y29uc3Qgc3RydWN0IHJlc2N0cmxfdGVzdCAqdGVzdCkKIHsKLQl1bnNpZ25lZCBpbnQgZWF4
LCBlYngsIGVjeCwgZWR4OwotCiAJLyogQU1EIGFsd2F5cyBzdXBwb3J0cyBub24tY29udGln
dW91cyBDQk0uICovCiAJaWYgKGdldF92ZW5kb3IoKSA9PSBBUkNIX0FNRCkKIAkJcmV0dXJu
IHRydWU7CiAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18p
IC8qIGFyY2ggKi8KKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwogCS8qIElu
dGVsIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzIENCTSBuZWVkcyB0byBiZSBkaXNjb3Zl
cmVkLiAqLwogCWlmICghc3RyY21wKHRlc3QtPnJlc291cmNlLCAiTDMiKSkKIAkJX19jcHVp
ZF9jb3VudCgweDEwLCAxLCBlYXgsIGVieCwgZWN4LCBlZHgpOwpAQCAtMzA1LDYgKzMwNSw5
IEBAIHN0YXRpYyBib29sIGFyY2hfc3VwcG9ydHNfbm9uY29udF9jYXQoY29uc3Qgc3RydWN0
IHJlc2N0cmxfdGVzdCAqdGVzdCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuICgoZWN4
ID4+IDMpICYgMSk7CisjZW5kaWYgLyogZW5kIGFyY2ggKi8KKworCXJldHVybiBmYWxzZTsK
IH0KIAogc3RhdGljIGludCBub25jb250X2NhdF9ydW5fdGVzdChjb25zdCBzdHJ1Y3QgcmVz
Y3RybF90ZXN0ICp0ZXN0LApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMv
cnRjL3J0Y3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3J0Yy9ydGN0ZXN0LmMK
aW5kZXggNjNjZTAyZDFkNWNjLi45NjQ3YjE0YjQ3YzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rl
c3Rpbmcvc2VsZnRlc3RzL3J0Yy9ydGN0ZXN0LmMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxm
dGVzdHMvcnRjL3J0Y3Rlc3QuYwpAQCAtNDEwLDEzICs0MTAsNiBAQCBURVNUX0ZfVElNRU9V
VChydGMsIGFsYXJtX3drYWxtX3NldF9taW51dGUsIDY1KSB7CiAJQVNTRVJUX0VRKG5ldywg
c2Vjcyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkK
LV9fY29uc3RydWN0b3Jfb3JkZXJfbGFzdCh2b2lkKQotewotCWlmICghX19jb25zdHJ1Y3Rv
cl9vcmRlcikKLQkJX19jb25zdHJ1Y3Rvcl9vcmRlciA9IF9DT05TVFJVQ1RPUl9PUkRFUl9C
QUNLV0FSRDsKLX0KLQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN3
aXRjaCAoYXJnYykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcnVz
dC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ydXN0L2NvbmZpZwppbmRleCBi
NDAwMmFjZDQwYmMuLjVmOTQyYjVjOGMxNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9z
ZWxmdGVzdHMvcnVzdC9jb25maWcKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcnVz
dC9jb25maWcKQEAgLTEsNSArMSw2IEBACisjIENPTkZJR19HQ0NfUExVR0lOUyBpcyBub3Qg
c2V0CiBDT05GSUdfUlVTVD15CiBDT05GSUdfU0FNUExFUz15CiBDT05GSUdfU0FNUExFU19S
VVNUPXkKIENPTkZJR19TQU1QTEVfUlVTVF9NSU5JTUFMPW0KLUNPTkZJR19TQU1QTEVfUlVT
VF9QUklOVD1tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorQ09ORklHX1NBTVBMRV9S
VVNUX1BSSU5UPW0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVy
cy9jaGFuZ2Vfc2tldy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGltZXJzL2NoYW5n
ZV9za2V3LmMKaW5kZXggNDQyMWNkNTYyYzI0Li4xOGU3OTRhNDZjMjMgMTAwNjQ0Ci0tLSBh
L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVycy9jaGFuZ2Vfc2tldy5jCisrKyBiL3Rv
b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVycy9jaGFuZ2Vfc2tldy5jCkBAIC0zMCw5ICsz
MCw2IEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgIi4uL2tzZWxmdGVzdC5oIgog
Ci0jZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTEwKLQotCiBpbnQgY2hhbmdlX3Nr
ZXdfdGVzdChpbnQgcHBtKQogewogCXN0cnVjdCB0aW1leCB0eDsKZGlmZiAtLWdpdCBhL3Rv
b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVycy9za2V3X2NvbnNpc3RlbmN5LmMgYi90b29s
cy90ZXN0aW5nL3NlbGZ0ZXN0cy90aW1lcnMvc2tld19jb25zaXN0ZW5jeS5jCmluZGV4IGM4
ZTZiZmZlNGUwYS4uODM0NTAxNDVmZTY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3Nl
bGZ0ZXN0cy90aW1lcnMvc2tld19jb25zaXN0ZW5jeS5jCisrKyBiL3Rvb2xzL3Rlc3Rpbmcv
c2VsZnRlc3RzL3RpbWVycy9za2V3X2NvbnNpc3RlbmN5LmMKQEAgLTM2LDggKzM2LDYgQEAK
ICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgIi4uL2tzZWxmdGVzdC5oIgogCi0j
ZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTEwKLQogaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0aW1leCB0eDsKZGlmZiAtLWdpdCBhL3Rvb2xz
L3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVycy90aHJlYWR0ZXN0LmMgYi90b29scy90ZXN0aW5n
L3NlbGZ0ZXN0cy90aW1lcnMvdGhyZWFkdGVzdC5jCmluZGV4IDc2YjM4ZTQxZDljNy4uZDU1
NjRiYmYwZTUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90aW1lcnMv
dGhyZWFkdGVzdC5jCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RpbWVycy90aHJl
YWR0ZXN0LmMKQEAgLTM4LDEwICszOCwxMCBAQCBzdHJ1Y3QgdGltZXNwZWMgZ2xvYmFsX2xp
c3RbTElTVFNJWkVdOwogaW50IGxpc3Rjb3VudCA9IDA7CiAKIAotdm9pZCBjaGVja2xpc3Qo
c3RydWN0IHRpbWVzcGVjICpsaXN0LCBpbnQgc2l6ZSkKK3ZvaWQgY2hlY2tsaXN0KGNvbnN0
IHN0cnVjdCB0aW1lc3BlYyAqbGlzdCwgaW50IHNpemUpCiB7CiAJaW50IGksIGo7Ci0Jc3Ry
dWN0IHRpbWVzcGVjICphLCAqYjsKKwljb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmEsICpiOwog
CiAJLyogc2NhbiB0aGUgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykg
ewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdHBtMi90ZXN0X2FzeW5j
LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdHBtMi90ZXN0X2FzeW5jLnNoCmluZGV4
IDQzYmY1YmQ3NzJmZC4uY2Y1YTljODI2MDk3IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5n
L3NlbGZ0ZXN0cy90cG0yL3Rlc3RfYXN5bmMuc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxm
dGVzdHMvdHBtMi90ZXN0X2FzeW5jLnNoCkBAIC03LDQgKzcsNCBAQCBrc2Z0X3NraXA9NAog
WyAtZSAvZGV2L3RwbTAgXSB8fCBleGl0ICRrc2Z0X3NraXAKIFsgLWUgL2Rldi90cG1ybTAg
XSB8fCBleGl0ICRrc2Z0X3NraXAKIAotcHl0aG9uMyAtbSB1bml0dGVzdCAtdiB0cG0yX3Rl
c3RzLkFzeW5jVGVzdAorcHl0aG9uMyAtbSB1bml0dGVzdCAtdiB0cG0yX3Rlc3RzLkFzeW5j
VGVzdCAyPiYxCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90cG0yL3Rl
c3Rfc21va2Uuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90cG0yL3Rlc3Rfc21va2Uu
c2gKaW5kZXggNThhZjk2M2U1YjU1Li4yMGZhNzBmOTcwYTkgMTAwNzU1Ci0tLSBhL3Rvb2xz
L3Rlc3Rpbmcvc2VsZnRlc3RzL3RwbTIvdGVzdF9zbW9rZS5zaAorKysgYi90b29scy90ZXN0
aW5nL3NlbGZ0ZXN0cy90cG0yL3Rlc3Rfc21va2Uuc2gKQEAgLTYsNCArNiw0IEBAIGtzZnRf
c2tpcD00CiAKIFsgLWUgL2Rldi90cG0wIF0gfHwgZXhpdCAka3NmdF9za2lwCiAKLXB5dGhv
bjMgLW0gdW5pdHRlc3QgLXYgdHBtMl90ZXN0cy5TbW9rZVRlc3QKK3B5dGhvbjMgLW0gdW5p
dHRlc3QgLXYgdHBtMl90ZXN0cy5TbW9rZVRlc3QgMj4mMQpkaWZmIC0tZ2l0IGEvdG9vbHMv
dGVzdGluZy9zZWxmdGVzdHMvdHBtMi90ZXN0X3NwYWNlLnNoIGIvdG9vbHMvdGVzdGluZy9z
ZWxmdGVzdHMvdHBtMi90ZXN0X3NwYWNlLnNoCmluZGV4IDA0YzQ3YjEzZmU4YS4uOTM4OTRj
YmM4OWE4IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90cG0yL3Rlc3Rf
c3BhY2Uuc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdHBtMi90ZXN0X3NwYWNl
LnNoCkBAIC02LDQgKzYsNCBAQCBrc2Z0X3NraXA9NAogCiBbIC1lIC9kZXYvdHBtcm0wIF0g
fHwgZXhpdCAka3NmdF9za2lwCiAKLXB5dGhvbjMgLW0gdW5pdHRlc3QgLXYgdHBtMl90ZXN0
cy5TcGFjZVRlc3QKK3B5dGhvbjMgLW0gdW5pdHRlc3QgLXYgdHBtMl90ZXN0cy5TcGFjZVRl
c3QgMj4mMQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdXNlci9NYWtl
ZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VzZXIvTWFrZWZpbGUKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MGE0MGY5YjcyYi4uMDAwMDAwMDAwMDAwCi0tLSBh
L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VzZXIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s
eQotIyBNYWtlZmlsZSBmb3IgdXNlciBtZW1vcnkgc2VsZnRlc3RzCi0KLSMgTm8gYmluYXJp
ZXMsIGJ1dCBtYWtlIHN1cmUgYXJnLWxlc3MgIm1ha2UiIGRvZXNuJ3QgdHJpZ2dlciAicnVu
X3Rlc3RzIgotYWxsOgotCi1URVNUX1BST0dTIDo9IHRlc3RfdXNlcl9jb3B5LnNoCi0KLWlu
Y2x1ZGUgLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91
c2VyL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VzZXIvY29uZmlnCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODRlZDg0MTYzMjQuLjAwMDAwMDAwMDAwMAot
LS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91c2VyL2NvbmZpZworKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUNPTkZJR19URVNUX1VTRVJfQ09QWT1tCmRpZmYgLS1naXQgYS90
b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91c2VyL3Rlc3RfdXNlcl9jb3B5LnNoIGIvdG9vbHMv
dGVzdGluZy9zZWxmdGVzdHMvdXNlci90ZXN0X3VzZXJfY29weS5zaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggZjliMzFhNTc0MzliLi4wMDAwMDAwMDAwMDAKLS0tIGEvdG9v
bHMvdGVzdGluZy9zZWxmdGVzdHMvdXNlci90ZXN0X3VzZXJfY29weS5zaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLSMhL2Jpbi9zaAotIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMAotIyBSdW5zIGNvcHlfdG8vZnJvbV91c2VyIGluZnJhc3RydWN0dXJl
IHVzaW5nIHRlc3RfdXNlcl9jb3B5IGtlcm5lbCBtb2R1bGUKLQotIyBLc2VsZnRlc3QgZnJh
bWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCi1rc2Z0X3NraXA9NAotCi1p
ZiAhIC9zYmluL21vZHByb2JlIC1xIC1uIHRlc3RfdXNlcl9jb3B5OyB0aGVuCi0JZWNobyAi
dXNlcjogbW9kdWxlIHRlc3RfdXNlcl9jb3B5IGlzIG5vdCBmb3VuZCBbU0tJUF0iCi0JZXhp
dCAka3NmdF9za2lwCi1maQotaWYgL3NiaW4vbW9kcHJvYmUgLXEgdGVzdF91c2VyX2NvcHk7
IHRoZW4KLQkvc2Jpbi9tb2Rwcm9iZSAtcSAtciB0ZXN0X3VzZXJfY29weQotCWVjaG8gInVz
ZXJfY29weTogb2siCi1lbHNlCi0JZWNobyAidXNlcl9jb3B5OiBbRkFJTF0iCi0JZXhpdCAx
Ci1maQo=

--------------CreUzoFYiIuW8Ze14BFG3Ot7--

.
Date: Tue, 17 Sep 2024 00:38:37 +0000
From: Wei Liu <wei.liu@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Wei Liu <wei.liu@kernel.org>,
	Linux on Hyper-V List <linux-hyperv@vger.kernel.org>,
	Linux Kernel List <linux-kernel@vger.kernel.org>, kys@microsoft.com,
	haiyangz@microsoft.com, decui@microsoft.com
Subject: [GIT PULL] Hyper-V next for v6.12

Hi Linus,

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  ssh://git@gitolite.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git tags/hyperv-next-signed-20240916

for you to fetch changes up to 94e86b174d103d941b4afc4f016af8af9e5352fa:

  tools/hv: Add memory allocation check in hv_fcopy_start (2024-09-09 01:09:27 +0000)

----------------------------------------------------------------
hyperv-next for v6.12
  - Optimize boot time by concurrent execution of hv_synic_init() (Saurabh Sengar)
  - Use helpers to read control registers in hv_snp_boot_ap() (Yosry Ahmed)
  - Add memory allocation check in hv_fcopy_start (Zhu Jun)
----------------------------------------------------------------
Saurabh Sengar (1):
      Drivers: hv: vmbus: Optimize boot time by concurrent execution of hv_synic_init()

Yosry Ahmed (1):
      x86/hyperv: use helpers to read control registers in hv_snp_boot_ap()

Zhu Jun (1):
      tools/hv: Add memory allocation check in hv_fcopy_start

 arch/x86/hyperv/ivm.c          |  6 +++---
 drivers/hv/vmbus_drv.c         | 34 +++++++++++++++++++++++++++++++---
 tools/hv/hv_fcopy_uio_daemon.c |  7 +++++++
 3 files changed, 41 insertions(+), 6 deletions(-)

.
Date: Mon, 16 Sep 2024 19:43:05 -0600
From: Shuah Khan <skhan@linuxfoundation.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: shuah <shuah@kernel.org>, Shuah Khan <skhan@linuxfoundation.org>,
 linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
 David Gow <davidgow@google.com>, Brendan Higgins <brendanhiggins@google.com>
Subject: [GIT PULL] KUnit update for Linux 6.12-rc1

This is a multi-part message in MIME format.
--------------lDmTx2uXH530aimSr6U5KQT6
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi Linus,

Please pull the following kunit update for Linux 6.12-rc1.

This kunit update for Linux 6.12-rc1 consists of:

-- a new int_pow test suite
-- documentation update to clarify filename best practices
-- kernel-doc fix for EXPORT_SYMBOL_IF_KUNIT
-- change to build compile_commands.json automatically instead
    of requiring a manual build.

diff is attached.

thanks,
-- Shuah

----------------------------------------------------------------
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

   Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

   git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest tags/linux_kselftest-kunit-6.12-rc1

for you to fetch changes up to 7fcc9b53216cd87f73cc6dbb404220350ddc93b8:

   lib/math: Add int_pow test suite (2024-09-12 10:03:00 -0600)

----------------------------------------------------------------
linux_kselftest-kunit-6.12-rc1

This kunit update for Linux 6.12-rc1 consists of:

-- a new int_pow test suite
-- documentation update to clarify filename best practices
-- kernel-doc fix for EXPORT_SYMBOL_IF_KUNIT
-- change to build compile_commands.json automatically instead
    of requiring a manual build.

----------------------------------------------------------------
Brendan Jackman (1):
       kunit: tool: Build compile_commands.json

Kees Cook (1):
       Documentation: KUnit: Update filename best practices

Luis Felipe Hernandez (1):
       lib/math: Add int_pow test suite

Michal Wajdeczko (1):
       kunit: Fix kernel-doc for EXPORT_SYMBOL_IF_KUNIT

  Documentation/dev-tools/kunit/style.rst | 29 ++++++++++++------
  include/kunit/visibility.h              |  1 +
  lib/Kconfig.debug                       | 16 ++++++++++
  lib/math/Makefile                       |  1 +
  lib/math/tests/Makefile                 |  3 ++
  lib/math/tests/int_pow_kunit.c          | 52 +++++++++++++++++++++++++++++++++
  tools/testing/kunit/kunit_kernel.py     |  3 +-
  7 files changed, 95 insertions(+), 10 deletions(-)
  create mode 100644 lib/math/tests/Makefile
  create mode 100644 lib/math/tests/int_pow_kunit.c

----------------------------------------------------------------
--------------lDmTx2uXH530aimSr6U5KQT6
Content-Type: text/x-patch; charset=UTF-8;
 name="linux_kselftest-kunit-6.12-rc1.diff"
Content-Disposition: attachment;
 filename="linux_kselftest-kunit-6.12-rc1.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0eWxlLnJzdCBi
L0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0eWxlLnJzdAppbmRleCBiNmQwZDcz
NTlmMDAuLmVhYzgxYTcxNGEyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9v
bHMva3VuaXQvc3R5bGUucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0
L3N0eWxlLnJzdApAQCAtMTg4LDE1ICsxODgsMjYgQEAgRm9yIGV4YW1wbGUsIGEgS2NvbmZp
ZyBlbnRyeSBtaWdodCBsb29rIGxpa2U6CiBUZXN0IEZpbGUgYW5kIE1vZHVsZSBOYW1lcwog
PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotS1VuaXQgdGVzdHMgY2FuIG9mdGVuIGJl
IGNvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGVzZSBtb2R1bGVzIHNob3VsZCBiZSBuYW1lZAot
YWZ0ZXIgdGhlIHRlc3Qgc3VpdGUsIGZvbGxvd2VkIGJ5IGBgX3Rlc3RgYC4gSWYgdGhpcyBp
cyBsaWtlbHkgdG8gY29uZmxpY3Qgd2l0aAotbm9uLUtVbml0IHRlc3RzLCB0aGUgc3VmZml4
IGBgX2t1bml0YGAgY2FuIGFsc28gYmUgdXNlZC4KK0tVbml0IHRlc3RzIGFyZSBvZnRlbiBj
b21waWxlZCBhcyBhIHNlcGFyYXRlIG1vZHVsZS4gVG8gYXZvaWQgY29uZmxpY3RpbmcKK3dp
dGggcmVndWxhciBtb2R1bGVzLCBLVW5pdCBtb2R1bGVzIHNob3VsZCBiZSBuYW1lZCBhZnRl
ciB0aGUgdGVzdCBzdWl0ZSwKK2ZvbGxvd2VkIGJ5IGBgX2t1bml0YGAgKGUuZy4gaWYgImZv
b2JhciIgaXMgdGhlIGNvcmUgbW9kdWxlLCB0aGVuCisiZm9vYmFyX2t1bml0IiBpcyB0aGUg
S1VuaXQgdGVzdCBtb2R1bGUpLgogCi1UaGUgZWFzaWVzdCB3YXkgb2YgYWNoaWV2aW5nIHRo
aXMgaXMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0IHN1aXRlCi1gYDxz
dWl0ZT5fdGVzdC5jYGAgKG9yLCBhcyBhYm92ZSwgYGA8c3VpdGU+X2t1bml0LmNgYCkuIFRo
aXMgZmlsZSBzaG91bGQgYmUKLXBsYWNlZCBuZXh0IHRvIHRoZSBjb2RlIHVuZGVyIHRlc3Qu
CitUZXN0IHNvdXJjZSBmaWxlcywgd2hldGhlciBjb21waWxlZCBhcyBhIHNlcGFyYXRlIG1v
ZHVsZSBvciBhbgorYGAjaW5jbHVkZWBgIGluIGFub3RoZXIgc291cmNlIGZpbGUsIGFyZSBi
ZXN0IGtlcHQgaW4gYSBgYHRlc3RzL2BgCitzdWJkaXJlY3RvcnkgdG8gbm90IGNvbmZsaWN0
IHdpdGggb3RoZXIgc291cmNlIGZpbGVzIChlLmcuIGZvcgordGFiLWNvbXBsZXRpb24pLgor
CitOb3RlIHRoYXQgdGhlIGBgX3Rlc3RgYCBzdWZmaXggaGFzIGFsc28gYmVlbiB1c2VkIGlu
IHNvbWUgZXhpc3RpbmcKK3Rlc3RzLiBUaGUgYGBfa3VuaXRgYCBzdWZmaXggaXMgcHJlZmVy
cmVkLCBhcyBpdCBtYWtlcyB0aGUgZGlzdGluY3Rpb24KK2JldHdlZW4gS1VuaXQgYW5kIG5v
bi1LVW5pdCB0ZXN0cyBjbGVhcmVyLgorCitTbyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBuYW1l
IHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3Qgc3VpdGUKK2BgdGVzdHMvPHN1aXRlPl9r
dW5pdC5jYGAuIFRoZSBgYHRlc3RzYGAgZGlyZWN0b3J5IHNob3VsZCBiZSBwbGFjZWQgYXQK
K3RoZSBzYW1lIGxldmVsIGFzIHRoZSBjb2RlIHVuZGVyIHRlc3QuIEZvciBleGFtcGxlLCB0
ZXN0cyBmb3IKK2BgbGliL3N0cmluZy5jYGAgbGl2ZSBpbiBgYGxpYi90ZXN0cy9zdHJpbmdf
a3VuaXQuY2BgLgogCiBJZiB0aGUgc3VpdGUgbmFtZSBjb250YWlucyBzb21lIG9yIGFsbCBv
ZiB0aGUgbmFtZSBvZiB0aGUgdGVzdCdzIHBhcmVudAotZGlyZWN0b3J5LCBpdCBtYXkgbWFr
ZSBzZW5zZSB0byBtb2RpZnkgdGhlIHNvdXJjZSBmaWxlbmFtZSB0byByZWR1Y2UgcmVkdW5k
YW5jeS4KLUZvciBleGFtcGxlLCBhIGBgZm9vX2Zpcm13YXJlYGAgc3VpdGUgY291bGQgYmUg
aW4gdGhlIGBgZm9vL2Zpcm13YXJlX3Rlc3QuY2BgCi1maWxlLgorZGlyZWN0b3J5LCBpdCBt
YXkgbWFrZSBzZW5zZSB0byBtb2RpZnkgdGhlIHNvdXJjZSBmaWxlbmFtZSB0byByZWR1Y2UK
K3JlZHVuZGFuY3kuIEZvciBleGFtcGxlLCBhIGBgZm9vX2Zpcm13YXJlYGAgc3VpdGUgY291
bGQgYmUgaW4gdGhlCitgYGZvby90ZXN0cy9maXJtd2FyZV9rdW5pdC5jYGAgZmlsZS4KZGlm
ZiAtLWdpdCBhL2luY2x1ZGUva3VuaXQvdmlzaWJpbGl0eS5oIGIvaW5jbHVkZS9rdW5pdC92
aXNpYmlsaXR5LmgKaW5kZXggMGRmZTM1ZmVlZWM2Li5lZmZmNzdiNThkZDYgMTAwNjQ0Ci0t
LSBhL2luY2x1ZGUva3VuaXQvdmlzaWJpbGl0eS5oCisrKyBiL2luY2x1ZGUva3VuaXQvdmlz
aWJpbGl0eS5oCkBAIC0yMiw2ICsyMiw3IEBACiAgICAgICogRVhQT1JURURfRk9SX0tVTklU
X1RFU1RJTkcgbmFtZXNwYWNlIG9ubHkgaWYgQ09ORklHX0tVTklUIGlzCiAgICAgICogZW5h
YmxlZC4gTXVzdCB1c2UgTU9EVUxFX0lNUE9SVF9OUyhFWFBPUlRFRF9GT1JfS1VOSVRfVEVT
VElORykKICAgICAgKiBpbiB0ZXN0IGZpbGUgaW4gb3JkZXIgdG8gdXNlIHN5bWJvbHMuCisg
ICAgICogQHN5bWJvbDogdGhlIHN5bWJvbCBpZGVudGlmaWVyIHRvIGV4cG9ydAogICAgICAq
LwogICAgICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW1ib2wpIEVYUE9SVF9T
WU1CT0xfTlMoc3ltYm9sLCBcCiAJICAgIEVYUE9SVEVEX0ZPUl9LVU5JVF9URVNUSU5HKQpk
aWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRl
eCBhMzBjMDNhNjYxNzIuLmI1Njk2NjU5ZjAyNyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcu
ZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTMwNTEsMyArMzA1MSwxOSBAQCBj
b25maWcgUlVTVF9LRVJORUxfRE9DVEVTVFMKIGVuZG1lbnUgIyAiUnVzdCIKIAogZW5kbWVu
dSAjIEtlcm5lbCBoYWNraW5nCisKK2NvbmZpZyBJTlRfUE9XX1RFU1QKKwl0cmlzdGF0ZSAi
SW50ZWdlciBleHBvbmVudGlhdGlvbiAoaW50X3BvdykgdGVzdCIgaWYgIUtVTklUX0FMTF9U
RVNUUworCWRlcGVuZHMgb24gS1VOSVQKKwlkZWZhdWx0IEtVTklUX0FMTF9URVNUUworCWhl
bHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEtVbml0IHRlc3Qgc3VpdGUgZm9yIHRo
ZSBpbnRfcG93IGZ1bmN0aW9uLAorCSAgd2hpY2ggcGVyZm9ybXMgaW50ZWdlciBleHBvbmVu
dGlhdGlvbi4gVGhlIHRlc3Qgc3VpdGUgaXMgZGVzaWduZWQgdG8KKwkgIHZlcmlmeSB0aGF0
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpbnRfcG93IGNvcnJlY3RseSBjb21wdXRlcyB0aGUg
cG93ZXIKKwkgIG9mIGEgZ2l2ZW4gYmFzZSByYWlzZWQgdG8gYSBnaXZlbiBleHBvbmVudC4K
KworCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBpbmNsdWRlIHRlc3RzIHRoYXQgY2hl
Y2sgdmFyaW91cyBzY2VuYXJpb3MKKwkgIGFuZCBlZGdlIGNhc2VzIHRvIGVuc3VyZSB0aGUg
YWNjdXJhY3kgYW5kIHJlbGlhYmlsaXR5IG9mIHRoZSBleHBvbmVudGlhdGlvbgorCSAgZnVu
Y3Rpb24uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4KZGlmZiAtLWdpdCBhL2xpYi9tYXRoL01h
a2VmaWxlIGIvbGliL21hdGgvTWFrZWZpbGUKaW5kZXggOTFmY2RiMGM5ZWZlLi4zYzFmOTJh
NzQ1OWQgMTAwNjQ0Ci0tLSBhL2xpYi9tYXRoL01ha2VmaWxlCisrKyBiL2xpYi9tYXRoL01h
a2VmaWxlCkBAIC01LDUgKzUsNiBAQCBvYmotJChDT05GSUdfQ09SRElDKQkJKz0gY29yZGlj
Lm8KIG9iai0kKENPTkZJR19QUklNRV9OVU1CRVJTKQkrPSBwcmltZV9udW1iZXJzLm8KIG9i
ai0kKENPTkZJR19SQVRJT05BTCkJCSs9IHJhdGlvbmFsLm8KIAorb2JqLSQoQ09ORklHX0lO
VF9QT1dfVEVTVCkgICs9IHRlc3RzL2ludF9wb3dfa3VuaXQubwogb2JqLSQoQ09ORklHX1RF
U1RfRElWNjQpCSs9IHRlc3RfZGl2NjQubwogb2JqLSQoQ09ORklHX1JBVElPTkFMX0tVTklU
X1RFU1QpICs9IHJhdGlvbmFsLXRlc3QubwpkaWZmIC0tZ2l0IGEvbGliL21hdGgvdGVzdHMv
TWFrZWZpbGUgYi9saWIvbWF0aC90ZXN0cy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjZhMTY5MTIzMzIwYQotLS0gL2Rldi9udWxsCisrKyBi
L2xpYi9tYXRoL3Rlc3RzL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisKK29iai0kKENPTkZJR19JTlRfUE9XX1RF
U1QpICs9IGludF9wb3dfa3VuaXQubwpkaWZmIC0tZ2l0IGEvbGliL21hdGgvdGVzdHMvaW50
X3Bvd19rdW5pdC5jIGIvbGliL21hdGgvdGVzdHMvaW50X3Bvd19rdW5pdC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzRiMzM2NzdkNDU4Ci0tLSAvZGV2
L251bGwKKysrIGIvbGliL21hdGgvdGVzdHMvaW50X3Bvd19rdW5pdC5jCkBAIC0wLDAgKzEs
NTIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKworI2lu
Y2x1ZGUgPGt1bml0L3Rlc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoLmg+CisKK3N0cnVj
dCB0ZXN0X2Nhc2VfcGFyYW1zIHsKKwl1NjQgYmFzZTsKKwl1bnNpZ25lZCBpbnQgZXhwb25l
bnQ7CisJdTY0IGV4cGVjdGVkX3Jlc3VsdDsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0X2Nhc2VfcGFyYW1zIHBhcmFtc1tdID0geworCXsg
NjQsIDAsIDEsICJQb3dlciBvZiB6ZXJvIiB9LAorCXsgNjQsIDEsIDY0LCAiUG93ZXIgb2Yg
b25lIn0sCisJeyAwLCA1LCAwLCAiQmFzZSB6ZXJvIiB9LAorCXsgMSwgNjQsIDEsICJCYXNl
IG9uZSIgfSwKKwl7IDIsIDIsIDQsICJUd28gc3F1YXJlZCJ9LAorCXsgMiwgMywgOCwgIlR3
byBjdWJlZCJ9LAorCXsgNSwgNSwgMzEyNSwgIkZpdmUgcmFpc2VkIHRvIHRoZSBmaWZ0aCBw
b3dlciIgfSwKKwl7IFU2NF9NQVgsIDEsIFU2NF9NQVgsICJNYXggYmFzZSIgfSwKKwl7IDIs
IDYzLCA5MjIzMzcyMDM2ODU0Nzc1ODA4VUxMLCAiTGFyZ2UgcmVzdWx0In0sCit9OworCitz
dGF0aWMgdm9pZCBnZXRfZGVzYyhjb25zdCBzdHJ1Y3QgdGVzdF9jYXNlX3BhcmFtcyAqdGMs
IGNoYXIgKmRlc2MpCit7CisJc3Ryc2NweShkZXNjLCB0Yy0+bmFtZSwgS1VOSVRfUEFSQU1f
REVTQ19TSVpFKTsKK30KKworS1VOSVRfQVJSQVlfUEFSQU0oaW50X3BvdywgcGFyYW1zLCBn
ZXRfZGVzYyk7CisKK3N0YXRpYyB2b2lkIGludF9wb3dfdGVzdChzdHJ1Y3Qga3VuaXQgKnRl
c3QpCit7CisJY29uc3Qgc3RydWN0IHRlc3RfY2FzZV9wYXJhbXMgKnRjID0gKGNvbnN0IHN0
cnVjdCB0ZXN0X2Nhc2VfcGFyYW1zICopdGVzdC0+cGFyYW1fdmFsdWU7CisKKwlLVU5JVF9F
WFBFQ1RfRVEodGVzdCwgdGMtPmV4cGVjdGVkX3Jlc3VsdCwgaW50X3Bvdyh0Yy0+YmFzZSwg
dGMtPmV4cG9uZW50KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtYXRoX2lu
dF9wb3dfdGVzdF9jYXNlc1tdID0geworCUtVTklUX0NBU0VfUEFSQU0oaW50X3Bvd190ZXN0
LCBpbnRfcG93X2dlbl9wYXJhbXMpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGt1bml0
X3N1aXRlIGludF9wb3dfdGVzdF9zdWl0ZSA9IHsKKwkubmFtZSA9ICJtYXRoLWludF9wb3ci
LAorCS50ZXN0X2Nhc2VzID0gbWF0aF9pbnRfcG93X3Rlc3RfY2FzZXMsCit9OworCitrdW5p
dF90ZXN0X3N1aXRlcygmaW50X3Bvd190ZXN0X3N1aXRlKTsKKworTU9EVUxFX0RFU0NSSVBU
SU9OKCJtYXRoLmludF9wb3cgS1VuaXQgdGVzdCBzdWl0ZSIpOworTU9EVUxFX0xJQ0VOU0Uo
IkdQTCIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdW5pdC9rdW5pdF9rZXJuZWwu
cHkgYi90b29scy90ZXN0aW5nL2t1bml0L2t1bml0X2tlcm5lbC5weQppbmRleCA3MjU0YzEx
MGZmMjMuLjYxOTMxYzQ5MjZmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9rdW5pdC9r
dW5pdF9rZXJuZWwucHkKKysrIGIvdG9vbHMvdGVzdGluZy9rdW5pdC9rdW5pdF9rZXJuZWwu
cHkKQEAgLTcyLDcgKzcyLDggQEAgY2xhc3MgTGludXhTb3VyY2VUcmVlT3BlcmF0aW9uczoK
IAkJCXJhaXNlIENvbmZpZ0Vycm9yKGUub3V0cHV0LmRlY29kZSgpKQogCiAJZGVmIG1ha2Uo
c2VsZiwgam9iczogaW50LCBidWlsZF9kaXI6IHN0ciwgbWFrZV9vcHRpb25zOiBPcHRpb25h
bFtMaXN0W3N0cl1dKSAtPiBOb25lOgotCQljb21tYW5kID0gWydtYWtlJywgJ0FSQ0g9JyAr
IHNlbGYuX2xpbnV4X2FyY2gsICdPPScgKyBidWlsZF9kaXIsICctLWpvYnM9JyArIHN0cihq
b2JzKV0KKwkJY29tbWFuZCA9IFsnbWFrZScsICdhbGwnLCAnY29tcGlsZV9jb21tYW5kcy5q
c29uJywgJ0FSQ0g9JyArIHNlbGYuX2xpbnV4X2FyY2gsCisJCQkgICAnTz0nICsgYnVpbGRf
ZGlyLCAnLS1qb2JzPScgKyBzdHIoam9icyldCiAJCWlmIG1ha2Vfb3B0aW9uczoKIAkJCWNv
bW1hbmQuZXh0ZW5kKG1ha2Vfb3B0aW9ucykKIAkJaWYgc2VsZi5fY3Jvc3NfY29tcGlsZToK


--------------lDmTx2uXH530aimSr6U5KQT6--

.
Date: Tue, 17 Sep 2024 01:23:30 -0500
From: Steve French <smfrench@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, CIFS <linux-cifs@vger.kernel.org>, 
	Namjae Jeon <linkinjeon@kernel.org>
Subject: [GIT PULL] ksmbd server fixes

Please pull the following changes since commit
da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.samba.org/ksmbd.git tags/6.12-rc-ksmbd-server-fixes-part1

for you to fetch changes up to c5a709f08d40b1a082e44ffcde1aea4d2822ddd5:

  ksmbd: handle caseless file creation (2024-09-14 00:03:15 -0500)

----------------------------------------------------------------
Four ksmbd server fixes, three for stable
- Fix the issue where the directory can't be deleted if the share is
on a file system that does not provide dot and dotdot entries.
- Fix file creation failure if the parent name of pathname is case sensitive.
- Fix write failure with FILE_APPEND_DATA flags.
- Add reference count to connection struct to protect UAF of oplocks
on multichannel.
----------------------------------------------------------------
Hobin Woo (1):
      ksmbd: make __dir_empty() compatible with POSIX

Namjae Jeon (3):
      ksmbd: allow write with FILE_APPEND_DATA
      ksmbd: add refcnt to ksmbd_conn struct
      ksmbd: handle caseless file creation

 fs/smb/server/connection.c |  4 +++-
 fs/smb/server/connection.h |  1 +
 fs/smb/server/oplock.c     | 55
++++++++++++++++---------------------------------------
 fs/smb/server/vfs.c        | 19 ++++++++-----------
 fs/smb/server/vfs_cache.c  |  3 +++
 5 files changed, 31 insertions(+), 51 deletions(-)

-- 
Thanks,

Steve

.
Date: Tue, 17 Sep 2024 08:46:53 +0200
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Linus <torvalds@linux-foundation.org>,
	linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Viresh Kumar <viresh.kumar@linaro.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [GIT PULL] pmdomain/cpuidle-psci updates for v6.12

Hi Linus,

Here's the PR with pmdomain and cpuidle-psci updates for v6.12. Details about
the highlights are as usual found in the signed tag.

Please pull this in!

Kind regards
Ulf Hansson


The following changes since commit 9ec87c5957ea9bf68d36f5e098605b585b2571e4:

  OPP: Fix support for required OPPs for multiple PM domains (2024-08-23 11:57:44 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm.git tags/pmdomain-v6.12

for you to fetch changes up to c6ccb691d484544636bc4a097574c5c135ccccda:

  pmdomain: core: Reduce debug summary table width (2024-09-13 13:41:33 +0200)

----------------------------------------------------------------
pmdomain core:
 - Add support for s2idle for CPU PM domains on PREEMPT_RT
 - Add device managed version of dev_pm_domain_attach|detach_list()
 - Improve layout of the debugfs summary table

pmdomain providers:
 - amlogic: Remove obsolete vpu domain driver
 - bcm: raspberrypi: Add support for devices used as wakeup-sources
 - imx: Fixup clock handling for imx93 at driver remove
 - rockchip: Add gating support for RK3576
 - rockchip: Add support for RK3576 SoC
 - Some OF parsing simplifications
 - Some simplifications by using dev_err_probe() and guard()

pmdomain consumers:
 - qcom/media/venus: Convert to the device managed APIs for PM domains

cpuidle-psci:
 - Add support for s2idle/s2ram for the hierarchical topology on PREEMPT_RT
 - Some OF parsing simplifications

----------------------------------------------------------------
Dario Binacchi (3):
      pmdomain: imx93-pd: replace dev_err() with dev_err_probe()
      pmdomain: imx93-pd: don't unprepare clocks on driver remove
      pmdomain: imx93-pd: drop the context variable "init_off"

Detlev Casanova (2):
      pmdomain: rockchip: Add gating support
      pmdomain: rockchip: Add gating masks for rk3576

Dikshita Agarwal (2):
      PM: domains: add device managed version of dev_pm_domain_attach|detach_list()
      media: venus: use device managed APIs for power domains

Finley Xiao (2):
      dt-bindings: power: Add support for RK3576 SoC
      pmdomain: rockchip: Add support for RK3576 SoC

Geert Uytterhoeven (4):
      pmdomain: core: Harden inter-column space in debug summary
      pmdomain: core: Fix "managed by" alignment in debug summary
      pmdomain: core: Move mode_status_str()
      pmdomain: core: Reduce debug summary table width

Hongbo Li (1):
      pmdomain: mediatek: make use of dev_err_cast_probe()

Jerome Brunet (1):
      pmdomain: amlogic: remove obsolete vpu domain driver

Jinjie Ruan (1):
      pmdomain: apple: Make apple_pmgr_reset_ops static

Krzysztof Kozlowski (11):
      cpuidle: psci: Simplify with scoped for each OF child loop
      cpuidle: dt_idle_genpd: Simplify with scoped for each OF child loop
      pmdomain: rockchip: Simplify with scoped for each OF child loop
      pmdomain: rockchip: Simplify locking with guard()
      pmdomain: imx: gpc: Simplify with scoped for each OF child loop
      pmdomain: imx: gpcv2: Simplify with scoped for each OF child loop
      pmdomain: qcom: cpr: Simplify with dev_err_probe()
      pmdomain: qcom: cpr: Simplify locking with guard()
      pmdomain: qcom: rpmhpd: Simplify locking with guard()
      pmdomain: qcom: rpmpd: Simplify locking with guard()
      pmdomain: rockchip: Simplify dropping OF node reference

Stefan Wahren (3):
      pmdomain: raspberrypi-power: Adjust packet definition
      pmdomain: raspberrypi-power: Add logging to rpi_firmware_set_power
      pmdomain: raspberrypi-power: set flag GENPD_FLAG_ACTIVE_WAKEUP

Ulf Hansson (11):
      pmdomain: core: Enable s2idle for CPU PM domains on PREEMPT_RT
      pmdomain: core: Don't hold the genpd-lock when calling dev_pm_domain_set()
      pmdomain: core: Use dev_name() instead of kobject_get_path() in debugfs
      cpuidle: psci-domain: Enable system-wide suspend on PREEMPT_RT
      cpuidle: psci: Drop redundant assignment of CPUIDLE_FLAG_RCU_IDLE
      cpuidle: psci: Enable the hierarchical topology for s2ram on PREEMPT_RT
      cpuidle: psci: Enable the hierarchical topology for s2idle on PREEMPT_RT
      pmdomain: Merge branch fixes into next
      pmdomain: Merge branch fixes into next
      pmdomain: Merge branch dt into next
      pmdomain: Merge branch fixes into next

Zhang Zekun (2):
      pmdomain: qcom-cpr: Use helper function for_each_available_child_of_node()
      pmdomain: qcom-cpr: Use scope based of_node_put() to simplify code.

 .../bindings/power/rockchip,power-controller.yaml  |   1 +
 drivers/base/power/common.c                        |  45 +++
 drivers/cpuidle/cpuidle-psci-domain.c              |  17 +-
 drivers/cpuidle/cpuidle-psci.c                     |  26 +-
 drivers/cpuidle/dt_idle_genpd.c                    |  14 +-
 drivers/media/platform/qcom/venus/pm_helpers.c     |   5 +-
 drivers/pmdomain/amlogic/Kconfig                   |  11 -
 drivers/pmdomain/amlogic/Makefile                  |   1 -
 drivers/pmdomain/amlogic/meson-gx-pwrc-vpu.c       | 380 ---------------------
 drivers/pmdomain/apple/pmgr-pwrstate.c             |   2 +-
 drivers/pmdomain/bcm/raspberrypi-power.c           |  43 ++-
 drivers/pmdomain/core.c                            |  94 +++--
 drivers/pmdomain/imx/gpc.c                         |  14 +-
 drivers/pmdomain/imx/gpcv2.c                       |   8 +-
 drivers/pmdomain/imx/imx93-pd.c                    |  22 +-
 drivers/pmdomain/mediatek/mtk-pm-domains.c         |   6 +-
 drivers/pmdomain/qcom/cpr.c                        |  92 ++---
 drivers/pmdomain/qcom/rpmhpd.c                     |  11 +-
 drivers/pmdomain/qcom/rpmpd.c                      |  20 +-
 drivers/pmdomain/rockchip/pm-domains.c             | 118 +++++--
 include/dt-bindings/power/rockchip,rk3576-power.h  |  30 ++
 include/linux/pm_domain.h                          |  16 +-
 22 files changed, 373 insertions(+), 603 deletions(-)
 delete mode 100644 drivers/pmdomain/amlogic/meson-gx-pwrc-vpu.c
 create mode 100644 include/dt-bindings/power/rockchip,rk3576-power.h

.
Date: Tue, 17 Sep 2024 03:22:17 -0500
From: Steve French <smfrench@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, CIFS <linux-cifs@vger.kernel.org>
Subject: [GIT PULL] smb3 client fixes

Please pull the following changes since commit
98f7e32f20d28ec452afb208f9cffc08448a2652:

  Linux 6.11 (2024-09-15 16:57:56 +0200)

are available in the Git repository at:

  git://git.samba.org/sfrench/cifs-2.6.git tags/v6.12-rc-smb3-client-fixes-=
part1

for you to fetch changes up to 5ac1f99fdd09d80223e8f47dffaea41a6563aace:

  smb: client: fix compression heuristic functions (2024-09-16 20:10:39 -05=
00)

----------------------------------------------------------------
SMB3 client fixes
 11 cleanup changesets (moving duplicated code, removing unused code etc.)
 7 fixes relating to "sfu" mount options (for better handling special
file types)
 6 SMB3.1.1 compression fixes/improvements
----------------------------------------------------------------
ChenXiaoSong (7):
      smb/client: rename cifs_ntsd to smb_ntsd
      smb/client: rename cifs_sid to smb_sid
      smb/client: rename cifs_acl to smb_acl
      smb/client: rename cifs_ace to smb_ace
      smb: move some duplicate definitions to common/smbacl.h
      smb: move SMB2 Status code to common header file
      smb: add comment to STATUS_MCA_OCCURED

Enzo Matsumiya (3):
      smb: client: insert compression check/call on write requests
      smb: client: compress: LZ77 code improvements cleanup
      smb: client: fix compression heuristic functions

Gaosheng Cui (1):
      cifs: Remove obsoleted declaration for cifs_dir_open

Hongbo Li (1):
      smb: use LIST_HEAD() to simplify code

Pali Roh=C3=A1r (7):
      cifs: Fix recognizing SFU symlinks
      cifs: Add support for reading SFU symlink location
      cifs: Put explicit zero byte into SFU block/char types
      cifs: Show debug message when SFU Fifo type was detected
      cifs: Recognize SFU socket type
      cifs: Add support for creating SFU symlinks
      cifs: Update SFU comments about fifos and sockets

Qianqiang Liu (2):
      smb: client: compress: fix a potential issue of freeing an invalid po=
inter
      smb: client: compress: fix an "illegal accesses" issue

Shen Lichuan (1):
      smb: client: Use min() macro

Steve French (1):
      smb3: mark compression as CONFIG_EXPERIMENTAL and fix missing
compression operation

Yuesong Li (1):
      cifs: convert to use ERR_CAST()

 fs/smb/client/Kconfig                  |   14 +
 fs/smb/client/Makefile                 |    2 +
 fs/smb/client/cifs_debug.c             |    7 +-
 fs/smb/client/cifsacl.c                |  226 +++---
 fs/smb/client/cifsacl.h                |   99 +--
 fs/smb/client/cifsfs.h                 |    1 -
 fs/smb/client/cifsglob.h               |   25 +-
 fs/smb/client/cifspdu.h                |    6 -
 fs/smb/client/cifsproto.h              |   28 +-
 fs/smb/client/cifssmb.c                |   14 +-
 fs/smb/client/compress.c               |  390 ++++++++++
 fs/smb/client/compress.h               |   90 +++
 fs/smb/client/compress/lz77.c          |  235 ++++++
 fs/smb/client/compress/lz77.h          |   15 +
 fs/smb/client/connect.c                |    5 +-
 fs/smb/client/file.c                   |    7 +-
 fs/smb/client/fs_context.c             |   20 +-
 fs/smb/client/inode.c                  |   42 +-
 fs/smb/client/link.c                   |    3 +
 fs/smb/client/misc.c                   |    9 +-
 fs/smb/client/smb1ops.c                |    2 +-
 fs/smb/client/smb2file.c               |    6 +-
 fs/smb/client/smb2inode.c              |    6 +-
 fs/smb/client/smb2maperror.c           |    2 +-
 fs/smb/client/smb2misc.c               |    2 +-
 fs/smb/client/smb2ops.c                |   98 ++-
 fs/smb/client/smb2pdu.c                |   19 +-
 fs/smb/client/smb2pdu.h                |    8 +-
 fs/smb/client/smb2proto.h              |    2 +-
 fs/smb/client/smb2transport.c          |    2 +-
 fs/smb/client/smbdirect.c              |    6 +-
 fs/smb/client/transport.c              |    4 +
 fs/smb/client/xattr.c                  |    4 +-
 fs/smb/{client =3D> common}/smb2status.h |    6 +
 fs/smb/common/smbacl.h                 |  121 ++++
 fs/smb/server/oplock.c                 |    2 +-
 fs/smb/server/server.c                 |    2 +-
 fs/smb/server/smb2misc.c               |    2 +-
 fs/smb/server/smb2pdu.c                |    2 +-
 fs/smb/server/smb_common.c             |    2 +-
 fs/smb/server/smbacl.h                 |  111 +--
 fs/smb/server/smbstatus.h              | 1822
-----------------------------------------------
 fs/smb/server/transport_rdma.c         |    2 +-
 43 files changed, 1206 insertions(+), 2265 deletions(-)
 create mode 100644 fs/smb/client/compress.c
 create mode 100644 fs/smb/client/compress.h
 create mode 100644 fs/smb/client/compress/lz77.c
 create mode 100644 fs/smb/client/compress/lz77.h
 rename fs/smb/{client =3D> common}/smb2status.h (99%)
 create mode 100644 fs/smb/common/smbacl.h
 delete mode 100644 fs/smb/server/smbstatus.h


--
Thanks,

Steve

.
Date: Tue, 17 Sep 2024 10:54:10 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/fpu for v6.12-rc1

Linus,

please pull the latest x86/fpu branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-fpu-2024-09-=
17

up to:  ba386777a30b: x86/elf: Add a new FPU buffer layout info to x86 core f=
iles

Provide FPU buffer layout in core dumps:

  Debuggers have guess the FPU buffer layout in core dumps, which is error
  prone. This is because AMD and Intel layouts differ.

  To avoid buggy heuristics add a ELF section which describes the buffer
  layout which can be retrieved by tools.

Thanks,

	tglx

------------------>
Vignesh Balasubramanian (1):
      x86/elf: Add a new FPU buffer layout info to x86 core files


 arch/x86/Kconfig                |  1 +
 arch/x86/include/uapi/asm/elf.h | 16 ++++++++
 arch/x86/kernel/fpu/xstate.c    | 89 +++++++++++++++++++++++++++++++++++++++=
++
 fs/binfmt_elf.c                 |  4 +-
 include/uapi/linux/elf.h        |  1 +
 5 files changed, 109 insertions(+), 2 deletions(-)
 create mode 100644 arch/x86/include/uapi/asm/elf.h

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 007bab9f2a0e..c15b4b3fb328 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -107,6 +107,7 @@ config X86
 	select ARCH_HAS_DEBUG_WX
 	select ARCH_HAS_ZONE_DMA_SET if EXPERT
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
+	select ARCH_HAVE_EXTRA_ELF_NOTES
 	select ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
 	select ARCH_MIGHT_HAVE_ACPI_PDC		if ACPI
 	select ARCH_MIGHT_HAVE_PC_PARPORT
diff --git a/arch/x86/include/uapi/asm/elf.h b/arch/x86/include/uapi/asm/elf.h
new file mode 100644
index 000000000000..468e135fa285
--- /dev/null
+++ b/arch/x86/include/uapi/asm/elf.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI_ASM_X86_ELF_H
+#define _UAPI_ASM_X86_ELF_H
+
+#include <linux/types.h>
+
+struct x86_xfeat_component {
+	__u32 type;
+	__u32 size;
+	__u32 offset;
+	__u32 flags;
+} __packed;
+
+_Static_assert(sizeof(struct x86_xfeat_component) % 4 =3D=3D 0, "x86_xfeat_c=
omponent is not aligned");
+
+#endif /* _UAPI_ASM_X86_ELF_H */
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
index c5a026fee5e0..f3a2e59a28e7 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -13,6 +13,7 @@
 #include <linux/seq_file.h>
 #include <linux/proc_fs.h>
 #include <linux/vmalloc.h>
+#include <linux/coredump.h>
=20
 #include <asm/fpu/api.h>
 #include <asm/fpu/regset.h>
@@ -23,6 +24,8 @@
 #include <asm/prctl.h>
 #include <asm/elf.h>
=20
+#include <uapi/asm/elf.h>
+
 #include "context.h"
 #include "internal.h"
 #include "legacy.h"
@@ -1838,3 +1841,89 @@ int proc_pid_arch_status(struct seq_file *m, struct pi=
d_namespace *ns,
 	return 0;
 }
 #endif /* CONFIG_PROC_PID_ARCH_STATUS */
+
+#ifdef CONFIG_COREDUMP
+static const char owner_name[] =3D "LINUX";
+
+/*
+ * Dump type, size, offset and flag values for every xfeature that is presen=
t.
+ */
+static int dump_xsave_layout_desc(struct coredump_params *cprm)
+{
+	int num_records =3D 0;
+	int i;
+
+	for_each_extended_xfeature(i, fpu_user_cfg.max_features) {
+		struct x86_xfeat_component xc =3D {
+			.type   =3D i,
+			.size   =3D xstate_sizes[i],
+			.offset =3D xstate_offsets[i],
+			/* reserved for future use */
+			.flags  =3D 0,
+		};
+
+		if (!dump_emit(cprm, &xc, sizeof(xc)))
+			return 0;
+
+		num_records++;
+	}
+	return num_records;
+}
+
+static u32 get_xsave_desc_size(void)
+{
+	u32 cnt =3D 0;
+	u32 i;
+
+	for_each_extended_xfeature(i, fpu_user_cfg.max_features)
+		cnt++;
+
+	return cnt * (sizeof(struct x86_xfeat_component));
+}
+
+int elf_coredump_extra_notes_write(struct coredump_params *cprm)
+{
+	int num_records =3D 0;
+	struct elf_note en;
+
+	if (!fpu_user_cfg.max_features)
+		return 0;
+
+	en.n_namesz =3D sizeof(owner_name);
+	en.n_descsz =3D get_xsave_desc_size();
+	en.n_type =3D NT_X86_XSAVE_LAYOUT;
+
+	if (!dump_emit(cprm, &en, sizeof(en)))
+		return 1;
+	if (!dump_emit(cprm, owner_name, en.n_namesz))
+		return 1;
+	if (!dump_align(cprm, 4))
+		return 1;
+
+	num_records =3D dump_xsave_layout_desc(cprm);
+	if (!num_records)
+		return 1;
+
+	/* Total size should be equal to the number of records */
+	if ((sizeof(struct x86_xfeat_component) * num_records) !=3D en.n_descsz)
+		return 1;
+
+	return 0;
+}
+
+int elf_coredump_extra_notes_size(void)
+{
+	int size;
+
+	if (!fpu_user_cfg.max_features)
+		return 0;
+
+	/* .note header */
+	size  =3D sizeof(struct elf_note);
+	/*  Name plus alignment to 4 bytes */
+	size +=3D roundup(sizeof(owner_name), 4);
+	size +=3D get_xsave_desc_size();
+
+	return size;
+}
+#endif /* CONFIG_COREDUMP */
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 19fa49cd9907..01bcbe7fdebd 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -2039,7 +2039,7 @@ static int elf_core_dump(struct coredump_params *cprm)
 	{
 		size_t sz =3D info.size;
=20
-		/* For cell spufs */
+		/* For cell spufs and x86 xstate */
 		sz +=3D elf_coredump_extra_notes_size();
=20
 		phdr4note =3D kmalloc(sizeof(*phdr4note), GFP_KERNEL);
@@ -2103,7 +2103,7 @@ static int elf_core_dump(struct coredump_params *cprm)
 	if (!write_note_info(&info, cprm))
 		goto end_coredump;
=20
-	/* For cell spufs */
+	/* For cell spufs and x86 xstate */
 	if (elf_coredump_extra_notes_write(cprm))
 		goto end_coredump;
=20
diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
index b54b313bcf07..e30a9b47dc87 100644
--- a/include/uapi/linux/elf.h
+++ b/include/uapi/linux/elf.h
@@ -411,6 +411,7 @@ typedef struct elf64_shdr {
 #define NT_X86_XSTATE	0x202		/* x86 extended state using xsave */
 /* Old binutils treats 0x203 as a CET state */
 #define NT_X86_SHSTK	0x204		/* x86 SHSTK state */
+#define NT_X86_XSAVE_LAYOUT	0x205	/* XSAVE layout description */
 #define NT_S390_HIGH_GPRS	0x300	/* s390 upper register halves */
 #define NT_S390_TIMER	0x301		/* s390 timer register */
 #define NT_S390_TODCMP	0x302		/* s390 TOD clock comparator register */


.
Date: Tue, 17 Sep 2024 10:54:05 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/build for v6.12-rc1

Linus,

please pull the latest x86/build branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-build-2024-0=
9-17

up to:  ae94b263f5f6: x86: Ignore stack unwinding in KCOV

Updates for KCOV instrumentation on x86:

  - Prevent spurious KCOV coverage in common_interrupt()

  - Fixup the KCOV Makefile directive which got stale due to a source file
    rename

  - Exclude stack unwinding from KCOV as it creates large amounts of
    uninteresting coverage

  - Provide a self test to validate that KCOV coverage of the interrupt
    handling code starts not before preempt count got updated.

Thanks,

	tglx

------------------>
Dmitry Vyukov (4):
      x86/entry: Remove unwanted instrumentation in common_interrupt()
      kcov: Add interrupt handling self test
      module: Fix KCOV-ignored file name
      x86: Ignore stack unwinding in KCOV


 arch/x86/include/asm/hardirq.h  |  8 ++++++--
 arch/x86/include/asm/idtentry.h |  6 +++---
 arch/x86/kernel/Makefile        |  8 ++++++++
 kernel/kcov.c                   | 31 +++++++++++++++++++++++++++++++
 kernel/module/Makefile          |  2 +-
 lib/Kconfig.debug               |  8 ++++++++
 6 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h
index c67fa6ad098a..6ffa8b75f4cd 100644
--- a/arch/x86/include/asm/hardirq.h
+++ b/arch/x86/include/asm/hardirq.h
@@ -69,7 +69,11 @@ extern u64 arch_irq_stat(void);
 #define local_softirq_pending_ref       pcpu_hot.softirq_pending
=20
 #if IS_ENABLED(CONFIG_KVM_INTEL)
-static inline void kvm_set_cpu_l1tf_flush_l1d(void)
+/*
+ * This function is called from noinstr interrupt contexts
+ * and must be inlined to not get instrumentation.
+ */
+static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void)
 {
 	__this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 1);
 }
@@ -84,7 +88,7 @@ static __always_inline bool kvm_get_cpu_l1tf_flush_l1d(void)
 	return __this_cpu_read(irq_stat.kvm_cpu_l1tf_flush_l1d);
 }
 #else /* !IS_ENABLED(CONFIG_KVM_INTEL) */
-static inline void kvm_set_cpu_l1tf_flush_l1d(void) { }
+static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void) { }
 #endif /* IS_ENABLED(CONFIG_KVM_INTEL) */
=20
 #endif /* _ASM_X86_HARDIRQ_H */
diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h
index d4f24499b256..ad5c68f0509d 100644
--- a/arch/x86/include/asm/idtentry.h
+++ b/arch/x86/include/asm/idtentry.h
@@ -212,8 +212,8 @@ __visible noinstr void func(struct pt_regs *regs,			\
 	irqentry_state_t state =3D irqentry_enter(regs);			\
 	u32 vector =3D (u32)(u8)error_code;				\
 									\
+	kvm_set_cpu_l1tf_flush_l1d();                                   \
 	instrumentation_begin();					\
-	kvm_set_cpu_l1tf_flush_l1d();					\
 	run_irq_on_irqstack_cond(__##func, regs, vector);		\
 	instrumentation_end();						\
 	irqentry_exit(regs, state);					\
@@ -250,7 +250,6 @@ static void __##func(struct pt_regs *regs);				\
 									\
 static __always_inline void instr_##func(struct pt_regs *regs)		\
 {									\
-	kvm_set_cpu_l1tf_flush_l1d();					\
 	run_sysvec_on_irqstack_cond(__##func, regs);			\
 }									\
 									\
@@ -258,6 +257,7 @@ __visible noinstr void func(struct pt_regs *regs)			\
 {									\
 	irqentry_state_t state =3D irqentry_enter(regs);			\
 									\
+	kvm_set_cpu_l1tf_flush_l1d();                                   \
 	instrumentation_begin();					\
 	instr_##func (regs);						\
 	instrumentation_end();						\
@@ -288,7 +288,6 @@ static __always_inline void __##func(struct pt_regs *regs=
);		\
 static __always_inline void instr_##func(struct pt_regs *regs)		\
 {									\
 	__irq_enter_raw();						\
-	kvm_set_cpu_l1tf_flush_l1d();					\
 	__##func (regs);						\
 	__irq_exit_raw();						\
 }									\
@@ -297,6 +296,7 @@ __visible noinstr void func(struct pt_regs *regs)			\
 {									\
 	irqentry_state_t state =3D irqentry_enter(regs);			\
 									\
+	kvm_set_cpu_l1tf_flush_l1d();                                   \
 	instrumentation_begin();					\
 	instr_##func (regs);						\
 	instrumentation_end();						\
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index a847180836e4..f7918980667a 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -35,6 +35,14 @@ KMSAN_SANITIZE_nmi.o					:=3D n
 # If instrumentation of the following files is enabled, boot hangs during
 # first second.
 KCOV_INSTRUMENT_head$(BITS).o				:=3D n
+# These are called from save_stack_trace() on debug paths,
+# and produce large amounts of uninteresting coverage.
+KCOV_INSTRUMENT_stacktrace.o				:=3D n
+KCOV_INSTRUMENT_dumpstack.o				:=3D n
+KCOV_INSTRUMENT_dumpstack_$(BITS).o			:=3D n
+KCOV_INSTRUMENT_unwind_orc.o				:=3D n
+KCOV_INSTRUMENT_unwind_frame.o				:=3D n
+KCOV_INSTRUMENT_unwind_guess.o				:=3D n
=20
 CFLAGS_irq.o :=3D -I $(src)/../include/asm/trace
=20
diff --git a/kernel/kcov.c b/kernel/kcov.c
index f0a69d402066..d9d4a0c04185 100644
--- a/kernel/kcov.c
+++ b/kernel/kcov.c
@@ -11,6 +11,7 @@
 #include <linux/fs.h>
 #include <linux/hashtable.h>
 #include <linux/init.h>
+#include <linux/jiffies.h>
 #include <linux/kmsan-checks.h>
 #include <linux/mm.h>
 #include <linux/preempt.h>
@@ -1058,6 +1059,32 @@ u64 kcov_common_handle(void)
 }
 EXPORT_SYMBOL(kcov_common_handle);
=20
+#ifdef CONFIG_KCOV_SELFTEST
+static void __init selftest(void)
+{
+	unsigned long start;
+
+	pr_err("running self test\n");
+	/*
+	 * Test that interrupts don't produce spurious coverage.
+	 * The coverage callback filters out interrupt code, but only
+	 * after the handler updates preempt count. Some code periodically
+	 * leaks out of that section and leads to spurious coverage.
+	 * It's hard to call the actual interrupt handler directly,
+	 * so we just loop here for a bit waiting for a timer interrupt.
+	 * We set kcov_mode to enable tracing, but don't setup the area,
+	 * so any attempt to trace will crash. Note: we must not call any
+	 * potentially traced functions in this region.
+	 */
+	start =3D jiffies;
+	current->kcov_mode =3D KCOV_MODE_TRACE_PC;
+	while ((jiffies - start) * MSEC_PER_SEC / HZ < 300)
+		;
+	current->kcov_mode =3D 0;
+	pr_err("done running self test\n");
+}
+#endif
+
 static int __init kcov_init(void)
 {
 	int cpu;
@@ -1077,6 +1104,10 @@ static int __init kcov_init(void)
 	 */
 	debugfs_create_file_unsafe("kcov", 0600, NULL, NULL, &kcov_fops);
=20
+#ifdef CONFIG_KCOV_SELFTEST
+	selftest();
+#endif
+
 	return 0;
 }
=20
diff --git a/kernel/module/Makefile b/kernel/module/Makefile
index a10b2b9a6fdf..50ffcc413b54 100644
--- a/kernel/module/Makefile
+++ b/kernel/module/Makefile
@@ -5,7 +5,7 @@
=20
 # These are called from save_stack_trace() on slub debug path,
 # and produce insane amounts of uninteresting coverage.
-KCOV_INSTRUMENT_module.o :=3D n
+KCOV_INSTRUMENT_main.o :=3D n
=20
 obj-y +=3D main.o
 obj-y +=3D strict_rwx.o
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index a30c03a66172..270e367b3e6f 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -2173,6 +2173,14 @@ config KCOV_IRQ_AREA_SIZE
 	  soft interrupts. This specifies the size of those areas in the
 	  number of unsigned long words.
=20
+config KCOV_SELFTEST
+	bool "Perform short selftests on boot"
+	depends on KCOV
+	help
+	  Run short KCOV coverage collection selftests on boot.
+	  On test failure, causes the kernel to panic. Recommended to be
+	  enabled, ensuring critical functionality works as intended.
+
 menuconfig RUNTIME_TESTING_MENU
 	bool "Runtime Testing"
 	default y


.
Date: Tue, 17 Sep 2024 10:54:09 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/core for v6.12-rc1

Linus,

please pull the latest x86/core branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-core-2024-09=
-17

up to:  7424fc6b86c8: x86/traps: Enable UBSAN traps on x86

Enable UBSAN traps for x86, which provides better reporting through
metadata encodeded into UD1.

Thanks,

	tglx

------------------>
Gatlin Newhouse (1):
      x86/traps: Enable UBSAN traps on x86


 arch/x86/include/asm/bug.h | 12 ++++++++++
 arch/x86/kernel/traps.c    | 59 ++++++++++++++++++++++++++++++++++++++++++--=
--
 include/linux/ubsan.h      |  5 ++++
 lib/Kconfig.ubsan          |  4 ++--
 4 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h
index a3ec87d198ac..806649c7f23d 100644
--- a/arch/x86/include/asm/bug.h
+++ b/arch/x86/include/asm/bug.h
@@ -13,6 +13,18 @@
 #define INSN_UD2	0x0b0f
 #define LEN_UD2		2
=20
+/*
+ * In clang we have UD1s reporting UBSAN failures on X86, 64 and 32bit.
+ */
+#define INSN_ASOP		0x67
+#define OPCODE_ESCAPE		0x0f
+#define SECOND_BYTE_OPCODE_UD1	0xb9
+#define SECOND_BYTE_OPCODE_UD2	0x0b
+
+#define BUG_NONE		0xffff
+#define BUG_UD1			0xfffe
+#define BUG_UD2			0xfffd
+
 #ifdef CONFIG_GENERIC_BUG
=20
 #ifdef CONFIG_X86_32
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 4fa0b17e5043..415881607c5d 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -42,6 +42,7 @@
 #include <linux/hardirq.h>
 #include <linux/atomic.h>
 #include <linux/iommu.h>
+#include <linux/ubsan.h>
=20
 #include <asm/stacktrace.h>
 #include <asm/processor.h>
@@ -91,6 +92,47 @@ __always_inline int is_valid_bugaddr(unsigned long addr)
 	return *(unsigned short *)addr =3D=3D INSN_UD2;
 }
=20
+/*
+ * Check for UD1 or UD2, accounting for Address Size Override Prefixes.
+ * If it's a UD1, get the ModRM byte to pass along to UBSan.
+ */
+__always_inline int decode_bug(unsigned long addr, u32 *imm)
+{
+	u8 v;
+
+	if (addr < TASK_SIZE_MAX)
+		return BUG_NONE;
+
+	v =3D *(u8 *)(addr++);
+	if (v =3D=3D INSN_ASOP)
+		v =3D *(u8 *)(addr++);
+	if (v !=3D OPCODE_ESCAPE)
+		return BUG_NONE;
+
+	v =3D *(u8 *)(addr++);
+	if (v =3D=3D SECOND_BYTE_OPCODE_UD2)
+		return BUG_UD2;
+
+	if (!IS_ENABLED(CONFIG_UBSAN_TRAP) || v !=3D SECOND_BYTE_OPCODE_UD1)
+		return BUG_NONE;
+
+	/* Retrieve the immediate (type value) for the UBSAN UD1 */
+	v =3D *(u8 *)(addr++);
+	if (X86_MODRM_RM(v) =3D=3D 4)
+		addr++;
+
+	*imm =3D 0;
+	if (X86_MODRM_MOD(v) =3D=3D 1)
+		*imm =3D *(u8 *)addr;
+	else if (X86_MODRM_MOD(v) =3D=3D 2)
+		*imm =3D *(u32 *)addr;
+	else
+		WARN_ONCE(1, "Unexpected MODRM_MOD: %u\n", X86_MODRM_MOD(v));
+
+	return BUG_UD1;
+}
+
+
 static nokprobe_inline int
 do_trap_no_signal(struct task_struct *tsk, int trapnr, const char *str,
 		  struct pt_regs *regs,	long error_code)
@@ -216,6 +258,8 @@ static inline void handle_invalid_op(struct pt_regs *regs)
 static noinstr bool handle_bug(struct pt_regs *regs)
 {
 	bool handled =3D false;
+	int ud_type;
+	u32 imm;
=20
 	/*
 	 * Normally @regs are unpoisoned by irqentry_enter(), but handle_bug()
@@ -223,7 +267,8 @@ static noinstr bool handle_bug(struct pt_regs *regs)
 	 * irqentry_enter().
 	 */
 	kmsan_unpoison_entry_regs(regs);
-	if (!is_valid_bugaddr(regs->ip))
+	ud_type =3D decode_bug(regs->ip, &imm);
+	if (ud_type =3D=3D BUG_NONE)
 		return handled;
=20
 	/*
@@ -236,10 +281,14 @@ static noinstr bool handle_bug(struct pt_regs *regs)
 	 */
 	if (regs->flags & X86_EFLAGS_IF)
 		raw_local_irq_enable();
-	if (report_bug(regs->ip, regs) =3D=3D BUG_TRAP_TYPE_WARN ||
-	    handle_cfi_failure(regs) =3D=3D BUG_TRAP_TYPE_WARN) {
-		regs->ip +=3D LEN_UD2;
-		handled =3D true;
+	if (ud_type =3D=3D BUG_UD2) {
+		if (report_bug(regs->ip, regs) =3D=3D BUG_TRAP_TYPE_WARN ||
+		    handle_cfi_failure(regs) =3D=3D BUG_TRAP_TYPE_WARN) {
+			regs->ip +=3D LEN_UD2;
+			handled =3D true;
+		}
+	} else if (IS_ENABLED(CONFIG_UBSAN_TRAP)) {
+		pr_crit("%s at %pS\n", report_ubsan_failure(regs, imm), (void *)regs->ip);
 	}
 	if (regs->flags & X86_EFLAGS_IF)
 		raw_local_irq_disable();
diff --git a/include/linux/ubsan.h b/include/linux/ubsan.h
index bff7445498de..d8219cbe09ff 100644
--- a/include/linux/ubsan.h
+++ b/include/linux/ubsan.h
@@ -4,6 +4,11 @@
=20
 #ifdef CONFIG_UBSAN_TRAP
 const char *report_ubsan_failure(struct pt_regs *regs, u32 check_type);
+#else
+static inline const char *report_ubsan_failure(struct pt_regs *regs, u32 che=
ck_type)
+{
+	return NULL;
+}
 #endif
=20
 #endif
diff --git a/lib/Kconfig.ubsan b/lib/Kconfig.ubsan
index bdda600f8dfb..1d4aa7a83b3a 100644
--- a/lib/Kconfig.ubsan
+++ b/lib/Kconfig.ubsan
@@ -29,8 +29,8 @@ config UBSAN_TRAP
=20
 	  Also note that selecting Y will cause your kernel to Oops
 	  with an "illegal instruction" error with no further details
-	  when a UBSAN violation occurs. (Except on arm64, which will
-	  report which Sanitizer failed.) This may make it hard to
+	  when a UBSAN violation occurs. (Except on arm64 and x86, which
+	  will report which Sanitizer failed.) This may make it hard to
 	  determine whether an Oops was caused by UBSAN or to figure
 	  out the details of a UBSAN violation. It makes the kernel log
 	  output less useful for bug reports.


.
Date: Tue, 17 Sep 2024 10:54:07 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/cleanups for v6.12-rc1

Linus,

please pull the latest x86/cleanups branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-cleanups-202=
4-09-17

up to:  a678164aadbf: x86/EISA: Dereference memory directly instead of using =
readl()

A set of cleanups across x86:

  - Use memremap() for the EISA probe instrad of ioremap(). EISA is
    strictly memory and not MMIO

  - Cleanups and enhancement all over the place

Thanks,

	tglx

------------------>
Gaosheng Cui (1):
      x86/mtrr: Remove obsolete declaration for mtrr_bp_restore()

Kai Huang (3):
      x86/sgx: Fix a W=3D1 build warning in function comment
      x86/kexec: Fix a comment of swap_pages() assembly
      x86/kexec: Add comments around swap_pages() assembly to improve readabi=
lity

Maciej W. Rozycki (2):
      x86/EISA: Use memremap() to probe for the EISA BIOS signature
      x86/EISA: Dereference memory directly instead of using readl()

Nathan Chancellor (1):
      x86/cpu_entry_area: Annotate percpu_setup_exception_stacks() as __init

Uros Bizjak (1):
      x86/boot/64: Strip percpu address space when setting up GDT descriptors

WangYuli (1):
      x86/cpu: Clarify the error message when BIOS does not support SGX

Yue Haibing (1):
      x86/extable: Remove unused declaration fixup_bug()


 arch/x86/include/asm/extable.h       |  1 -
 arch/x86/include/asm/mtrr.h          |  2 --
 arch/x86/kernel/cpu/feat_ctl.c       |  2 +-
 arch/x86/kernel/cpu/sgx/main.c       |  2 +-
 arch/x86/kernel/eisa.c               |  8 ++++----
 arch/x86/kernel/head64.c             |  3 ++-
 arch/x86/kernel/relocate_kernel_64.S | 10 +++++++---
 arch/x86/mm/cpu_entry_area.c         |  2 +-
 8 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/arch/x86/include/asm/extable.h b/arch/x86/include/asm/extable.h
index eeed395c3177..a0e0c6b50155 100644
--- a/arch/x86/include/asm/extable.h
+++ b/arch/x86/include/asm/extable.h
@@ -37,7 +37,6 @@ struct pt_regs;
=20
 extern int fixup_exception(struct pt_regs *regs, int trapnr,
 			   unsigned long error_code, unsigned long fault_addr);
-extern int fixup_bug(struct pt_regs *regs, int trapnr);
 extern int ex_get_fixup_type(unsigned long ip);
 extern void early_fixup_exception(struct pt_regs *regs, int trapnr);
=20
diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h
index 090d658a85a6..4218248083d9 100644
--- a/arch/x86/include/asm/mtrr.h
+++ b/arch/x86/include/asm/mtrr.h
@@ -69,7 +69,6 @@ extern int mtrr_add_page(unsigned long base, unsigned long =
size,
 			 unsigned int type, bool increment);
 extern int mtrr_del(int reg, unsigned long base, unsigned long size);
 extern int mtrr_del_page(int reg, unsigned long base, unsigned long size);
-extern void mtrr_bp_restore(void);
 extern int mtrr_trim_uncached_memory(unsigned long end_pfn);
 extern int amd_special_default_mtrr(void);
 void mtrr_disable(void);
@@ -117,7 +116,6 @@ static inline int mtrr_trim_uncached_memory(unsigned long=
 end_pfn)
 	return 0;
 }
 #define mtrr_bp_init() do {} while (0)
-#define mtrr_bp_restore() do {} while (0)
 #define mtrr_disable() do {} while (0)
 #define mtrr_enable() do {} while (0)
 #define mtrr_generic_set_state() do {} while (0)
diff --git a/arch/x86/kernel/cpu/feat_ctl.c b/arch/x86/kernel/cpu/feat_ctl.c
index 1640ae76548f..4a4118784c13 100644
--- a/arch/x86/kernel/cpu/feat_ctl.c
+++ b/arch/x86/kernel/cpu/feat_ctl.c
@@ -188,7 +188,7 @@ void init_ia32_feat_ctl(struct cpuinfo_x86 *c)
 update_sgx:
 	if (!(msr & FEAT_CTL_SGX_ENABLED)) {
 		if (enable_sgx_kvm || enable_sgx_driver)
-			pr_err_once("SGX disabled by BIOS.\n");
+			pr_err_once("SGX disabled or unsupported by BIOS.\n");
 		clear_cpu_cap(c, X86_FEATURE_SGX);
 		return;
 	}
diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
index 27892e57c4ef..1a000acd933a 100644
--- a/arch/x86/kernel/cpu/sgx/main.c
+++ b/arch/x86/kernel/cpu/sgx/main.c
@@ -732,7 +732,7 @@ int arch_memory_failure(unsigned long pfn, int flags)
 	return 0;
 }
=20
-/**
+/*
  * A section metric is concatenated in a way that @low bits 12-31 define the
  * bits 12-31 of the metric and @high bits 0-19 define the bits 32-51 of the
  * metric.
diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
index 53935b4d62e3..9535a6507db7 100644
--- a/arch/x86/kernel/eisa.c
+++ b/arch/x86/kernel/eisa.c
@@ -11,15 +11,15 @@
=20
 static __init int eisa_bus_probe(void)
 {
-	void __iomem *p;
+	u32 *p;
=20
 	if ((xen_pv_domain() && !xen_initial_domain()) || cc_platform_has(CC_ATTR_G=
UEST_SEV_SNP))
 		return 0;
=20
-	p =3D ioremap(0x0FFFD9, 4);
-	if (p && readl(p) =3D=3D 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
+	p =3D memremap(0x0FFFD9, 4, MEMREMAP_WB);
+	if (p && *p =3D=3D 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
 		EISA_bus =3D 1;
-	iounmap(p);
+	memunmap(p);
 	return 0;
 }
 subsys_initcall(eisa_bus_probe);
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index a817ed0724d1..4b9d4557fc94 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -559,10 +559,11 @@ void early_setup_idt(void)
  */
 void __head startup_64_setup_gdt_idt(void)
 {
+	struct desc_struct *gdt =3D (void *)(__force unsigned long)init_per_cpu_var=
(gdt_page.gdt);
 	void *handler =3D NULL;
=20
 	struct desc_ptr startup_gdt_descr =3D {
-		.address =3D (unsigned long)&RIP_REL_REF(init_per_cpu_var(gdt_page.gdt)),
+		.address =3D (unsigned long)&RIP_REL_REF(*gdt),
 		.size    =3D GDT_SIZE - 1,
 	};
=20
diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_=
kernel_64.S
index 042c9a0334e9..e9e88c342f75 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -170,6 +170,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
 	wbinvd
 .Lsme_off:
=20
+	/* Save the preserve_context to %r11 as swap_pages clobbers %rcx. */
 	movq	%rcx, %r11
 	call	swap_pages
=20
@@ -258,7 +259,7 @@ SYM_CODE_END(virtual_mapped)
 	/* Do the copies */
 SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
 	UNWIND_HINT_END_OF_STACK
-	movq	%rdi, %rcx	/* Put the page_list in %rcx */
+	movq	%rdi, %rcx	/* Put the indirection_page in %rcx */
 	xorl	%edi, %edi
 	xorl	%esi, %esi
 	jmp	1f
@@ -289,18 +290,21 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
 	movq	%rcx,   %rsi  /* For ever source page do a copy */
 	andq	$0xfffffffffffff000, %rsi
=20
-	movq	%rdi, %rdx
-	movq	%rsi, %rax
+	movq	%rdi, %rdx    /* Save destination page to %rdx */
+	movq	%rsi, %rax    /* Save source page to %rax */
=20
+	/* copy source page to swap page */
 	movq	%r10, %rdi
 	movl	$512, %ecx
 	rep ; movsq
=20
+	/* copy destination page to source page */
 	movq	%rax, %rdi
 	movq	%rdx, %rsi
 	movl	$512, %ecx
 	rep ; movsq
=20
+	/* copy swap page to destination page */
 	movq	%rdx, %rdi
 	movq	%r10, %rsi
 	movl	$512, %ecx
diff --git a/arch/x86/mm/cpu_entry_area.c b/arch/x86/mm/cpu_entry_area.c
index e91500a80963..575f863f3c75 100644
--- a/arch/x86/mm/cpu_entry_area.c
+++ b/arch/x86/mm/cpu_entry_area.c
@@ -164,7 +164,7 @@ static void __init percpu_setup_exception_stacks(unsigned=
 int cpu)
 	}
 }
 #else
-static inline void percpu_setup_exception_stacks(unsigned int cpu)
+static void __init percpu_setup_exception_stacks(unsigned int cpu)
 {
 	struct cpu_entry_area *cea =3D get_cpu_entry_area(cpu);
=20


.
Date: Tue, 17 Sep 2024 10:54:17 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/platform for v6.12-rc1

Linus,

please pull the latest x86/platform branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-platform-202=
4-09-17

up to:  22f426972655: x86/platform/uv: Remove unused declaration uv_irq_2_mmr=
_info()

Remove a stale declaration from the UV platform code

Thanks,

	tglx

------------------>
Yue Haibing (1):
      x86/platform/uv: Remove unused declaration uv_irq_2_mmr_info()


 arch/x86/include/asm/uv/uv_irq.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/x86/include/asm/uv/uv_irq.h b/arch/x86/include/asm/uv/uv_ir=
q.h
index d6b17c760622..1876b5edd142 100644
--- a/arch/x86/include/asm/uv/uv_irq.h
+++ b/arch/x86/include/asm/uv/uv_irq.h
@@ -31,7 +31,6 @@ enum {
 	UV_AFFINITY_CPU
 };
=20
-extern int uv_irq_2_mmr_info(int, unsigned long *, int *);
 extern int uv_setup_irq(char *, int, int, unsigned long, int);
 extern void uv_teardown_irq(unsigned int);
=20


.
Date: Tue, 17 Sep 2024 10:54:12 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/fred for v6.12-rc1

Linus,

please pull the latest x86/fred branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-fred-2024-09=
-17

up to:  fe85ee391966: x86/entry: Set FRED RSP0 on return to userspace instead=
 of context switch

Updates for x86 FRED:

  - Enable FRED right after init_mem_mapping() because at that point the
    early IDT fault handler is replaced by the real fault handler. The real
    fault handler retrieves the faulting address from the stack frame and
    not from CR2 when the FRED feature is set. But that obviously only
    works when FRED is enabled in the CPU as well.

  - Set SS to __KERNEL_DS when enabling FRED to prevent a corner case where
    ERETS can observe a SS mismatch and raises a #GP.


Thanks,

	tglx

------------------>
Andrew Cooper (1):
      x86/msr: Switch between WRMSRNS and WRMSR with the alternatives mechani=
sm

Xin Li (Intel) (6):
      x86/fred: Parse cmdline param "fred=3D" in cpu_parse_early_param()
      x86/fred: Move FRED RSP initialization into a separate function
      x86/fred: Enable FRED right after init_mem_mapping()
      x86/fred: Set SS to __KERNEL_DS when enabling FRED
      x86/entry: Test ti_work for zero before processing individual bits
      x86/entry: Set FRED RSP0 on return to userspace instead of context swit=
ch


 arch/x86/include/asm/entry-common.h | 13 +++++++++--
 arch/x86/include/asm/fred.h         | 23 ++++++++++++++++++-
 arch/x86/include/asm/msr.h          | 25 +++++++++------------
 arch/x86/include/asm/processor.h    |  3 ++-
 arch/x86/include/asm/switch_to.h    |  6 +----
 arch/x86/kernel/cpu/common.c        | 22 ++++++++++++++++--
 arch/x86/kernel/cpu/cpuid-deps.c    |  1 -
 arch/x86/kernel/fred.c              | 45 +++++++++++++++++++++++++++++------=
--
 arch/x86/kernel/setup.c             |  7 +++++-
 arch/x86/kernel/smpboot.c           |  2 +-
 arch/x86/kernel/traps.c             | 28 +----------------------
 11 files changed, 111 insertions(+), 64 deletions(-)

diff --git a/arch/x86/include/asm/entry-common.h b/arch/x86/include/asm/entry=
-common.h
index fb2809b20b0a..77d20555e04d 100644
--- a/arch/x86/include/asm/entry-common.h
+++ b/arch/x86/include/asm/entry-common.h
@@ -8,6 +8,7 @@
 #include <asm/nospec-branch.h>
 #include <asm/io_bitmap.h>
 #include <asm/fpu/api.h>
+#include <asm/fred.h>
=20
 /* Check that the stack and regs on entry from user mode are sane. */
 static __always_inline void arch_enter_from_user_mode(struct pt_regs *regs)
@@ -44,8 +45,7 @@ static __always_inline void arch_enter_from_user_mode(struc=
t pt_regs *regs)
 }
 #define arch_enter_from_user_mode arch_enter_from_user_mode
=20
-static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs,
-						  unsigned long ti_work)
+static inline void arch_exit_work(unsigned long ti_work)
 {
 	if (ti_work & _TIF_USER_RETURN_NOTIFY)
 		fire_user_return_notifiers();
@@ -56,6 +56,15 @@ static inline void arch_exit_to_user_mode_prepare(struct p=
t_regs *regs,
 	fpregs_assert_state_consistent();
 	if (unlikely(ti_work & _TIF_NEED_FPU_LOAD))
 		switch_fpu_return();
+}
+
+static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs,
+						  unsigned long ti_work)
+{
+	if (IS_ENABLED(CONFIG_X86_DEBUG_FPU) || unlikely(ti_work))
+		arch_exit_work(ti_work);
+
+	fred_update_rsp0();
=20
 #ifdef CONFIG_COMPAT
 	/*
diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h
index e86c7ba32435..25ca00bd70e8 100644
--- a/arch/x86/include/asm/fred.h
+++ b/arch/x86/include/asm/fred.h
@@ -36,6 +36,7 @@
=20
 #ifdef CONFIG_X86_FRED
 #include <linux/kernel.h>
+#include <linux/sched/task_stack.h>
=20
 #include <asm/ptrace.h>
=20
@@ -84,13 +85,33 @@ static __always_inline void fred_entry_from_kvm(unsigned =
int type, unsigned int
 }
=20
 void cpu_init_fred_exceptions(void);
+void cpu_init_fred_rsps(void);
 void fred_complete_exception_setup(void);
=20
+DECLARE_PER_CPU(unsigned long, fred_rsp0);
+
+static __always_inline void fred_sync_rsp0(unsigned long rsp0)
+{
+	__this_cpu_write(fred_rsp0, rsp0);
+}
+
+static __always_inline void fred_update_rsp0(void)
+{
+	unsigned long rsp0 =3D (unsigned long) task_stack_page(current) + THREAD_SI=
ZE;
+
+	if (cpu_feature_enabled(X86_FEATURE_FRED) && (__this_cpu_read(fred_rsp0) !=
=3D rsp0)) {
+		wrmsrns(MSR_IA32_FRED_RSP0, rsp0);
+		__this_cpu_write(fred_rsp0, rsp0);
+	}
+}
 #else /* CONFIG_X86_FRED */
 static __always_inline unsigned long fred_event_data(struct pt_regs *regs) {=
 return 0; }
 static inline void cpu_init_fred_exceptions(void) { }
+static inline void cpu_init_fred_rsps(void) { }
 static inline void fred_complete_exception_setup(void) { }
-static __always_inline void fred_entry_from_kvm(unsigned int type, unsigned =
int vector) { }
+static inline void fred_entry_from_kvm(unsigned int type, unsigned int vecto=
r) { }
+static inline void fred_sync_rsp0(unsigned long rsp0) { }
+static inline void fred_update_rsp0(void) { }
 #endif /* CONFIG_X86_FRED */
 #endif /* !__ASSEMBLY__ */
=20
diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h
index d642037f9ed5..001853541f1e 100644
--- a/arch/x86/include/asm/msr.h
+++ b/arch/x86/include/asm/msr.h
@@ -99,19 +99,6 @@ static __always_inline void __wrmsr(unsigned int msr, u32 =
low, u32 high)
 		     : : "c" (msr), "a"(low), "d" (high) : "memory");
 }
=20
-/*
- * WRMSRNS behaves exactly like WRMSR with the only difference being
- * that it is not a serializing instruction by default.
- */
-static __always_inline void __wrmsrns(u32 msr, u32 low, u32 high)
-{
-	/* Instruction opcode for WRMSRNS; supported in binutils >=3D 2.40. */
-	asm volatile("1: .byte 0x0f,0x01,0xc6\n"
-		     "2:\n"
-		     _ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_WRMSR)
-		     : : "c" (msr), "a"(low), "d" (high));
-}
-
 #define native_rdmsr(msr, val1, val2)			\
 do {							\
 	u64 __val =3D __rdmsr((msr));			\
@@ -312,9 +299,19 @@ do {							\
=20
 #endif	/* !CONFIG_PARAVIRT_XXL */
=20
+/* Instruction opcode for WRMSRNS supported in binutils >=3D 2.40 */
+#define WRMSRNS _ASM_BYTES(0x0f,0x01,0xc6)
+
+/* Non-serializing WRMSR, when available.  Falls back to a serializing WRMSR=
. */
 static __always_inline void wrmsrns(u32 msr, u64 val)
 {
-	__wrmsrns(msr, val, val >> 32);
+	/*
+	 * WRMSR is 2 bytes.  WRMSRNS is 3 bytes.  Pad WRMSR with a redundant
+	 * DS prefix to avoid a trailing NOP.
+	 */
+	asm volatile("1: " ALTERNATIVE("ds wrmsr", WRMSRNS, X86_FEATURE_WRMSRNS)
+		     "2: " _ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_WRMSR)
+		     : : "c" (msr), "a" ((u32)val), "d" ((u32)(val >> 32)));
 }
=20
 /*
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processo=
r.h
index a75a07f4931f..399f7d1c4c61 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -582,7 +582,8 @@ extern void switch_gdt_and_percpu_base(int);
 extern void load_direct_gdt(int);
 extern void load_fixmap_gdt(int);
 extern void cpu_init(void);
-extern void cpu_init_exception_handling(void);
+extern void cpu_init_exception_handling(bool boot_cpu);
+extern void cpu_init_replace_early_idt(void);
 extern void cr4_init(void);
=20
 extern void set_task_blockstep(struct task_struct *task, bool on);
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_t=
o.h
index c3bd0c0758c9..75248546403d 100644
--- a/arch/x86/include/asm/switch_to.h
+++ b/arch/x86/include/asm/switch_to.h
@@ -70,13 +70,9 @@ static inline void update_task_stack(struct task_struct *t=
ask)
 #ifdef CONFIG_X86_32
 	this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0);
 #else
-	if (cpu_feature_enabled(X86_FEATURE_FRED)) {
-		/* WRMSRNS is a baseline feature for FRED. */
-		wrmsrns(MSR_IA32_FRED_RSP0, (unsigned long)task_stack_page(task) + THREAD_=
SIZE);
-	} else if (cpu_feature_enabled(X86_FEATURE_XENPV)) {
+	if (!cpu_feature_enabled(X86_FEATURE_FRED) && cpu_feature_enabled(X86_FEATU=
RE_XENPV))
 		/* Xen PV enters the kernel on the thread stack. */
 		load_sp0(task_top_of_stack(task));
-	}
 #endif
 }
=20
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index d4e539d4e158..a4735d9b5a1d 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1510,6 +1510,11 @@ static void __init cpu_parse_early_param(void)
 	if (cmdline_find_option_bool(boot_command_line, "nousershstk"))
 		setup_clear_cpu_cap(X86_FEATURE_USER_SHSTK);
=20
+	/* Minimize the gap between FRED is available and available but disabled. */
+	arglen =3D cmdline_find_option(boot_command_line, "fred", arg, sizeof(arg));
+	if (arglen !=3D 2 || strncmp(arg, "on", 2))
+		setup_clear_cpu_cap(X86_FEATURE_FRED);
+
 	arglen =3D cmdline_find_option(boot_command_line, "clearcpuid", arg, sizeof=
(arg));
 	if (arglen <=3D 0)
 		return;
@@ -2171,7 +2176,7 @@ static inline void tss_setup_io_bitmap(struct tss_struc=
t *tss)
  * Setup everything needed to handle exceptions from the IDT, including the =
IST
  * exceptions which use paranoid_entry().
  */
-void cpu_init_exception_handling(void)
+void cpu_init_exception_handling(bool boot_cpu)
 {
 	struct tss_struct *tss =3D this_cpu_ptr(&cpu_tss_rw);
 	int cpu =3D raw_smp_processor_id();
@@ -2190,10 +2195,23 @@ void cpu_init_exception_handling(void)
 	/* GHCB needs to be setup to handle #VC. */
 	setup_ghcb();
=20
+	if (cpu_feature_enabled(X86_FEATURE_FRED)) {
+		/* The boot CPU has enabled FRED during early boot */
+		if (!boot_cpu)
+			cpu_init_fred_exceptions();
+
+		cpu_init_fred_rsps();
+	} else {
+		load_current_idt();
+	}
+}
+
+void __init cpu_init_replace_early_idt(void)
+{
 	if (cpu_feature_enabled(X86_FEATURE_FRED))
 		cpu_init_fred_exceptions();
 	else
-		load_current_idt();
+		idt_setup_early_pf();
 }
=20
 /*
diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-dep=
s.c
index b7d9f530ae16..8bd84114c2d9 100644
--- a/arch/x86/kernel/cpu/cpuid-deps.c
+++ b/arch/x86/kernel/cpu/cpuid-deps.c
@@ -83,7 +83,6 @@ static const struct cpuid_dep cpuid_deps[] =3D {
 	{ X86_FEATURE_AMX_TILE,			X86_FEATURE_XFD       },
 	{ X86_FEATURE_SHSTK,			X86_FEATURE_XSAVES    },
 	{ X86_FEATURE_FRED,			X86_FEATURE_LKGS      },
-	{ X86_FEATURE_FRED,			X86_FEATURE_WRMSRNS   },
 	{}
 };
=20
diff --git a/arch/x86/kernel/fred.c b/arch/x86/kernel/fred.c
index 4bcd8791ad96..8d32c3f48abc 100644
--- a/arch/x86/kernel/fred.c
+++ b/arch/x86/kernel/fred.c
@@ -21,17 +21,53 @@
=20
 #define FRED_STKLVL(vector, lvl)	((lvl) << (2 * (vector)))
=20
+DEFINE_PER_CPU(unsigned long, fred_rsp0);
+EXPORT_PER_CPU_SYMBOL(fred_rsp0);
+
 void cpu_init_fred_exceptions(void)
 {
 	/* When FRED is enabled by default, remove this log message */
 	pr_info("Initialize FRED on CPU%d\n", smp_processor_id());
=20
+	/*
+	 * If a kernel event is delivered before a CPU goes to user level for
+	 * the first time, its SS is NULL thus NULL is pushed into the SS field
+	 * of the FRED stack frame.  But before ERETS is executed, the CPU may
+	 * context switch to another task and go to user level.  Then when the
+	 * CPU comes back to kernel mode, SS is changed to __KERNEL_DS.  Later
+	 * when ERETS is executed to return from the kernel event handler, a #GP
+	 * fault is generated because SS doesn't match the SS saved in the FRED
+	 * stack frame.
+	 *
+	 * Initialize SS to __KERNEL_DS when enabling FRED to avoid such #GPs.
+	 */
+	loadsegment(ss, __KERNEL_DS);
+
 	wrmsrl(MSR_IA32_FRED_CONFIG,
 	       /* Reserve for CALL emulation */
 	       FRED_CONFIG_REDZONE |
 	       FRED_CONFIG_INT_STKLVL(0) |
 	       FRED_CONFIG_ENTRYPOINT(asm_fred_entrypoint_user));
=20
+	wrmsrl(MSR_IA32_FRED_STKLVLS, 0);
+	wrmsrl(MSR_IA32_FRED_RSP0, 0);
+	wrmsrl(MSR_IA32_FRED_RSP1, 0);
+	wrmsrl(MSR_IA32_FRED_RSP2, 0);
+	wrmsrl(MSR_IA32_FRED_RSP3, 0);
+
+	/* Enable FRED */
+	cr4_set_bits(X86_CR4_FRED);
+	/* Any further IDT use is a bug */
+	idt_invalidate();
+
+	/* Use int $0x80 for 32-bit system calls in FRED mode */
+	setup_clear_cpu_cap(X86_FEATURE_SYSENTER32);
+	setup_clear_cpu_cap(X86_FEATURE_SYSCALL32);
+}
+
+/* Must be called after setup_cpu_entry_areas() */
+void cpu_init_fred_rsps(void)
+{
 	/*
 	 * The purpose of separate stacks for NMI, #DB and #MC *in the kernel*
 	 * (remember that user space faults are always taken on stack level 0)
@@ -47,13 +83,4 @@ void cpu_init_fred_exceptions(void)
 	wrmsrl(MSR_IA32_FRED_RSP1, __this_cpu_ist_top_va(DB));
 	wrmsrl(MSR_IA32_FRED_RSP2, __this_cpu_ist_top_va(NMI));
 	wrmsrl(MSR_IA32_FRED_RSP3, __this_cpu_ist_top_va(DF));
-
-	/* Enable FRED */
-	cr4_set_bits(X86_CR4_FRED);
-	/* Any further IDT use is a bug */
-	idt_invalidate();
-
-	/* Use int $0x80 for 32-bit system calls in FRED mode */
-	setup_clear_cpu_cap(X86_FEATURE_SYSENTER32);
-	setup_clear_cpu_cap(X86_FEATURE_SYSCALL32);
 }
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 6129dc2ba784..f1fea506e20f 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1039,7 +1039,12 @@ void __init setup_arch(char **cmdline_p)
=20
 	init_mem_mapping();
=20
-	idt_setup_early_pf();
+	/*
+	 * init_mem_mapping() relies on the early IDT page fault handling.
+	 * Now either enable FRED or install the real page fault handler
+	 * for 64-bit in the IDT.
+	 */
+	cpu_init_replace_early_idt();
=20
 	/*
 	 * Update mmu_cr4_features (and, indirectly, trampoline_cr4_features)
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 0c35207320cb..dc4fff8fccce 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -246,7 +246,7 @@ static void notrace start_secondary(void *unused)
 		__flush_tlb_all();
 	}
=20
-	cpu_init_exception_handling();
+	cpu_init_exception_handling(false);
=20
 	/*
 	 * Load the microcode before reaching the AP alive synchronization
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 4fa0b17e5043..197d5888b0e2 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -1402,34 +1402,8 @@ DEFINE_IDTENTRY_SW(iret_error)
 }
 #endif
=20
-/* Do not enable FRED by default yet. */
-static bool enable_fred __ro_after_init =3D false;
-
-#ifdef CONFIG_X86_FRED
-static int __init fred_setup(char *str)
-{
-	if (!str)
-		return -EINVAL;
-
-	if (!cpu_feature_enabled(X86_FEATURE_FRED))
-		return 0;
-
-	if (!strcmp(str, "on"))
-		enable_fred =3D true;
-	else if (!strcmp(str, "off"))
-		enable_fred =3D false;
-	else
-		pr_warn("invalid FRED option: 'fred=3D%s'\n", str);
-	return 0;
-}
-early_param("fred", fred_setup);
-#endif
-
 void __init trap_init(void)
 {
-	if (cpu_feature_enabled(X86_FEATURE_FRED) && !enable_fred)
-		setup_clear_cpu_cap(X86_FEATURE_FRED);
-
 	/* Init cpu_entry_area before IST entries are set up */
 	setup_cpu_entry_areas();
=20
@@ -1437,7 +1411,7 @@ void __init trap_init(void)
 	sev_es_init_vc_handling();
=20
 	/* Initialize TSS before setting up traps so ISTs work */
-	cpu_init_exception_handling();
+	cpu_init_exception_handling(true);
=20
 	/* Setup traps as cpu_init() might #GP */
 	if (!cpu_feature_enabled(X86_FEATURE_FRED))


.
Date: Tue, 17 Sep 2024 10:54:19 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/timers for v6.12-rc1

Linus,

please pull the latest x86/timers branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-timers-2024-=
09-17

up to:  e7ff4ebffe3b: x86/tsc: Check for sockets instead of CPUs to make code=
 match comment

Updates for x86 timers:

  - Use the topology information of number of packages for making the
    decision about TSC trust instead of using the number of online nodes
    which is not reflecting the real topology.

  - Stop the PIT timer 0 when its not in use as to stop pointless emulation
    in the VMM.

  - Fix the PIT timer stop sequence for timer 0 so it truly stops both real
    hardware and buggy VMM emulations.

Thanks,

	tglx

------------------>
David Woodhouse (2):
      x86/i8253: Disable PIT timer 0 when not in use
      clockevents/drivers/i8253: Fix stop sequence for timer 0

Feng Tang (1):
      x86/tsc: Use topology_max_packages() to get package number

Paul E. McKenney (1):
      x86/tsc: Check for sockets instead of CPUs to make code match comment


 arch/x86/kernel/cpu/mshyperv.c | 11 ----------
 arch/x86/kernel/i8253.c        | 11 ++++++++--
 arch/x86/kernel/tsc.c          | 10 ++++-----
 drivers/clocksource/i8253.c    | 49 +++++++++++++++++++++++++++++-----------=
--
 include/linux/i8253.h          |  2 +-
 5 files changed, 48 insertions(+), 35 deletions(-)

diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index e0fd57a8ba84..3d4237f27569 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -16,7 +16,6 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/kexec.h>
-#include <linux/i8253.h>
 #include <linux/random.h>
 #include <asm/processor.h>
 #include <asm/hypervisor.h>
@@ -522,16 +521,6 @@ static void __init ms_hyperv_init_platform(void)
 	if (efi_enabled(EFI_BOOT))
 		x86_platform.get_nmi_reason =3D hv_get_nmi_reason;
=20
-	/*
-	 * Hyper-V VMs have a PIT emulation quirk such that zeroing the
-	 * counter register during PIT shutdown restarts the PIT. So it
-	 * continues to interrupt @18.2 HZ. Setting i8253_clear_counter
-	 * to false tells pit_shutdown() not to zero the counter so that
-	 * the PIT really is shutdown. Generation 2 VMs don't have a PIT,
-	 * and setting this value has no effect.
-	 */
-	i8253_clear_counter_on_shutdown =3D false;
-
 #if IS_ENABLED(CONFIG_HYPERV)
 	if ((hv_get_isolation_type() =3D=3D HV_ISOLATION_TYPE_VBS) ||
 	    ms_hyperv.paravisor_present)
diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c
index 2b7999a1a50a..80e262bb627f 100644
--- a/arch/x86/kernel/i8253.c
+++ b/arch/x86/kernel/i8253.c
@@ -8,6 +8,7 @@
 #include <linux/timex.h>
 #include <linux/i8253.h>
=20
+#include <asm/hypervisor.h>
 #include <asm/apic.h>
 #include <asm/hpet.h>
 #include <asm/time.h>
@@ -39,9 +40,15 @@ static bool __init use_pit(void)
=20
 bool __init pit_timer_init(void)
 {
-	if (!use_pit())
+	if (!use_pit()) {
+		/*
+		 * Don't just ignore the PIT. Ensure it's stopped, because
+		 * VMMs otherwise steal CPU time just to pointlessly waggle
+		 * the (masked) IRQ.
+		 */
+		clockevent_i8253_disable();
 		return false;
-
+	}
 	clockevent_i8253_init(true);
 	global_clock_event =3D &i8253_clockevent;
 	return true;
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index d4462fb26299..dfe6847fd99e 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -28,6 +28,7 @@
 #include <asm/apic.h>
 #include <asm/cpu_device_id.h>
 #include <asm/i8259.h>
+#include <asm/topology.h>
 #include <asm/uv/uv.h>
=20
 unsigned int __read_mostly cpu_khz;	/* TSC clocks / usec, not used here */
@@ -1253,15 +1254,12 @@ static void __init check_system_tsc_reliable(void)
 	 *  - TSC which does not stop in C-States
 	 *  - the TSC_ADJUST register which allows to detect even minimal
 	 *    modifications
-	 *  - not more than two sockets. As the number of sockets cannot be
-	 *    evaluated at the early boot stage where this has to be
-	 *    invoked, check the number of online memory nodes as a
-	 *    fallback solution which is an reasonable estimate.
+	 *  - not more than four packages
 	 */
 	if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC) &&
 	    boot_cpu_has(X86_FEATURE_NONSTOP_TSC) &&
 	    boot_cpu_has(X86_FEATURE_TSC_ADJUST) &&
-	    nr_online_nodes <=3D 4)
+	    topology_max_packages() <=3D 4)
 		tsc_disable_clocksource_watchdog();
 }
=20
@@ -1290,7 +1288,7 @@ int unsynchronized_tsc(void)
 	 */
 	if (boot_cpu_data.x86_vendor !=3D X86_VENDOR_INTEL) {
 		/* assume multi socket systems are not synchronized: */
-		if (num_possible_cpus() > 1)
+		if (topology_max_packages() > 1)
 			return 1;
 	}
=20
diff --git a/drivers/clocksource/i8253.c b/drivers/clocksource/i8253.c
index d4350bb10b83..39f7c2d736d1 100644
--- a/drivers/clocksource/i8253.c
+++ b/drivers/clocksource/i8253.c
@@ -20,13 +20,6 @@
 DEFINE_RAW_SPINLOCK(i8253_lock);
 EXPORT_SYMBOL(i8253_lock);
=20
-/*
- * Handle PIT quirk in pit_shutdown() where zeroing the counter register
- * restarts the PIT, negating the shutdown. On platforms with the quirk,
- * platform specific code can set this to false.
- */
-bool i8253_clear_counter_on_shutdown __ro_after_init =3D true;
-
 #ifdef CONFIG_CLKSRC_I8253
 /*
  * Since the PIT overflows every tick, its not very useful
@@ -108,21 +101,47 @@ int __init clocksource_i8253_init(void)
 #endif
=20
 #ifdef CONFIG_CLKEVT_I8253
-static int pit_shutdown(struct clock_event_device *evt)
+void clockevent_i8253_disable(void)
 {
-	if (!clockevent_state_oneshot(evt) && !clockevent_state_periodic(evt))
-		return 0;
-
 	raw_spin_lock(&i8253_lock);
=20
+	/*
+	 * Writing the MODE register should stop the counter, according to
+	 * the datasheet. This appears to work on real hardware (well, on
+	 * modern Intel and AMD boxes; I didn't dig the Pegasos out of the
+	 * shed).
+	 *
+	 * However, some virtual implementations differ, and the MODE change
+	 * doesn't have any effect until either the counter is written (KVM
+	 * in-kernel PIT) or the next interrupt (QEMU). And in those cases,
+	 * it may not stop the *count*, only the interrupts. Although in
+	 * the virt case, that probably doesn't matter, as the value of the
+	 * counter will only be calculated on demand if the guest reads it;
+	 * it's the interrupts which cause steal time.
+	 *
+	 * Hyper-V apparently has a bug where even in mode 0, the IRQ keeps
+	 * firing repeatedly if the counter is running. But it *does* do the
+	 * right thing when the MODE register is written.
+	 *
+	 * So: write the MODE and then load the counter, which ensures that
+	 * the IRQ is stopped on those buggy virt implementations. And then
+	 * write the MODE again, which is the right way to stop it.
+	 */
 	outb_p(0x30, PIT_MODE);
+	outb_p(0, PIT_CH0);
+	outb_p(0, PIT_CH0);
=20
-	if (i8253_clear_counter_on_shutdown) {
-		outb_p(0, PIT_CH0);
-		outb_p(0, PIT_CH0);
-	}
+	outb_p(0x30, PIT_MODE);
=20
 	raw_spin_unlock(&i8253_lock);
+}
+
+static int pit_shutdown(struct clock_event_device *evt)
+{
+	if (!clockevent_state_oneshot(evt) && !clockevent_state_periodic(evt))
+		return 0;
+
+	clockevent_i8253_disable();
 	return 0;
 }
=20
diff --git a/include/linux/i8253.h b/include/linux/i8253.h
index 8336b2f6f834..56c280eb2d4f 100644
--- a/include/linux/i8253.h
+++ b/include/linux/i8253.h
@@ -21,9 +21,9 @@
 #define PIT_LATCH	((PIT_TICK_RATE + HZ/2) / HZ)
=20
 extern raw_spinlock_t i8253_lock;
-extern bool i8253_clear_counter_on_shutdown;
 extern struct clock_event_device i8253_clockevent;
 extern void clockevent_i8253_init(bool oneshot);
+extern void clockevent_i8253_disable(void);
=20
 extern void setup_pit_timer(void);
=20


.
Date: Tue, 17 Sep 2024 10:54:15 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/mm for v6.12-rc1

Linus,

please pull the latest x86/mm branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-2024-09-17

up to:  50c6dbdfd16e: x86/ioremap: Improve iounmap() address range checks

Updates for x86 memory management:

 - Make LAM enablement safe vs. kernel threads using a process mm
   temporarily as switching back to the process would not update CR3 and
   therefore not enable LAM causing faults in user space when using tagged
   pointers. Cure it by synchronizing LAM enablement via IPIs to all CPUs
   which use the related mm.

 - Cure a LAM harmless inconsistency between CR3 and the state during
   context switch. It's both confusing and prone to lead to real bugs

 - Handle alt stack handling for threads which run with a non-zero
   protection key. The non-zero key prevents the kernel to access the
   alternate stack. Cure it by temporarily enabling all protection keys for
   the alternate stack setup/restore operations.

 - Provide a EFI config table identity mapping for kexec kernel to prevent
   kexec fails because the new kernel cannot access the config table array

 - Use GB pages only when a full GB is mapped in the identity map as
   otherwise the CPU can speculate into reserved areas after the end of
   memory which causes malfunction on UV systems.

 - Remove the noisy and pointless SRAT table dump during boot

 - Use is_ioremap_addr() for iounmap() address range checks instead of
   high_memory. is_ioremap_addr() is more precise.


Thanks,

	tglx

------------------>
Aruna Ramakrishna (4):
      x86/pkeys: Add PKRU as a parameter in signal handling functions
      x86/pkeys: Add helper functions to update PKRU on the sigframe
      x86/pkeys: Update PKRU to enable all pkeys before XSAVE
      x86/pkeys: Restore altstack access in sigreturn()

Keith Lucas (1):
      selftests/mm: Add new testcases for pkeys

Li RongQing (1):
      x86/mm: Don't print out SRAT table information

Max Ramanouski (1):
      x86/ioremap: Improve iounmap() address range checks

Steve Wahl (1):
      x86/mm/ident_map: Use gbpages only where full GB page should be mapped.

Tao Liu (1):
      x86/kexec: Add EFI config table identity mapping for kexec kernel

Yosry Ahmed (4):
      x86/mm: Use IPIs to synchronize LAM enablement
      x86/mm: Fix LAM inconsistency during context switch
      x86/mm: Cleanup prctl_enable_tagged_addr() nr_bits error checking
      x86/mm: Remove unused CR3_HW_ASID_BITS

Yue Haibing (1):
      x86/mm: Remove unused NX related declarations

Yuntao Wang (1):
      x86/mm: Remove duplicate check from build_cr3()


 arch/x86/include/asm/fpu/signal.h                  |   2 +-
 arch/x86/include/asm/mmu_context.h                 |   8 +-
 arch/x86/include/asm/pgtable_types.h               |   2 -
 arch/x86/include/asm/tlbflush.h                    |   9 +-
 arch/x86/kernel/fpu/signal.c                       |  27 +-
 arch/x86/kernel/fpu/xstate.c                       |  13 +
 arch/x86/kernel/fpu/xstate.h                       |   2 +
 arch/x86/kernel/machine_kexec_64.c                 |  27 ++
 arch/x86/kernel/process_64.c                       |  42 +-
 arch/x86/kernel/signal.c                           |  29 +-
 arch/x86/kernel/signal_64.c                        |   6 +-
 arch/x86/mm/ident_map.c                            |  23 +-
 arch/x86/mm/ioremap.c                              |   3 +-
 arch/x86/mm/srat.c                                 |   6 +-
 arch/x86/mm/tlb.c                                  |  19 +-
 include/linux/ioremap.h                            |   1 +
 tools/testing/selftests/mm/Makefile                |   1 +
 tools/testing/selftests/mm/pkey-helpers.h          |  13 +-
 tools/testing/selftests/mm/pkey_sighandler_tests.c | 481 +++++++++++++++++++=
++
 tools/testing/selftests/mm/protection_keys.c       |  10 -
 20 files changed, 664 insertions(+), 60 deletions(-)
 create mode 100644 tools/testing/selftests/mm/pkey_sighandler_tests.c

diff --git a/arch/x86/include/asm/fpu/signal.h b/arch/x86/include/asm/fpu/sig=
nal.h
index 611fa41711af..eccc75bc9c4f 100644
--- a/arch/x86/include/asm/fpu/signal.h
+++ b/arch/x86/include/asm/fpu/signal.h
@@ -29,7 +29,7 @@ fpu__alloc_mathframe(unsigned long sp, int ia32_frame,
=20
 unsigned long fpu__get_fpstate_size(void);
=20
-extern bool copy_fpstate_to_sigframe(void __user *buf, void __user *fp, int =
size);
+extern bool copy_fpstate_to_sigframe(void __user *buf, void __user *fp, int =
size, u32 pkru);
 extern void fpu__clear_user_states(struct fpu *fpu);
 extern bool fpu__restore_sig(void __user *buf, int ia32_frame);
=20
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_co=
ntext.h
index 8dac45a2c7fc..19091ebb8633 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -88,7 +88,13 @@ static inline void switch_ldt(struct mm_struct *prev, stru=
ct mm_struct *next)
 #ifdef CONFIG_ADDRESS_MASKING
 static inline unsigned long mm_lam_cr3_mask(struct mm_struct *mm)
 {
-	return mm->context.lam_cr3_mask;
+	/*
+	 * When switch_mm_irqs_off() is called for a kthread, it may race with
+	 * LAM enablement. switch_mm_irqs_off() uses the LAM mask to do two
+	 * things: populate CR3 and populate 'cpu_tlbstate.lam'. Make sure it
+	 * reads a single value for both.
+	 */
+	return READ_ONCE(mm->context.lam_cr3_mask);
 }
=20
 static inline void dup_lam(struct mm_struct *oldmm, struct mm_struct *mm)
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgta=
ble_types.h
index 2f321137736c..6f82e75b6149 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
@@ -517,8 +517,6 @@ typedef struct page *pgtable_t;
=20
 extern pteval_t __supported_pte_mask;
 extern pteval_t __default_kernel_pte_mask;
-extern void set_nx(void);
-extern int nx_enabled;
=20
 #define pgprot_writecombine	pgprot_writecombine
 extern pgprot_t pgprot_writecombine(pgprot_t prot);
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 25726893c6f4..69e79fff41b8 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -399,11 +399,10 @@ static inline  u64 tlbstate_lam_cr3_mask(void)
 	return lam << X86_CR3_LAM_U57_BIT;
 }
=20
-static inline void set_tlbstate_lam_mode(struct mm_struct *mm)
+static inline void cpu_tlbstate_update_lam(unsigned long lam, u64 untag_mask)
 {
-	this_cpu_write(cpu_tlbstate.lam,
-		       mm->context.lam_cr3_mask >> X86_CR3_LAM_U57_BIT);
-	this_cpu_write(tlbstate_untag_mask, mm->context.untag_mask);
+	this_cpu_write(cpu_tlbstate.lam, lam >> X86_CR3_LAM_U57_BIT);
+	this_cpu_write(tlbstate_untag_mask, untag_mask);
 }
=20
 #else
@@ -413,7 +412,7 @@ static inline u64 tlbstate_lam_cr3_mask(void)
 	return 0;
 }
=20
-static inline void set_tlbstate_lam_mode(struct mm_struct *mm)
+static inline void cpu_tlbstate_update_lam(unsigned long lam, u64 untag_mask)
 {
 }
 #endif
diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c
index 247f2225aa9f..1065ab995305 100644
--- a/arch/x86/kernel/fpu/signal.c
+++ b/arch/x86/kernel/fpu/signal.c
@@ -63,6 +63,16 @@ static inline bool check_xstate_in_sigframe(struct fxregs_=
state __user *fxbuf,
 	return true;
 }
=20
+/*
+ * Update the value of PKRU register that was already pushed onto the signal=
 frame.
+ */
+static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u3=
2 pkru)
+{
+	if (unlikely(!cpu_feature_enabled(X86_FEATURE_OSPKE)))
+		return 0;
+	return __put_user(pkru, (unsigned int __user *)get_xsave_addr_user(buf, XFE=
ATURE_PKRU));
+}
+
 /*
  * Signal frame handlers.
  */
@@ -156,10 +166,17 @@ static inline bool save_xstate_epilog(void __user *buf,=
 int ia32_frame,
 	return !err;
 }
=20
-static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf)
+static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf, u3=
2 pkru)
 {
-	if (use_xsave())
-		return xsave_to_user_sigframe(buf);
+	int err =3D 0;
+
+	if (use_xsave()) {
+		err =3D xsave_to_user_sigframe(buf);
+		if (!err)
+			err =3D update_pkru_in_sigframe(buf, pkru);
+		return err;
+	}
+
 	if (use_fxsr())
 		return fxsave_to_user_sigframe((struct fxregs_state __user *) buf);
 	else
@@ -185,7 +202,7 @@ static inline int copy_fpregs_to_sigframe(struct xregs_st=
ate __user *buf)
  * For [f]xsave state, update the SW reserved fields in the [f]xsave frame
  * indicating the absence/presence of the extended state to the user.
  */
-bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int siz=
e)
+bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int siz=
e, u32 pkru)
 {
 	struct task_struct *tsk =3D current;
 	struct fpstate *fpstate =3D tsk->thread.fpu.fpstate;
@@ -228,7 +245,7 @@ bool copy_fpstate_to_sigframe(void __user *buf, void __us=
er *buf_fx, int size)
 		fpregs_restore_userregs();
=20
 	pagefault_disable();
-	ret =3D copy_fpregs_to_sigframe(buf_fx);
+	ret =3D copy_fpregs_to_sigframe(buf_fx, pkru);
 	pagefault_enable();
 	fpregs_unlock();
=20
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
index c5a026fee5e0..fa7628bb541b 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -993,6 +993,19 @@ void *get_xsave_addr(struct xregs_state *xsave, int xfea=
ture_nr)
 }
 EXPORT_SYMBOL_GPL(get_xsave_addr);
=20
+/*
+ * Given an xstate feature nr, calculate where in the xsave buffer the state=
 is.
+ * The xsave buffer should be in standard format, not compacted (e.g. user m=
ode
+ * signal frames).
+ */
+void __user *get_xsave_addr_user(struct xregs_state __user *xsave, int xfeat=
ure_nr)
+{
+	if (WARN_ON_ONCE(!xfeature_enabled(xfeature_nr)))
+		return NULL;
+
+	return (void __user *)xsave + xstate_offsets[xfeature_nr];
+}
+
 #ifdef CONFIG_ARCH_HAS_PKEYS
=20
 /*
diff --git a/arch/x86/kernel/fpu/xstate.h b/arch/x86/kernel/fpu/xstate.h
index 2ee0b9c53dcc..5f057e50df81 100644
--- a/arch/x86/kernel/fpu/xstate.h
+++ b/arch/x86/kernel/fpu/xstate.h
@@ -54,6 +54,8 @@ extern int copy_sigframe_from_user_to_xstate(struct task_st=
ruct *tsk, const void
 extern void fpu__init_cpu_xstate(void);
 extern void fpu__init_system_xstate(unsigned int legacy_size);
=20
+extern void __user *get_xsave_addr_user(struct xregs_state __user *xsave, in=
t xfeature_nr);
+
 static inline u64 xfeatures_mask_supervisor(void)
 {
 	return fpu_kernel_cfg.max_features & XFEATURE_MASK_SUPERVISOR_SUPPORTED;
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kex=
ec_64.c
index cc0f7f70b17b..9c9ac606893e 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -28,6 +28,7 @@
 #include <asm/setup.h>
 #include <asm/set_memory.h>
 #include <asm/cpu.h>
+#include <asm/efi.h>
=20
 #ifdef CONFIG_ACPI
 /*
@@ -87,6 +88,8 @@ map_efi_systab(struct x86_mapping_info *info, pgd_t *level4=
p)
 {
 #ifdef CONFIG_EFI
 	unsigned long mstart, mend;
+	void *kaddr;
+	int ret;
=20
 	if (!efi_enabled(EFI_BOOT))
 		return 0;
@@ -102,6 +105,30 @@ map_efi_systab(struct x86_mapping_info *info, pgd_t *lev=
el4p)
 	if (!mstart)
 		return 0;
=20
+	ret =3D kernel_ident_mapping_init(info, level4p, mstart, mend);
+	if (ret)
+		return ret;
+
+	kaddr =3D memremap(mstart, mend - mstart, MEMREMAP_WB);
+	if (!kaddr) {
+		pr_err("Could not map UEFI system table\n");
+		return -ENOMEM;
+	}
+
+	mstart =3D efi_config_table;
+
+	if (efi_enabled(EFI_64BIT)) {
+		efi_system_table_64_t *stbl =3D (efi_system_table_64_t *)kaddr;
+
+		mend =3D mstart + sizeof(efi_config_table_64_t) * stbl->nr_tables;
+	} else {
+		efi_system_table_32_t *stbl =3D (efi_system_table_32_t *)kaddr;
+
+		mend =3D mstart + sizeof(efi_config_table_32_t) * stbl->nr_tables;
+	}
+
+	memunmap(kaddr);
+
 	return kernel_ident_mapping_init(info, level4p, mstart, mend);
 #endif
 	return 0;
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 6d3d20e3e43a..226472332a70 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -798,6 +798,32 @@ static long prctl_map_vdso(const struct vdso_image *imag=
e, unsigned long addr)
=20
 #define LAM_U57_BITS 6
=20
+static void enable_lam_func(void *__mm)
+{
+	struct mm_struct *mm =3D __mm;
+	unsigned long lam;
+
+	if (this_cpu_read(cpu_tlbstate.loaded_mm) =3D=3D mm) {
+		lam =3D mm_lam_cr3_mask(mm);
+		write_cr3(__read_cr3() | lam);
+		cpu_tlbstate_update_lam(lam, mm_untag_mask(mm));
+	}
+}
+
+static void mm_enable_lam(struct mm_struct *mm)
+{
+	mm->context.lam_cr3_mask =3D X86_CR3_LAM_U57;
+	mm->context.untag_mask =3D  ~GENMASK(62, 57);
+
+	/*
+	 * Even though the process must still be single-threaded at this
+	 * point, kernel threads may be using the mm.  IPI those kernel
+	 * threads if they exist.
+	 */
+	on_each_cpu_mask(mm_cpumask(mm), enable_lam_func, mm, true);
+	set_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags);
+}
+
 static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned long nr_b=
its)
 {
 	if (!cpu_feature_enabled(X86_FEATURE_LAM))
@@ -814,25 +840,21 @@ static int prctl_enable_tagged_addr(struct mm_struct *m=
m, unsigned long nr_bits)
 	if (mmap_write_lock_killable(mm))
 		return -EINTR;
=20
+	/*
+	 * MM_CONTEXT_LOCK_LAM is set on clone.  Prevent LAM from
+	 * being enabled unless the process is single threaded:
+	 */
 	if (test_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags)) {
 		mmap_write_unlock(mm);
 		return -EBUSY;
 	}
=20
-	if (!nr_bits) {
-		mmap_write_unlock(mm);
-		return -EINVAL;
-	} else if (nr_bits <=3D LAM_U57_BITS) {
-		mm->context.lam_cr3_mask =3D X86_CR3_LAM_U57;
-		mm->context.untag_mask =3D  ~GENMASK(62, 57);
-	} else {
+	if (!nr_bits || nr_bits > LAM_U57_BITS) {
 		mmap_write_unlock(mm);
 		return -EINVAL;
 	}
=20
-	write_cr3(__read_cr3() | mm->context.lam_cr3_mask);
-	set_tlbstate_lam_mode(mm);
-	set_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags);
+	mm_enable_lam(mm);
=20
 	mmap_write_unlock(mm);
=20
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 31b6f5dddfc2..5f441039b572 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -60,6 +60,24 @@ static inline int is_x32_frame(struct ksignal *ksig)
 		ksig->ka.sa.sa_flags & SA_X32_ABI;
 }
=20
+/*
+ * Enable all pkeys temporarily, so as to ensure that both the current
+ * execution stack as well as the alternate signal stack are writeable.
+ * The application can use any of the available pkeys to protect the
+ * alternate signal stack, and we don't know which one it is, so enable
+ * all. The PKRU register will be reset to init_pkru later in the flow,
+ * in fpu__clear_user_states(), and it is the application's responsibility
+ * to enable the appropriate pkey as the first step in the signal handler
+ * so that the handler does not segfault.
+ */
+static inline u32 sig_prepare_pkru(void)
+{
+	u32 orig_pkru =3D read_pkru();
+
+	write_pkru(0);
+	return orig_pkru;
+}
+
 /*
  * Set up a signal frame.
  */
@@ -84,6 +102,7 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *regs, s=
ize_t frame_size,
 	unsigned long math_size =3D 0;
 	unsigned long sp =3D regs->sp;
 	unsigned long buf_fx =3D 0;
+	u32 pkru;
=20
 	/* redzone */
 	if (!ia32_frame)
@@ -138,9 +157,17 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *regs,=
 size_t frame_size,
 		return (void __user *)-1L;
 	}
=20
+	/* Update PKRU to enable access to the alternate signal stack. */
+	pkru =3D sig_prepare_pkru();
 	/* save i387 and extended state */
-	if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size))
+	if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size, p=
kru)) {
+		/*
+		 * Restore PKRU to the original, user-defined value; disable
+		 * extra pkeys enabled for the alternate signal stack, if any.
+		 */
+		write_pkru(pkru);
 		return (void __user *)-1L;
+	}
=20
 	return (void __user *)sp;
 }
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
index 8a94053c5444..ee9453891901 100644
--- a/arch/x86/kernel/signal_64.c
+++ b/arch/x86/kernel/signal_64.c
@@ -260,13 +260,13 @@ SYSCALL_DEFINE0(rt_sigreturn)
=20
 	set_current_blocked(&set);
=20
-	if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
+	if (restore_altstack(&frame->uc.uc_stack))
 		goto badframe;
=20
-	if (restore_signal_shadow_stack())
+	if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
 		goto badframe;
=20
-	if (restore_altstack(&frame->uc.uc_stack))
+	if (restore_signal_shadow_stack())
 		goto badframe;
=20
 	return regs->ax;
diff --git a/arch/x86/mm/ident_map.c b/arch/x86/mm/ident_map.c
index c45127265f2f..437e96fb4977 100644
--- a/arch/x86/mm/ident_map.c
+++ b/arch/x86/mm/ident_map.c
@@ -99,18 +99,31 @@ static int ident_pud_init(struct x86_mapping_info *info, =
pud_t *pud_page,
 	for (; addr < end; addr =3D next) {
 		pud_t *pud =3D pud_page + pud_index(addr);
 		pmd_t *pmd;
+		bool use_gbpage;
=20
 		next =3D (addr & PUD_MASK) + PUD_SIZE;
 		if (next > end)
 			next =3D end;
=20
-		if (info->direct_gbpages) {
-			pud_t pudval;
+		/* if this is already a gbpage, this portion is already mapped */
+		if (pud_leaf(*pud))
+			continue;
+
+		/* Is using a gbpage allowed? */
+		use_gbpage =3D info->direct_gbpages;
=20
-			if (pud_present(*pud))
-				continue;
+		/* Don't use gbpage if it maps more than the requested region. */
+		/* at the begining: */
+		use_gbpage &=3D ((addr & ~PUD_MASK) =3D=3D 0);
+		/* ... or at the end: */
+		use_gbpage &=3D ((next & ~PUD_MASK) =3D=3D 0);
+
+		/* Never overwrite existing mappings */
+		use_gbpage &=3D !pud_present(*pud);
+
+		if (use_gbpage) {
+			pud_t pudval;
=20
-			addr &=3D PUD_MASK;
 			pudval =3D __pud((addr - info->offset) | info->page_flag);
 			set_pud(pud, pudval);
 			continue;
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index aa7d279321ea..70b02fc61d93 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -11,6 +11,7 @@
 #include <linux/init.h>
 #include <linux/io.h>
 #include <linux/ioport.h>
+#include <linux/ioremap.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
 #include <linux/mmiotrace.h>
@@ -457,7 +458,7 @@ void iounmap(volatile void __iomem *addr)
 {
 	struct vm_struct *p, *o;
=20
-	if ((void __force *)addr <=3D high_memory)
+	if (WARN_ON_ONCE(!is_ioremap_addr((void __force *)addr)))
 		return;
=20
 	/*
diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
index 9c52a95937ad..6f8e0f21c710 100644
--- a/arch/x86/mm/srat.c
+++ b/arch/x86/mm/srat.c
@@ -57,8 +57,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_=
affinity *pa)
 	}
 	set_apicid_to_node(apic_id, node);
 	node_set(node, numa_nodes_parsed);
-	printk(KERN_INFO "SRAT: PXM %u -> APIC 0x%04x -> Node %u\n",
-	       pxm, apic_id, node);
+	pr_debug("SRAT: PXM %u -> APIC 0x%04x -> Node %u\n", pxm, apic_id, node);
 }
=20
 /* Callback for Proximity Domain -> LAPIC mapping */
@@ -98,8 +97,7 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affi=
nity *pa)
=20
 	set_apicid_to_node(apic_id, node);
 	node_set(node, numa_nodes_parsed);
-	printk(KERN_INFO "SRAT: PXM %u -> APIC 0x%02x -> Node %u\n",
-	       pxm, apic_id, node);
+	pr_debug("SRAT: PXM %u -> APIC 0x%02x -> Node %u\n", pxm, apic_id, node);
 }
=20
 int __init x86_acpi_numa_init(void)
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 44ac64f3a047..86593d1b787d 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -11,6 +11,7 @@
 #include <linux/sched/smt.h>
 #include <linux/task_work.h>
 #include <linux/mmu_notifier.h>
+#include <linux/mmu_context.h>
=20
 #include <asm/tlbflush.h>
 #include <asm/mmu_context.h>
@@ -85,9 +86,6 @@
  *
  */
=20
-/* There are 12 bits of space for ASIDS in CR3 */
-#define CR3_HW_ASID_BITS		12
-
 /*
  * When enabled, MITIGATION_PAGE_TABLE_ISOLATION consumes a single bit for
  * user/kernel switches
@@ -160,7 +158,6 @@ static inline unsigned long build_cr3(pgd_t *pgd, u16 asi=
d, unsigned long lam)
 	unsigned long cr3 =3D __sme_pa(pgd) | lam;
=20
 	if (static_cpu_has(X86_FEATURE_PCID)) {
-		VM_WARN_ON_ONCE(asid > MAX_ASID_AVAILABLE);
 		cr3 |=3D kern_pcid(asid);
 	} else {
 		VM_WARN_ON_ONCE(asid !=3D 0);
@@ -503,9 +500,9 @@ void switch_mm_irqs_off(struct mm_struct *unused, struct =
mm_struct *next,
 {
 	struct mm_struct *prev =3D this_cpu_read(cpu_tlbstate.loaded_mm);
 	u16 prev_asid =3D this_cpu_read(cpu_tlbstate.loaded_mm_asid);
-	unsigned long new_lam =3D mm_lam_cr3_mask(next);
 	bool was_lazy =3D this_cpu_read(cpu_tlbstate_shared.is_lazy);
 	unsigned cpu =3D smp_processor_id();
+	unsigned long new_lam;
 	u64 next_tlb_gen;
 	bool need_flush;
 	u16 new_asid;
@@ -619,9 +616,7 @@ void switch_mm_irqs_off(struct mm_struct *unused, struct =
mm_struct *next,
 			cpumask_clear_cpu(cpu, mm_cpumask(prev));
 		}
=20
-		/*
-		 * Start remote flushes and then read tlb_gen.
-		 */
+		/* Start receiving IPIs and then read tlb_gen (and LAM below) */
 		if (next !=3D &init_mm)
 			cpumask_set_cpu(cpu, mm_cpumask(next));
 		next_tlb_gen =3D atomic64_read(&next->context.tlb_gen);
@@ -633,7 +628,7 @@ void switch_mm_irqs_off(struct mm_struct *unused, struct =
mm_struct *next,
 		barrier();
 	}
=20
-	set_tlbstate_lam_mode(next);
+	new_lam =3D mm_lam_cr3_mask(next);
 	if (need_flush) {
 		this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id);
 		this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen);
@@ -652,6 +647,7 @@ void switch_mm_irqs_off(struct mm_struct *unused, struct =
mm_struct *next,
=20
 	this_cpu_write(cpu_tlbstate.loaded_mm, next);
 	this_cpu_write(cpu_tlbstate.loaded_mm_asid, new_asid);
+	cpu_tlbstate_update_lam(new_lam, mm_untag_mask(next));
=20
 	if (next !=3D prev) {
 		cr4_update_pce_mm(next);
@@ -698,6 +694,7 @@ void initialize_tlbstate_and_flush(void)
 	int i;
 	struct mm_struct *mm =3D this_cpu_read(cpu_tlbstate.loaded_mm);
 	u64 tlb_gen =3D atomic64_read(&init_mm.context.tlb_gen);
+	unsigned long lam =3D mm_lam_cr3_mask(mm);
 	unsigned long cr3 =3D __read_cr3();
=20
 	/* Assert that CR3 already references the right mm. */
@@ -705,7 +702,7 @@ void initialize_tlbstate_and_flush(void)
=20
 	/* LAM expected to be disabled */
 	WARN_ON(cr3 & (X86_CR3_LAM_U48 | X86_CR3_LAM_U57));
-	WARN_ON(mm_lam_cr3_mask(mm));
+	WARN_ON(lam);
=20
 	/*
 	 * Assert that CR4.PCIDE is set if needed.  (CR4.PCIDE initialization
@@ -724,7 +721,7 @@ void initialize_tlbstate_and_flush(void)
 	this_cpu_write(cpu_tlbstate.next_asid, 1);
 	this_cpu_write(cpu_tlbstate.ctxs[0].ctx_id, mm->context.ctx_id);
 	this_cpu_write(cpu_tlbstate.ctxs[0].tlb_gen, tlb_gen);
-	set_tlbstate_lam_mode(mm);
+	cpu_tlbstate_update_lam(lam, mm_untag_mask(mm));
=20
 	for (i =3D 1; i < TLB_NR_DYN_ASIDS; i++)
 		this_cpu_write(cpu_tlbstate.ctxs[i].ctx_id, 0);
diff --git a/include/linux/ioremap.h b/include/linux/ioremap.h
index f0e99fc7dd8b..2bd1661fe9ad 100644
--- a/include/linux/ioremap.h
+++ b/include/linux/ioremap.h
@@ -4,6 +4,7 @@
=20
 #include <linux/kasan.h>
 #include <asm/pgtable.h>
+#include <asm/vmalloc.h>
=20
 #if defined(CONFIG_HAS_IOMEM) || defined(CONFIG_GENERIC_IOREMAP)
 /*
diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm=
/Makefile
index 901e0d07765b..1f176fff7054 100644
--- a/tools/testing/selftests/mm/Makefile
+++ b/tools/testing/selftests/mm/Makefile
@@ -88,6 +88,7 @@ CAN_BUILD_X86_64 :=3D $(shell ./../x86/check_cc.sh "$(CC)" =
../x86/trivial_64bit_pr
 CAN_BUILD_WITH_NOPIE :=3D $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivia=
l_program.c -no-pie)
=20
 VMTARGETS :=3D protection_keys
+VMTARGETS +=3D pkey_sighandler_tests
 BINARIES_32 :=3D $(VMTARGETS:%=3D%_32)
 BINARIES_64 :=3D $(VMTARGETS:%=3D%_64)
=20
diff --git a/tools/testing/selftests/mm/pkey-helpers.h b/tools/testing/selfte=
sts/mm/pkey-helpers.h
index 1af3156a9db8..4d31a309a46b 100644
--- a/tools/testing/selftests/mm/pkey-helpers.h
+++ b/tools/testing/selftests/mm/pkey-helpers.h
@@ -79,7 +79,18 @@ extern void abort_hooks(void);
 	}					\
 } while (0)
=20
-__attribute__((noinline)) int read_ptr(int *ptr);
+#define barrier() __asm__ __volatile__("": : :"memory")
+#ifndef noinline
+# define noinline __attribute__((noinline))
+#endif
+
+noinline int read_ptr(int *ptr)
+{
+	/* Keep GCC from optimizing this away somehow */
+	barrier();
+	return *ptr;
+}
+
 void expected_pkey_fault(int pkey);
 int sys_pkey_alloc(unsigned long flags, unsigned long init_val);
 int sys_pkey_free(unsigned long pkey);
diff --git a/tools/testing/selftests/mm/pkey_sighandler_tests.c b/tools/testi=
ng/selftests/mm/pkey_sighandler_tests.c
new file mode 100644
index 000000000000..a8088b645ad6
--- /dev/null
+++ b/tools/testing/selftests/mm/pkey_sighandler_tests.c
@@ -0,0 +1,481 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Tests Memory Protection Keys (see Documentation/core-api/protection-keys.=
rst)
+ *
+ * The testcases in this file exercise various flows related to signal handl=
ing,
+ * using an alternate signal stack, with the default pkey (pkey 0) disabled.
+ *
+ * Compile with:
+ * gcc -mxsave      -o pkey_sighandler_tests -O2 -g -std=3Dgnu99 -pthread -W=
all pkey_sighandler_tests.c -I../../../../tools/include -lrt -ldl -lm
+ * gcc -mxsave -m32 -o pkey_sighandler_tests -O2 -g -std=3Dgnu99 -pthread -W=
all pkey_sighandler_tests.c -I../../../../tools/include -lrt -ldl -lm
+ */
+#define _GNU_SOURCE
+#define __SANE_USERSPACE_TYPES__
+#include <errno.h>
+#include <sys/syscall.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <signal.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <limits.h>
+
+#include "pkey-helpers.h"
+
+#define STACK_SIZE PTHREAD_STACK_MIN
+
+void expected_pkey_fault(int pkey) {}
+
+pthread_mutex_t mutex =3D PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t cond =3D PTHREAD_COND_INITIALIZER;
+siginfo_t siginfo =3D {0};
+
+/*
+ * We need to use inline assembly instead of glibc's syscall because glibc's
+ * syscall will attempt to access the PLT in order to call a library function
+ * which is protected by MPK 0 which we don't have access to.
+ */
+static inline __always_inline
+long syscall_raw(long n, long a1, long a2, long a3, long a4, long a5, long a=
6)
+{
+	unsigned long ret;
+#ifdef __x86_64__
+	register long r10 asm("r10") =3D a4;
+	register long r8 asm("r8") =3D a5;
+	register long r9 asm("r9") =3D a6;
+	asm volatile ("syscall"
+		      : "=3Da"(ret)
+		      : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8), "r"(r9)
+		      : "rcx", "r11", "memory");
+#elif defined __i386__
+	asm volatile ("int $0x80"
+		      : "=3Da"(ret)
+		      : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5)
+		      : "memory");
+#else
+# error syscall_raw() not implemented
+#endif
+	return ret;
+}
+
+static void sigsegv_handler(int signo, siginfo_t *info, void *ucontext)
+{
+	pthread_mutex_lock(&mutex);
+
+	memcpy(&siginfo, info, sizeof(siginfo_t));
+
+	pthread_cond_signal(&cond);
+	pthread_mutex_unlock(&mutex);
+
+	syscall_raw(SYS_exit, 0, 0, 0, 0, 0, 0);
+}
+
+static void sigusr1_handler(int signo, siginfo_t *info, void *ucontext)
+{
+	pthread_mutex_lock(&mutex);
+
+	memcpy(&siginfo, info, sizeof(siginfo_t));
+
+	pthread_cond_signal(&cond);
+	pthread_mutex_unlock(&mutex);
+}
+
+static void sigusr2_handler(int signo, siginfo_t *info, void *ucontext)
+{
+	/*
+	 * pkru should be the init_pkru value which enabled MPK 0 so
+	 * we can use library functions.
+	 */
+	printf("%s invoked.\n", __func__);
+}
+
+static void raise_sigusr2(void)
+{
+	pid_t tid =3D 0;
+
+	tid =3D syscall_raw(SYS_gettid, 0, 0, 0, 0, 0, 0);
+
+	syscall_raw(SYS_tkill, tid, SIGUSR2, 0, 0, 0, 0);
+
+	/*
+	 * We should return from the signal handler here and be able to
+	 * return to the interrupted thread.
+	 */
+}
+
+static void *thread_segv_with_pkey0_disabled(void *ptr)
+{
+	/* Disable MPK 0 (and all others too) */
+	__write_pkey_reg(0x55555555);
+
+	/* Segfault (with SEGV_MAPERR) */
+	*(int *) (0x1) =3D 1;
+	return NULL;
+}
+
+static void *thread_segv_pkuerr_stack(void *ptr)
+{
+	/* Disable MPK 0 (and all others too) */
+	__write_pkey_reg(0x55555555);
+
+	/* After we disable MPK 0, we can't access the stack to return */
+	return NULL;
+}
+
+static void *thread_segv_maperr_ptr(void *ptr)
+{
+	stack_t *stack =3D ptr;
+	int *bad =3D (int *)1;
+
+	/*
+	 * Setup alternate signal stack, which should be pkey_mprotect()ed by
+	 * MPK 0. The thread's stack cannot be used for signals because it is
+	 * not accessible by the default init_pkru value of 0x55555554.
+	 */
+	syscall_raw(SYS_sigaltstack, (long)stack, 0, 0, 0, 0, 0);
+
+	/* Disable MPK 0.  Only MPK 1 is enabled. */
+	__write_pkey_reg(0x55555551);
+
+	/* Segfault */
+	*bad =3D 1;
+	syscall_raw(SYS_exit, 0, 0, 0, 0, 0, 0);
+	return NULL;
+}
+
+/*
+ * Verify that the sigsegv handler is invoked when pkey 0 is disabled.
+ * Note that the new thread stack and the alternate signal stack is
+ * protected by MPK 0.
+ */
+static void test_sigsegv_handler_with_pkey0_disabled(void)
+{
+	struct sigaction sa;
+	pthread_attr_t attr;
+	pthread_t thr;
+
+	sa.sa_flags =3D SA_SIGINFO;
+
+	sa.sa_sigaction =3D sigsegv_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGSEGV, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	memset(&siginfo, 0, sizeof(siginfo));
+
+	pthread_attr_init(&attr);
+	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+	pthread_create(&thr, &attr, thread_segv_with_pkey0_disabled, NULL);
+
+	pthread_mutex_lock(&mutex);
+	while (siginfo.si_signo =3D=3D 0)
+		pthread_cond_wait(&cond, &mutex);
+	pthread_mutex_unlock(&mutex);
+
+	ksft_test_result(siginfo.si_signo =3D=3D SIGSEGV &&
+			 siginfo.si_code =3D=3D SEGV_MAPERR &&
+			 siginfo.si_addr =3D=3D (void *)1,
+			 "%s\n", __func__);
+}
+
+/*
+ * Verify that the sigsegv handler is invoked when pkey 0 is disabled.
+ * Note that the new thread stack and the alternate signal stack is
+ * protected by MPK 0, which renders them inaccessible when MPK 0
+ * is disabled. So just the return from the thread should cause a
+ * segfault with SEGV_PKUERR.
+ */
+static void test_sigsegv_handler_cannot_access_stack(void)
+{
+	struct sigaction sa;
+	pthread_attr_t attr;
+	pthread_t thr;
+
+	sa.sa_flags =3D SA_SIGINFO;
+
+	sa.sa_sigaction =3D sigsegv_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGSEGV, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	memset(&siginfo, 0, sizeof(siginfo));
+
+	pthread_attr_init(&attr);
+	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+	pthread_create(&thr, &attr, thread_segv_pkuerr_stack, NULL);
+
+	pthread_mutex_lock(&mutex);
+	while (siginfo.si_signo =3D=3D 0)
+		pthread_cond_wait(&cond, &mutex);
+	pthread_mutex_unlock(&mutex);
+
+	ksft_test_result(siginfo.si_signo =3D=3D SIGSEGV &&
+			 siginfo.si_code =3D=3D SEGV_PKUERR,
+			 "%s\n", __func__);
+}
+
+/*
+ * Verify that the sigsegv handler that uses an alternate signal stack
+ * is correctly invoked for a thread which uses a non-zero MPK to protect
+ * its own stack, and disables all other MPKs (including 0).
+ */
+static void test_sigsegv_handler_with_different_pkey_for_stack(void)
+{
+	struct sigaction sa;
+	static stack_t sigstack;
+	void *stack;
+	int pkey;
+	int parent_pid =3D 0;
+	int child_pid =3D 0;
+
+	sa.sa_flags =3D SA_SIGINFO | SA_ONSTACK;
+
+	sa.sa_sigaction =3D sigsegv_handler;
+
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGSEGV, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	stack =3D mmap(0, STACK_SIZE, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+	assert(stack !=3D MAP_FAILED);
+
+	/* Allow access to MPK 0 and MPK 1 */
+	__write_pkey_reg(0x55555550);
+
+	/* Protect the new stack with MPK 1 */
+	pkey =3D pkey_alloc(0, 0);
+	pkey_mprotect(stack, STACK_SIZE, PROT_READ | PROT_WRITE, pkey);
+
+	/* Set up alternate signal stack that will use the default MPK */
+	sigstack.ss_sp =3D mmap(0, STACK_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
+			      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	sigstack.ss_flags =3D 0;
+	sigstack.ss_size =3D STACK_SIZE;
+
+	memset(&siginfo, 0, sizeof(siginfo));
+
+	/* Use clone to avoid newer glibcs using rseq on new threads */
+	long ret =3D syscall_raw(SYS_clone,
+			       CLONE_VM | CLONE_FS | CLONE_FILES |
+			       CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM |
+			       CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID |
+			       CLONE_DETACHED,
+			       (long) ((char *)(stack) + STACK_SIZE),
+			       (long) &parent_pid,
+			       (long) &child_pid, 0, 0);
+
+	if (ret < 0) {
+		errno =3D -ret;
+		perror("clone");
+	} else if (ret =3D=3D 0) {
+		thread_segv_maperr_ptr(&sigstack);
+		syscall_raw(SYS_exit, 0, 0, 0, 0, 0, 0);
+	}
+
+	pthread_mutex_lock(&mutex);
+	while (siginfo.si_signo =3D=3D 0)
+		pthread_cond_wait(&cond, &mutex);
+	pthread_mutex_unlock(&mutex);
+
+	ksft_test_result(siginfo.si_signo =3D=3D SIGSEGV &&
+			 siginfo.si_code =3D=3D SEGV_MAPERR &&
+			 siginfo.si_addr =3D=3D (void *)1,
+			 "%s\n", __func__);
+}
+
+/*
+ * Verify that the PKRU value set by the application is correctly
+ * restored upon return from signal handling.
+ */
+static void test_pkru_preserved_after_sigusr1(void)
+{
+	struct sigaction sa;
+	unsigned long pkru =3D 0x45454544;
+
+	sa.sa_flags =3D SA_SIGINFO;
+
+	sa.sa_sigaction =3D sigusr1_handler;
+	sigemptyset(&sa.sa_mask);
+	if (sigaction(SIGUSR1, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	memset(&siginfo, 0, sizeof(siginfo));
+
+	__write_pkey_reg(pkru);
+
+	raise(SIGUSR1);
+
+	pthread_mutex_lock(&mutex);
+	while (siginfo.si_signo =3D=3D 0)
+		pthread_cond_wait(&cond, &mutex);
+	pthread_mutex_unlock(&mutex);
+
+	/* Ensure the pkru value is the same after returning from signal. */
+	ksft_test_result(pkru =3D=3D __read_pkey_reg() &&
+			 siginfo.si_signo =3D=3D SIGUSR1,
+			 "%s\n", __func__);
+}
+
+static noinline void *thread_sigusr2_self(void *ptr)
+{
+	/*
+	 * A const char array like "Resuming after SIGUSR2" won't be stored on
+	 * the stack and the code could access it via an offset from the program
+	 * counter. This makes sure it's on the function's stack frame.
+	 */
+	char str[] =3D {'R', 'e', 's', 'u', 'm', 'i', 'n', 'g', ' ',
+		'a', 'f', 't', 'e', 'r', ' ',
+		'S', 'I', 'G', 'U', 'S', 'R', '2',
+		'.', '.', '.', '\n', '\0'};
+	stack_t *stack =3D ptr;
+
+	/*
+	 * Setup alternate signal stack, which should be pkey_mprotect()ed by
+	 * MPK 0. The thread's stack cannot be used for signals because it is
+	 * not accessible by the default init_pkru value of 0x55555554.
+	 */
+	syscall(SYS_sigaltstack, (long)stack, 0, 0, 0, 0, 0);
+
+	/* Disable MPK 0.  Only MPK 2 is enabled. */
+	__write_pkey_reg(0x55555545);
+
+	raise_sigusr2();
+
+	/* Do something, to show the thread resumed execution after the signal */
+	syscall_raw(SYS_write, 1, (long) str, sizeof(str) - 1, 0, 0, 0);
+
+	/*
+	 * We can't return to test_pkru_sigreturn because it
+	 * will attempt to use a %rbp value which is on the stack
+	 * of the main thread.
+	 */
+	syscall_raw(SYS_exit, 0, 0, 0, 0, 0, 0);
+	return NULL;
+}
+
+/*
+ * Verify that sigreturn is able to restore altstack even if the thread had
+ * disabled pkey 0.
+ */
+static void test_pkru_sigreturn(void)
+{
+	struct sigaction sa =3D {0};
+	static stack_t sigstack;
+	void *stack;
+	int pkey;
+	int parent_pid =3D 0;
+	int child_pid =3D 0;
+
+	sa.sa_handler =3D SIG_DFL;
+	sa.sa_flags =3D 0;
+	sigemptyset(&sa.sa_mask);
+
+	/*
+	 * For this testcase, we do not want to handle SIGSEGV. Reset handler
+	 * to default so that the application can crash if it receives SIGSEGV.
+	 */
+	if (sigaction(SIGSEGV, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	sa.sa_flags =3D SA_SIGINFO | SA_ONSTACK;
+	sa.sa_sigaction =3D sigusr2_handler;
+	sigemptyset(&sa.sa_mask);
+
+	if (sigaction(SIGUSR2, &sa, NULL) =3D=3D -1) {
+		perror("sigaction");
+		exit(EXIT_FAILURE);
+	}
+
+	stack =3D mmap(0, STACK_SIZE, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+
+	assert(stack !=3D MAP_FAILED);
+
+	/*
+	 * Allow access to MPK 0 and MPK 2. The child thread (to be created
+	 * later in this flow) will have its stack protected by MPK 2, whereas
+	 * the current thread's stack is protected by the default MPK 0. Hence
+	 * both need to be enabled.
+	 */
+	__write_pkey_reg(0x55555544);
+
+	/* Protect the stack with MPK 2 */
+	pkey =3D pkey_alloc(0, 0);
+	pkey_mprotect(stack, STACK_SIZE, PROT_READ | PROT_WRITE, pkey);
+
+	/* Set up alternate signal stack that will use the default MPK */
+	sigstack.ss_sp =3D mmap(0, STACK_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
+			      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	sigstack.ss_flags =3D 0;
+	sigstack.ss_size =3D STACK_SIZE;
+
+	/* Use clone to avoid newer glibcs using rseq on new threads */
+	long ret =3D syscall_raw(SYS_clone,
+			       CLONE_VM | CLONE_FS | CLONE_FILES |
+			       CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM |
+			       CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID |
+			       CLONE_DETACHED,
+			       (long) ((char *)(stack) + STACK_SIZE),
+			       (long) &parent_pid,
+			       (long) &child_pid, 0, 0);
+
+	if (ret < 0) {
+		errno =3D -ret;
+		perror("clone");
+	}  else if (ret =3D=3D 0) {
+		thread_sigusr2_self(&sigstack);
+		syscall_raw(SYS_exit, 0, 0, 0, 0, 0, 0);
+	}
+
+	child_pid =3D  ret;
+	/* Check that thread exited */
+	do {
+		sched_yield();
+		ret =3D syscall_raw(SYS_tkill, child_pid, 0, 0, 0, 0, 0);
+	} while (ret !=3D -ESRCH && ret !=3D -EINVAL);
+
+	ksft_test_result_pass("%s\n", __func__);
+}
+
+static void (*pkey_tests[])(void) =3D {
+	test_sigsegv_handler_with_pkey0_disabled,
+	test_sigsegv_handler_cannot_access_stack,
+	test_sigsegv_handler_with_different_pkey_for_stack,
+	test_pkru_preserved_after_sigusr1,
+	test_pkru_sigreturn
+};
+
+int main(int argc, char *argv[])
+{
+	int i;
+
+	ksft_print_header();
+	ksft_set_plan(ARRAY_SIZE(pkey_tests));
+
+	for (i =3D 0; i < ARRAY_SIZE(pkey_tests); i++)
+		(*pkey_tests[i])();
+
+	ksft_finished();
+	return 0;
+}
diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/sel=
ftests/mm/protection_keys.c
index eaa6d1fc5328..cc6de1644360 100644
--- a/tools/testing/selftests/mm/protection_keys.c
+++ b/tools/testing/selftests/mm/protection_keys.c
@@ -950,16 +950,6 @@ void close_test_fds(void)
 	nr_test_fds =3D 0;
 }
=20
-#define barrier() __asm__ __volatile__("": : :"memory")
-__attribute__((noinline)) int read_ptr(int *ptr)
-{
-	/*
-	 * Keep GCC from optimizing this away somehow
-	 */
-	barrier();
-	return *ptr;
-}
-
 void test_pkey_alloc_free_attach_pkey0(int *ptr, u16 pkey)
 {
 	int i, err;


.
Date: Tue, 17 Sep 2024 10:54:04 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/apic for v6.12-rc1

Linus,

please pull the latest x86/apic branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-apic-2024-09=
-17

up to:  a1fab3e69d9d: x86/irq: Fix comment on IRQ vector layout

Updates for the x86 APIC code:

  - Handle an allocation failure in the IO/APIC code gracefully instead of
    crashing the machine.

  - Remove support for APIC local destination mode on 64bit

    Logical destination mode of the local APIC is used for systems with up
    to 8 CPUs. It has an advantage over physical destination mode as it
    allows to target multiple CPUs at once with IPIs. That advantage was
    definitely worth it when systems with up to 8 CPUs were state of the
    art for servers and workstations, but that's history.

    In the recent past there were quite some reports of new laptops failing
    to boot with logical destination mode, but they work fine with physical
    destination mode. That's not a suprise because physical destination
    mode is guaranteed to work as it's the only way to get a CPU up and
    running via the INIT/INIT/STARTUP sequence. Some of the affected
    systems were cured by BIOS updates, but not all OEMs provide them.

    As the number of CPUs keep increasing, logical destination mode becomes
    less used and the benefit for small systems, like laptops, is not
    really worth the trouble. So just remove logical destination mode
    support for 64bit and be done with it.

  - Code and comment cleanups in the APIC area.

Thanks,

	tglx

------------------>
Sohil Mehta (1):
      x86/irq: Fix comment on IRQ vector layout

Thomas Gleixner (16):
      x86/ioapic: Handle allocation failures gracefully
      x86/ioapic: Mark mp_alloc_timer_irq() __init
      x86/ioapic: Cleanup structs
      x86/ioapic: Use guard() for locking where applicable
      x86/apic: Provide apic_printk() helpers
      x86/apic: Cleanup apic_printk()s
      x86/ioapic: Cleanup apic_printk()s
      x86/ioapic: Cleanup guarded debug printk()s
      x86/mpparse: Cleanup apic_printk()s
      iommu/vt-d: Cleanup apic_printk()
      x86/ioapic: Move replace_pin_at_irq_node() to the call site
      x86/ioapic: Cleanup comments
      x86/ioapic: Cleanup bracket usage
      x86/ioapic: Cleanup line breaks
      x86/ioapic: Cleanup remaining coding style issues
      x86/apic: Remove logical destination mode for 64-bit

Yue Haibing (2):
      x86/apic: Remove unused inline function apic_set_eoi_cb()
      x86/apic: Remove unused extern declarations


 arch/x86/include/asm/apic.h         |  48 +--
 arch/x86/include/asm/irq_vectors.h  |   4 +-
 arch/x86/kernel/apic/apic.c         |  81 ++--
 arch/x86/kernel/apic/apic_flat_64.c | 119 +-----
 arch/x86/kernel/apic/io_apic.c      | 749 +++++++++++++++-------------------=
--
 arch/x86/kernel/mpparse.c           |  13 +-
 drivers/iommu/intel/irq_remapping.c |  11 +-
 7 files changed, 378 insertions(+), 647 deletions(-)

diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index 9327eb00e96d..f21ff1932699 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -18,6 +18,11 @@
=20
 #define ARCH_APICTIMER_STOPS_ON_C3	1
=20
+/* Macros for apic_extnmi which controls external NMI masking */
+#define APIC_EXTNMI_BSP		0 /* Default */
+#define APIC_EXTNMI_ALL		1
+#define APIC_EXTNMI_NONE	2
+
 /*
  * Debugging macros
  */
@@ -25,22 +30,22 @@
 #define APIC_VERBOSE 1
 #define APIC_DEBUG   2
=20
-/* Macros for apic_extnmi which controls external NMI masking */
-#define APIC_EXTNMI_BSP		0 /* Default */
-#define APIC_EXTNMI_ALL		1
-#define APIC_EXTNMI_NONE	2
-
 /*
- * Define the default level of output to be very little
- * This can be turned up by using apic=3Dverbose for more
- * information and apic=3Ddebug for _lots_ of information.
- * apic_verbosity is defined in apic.c
+ * Define the default level of output to be very little This can be turned
+ * up by using apic=3Dverbose for more information and apic=3Ddebug for _lot=
s_
+ * of information.  apic_verbosity is defined in apic.c
  */
-#define apic_printk(v, s, a...) do {       \
-		if ((v) <=3D apic_verbosity) \
-			printk(s, ##a);    \
-	} while (0)
-
+#define apic_printk(v, s, a...)			\
+do {						\
+	if ((v) <=3D apic_verbosity)		\
+		printk(s, ##a);			\
+} while (0)
+
+#define apic_pr_verbose(s, a...)	apic_printk(APIC_VERBOSE, KERN_INFO s, ##a)
+#define apic_pr_debug(s, a...)		apic_printk(APIC_DEBUG, KERN_DEBUG s, ##a)
+#define apic_pr_debug_cont(s, a...)	apic_printk(APIC_DEBUG, KERN_CONT s, ##a)
+/* Unconditional debug prints for code which is guarded by apic_verbosity al=
ready */
+#define apic_dbg(s, a...)		printk(KERN_DEBUG s, ##a)
=20
 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32)
 extern void x86_32_probe_apic(void);
@@ -122,8 +127,6 @@ static inline bool apic_is_x2apic_enabled(void)
=20
 extern void enable_IR_x2apic(void);
=20
-extern int get_physical_broadcast(void);
-
 extern int lapic_get_maxlvt(void);
 extern void clear_local_APIC(void);
 extern void disconnect_bsp_APIC(int virt_wire_setup);
@@ -345,20 +348,12 @@ extern struct apic *apic;
  * APIC drivers are probed based on how they are listed in the .apicdrivers
  * section. So the order is important and enforced by the ordering
  * of different apic driver files in the Makefile.
- *
- * For the files having two apic drivers, we use apic_drivers()
- * to enforce the order with in them.
  */
 #define apic_driver(sym)					\
 	static const struct apic *__apicdrivers_##sym __used		\
 	__aligned(sizeof(struct apic *))			\
 	__section(".apicdrivers") =3D { &sym }
=20
-#define apic_drivers(sym1, sym2)					\
-	static struct apic *__apicdrivers_##sym1##sym2[2] __used	\
-	__aligned(sizeof(struct apic *))				\
-	__section(".apicdrivers") =3D { &sym1, &sym2 }
-
 extern struct apic *__apicdrivers[], *__apicdrivers_end[];
=20
 /*
@@ -484,7 +479,6 @@ static inline u64 apic_icr_read(void) { return 0; }
 static inline void apic_icr_write(u32 low, u32 high) { }
 static inline void apic_wait_icr_idle(void) { }
 static inline u32 safe_apic_wait_icr_idle(void) { return 0; }
-static inline void apic_set_eoi_cb(void (*eoi)(void)) {}
 static inline void apic_native_eoi(void) { WARN_ON_ONCE(1); }
 static inline void apic_setup_apic_calls(void) { }
=20
@@ -512,8 +506,6 @@ static inline bool is_vector_pending(unsigned int vector)
 #define TRAMPOLINE_PHYS_LOW		0x467
 #define TRAMPOLINE_PHYS_HIGH		0x469
=20
-extern void generic_bigsmp_probe(void);
-
 #ifdef CONFIG_X86_LOCAL_APIC
=20
 #include <asm/smp.h>
@@ -536,8 +528,6 @@ static inline int default_acpi_madt_oem_check(char *a, ch=
ar *b) { return 0; }
 static inline void x86_64_probe_apic(void) { }
 #endif
=20
-extern int default_apic_id_valid(u32 apicid);
-
 extern u32 apic_default_calc_apicid(unsigned int cpu);
 extern u32 apic_flat_calc_apicid(unsigned int cpu);
=20
diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_ve=
ctors.h
index 13aea8fc3d45..47051871b436 100644
--- a/arch/x86/include/asm/irq_vectors.h
+++ b/arch/x86/include/asm/irq_vectors.h
@@ -18,8 +18,8 @@
  *  Vectors   0 ...  31 : system traps and exceptions - hardcoded events
  *  Vectors  32 ... 127 : device interrupts
  *  Vector  128         : legacy int80 syscall interface
- *  Vectors 129 ... LOCAL_TIMER_VECTOR-1
- *  Vectors LOCAL_TIMER_VECTOR ... 255 : special interrupts
+ *  Vectors 129 ... FIRST_SYSTEM_VECTOR-1 : device interrupts
+ *  Vectors FIRST_SYSTEM_VECTOR ... 255   : special interrupts
  *
  * 64-bit x86 has per CPU IDT tables, 32-bit has one shared IDT table.
  *
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 66fd4b2a37a3..1838a73b0950 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -677,7 +677,7 @@ calibrate_by_pmtimer(u32 deltapm, long *delta, long *delt=
atsc)
 	return -1;
 #endif
=20
-	apic_printk(APIC_VERBOSE, "... PM-Timer delta =3D %u\n", deltapm);
+	apic_pr_verbose("... PM-Timer delta =3D %u\n", deltapm);
=20
 	/* Check, if the PM timer is available */
 	if (!deltapm)
@@ -687,14 +687,14 @@ calibrate_by_pmtimer(u32 deltapm, long *delta, long *de=
ltatsc)
=20
 	if (deltapm > (pm_100ms - pm_thresh) &&
 	    deltapm < (pm_100ms + pm_thresh)) {
-		apic_printk(APIC_VERBOSE, "... PM-Timer result ok\n");
+		apic_pr_verbose("... PM-Timer result ok\n");
 		return 0;
 	}
=20
 	res =3D (((u64)deltapm) *  mult) >> 22;
 	do_div(res, 1000000);
-	pr_warn("APIC calibration not consistent "
-		"with PM-Timer: %ldms instead of 100ms\n", (long)res);
+	pr_warn("APIC calibration not consistent with PM-Timer: %ldms instead of 10=
0ms\n",
+		(long)res);
=20
 	/* Correct the lapic counter value */
 	res =3D (((u64)(*delta)) * pm_100ms);
@@ -707,9 +707,8 @@ calibrate_by_pmtimer(u32 deltapm, long *delta, long *delt=
atsc)
 	if (boot_cpu_has(X86_FEATURE_TSC)) {
 		res =3D (((u64)(*deltatsc)) * pm_100ms);
 		do_div(res, deltapm);
-		apic_printk(APIC_VERBOSE, "TSC delta adjusted to "
-					  "PM-Timer: %lu (%ld)\n",
-					(unsigned long)res, *deltatsc);
+		apic_pr_verbose("TSC delta adjusted to PM-Timer: %lu (%ld)\n",
+				(unsigned long)res, *deltatsc);
 		*deltatsc =3D (long)res;
 	}
=20
@@ -792,8 +791,7 @@ static int __init calibrate_APIC_clock(void)
 	 * in the clockevent structure and return.
 	 */
 	if (!lapic_init_clockevent()) {
-		apic_printk(APIC_VERBOSE, "lapic timer already calibrated %d\n",
-			    lapic_timer_period);
+		apic_pr_verbose("lapic timer already calibrated %d\n", lapic_timer_period);
 		/*
 		 * Direct calibration methods must have an always running
 		 * local APIC timer, no need for broadcast timer.
@@ -802,8 +800,7 @@ static int __init calibrate_APIC_clock(void)
 		return 0;
 	}
=20
-	apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n"
-		    "calibrating APIC timer ...\n");
+	apic_pr_verbose("Using local APIC timer interrupts. Calibrating APIC timer =
...\n");
=20
 	/*
 	 * There are platforms w/o global clockevent devices. Instead of
@@ -866,7 +863,7 @@ static int __init calibrate_APIC_clock(void)
=20
 	/* Build delta t1-t2 as apic timer counts down */
 	delta =3D lapic_cal_t1 - lapic_cal_t2;
-	apic_printk(APIC_VERBOSE, "... lapic delta =3D %ld\n", delta);
+	apic_pr_verbose("... lapic delta =3D %ld\n", delta);
=20
 	deltatsc =3D (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
=20
@@ -877,22 +874,19 @@ static int __init calibrate_APIC_clock(void)
 	lapic_timer_period =3D (delta * APIC_DIVISOR) / LAPIC_CAL_LOOPS;
 	lapic_init_clockevent();
=20
-	apic_printk(APIC_VERBOSE, "..... delta %ld\n", delta);
-	apic_printk(APIC_VERBOSE, "..... mult: %u\n", lapic_clockevent.mult);
-	apic_printk(APIC_VERBOSE, "..... calibration result: %u\n",
-		    lapic_timer_period);
+	apic_pr_verbose("..... delta %ld\n", delta);
+	apic_pr_verbose("..... mult: %u\n", lapic_clockevent.mult);
+	apic_pr_verbose("..... calibration result: %u\n", lapic_timer_period);
=20
 	if (boot_cpu_has(X86_FEATURE_TSC)) {
-		apic_printk(APIC_VERBOSE, "..... CPU clock speed is "
-			    "%ld.%04ld MHz.\n",
-			    (deltatsc / LAPIC_CAL_LOOPS) / (1000000 / HZ),
-			    (deltatsc / LAPIC_CAL_LOOPS) % (1000000 / HZ));
+		apic_pr_verbose("..... CPU clock speed is %ld.%04ld MHz.\n",
+				(deltatsc / LAPIC_CAL_LOOPS) / (1000000 / HZ),
+				(deltatsc / LAPIC_CAL_LOOPS) % (1000000 / HZ));
 	}
=20
-	apic_printk(APIC_VERBOSE, "..... host bus clock speed is "
-		    "%u.%04u MHz.\n",
-		    lapic_timer_period / (1000000 / HZ),
-		    lapic_timer_period % (1000000 / HZ));
+	apic_pr_verbose("..... host bus clock speed is %u.%04u MHz.\n",
+			lapic_timer_period / (1000000 / HZ),
+			lapic_timer_period % (1000000 / HZ));
=20
 	/*
 	 * Do a sanity check on the APIC calibration result
@@ -911,7 +905,7 @@ static int __init calibrate_APIC_clock(void)
 	 * available.
 	 */
 	if (!pm_referenced && global_clock_event) {
-		apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
+		apic_pr_verbose("... verify APIC timer\n");
=20
 		/*
 		 * Setup the apic timer manually
@@ -932,11 +926,11 @@ static int __init calibrate_APIC_clock(void)
=20
 		/* Jiffies delta */
 		deltaj =3D lapic_cal_j2 - lapic_cal_j1;
-		apic_printk(APIC_VERBOSE, "... jiffies delta =3D %lu\n", deltaj);
+		apic_pr_verbose("... jiffies delta =3D %lu\n", deltaj);
=20
 		/* Check, if the jiffies result is consistent */
 		if (deltaj >=3D LAPIC_CAL_LOOPS-2 && deltaj <=3D LAPIC_CAL_LOOPS+2)
-			apic_printk(APIC_VERBOSE, "... jiffies result ok\n");
+			apic_pr_verbose("... jiffies result ok\n");
 		else
 			levt->features |=3D CLOCK_EVT_FEAT_DUMMY;
 	}
@@ -1221,9 +1215,8 @@ void __init sync_Arb_IDs(void)
 	 */
 	apic_wait_icr_idle();
=20
-	apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n");
-	apic_write(APIC_ICR, APIC_DEST_ALLINC |
-			APIC_INT_LEVELTRIG | APIC_DM_INIT);
+	apic_pr_debug("Synchronizing Arb IDs.\n");
+	apic_write(APIC_ICR, APIC_DEST_ALLINC | APIC_INT_LEVELTRIG | APIC_DM_INIT);
 }
=20
 enum apic_intr_mode_id apic_intr_mode __ro_after_init;
@@ -1409,10 +1402,10 @@ static void lapic_setup_esr(void)
 	if (maxlvt > 3)
 		apic_write(APIC_ESR, 0);
 	value =3D apic_read(APIC_ESR);
-	if (value !=3D oldvalue)
-		apic_printk(APIC_VERBOSE, "ESR value before enabling "
-			"vector: 0x%08x  after: 0x%08x\n",
-			oldvalue, value);
+	if (value !=3D oldvalue) {
+		apic_pr_verbose("ESR value before enabling vector: 0x%08x  after: 0x%08x\n=
",
+				oldvalue, value);
+	}
 }
=20
 #define APIC_IR_REGS		APIC_ISR_NR
@@ -1599,10 +1592,10 @@ static void setup_local_APIC(void)
 	value =3D apic_read(APIC_LVT0) & APIC_LVT_MASKED;
 	if (!cpu && (pic_mode || !value || ioapic_is_disabled)) {
 		value =3D APIC_DM_EXTINT;
-		apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n", cpu);
+		apic_pr_verbose("Enabled ExtINT on CPU#%d\n", cpu);
 	} else {
 		value =3D APIC_DM_EXTINT | APIC_LVT_MASKED;
-		apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n", cpu);
+		apic_pr_verbose("Masked ExtINT on CPU#%d\n", cpu);
 	}
 	apic_write(APIC_LVT0, value);
=20
@@ -2066,8 +2059,7 @@ static __init void apic_set_fixmap(bool read_apic)
 {
 	set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr);
 	apic_mmio_base =3D APIC_BASE;
-	apic_printk(APIC_VERBOSE, "mapped APIC to %16lx (%16lx)\n",
-		    apic_mmio_base, mp_lapic_addr);
+	apic_pr_verbose("Mapped APIC to %16lx (%16lx)\n", apic_mmio_base, mp_lapic_=
addr);
 	if (read_apic)
 		apic_read_boot_cpu_id(false);
 }
@@ -2170,18 +2162,17 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_error_interrupt)
 	apic_eoi();
 	atomic_inc(&irq_err_count);
=20
-	apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x",
-		    smp_processor_id(), v);
+	apic_pr_debug("APIC error on CPU%d: %02x", smp_processor_id(), v);
=20
 	v &=3D 0xff;
 	while (v) {
 		if (v & 0x1)
-			apic_printk(APIC_DEBUG, KERN_CONT " : %s", error_interrupt_reason[i]);
+			apic_pr_debug_cont(" : %s", error_interrupt_reason[i]);
 		i++;
 		v >>=3D 1;
 	}
=20
-	apic_printk(APIC_DEBUG, KERN_CONT "\n");
+	apic_pr_debug_cont("\n");
=20
 	trace_error_apic_exit(ERROR_APIC_VECTOR);
 }
@@ -2201,8 +2192,7 @@ static void __init connect_bsp_APIC(void)
 		 * PIC mode, enable APIC mode in the IMCR, i.e.  connect BSP's
 		 * local APIC to INT and NMI lines.
 		 */
-		apic_printk(APIC_VERBOSE, "leaving PIC mode, "
-				"enabling APIC mode.\n");
+		apic_pr_verbose("Leaving PIC mode, enabling APIC mode.\n");
 		imcr_pic_to_apic();
 	}
 #endif
@@ -2227,8 +2217,7 @@ void disconnect_bsp_APIC(int virt_wire_setup)
 		 * IPIs, won't work beyond this point!  The only exception are
 		 * INIT IPIs.
 		 */
-		apic_printk(APIC_VERBOSE, "disabling APIC mode, "
-				"entering PIC mode.\n");
+		apic_pr_verbose("Disabling APIC mode, entering PIC mode.\n");
 		imcr_apic_to_pic();
 		return;
 	}
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_=
flat_64.c
index f37ad3392fec..e0308d8c4e6c 100644
--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -8,129 +8,25 @@
  * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and
  * James Cleverdon.
  */
-#include <linux/cpumask.h>
 #include <linux/export.h>
-#include <linux/acpi.h>
=20
-#include <asm/jailhouse_para.h>
 #include <asm/apic.h>
=20
 #include "local.h"
=20
-static struct apic apic_physflat;
-static struct apic apic_flat;
-
-struct apic *apic __ro_after_init =3D &apic_flat;
-EXPORT_SYMBOL_GPL(apic);
-
-static int flat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
-{
-	return 1;
-}
-
-static void _flat_send_IPI_mask(unsigned long mask, int vector)
-{
-	unsigned long flags;
-
-	local_irq_save(flags);
-	__default_send_IPI_dest_field(mask, vector, APIC_DEST_LOGICAL);
-	local_irq_restore(flags);
-}
-
-static void flat_send_IPI_mask(const struct cpumask *cpumask, int vector)
-{
-	unsigned long mask =3D cpumask_bits(cpumask)[0];
-
-	_flat_send_IPI_mask(mask, vector);
-}
-
-static void
-flat_send_IPI_mask_allbutself(const struct cpumask *cpumask, int vector)
-{
-	unsigned long mask =3D cpumask_bits(cpumask)[0];
-	int cpu =3D smp_processor_id();
-
-	if (cpu < BITS_PER_LONG)
-		__clear_bit(cpu, &mask);
-
-	_flat_send_IPI_mask(mask, vector);
-}
-
-static u32 flat_get_apic_id(u32 x)
+static u32 physflat_get_apic_id(u32 x)
 {
 	return (x >> 24) & 0xFF;
 }
=20
-static int flat_probe(void)
+static int physflat_probe(void)
 {
 	return 1;
 }
=20
-static struct apic apic_flat __ro_after_init =3D {
-	.name				=3D "flat",
-	.probe				=3D flat_probe,
-	.acpi_madt_oem_check		=3D flat_acpi_madt_oem_check,
-
-	.dest_mode_logical		=3D true,
-
-	.disable_esr			=3D 0,
-
-	.init_apic_ldr			=3D default_init_apic_ldr,
-	.cpu_present_to_apicid		=3D default_cpu_present_to_apicid,
-
-	.max_apic_id			=3D 0xFE,
-	.get_apic_id			=3D flat_get_apic_id,
-
-	.calc_dest_apicid		=3D apic_flat_calc_apicid,
-
-	.send_IPI			=3D default_send_IPI_single,
-	.send_IPI_mask			=3D flat_send_IPI_mask,
-	.send_IPI_mask_allbutself	=3D flat_send_IPI_mask_allbutself,
-	.send_IPI_allbutself		=3D default_send_IPI_allbutself,
-	.send_IPI_all			=3D default_send_IPI_all,
-	.send_IPI_self			=3D default_send_IPI_self,
-	.nmi_to_offline_cpu		=3D true,
-
-	.read				=3D native_apic_mem_read,
-	.write				=3D native_apic_mem_write,
-	.eoi				=3D native_apic_mem_eoi,
-	.icr_read			=3D native_apic_icr_read,
-	.icr_write			=3D native_apic_icr_write,
-	.wait_icr_idle			=3D apic_mem_wait_icr_idle,
-	.safe_wait_icr_idle		=3D apic_mem_wait_icr_idle_timeout,
-};
-
-/*
- * Physflat mode is used when there are more than 8 CPUs on a system.
- * We cannot use logical delivery in this case because the mask
- * overflows, so use physical mode.
- */
 static int physflat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
 {
-#ifdef CONFIG_ACPI
-	/*
-	 * Quirk: some x86_64 machines can only use physical APIC mode
-	 * regardless of how many processors are present (x86_64 ES7000
-	 * is an example).
-	 */
-	if (acpi_gbl_FADT.header.revision >=3D FADT2_REVISION_ID &&
-		(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL)) {
-		printk(KERN_DEBUG "system APIC only can use physical flat");
-		return 1;
-	}
-
-	if (!strncmp(oem_id, "IBM", 3) && !strncmp(oem_table_id, "EXA", 3)) {
-		printk(KERN_DEBUG "IBM Summit detected, will use apic physical");
-		return 1;
-	}
-#endif
-
-	return 0;
-}
-
-static int physflat_probe(void)
-{
-	return apic =3D=3D &apic_physflat || num_possible_cpus() > 8 || jailhouse_p=
aravirt();
+	return 1;
 }
=20
 static struct apic apic_physflat __ro_after_init =3D {
@@ -146,7 +42,7 @@ static struct apic apic_physflat __ro_after_init =3D {
 	.cpu_present_to_apicid		=3D default_cpu_present_to_apicid,
=20
 	.max_apic_id			=3D 0xFE,
-	.get_apic_id			=3D flat_get_apic_id,
+	.get_apic_id			=3D physflat_get_apic_id,
=20
 	.calc_dest_apicid		=3D apic_default_calc_apicid,
=20
@@ -166,8 +62,7 @@ static struct apic apic_physflat __ro_after_init =3D {
 	.wait_icr_idle			=3D apic_mem_wait_icr_idle,
 	.safe_wait_icr_idle		=3D apic_mem_wait_icr_idle_timeout,
 };
+apic_driver(apic_physflat);
=20
-/*
- * We need to check for physflat first, so this order is important.
- */
-apic_drivers(apic_physflat, apic_flat);
+struct apic *apic __ro_after_init =3D &apic_physflat;
+EXPORT_SYMBOL_GPL(apic);
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 477b740b2f26..1029ea4ac8ba 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -86,8 +86,8 @@ static unsigned int ioapic_dynirq_base;
 static int ioapic_initialized;
=20
 struct irq_pin_list {
-	struct list_head list;
-	int apic, pin;
+	struct list_head	list;
+	int			apic, pin;
 };
=20
 struct mp_chip_data {
@@ -96,7 +96,7 @@ struct mp_chip_data {
 	bool				is_level;
 	bool				active_low;
 	bool				isa_irq;
-	u32 count;
+	u32				count;
 };
=20
 struct mp_ioapic_gsi {
@@ -105,21 +105,17 @@ struct mp_ioapic_gsi {
 };
=20
 static struct ioapic {
-	/*
-	 * # of IRQ routing registers
-	 */
-	int nr_registers;
-	/*
-	 * Saved state during suspend/resume, or while enabling intr-remap.
-	 */
-	struct IO_APIC_route_entry *saved_registers;
+	/* # of IRQ routing registers */
+	int				nr_registers;
+	/* Saved state during suspend/resume, or while enabling intr-remap. */
+	struct IO_APIC_route_entry	*saved_registers;
 	/* I/O APIC config */
-	struct mpc_ioapic mp_config;
+	struct mpc_ioapic		mp_config;
 	/* IO APIC gsi routing info */
-	struct mp_ioapic_gsi  gsi_config;
-	struct ioapic_domain_cfg irqdomain_cfg;
-	struct irq_domain *irqdomain;
-	struct resource *iomem_res;
+	struct mp_ioapic_gsi		gsi_config;
+	struct ioapic_domain_cfg	irqdomain_cfg;
+	struct irq_domain		*irqdomain;
+	struct resource			*iomem_res;
 } ioapics[MAX_IO_APICS];
=20
 #define mpc_ioapic_ver(ioapic_idx)	ioapics[ioapic_idx].mp_config.apicver
@@ -205,10 +201,9 @@ void mp_save_irq(struct mpc_intsrc *m)
 {
 	int i;
=20
-	apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
-		" IRQ %02x, APIC ID %x, APIC INT %02x\n",
-		m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus,
-		m->srcbusirq, m->dstapic, m->dstirq);
+	apic_pr_verbose("Int: type %d, pol %d, trig %d, bus %02x, IRQ %02x, APIC ID=
 %x, APIC INT %02x\n",
+			m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus,
+			m->srcbusirq, m->dstapic, m->dstirq);
=20
 	for (i =3D 0; i < mp_irq_entries; i++) {
 		if (!memcmp(&mp_irqs[i], m, sizeof(*m)))
@@ -269,12 +264,14 @@ static __attribute_const__ struct io_apic __iomem *io_a=
pic_base(int idx)
 static inline void io_apic_eoi(unsigned int apic, unsigned int vector)
 {
 	struct io_apic __iomem *io_apic =3D io_apic_base(apic);
+
 	writel(vector, &io_apic->eoi);
 }
=20
 unsigned int native_io_apic_read(unsigned int apic, unsigned int reg)
 {
 	struct io_apic __iomem *io_apic =3D io_apic_base(apic);
+
 	writel(reg, &io_apic->index);
 	return readl(&io_apic->data);
 }
@@ -300,14 +297,8 @@ static struct IO_APIC_route_entry __ioapic_read_entry(in=
t apic, int pin)
=20
 static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin)
 {
-	struct IO_APIC_route_entry entry;
-	unsigned long flags;
-
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
-	entry =3D __ioapic_read_entry(apic, pin);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
-
-	return entry;
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
+	return __ioapic_read_entry(apic, pin);
 }
=20
 /*
@@ -324,11 +315,8 @@ static void __ioapic_write_entry(int apic, int pin, stru=
ct IO_APIC_route_entry e
=20
 static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry=
 e)
 {
-	unsigned long flags;
-
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	__ioapic_write_entry(apic, pin, e);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 /*
@@ -339,12 +327,10 @@ static void ioapic_write_entry(int apic, int pin, struc=
t IO_APIC_route_entry e)
 static void ioapic_mask_entry(int apic, int pin)
 {
 	struct IO_APIC_route_entry e =3D { .masked =3D true };
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	io_apic_write(apic, 0x10 + 2*pin, e.w1);
 	io_apic_write(apic, 0x11 + 2*pin, e.w2);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 /*
@@ -352,68 +338,39 @@ static void ioapic_mask_entry(int apic, int pin)
  * shared ISA-space IRQs, so we have to support them. We are super
  * fast in the common case, and fast for shared ISA-space IRQs.
  */
-static int __add_pin_to_irq_node(struct mp_chip_data *data,
-				 int node, int apic, int pin)
+static bool add_pin_to_irq_node(struct mp_chip_data *data, int node, int api=
c, int pin)
 {
 	struct irq_pin_list *entry;
=20
-	/* don't allow duplicates */
-	for_each_irq_pin(entry, data->irq_2_pin)
+	/* Don't allow duplicates */
+	for_each_irq_pin(entry, data->irq_2_pin) {
 		if (entry->apic =3D=3D apic && entry->pin =3D=3D pin)
-			return 0;
+			return true;
+	}
=20
 	entry =3D kzalloc_node(sizeof(struct irq_pin_list), GFP_ATOMIC, node);
 	if (!entry) {
-		pr_err("can not alloc irq_pin_list (%d,%d,%d)\n",
-		       node, apic, pin);
-		return -ENOMEM;
+		pr_err("Cannot allocate irq_pin_list (%d,%d,%d)\n", node, apic, pin);
+		return false;
 	}
+
 	entry->apic =3D apic;
 	entry->pin =3D pin;
 	list_add_tail(&entry->list, &data->irq_2_pin);
-
-	return 0;
+	return true;
 }
=20
 static void __remove_pin_from_irq(struct mp_chip_data *data, int apic, int p=
in)
 {
 	struct irq_pin_list *tmp, *entry;
=20
-	list_for_each_entry_safe(entry, tmp, &data->irq_2_pin, list)
+	list_for_each_entry_safe(entry, tmp, &data->irq_2_pin, list) {
 		if (entry->apic =3D=3D apic && entry->pin =3D=3D pin) {
 			list_del(&entry->list);
 			kfree(entry);
 			return;
 		}
-}
-
-static void add_pin_to_irq_node(struct mp_chip_data *data,
-				int node, int apic, int pin)
-{
-	if (__add_pin_to_irq_node(data, node, apic, pin))
-		panic("IO-APIC: failed to add irq-pin. Can not proceed\n");
-}
-
-/*
- * Reroute an IRQ to a different pin.
- */
-static void __init replace_pin_at_irq_node(struct mp_chip_data *data, int no=
de,
-					   int oldapic, int oldpin,
-					   int newapic, int newpin)
-{
-	struct irq_pin_list *entry;
-
-	for_each_irq_pin(entry, data->irq_2_pin) {
-		if (entry->apic =3D=3D oldapic && entry->pin =3D=3D oldpin) {
-			entry->apic =3D newapic;
-			entry->pin =3D newpin;
-			/* every one is different, right? */
-			return;
-		}
 	}
-
-	/* old apic/pin didn't exist, so just add new ones */
-	add_pin_to_irq_node(data, node, newapic, newpin);
 }
=20
 static void io_apic_modify_irq(struct mp_chip_data *data, bool masked,
@@ -430,12 +387,12 @@ static void io_apic_modify_irq(struct mp_chip_data *dat=
a, bool masked,
 	}
 }
=20
+/*
+ * Synchronize the IO-APIC and the CPU by doing a dummy read from the
+ * IO-APIC
+ */
 static void io_apic_sync(struct irq_pin_list *entry)
 {
-	/*
-	 * Synchronize the IO-APIC and the CPU by doing
-	 * a dummy read from the IO-APIC
-	 */
 	struct io_apic __iomem *io_apic;
=20
 	io_apic =3D io_apic_base(entry->apic);
@@ -445,11 +402,9 @@ static void io_apic_sync(struct irq_pin_list *entry)
 static void mask_ioapic_irq(struct irq_data *irq_data)
 {
 	struct mp_chip_data *data =3D irq_data->chip_data;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	io_apic_modify_irq(data, true, &io_apic_sync);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 static void __unmask_ioapic(struct mp_chip_data *data)
@@ -460,11 +415,9 @@ static void __unmask_ioapic(struct mp_chip_data *data)
 static void unmask_ioapic_irq(struct irq_data *irq_data)
 {
 	struct mp_chip_data *data =3D irq_data->chip_data;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	__unmask_ioapic(data);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 /*
@@ -492,30 +445,24 @@ static void __eoi_ioapic_pin(int apic, int pin, int vec=
tor)
=20
 		entry =3D entry1 =3D __ioapic_read_entry(apic, pin);
=20
-		/*
-		 * Mask the entry and change the trigger mode to edge.
-		 */
+		/* Mask the entry and change the trigger mode to edge. */
 		entry1.masked =3D true;
 		entry1.is_level =3D false;
=20
 		__ioapic_write_entry(apic, pin, entry1);
=20
-		/*
-		 * Restore the previous level triggered entry.
-		 */
+		/* Restore the previous level triggered entry. */
 		__ioapic_write_entry(apic, pin, entry);
 	}
 }
=20
 static void eoi_ioapic_pin(int vector, struct mp_chip_data *data)
 {
-	unsigned long flags;
 	struct irq_pin_list *entry;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	for_each_irq_pin(entry, data->irq_2_pin)
 		__eoi_ioapic_pin(entry->apic, entry->pin, vector);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
@@ -538,8 +485,6 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned=
 int pin)
 	}
=20
 	if (entry.irr) {
-		unsigned long flags;
-
 		/*
 		 * Make sure the trigger mode is set to level. Explicit EOI
 		 * doesn't clear the remote-IRR if the trigger mode is not
@@ -549,9 +494,8 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned=
 int pin)
 			entry.is_level =3D true;
 			ioapic_write_entry(apic, pin, entry);
 		}
-		raw_spin_lock_irqsave(&ioapic_lock, flags);
+		guard(raw_spinlock_irqsave)(&ioapic_lock);
 		__eoi_ioapic_pin(apic, pin, entry.vector);
-		raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 	}
=20
 	/*
@@ -586,28 +530,23 @@ static int pirq_entries[MAX_PIRQS] =3D {
=20
 static int __init ioapic_pirq_setup(char *str)
 {
-	int i, max;
-	int ints[MAX_PIRQS+1];
+	int i, max, ints[MAX_PIRQS+1];
=20
 	get_options(str, ARRAY_SIZE(ints), ints);
=20
-	apic_printk(APIC_VERBOSE, KERN_INFO
-			"PIRQ redirection, working around broken MP-BIOS.\n");
+	apic_pr_verbose("PIRQ redirection, working around broken MP-BIOS.\n");
+
 	max =3D MAX_PIRQS;
 	if (ints[0] < MAX_PIRQS)
 		max =3D ints[0];
=20
 	for (i =3D 0; i < max; i++) {
-		apic_printk(APIC_VERBOSE, KERN_DEBUG
-				"... PIRQ%d -> IRQ %d\n", i, ints[i+1]);
-		/*
-		 * PIRQs are mapped upside down, usually.
-		 */
+		apic_pr_verbose("... PIRQ%d -> IRQ %d\n", i, ints[i + 1]);
+		/* PIRQs are mapped upside down, usually */
 		pirq_entries[MAX_PIRQS-i-1] =3D ints[i+1];
 	}
 	return 1;
 }
-
 __setup("pirq=3D", ioapic_pirq_setup);
 #endif /* CONFIG_X86_32 */
=20
@@ -626,8 +565,7 @@ int save_ioapic_entries(void)
 		}
=20
 		for_each_pin(apic, pin)
-			ioapics[apic].saved_registers[pin] =3D
-				ioapic_read_entry(apic, pin);
+			ioapics[apic].saved_registers[pin] =3D ioapic_read_entry(apic, pin);
 	}
=20
 	return err;
@@ -668,8 +606,7 @@ int restore_ioapic_entries(void)
 			continue;
=20
 		for_each_pin(apic, pin)
-			ioapic_write_entry(apic, pin,
-					   ioapics[apic].saved_registers[pin]);
+			ioapic_write_entry(apic, pin, ioapics[apic].saved_registers[pin]);
 	}
 	return 0;
 }
@@ -681,12 +618,13 @@ static int find_irq_entry(int ioapic_idx, int pin, int =
type)
 {
 	int i;
=20
-	for (i =3D 0; i < mp_irq_entries; i++)
+	for (i =3D 0; i < mp_irq_entries; i++) {
 		if (mp_irqs[i].irqtype =3D=3D type &&
 		    (mp_irqs[i].dstapic =3D=3D mpc_ioapic_id(ioapic_idx) ||
 		     mp_irqs[i].dstapic =3D=3D MP_APIC_ALL) &&
 		    mp_irqs[i].dstirq =3D=3D pin)
 			return i;
+	}
=20
 	return -1;
 }
@@ -701,10 +639,8 @@ static int __init find_isa_irq_pin(int irq, int type)
 	for (i =3D 0; i < mp_irq_entries; i++) {
 		int lbus =3D mp_irqs[i].srcbus;
=20
-		if (test_bit(lbus, mp_bus_not_pci) &&
-		    (mp_irqs[i].irqtype =3D=3D type) &&
+		if (test_bit(lbus, mp_bus_not_pci) && (mp_irqs[i].irqtype =3D=3D type) &&
 		    (mp_irqs[i].srcbusirq =3D=3D irq))
-
 			return mp_irqs[i].dstirq;
 	}
 	return -1;
@@ -717,8 +653,7 @@ static int __init find_isa_irq_apic(int irq, int type)
 	for (i =3D 0; i < mp_irq_entries; i++) {
 		int lbus =3D mp_irqs[i].srcbus;
=20
-		if (test_bit(lbus, mp_bus_not_pci) &&
-		    (mp_irqs[i].irqtype =3D=3D type) &&
+		if (test_bit(lbus, mp_bus_not_pci) && (mp_irqs[i].irqtype =3D=3D type) &&
 		    (mp_irqs[i].srcbusirq =3D=3D irq))
 			break;
 	}
@@ -726,9 +661,10 @@ static int __init find_isa_irq_apic(int irq, int type)
 	if (i < mp_irq_entries) {
 		int ioapic_idx;
=20
-		for_each_ioapic(ioapic_idx)
+		for_each_ioapic(ioapic_idx) {
 			if (mpc_ioapic_id(ioapic_idx) =3D=3D mp_irqs[i].dstapic)
 				return ioapic_idx;
+		}
 	}
=20
 	return -1;
@@ -769,8 +705,7 @@ static bool EISA_ELCR(unsigned int irq)
 		unsigned int port =3D PIC_ELCR1 + (irq >> 3);
 		return (inb(port) >> (irq & 7)) & 1;
 	}
-	apic_printk(APIC_VERBOSE, KERN_INFO
-			"Broken MPtable reports ISA irq %d\n", irq);
+	apic_pr_verbose("Broken MPtable reports ISA irq %d\n", irq);
 	return false;
 }
=20
@@ -947,9 +882,9 @@ static bool mp_check_pin_attr(int irq, struct irq_alloc_i=
nfo *info)
 static int alloc_irq_from_domain(struct irq_domain *domain, int ioapic, u32 =
gsi,
 				 struct irq_alloc_info *info)
 {
+	int type =3D ioapics[ioapic].irqdomain_cfg.type;
 	bool legacy =3D false;
 	int irq =3D -1;
-	int type =3D ioapics[ioapic].irqdomain_cfg.type;
=20
 	switch (type) {
 	case IOAPIC_DOMAIN_LEGACY:
@@ -971,8 +906,7 @@ static int alloc_irq_from_domain(struct irq_domain *domai=
n, int ioapic, u32 gsi,
 		return -1;
 	}
=20
-	return __irq_domain_alloc_irqs(domain, irq, 1,
-				       ioapic_alloc_attr_node(info),
+	return __irq_domain_alloc_irqs(domain, irq, 1, ioapic_alloc_attr_node(info),
 				       info, legacy, NULL);
 }
=20
@@ -986,13 +920,12 @@ static int alloc_irq_from_domain(struct irq_domain *dom=
ain, int ioapic, u32 gsi,
  * PIRQs instead of reprogramming the interrupt routing logic. Thus there ma=
y be
  * multiple pins sharing the same legacy IRQ number when ACPI is disabled.
  */
-static int alloc_isa_irq_from_domain(struct irq_domain *domain,
-				     int irq, int ioapic, int pin,
+static int alloc_isa_irq_from_domain(struct irq_domain *domain, int irq, int=
 ioapic, int pin,
 				     struct irq_alloc_info *info)
 {
-	struct mp_chip_data *data;
 	struct irq_data *irq_data =3D irq_get_irq_data(irq);
 	int node =3D ioapic_alloc_attr_node(info);
+	struct mp_chip_data *data;
=20
 	/*
 	 * Legacy ISA IRQ has already been allocated, just add pin to
@@ -1002,13 +935,11 @@ static int alloc_isa_irq_from_domain(struct irq_domain=
 *domain,
 	if (irq_data && irq_data->parent_data) {
 		if (!mp_check_pin_attr(irq, info))
 			return -EBUSY;
-		if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic,
-					  info->ioapic.pin))
+		if (!add_pin_to_irq_node(irq_data->chip_data, node, ioapic, info->ioapic.p=
in))
 			return -ENOMEM;
 	} else {
 		info->flags |=3D X86_IRQ_ALLOC_LEGACY;
-		irq =3D __irq_domain_alloc_irqs(domain, irq, 1, node, info, true,
-					      NULL);
+		irq =3D __irq_domain_alloc_irqs(domain, irq, 1, node, info, true, NULL);
 		if (irq >=3D 0) {
 			irq_data =3D irq_domain_get_irq_data(domain, irq);
 			data =3D irq_data->chip_data;
@@ -1022,11 +953,11 @@ static int alloc_isa_irq_from_domain(struct irq_domain=
 *domain,
 static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,
 			     unsigned int flags, struct irq_alloc_info *info)
 {
-	int irq;
-	bool legacy =3D false;
+	struct irq_domain *domain =3D mp_ioapic_irqdomain(ioapic);
 	struct irq_alloc_info tmp;
 	struct mp_chip_data *data;
-	struct irq_domain *domain =3D mp_ioapic_irqdomain(ioapic);
+	bool legacy =3D false;
+	int irq;
=20
 	if (!domain)
 		return -ENOSYS;
@@ -1046,7 +977,7 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapi=
c, int pin,
 			return -EINVAL;
 	}
=20
-	mutex_lock(&ioapic_mutex);
+	guard(mutex)(&ioapic_mutex);
 	if (!(flags & IOAPIC_MAP_ALLOC)) {
 		if (!legacy) {
 			irq =3D irq_find_mapping(domain, pin);
@@ -1067,8 +998,6 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapi=
c, int pin,
 			data->count++;
 		}
 	}
-	mutex_unlock(&ioapic_mutex);
-
 	return irq;
 }
=20
@@ -1076,26 +1005,20 @@ static int pin_2_irq(int idx, int ioapic, int pin, un=
signed int flags)
 {
 	u32 gsi =3D mp_pin_to_gsi(ioapic, pin);
=20
-	/*
-	 * Debugging check, we are in big trouble if this message pops up!
-	 */
+	/* Debugging check, we are in big trouble if this message pops up! */
 	if (mp_irqs[idx].dstirq !=3D pin)
 		pr_err("broken BIOS or MPTABLE parser, ayiee!!\n");
=20
 #ifdef CONFIG_X86_32
-	/*
-	 * PCI IRQ command line redirection. Yes, limits are hardcoded.
-	 */
+	/* PCI IRQ command line redirection. Yes, limits are hardcoded. */
 	if ((pin >=3D 16) && (pin <=3D 23)) {
-		if (pirq_entries[pin-16] !=3D -1) {
-			if (!pirq_entries[pin-16]) {
-				apic_printk(APIC_VERBOSE, KERN_DEBUG
-						"disabling PIRQ%d\n", pin-16);
+		if (pirq_entries[pin - 16] !=3D -1) {
+			if (!pirq_entries[pin - 16]) {
+				apic_pr_verbose("Disabling PIRQ%d\n", pin - 16);
 			} else {
 				int irq =3D pirq_entries[pin-16];
-				apic_printk(APIC_VERBOSE, KERN_DEBUG
-						"using PIRQ%d -> IRQ %d\n",
-						pin-16, irq);
+
+				apic_pr_verbose("Using PIRQ%d -> IRQ %d\n", pin - 16, irq);
 				return irq;
 			}
 		}
@@ -1133,10 +1056,9 @@ void mp_unmap_irq(int irq)
 	if (!data || data->isa_irq)
 		return;
=20
-	mutex_lock(&ioapic_mutex);
+	guard(mutex)(&ioapic_mutex);
 	if (--data->count =3D=3D 0)
 		irq_domain_free_irqs(irq, 1);
-	mutex_unlock(&ioapic_mutex);
 }
=20
 /*
@@ -1147,12 +1069,10 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int=
 pin)
 {
 	int irq, i, best_ioapic =3D -1, best_idx =3D -1;
=20
-	apic_printk(APIC_DEBUG,
-		    "querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n",
-		    bus, slot, pin);
+	apic_pr_debug("Querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n",
+		      bus, slot, pin);
 	if (test_bit(bus, mp_bus_not_pci)) {
-		apic_printk(APIC_VERBOSE,
-			    "PCI BIOS passed nonexistent PCI bus %d!\n", bus);
+		apic_pr_verbose("PCI BIOS passed nonexistent PCI bus %d!\n", bus);
 		return -1;
 	}
=20
@@ -1197,8 +1117,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int p=
in)
 		return -1;
=20
 out:
-	return pin_2_irq(best_idx, best_ioapic, mp_irqs[best_idx].dstirq,
-			 IOAPIC_MAP_ALLOC);
+	return pin_2_irq(best_idx, best_ioapic, mp_irqs[best_idx].dstirq, IOAPIC_MA=
P_ALLOC);
 }
 EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
=20
@@ -1209,17 +1128,16 @@ static void __init setup_IO_APIC_irqs(void)
 	unsigned int ioapic, pin;
 	int idx;
=20
-	apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
+	apic_pr_verbose("Init IO_APIC IRQs\n");
=20
 	for_each_ioapic_pin(ioapic, pin) {
 		idx =3D find_irq_entry(ioapic, pin, mp_INT);
-		if (idx < 0)
-			apic_printk(APIC_VERBOSE,
-				    KERN_DEBUG " apic %d pin %d not connected\n",
-				    mpc_ioapic_id(ioapic), pin);
-		else
-			pin_2_irq(idx, ioapic, pin,
-				  ioapic ? 0 : IOAPIC_MAP_ALLOC);
+		if (idx < 0) {
+			apic_pr_verbose("apic %d pin %d not connected\n",
+					mpc_ioapic_id(ioapic), pin);
+		} else {
+			pin_2_irq(idx, ioapic, pin, ioapic ? 0 : IOAPIC_MAP_ALLOC);
+		}
 	}
 }
=20
@@ -1234,26 +1152,21 @@ static void io_apic_print_entries(unsigned int apic, =
unsigned int nr_entries)
 	char buf[256];
 	int i;
=20
-	printk(KERN_DEBUG "IOAPIC %d:\n", apic);
+	apic_dbg("IOAPIC %d:\n", apic);
 	for (i =3D 0; i <=3D nr_entries; i++) {
 		entry =3D ioapic_read_entry(apic, i);
-		snprintf(buf, sizeof(buf),
-			 " pin%02x, %s, %s, %s, V(%02X), IRR(%1d), S(%1d)",
-			 i,
-			 entry.masked ? "disabled" : "enabled ",
+		snprintf(buf, sizeof(buf), " pin%02x, %s, %s, %s, V(%02X), IRR(%1d), S(%1d=
)",
+			 i, entry.masked ? "disabled" : "enabled ",
 			 entry.is_level ? "level" : "edge ",
 			 entry.active_low ? "low " : "high",
 			 entry.vector, entry.irr, entry.delivery_status);
 		if (entry.ir_format) {
-			printk(KERN_DEBUG "%s, remapped, I(%04X),  Z(%X)\n",
-			       buf,
-			       (entry.ir_index_15 << 15) | entry.ir_index_0_14,
-				entry.ir_zero);
+			apic_dbg("%s, remapped, I(%04X),  Z(%X)\n", buf,
+				 (entry.ir_index_15 << 15) | entry.ir_index_0_14, entry.ir_zero);
 		} else {
-			printk(KERN_DEBUG "%s, %s, D(%02X%02X), M(%1d)\n", buf,
-			       entry.dest_mode_logical ? "logical " : "physical",
-			       entry.virt_destid_8_14, entry.destid_0_7,
-			       entry.delivery_mode);
+			apic_dbg("%s, %s, D(%02X%02X), M(%1d)\n", buf,
+				 entry.dest_mode_logical ? "logical " : "physic	al",
+				 entry.virt_destid_8_14, entry.destid_0_7, entry.delivery_mode);
 		}
 	}
 }
@@ -1264,30 +1177,25 @@ static void __init print_IO_APIC(int ioapic_idx)
 	union IO_APIC_reg_01 reg_01;
 	union IO_APIC_reg_02 reg_02;
 	union IO_APIC_reg_03 reg_03;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
-	reg_00.raw =3D io_apic_read(ioapic_idx, 0);
-	reg_01.raw =3D io_apic_read(ioapic_idx, 1);
-	if (reg_01.bits.version >=3D 0x10)
-		reg_02.raw =3D io_apic_read(ioapic_idx, 2);
-	if (reg_01.bits.version >=3D 0x20)
-		reg_03.raw =3D io_apic_read(ioapic_idx, 3);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
-
-	printk(KERN_DEBUG "IO APIC #%d......\n", mpc_ioapic_id(ioapic_idx));
-	printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw);
-	printk(KERN_DEBUG ".......    : physical APIC id: %02X\n", reg_00.bits.ID);
-	printk(KERN_DEBUG ".......    : Delivery Type: %X\n", reg_00.bits.delivery_=
type);
-	printk(KERN_DEBUG ".......    : LTS          : %X\n", reg_00.bits.LTS);
-
-	printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)&reg_01);
-	printk(KERN_DEBUG ".......     : max redirection entries: %02X\n",
-		reg_01.bits.entries);
-
-	printk(KERN_DEBUG ".......     : PRQ implemented: %X\n", reg_01.bits.PRQ);
-	printk(KERN_DEBUG ".......     : IO APIC version: %02X\n",
-		reg_01.bits.version);
+	scoped_guard (raw_spinlock_irqsave, &ioapic_lock) {
+		reg_00.raw =3D io_apic_read(ioapic_idx, 0);
+		reg_01.raw =3D io_apic_read(ioapic_idx, 1);
+		if (reg_01.bits.version >=3D 0x10)
+			reg_02.raw =3D io_apic_read(ioapic_idx, 2);
+		if (reg_01.bits.version >=3D 0x20)
+			reg_03.raw =3D io_apic_read(ioapic_idx, 3);
+	}
+
+	apic_dbg("IO APIC #%d......\n", mpc_ioapic_id(ioapic_idx));
+	apic_dbg(".... register #00: %08X\n", reg_00.raw);
+	apic_dbg(".......    : physical APIC id: %02X\n", reg_00.bits.ID);
+	apic_dbg(".......    : Delivery Type: %X\n", reg_00.bits.delivery_type);
+	apic_dbg(".......    : LTS          : %X\n", reg_00.bits.LTS);
+	apic_dbg(".... register #01: %08X\n", *(int *)&reg_01);
+	apic_dbg(".......     : max redirection entries: %02X\n", reg_01.bits.entri=
es);
+	apic_dbg(".......     : PRQ implemented: %X\n", reg_01.bits.PRQ);
+	apic_dbg(".......     : IO APIC version: %02X\n", reg_01.bits.version);
=20
 	/*
 	 * Some Intel chipsets with IO APIC VERSION of 0x1? don't have reg_02,
@@ -1295,8 +1203,8 @@ static void __init print_IO_APIC(int ioapic_idx)
 	 * value, so ignore it if reg_02 =3D=3D reg_01.
 	 */
 	if (reg_01.bits.version >=3D 0x10 && reg_02.raw !=3D reg_01.raw) {
-		printk(KERN_DEBUG ".... register #02: %08X\n", reg_02.raw);
-		printk(KERN_DEBUG ".......     : arbitration: %02X\n", reg_02.bits.arbitra=
tion);
+		apic_dbg(".... register #02: %08X\n", reg_02.raw);
+		apic_dbg(".......     : arbitration: %02X\n", reg_02.bits.arbitration);
 	}
=20
 	/*
@@ -1306,11 +1214,11 @@ static void __init print_IO_APIC(int ioapic_idx)
 	 */
 	if (reg_01.bits.version >=3D 0x20 && reg_03.raw !=3D reg_02.raw &&
 	    reg_03.raw !=3D reg_01.raw) {
-		printk(KERN_DEBUG ".... register #03: %08X\n", reg_03.raw);
-		printk(KERN_DEBUG ".......     : Boot DT    : %X\n", reg_03.bits.boot_DT);
+		apic_dbg(".... register #03: %08X\n", reg_03.raw);
+		apic_dbg(".......     : Boot DT    : %X\n", reg_03.bits.boot_DT);
 	}
=20
-	printk(KERN_DEBUG ".... IRQ redirection table:\n");
+	apic_dbg(".... IRQ redirection table:\n");
 	io_apic_print_entries(ioapic_idx, reg_01.bits.entries);
 }
=20
@@ -1319,11 +1227,11 @@ void __init print_IO_APICs(void)
 	int ioapic_idx;
 	unsigned int irq;
=20
-	printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries);
-	for_each_ioapic(ioapic_idx)
-		printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n",
-		       mpc_ioapic_id(ioapic_idx),
-		       ioapics[ioapic_idx].nr_registers);
+	apic_dbg("number of MP IRQ sources: %d.\n", mp_irq_entries);
+	for_each_ioapic(ioapic_idx) {
+		apic_dbg("number of IO-APIC #%d registers: %d.\n",
+			 mpc_ioapic_id(ioapic_idx), ioapics[ioapic_idx].nr_registers);
+	}
=20
 	/*
 	 * We are a bit conservative about what we expect.  We have to
@@ -1334,7 +1242,7 @@ void __init print_IO_APICs(void)
 	for_each_ioapic(ioapic_idx)
 		print_IO_APIC(ioapic_idx);
=20
-	printk(KERN_DEBUG "IRQ to pin mappings:\n");
+	apic_dbg("IRQ to pin mappings:\n");
 	for_each_active_irq(irq) {
 		struct irq_pin_list *entry;
 		struct irq_chip *chip;
@@ -1349,7 +1257,7 @@ void __init print_IO_APICs(void)
 		if (list_empty(&data->irq_2_pin))
 			continue;
=20
-		printk(KERN_DEBUG "IRQ%d ", irq);
+		apic_dbg("IRQ%d ", irq);
 		for_each_irq_pin(entry, data->irq_2_pin)
 			pr_cont("-> %d:%d", entry->apic, entry->pin);
 		pr_cont("\n");
@@ -1363,8 +1271,7 @@ static struct { int pin, apic; } ioapic_i8259 =3D { -1,=
 -1 };
=20
 void __init enable_IO_APIC(void)
 {
-	int i8259_apic, i8259_pin;
-	int apic, pin;
+	int i8259_apic, i8259_pin, apic, pin;
=20
 	if (ioapic_is_disabled)
 		nr_ioapics =3D 0;
@@ -1376,19 +1283,21 @@ void __init enable_IO_APIC(void)
 		/* See if any of the pins is in ExtINT mode */
 		struct IO_APIC_route_entry entry =3D ioapic_read_entry(apic, pin);
=20
-		/* If the interrupt line is enabled and in ExtInt mode
-		 * I have found the pin where the i8259 is connected.
+		/*
+		 * If the interrupt line is enabled and in ExtInt mode I
+		 * have found the pin where the i8259 is connected.
 		 */
-		if (!entry.masked &&
-		    entry.delivery_mode =3D=3D APIC_DELIVERY_MODE_EXTINT) {
+		if (!entry.masked && entry.delivery_mode =3D=3D APIC_DELIVERY_MODE_EXTINT)=
 {
 			ioapic_i8259.apic =3D apic;
 			ioapic_i8259.pin  =3D pin;
-			goto found_i8259;
+			break;
 		}
 	}
- found_i8259:
-	/* Look to see what if the MP table has reported the ExtINT */
-	/* If we could not find the appropriate pin by looking at the ioapic
+
+	/*
+	 * Look to see what if the MP table has reported the ExtINT
+	 *
+	 * If we could not find the appropriate pin by looking at the ioapic
 	 * the i8259 probably is not connected the ioapic but give the
 	 * mptable a chance anyway.
 	 */
@@ -1396,29 +1305,24 @@ void __init enable_IO_APIC(void)
 	i8259_apic =3D find_isa_irq_apic(0, mp_ExtINT);
 	/* Trust the MP table if nothing is setup in the hardware */
 	if ((ioapic_i8259.pin =3D=3D -1) && (i8259_pin >=3D 0)) {
-		printk(KERN_WARNING "ExtINT not setup in hardware but reported by MP table=
\n");
+		pr_warn("ExtINT not setup in hardware but reported by MP table\n");
 		ioapic_i8259.pin  =3D i8259_pin;
 		ioapic_i8259.apic =3D i8259_apic;
 	}
 	/* Complain if the MP table and the hardware disagree */
 	if (((ioapic_i8259.apic !=3D i8259_apic) || (ioapic_i8259.pin !=3D i8259_pi=
n)) &&
-		(i8259_pin >=3D 0) && (ioapic_i8259.pin >=3D 0))
-	{
-		printk(KERN_WARNING "ExtINT in hardware and MP table differ\n");
-	}
+	    (i8259_pin >=3D 0) && (ioapic_i8259.pin >=3D 0))
+		pr_warn("ExtINT in hardware and MP table differ\n");
=20
-	/*
-	 * Do not trust the IO-APIC being empty at bootup
-	 */
+	/* Do not trust the IO-APIC being empty at bootup */
 	clear_IO_APIC();
 }
=20
 void native_restore_boot_irq_mode(void)
 {
 	/*
-	 * If the i8259 is routed through an IOAPIC
-	 * Put that IOAPIC in virtual wire mode
-	 * so legacy interrupts can be delivered.
+	 * If the i8259 is routed through an IOAPIC Put that IOAPIC in
+	 * virtual wire mode so legacy interrupts can be delivered.
 	 */
 	if (ioapic_i8259.pin !=3D -1) {
 		struct IO_APIC_route_entry entry;
@@ -1433,9 +1337,7 @@ void native_restore_boot_irq_mode(void)
 		entry.destid_0_7	=3D apic_id & 0xFF;
 		entry.virt_destid_8_14	=3D apic_id >> 8;
=20
-		/*
-		 * Add it to the IO-APIC irq-routing table:
-		 */
+		/* Add it to the IO-APIC irq-routing table */
 		ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry);
 	}
=20
@@ -1464,7 +1366,6 @@ static void __init setup_ioapic_ids_from_mpc_nocheck(vo=
id)
 	const u32 broadcast_id =3D 0xF;
 	union IO_APIC_reg_00 reg_00;
 	unsigned char old_id;
-	unsigned long flags;
 	int ioapic_idx, i;
=20
 	/*
@@ -1478,9 +1379,8 @@ static void __init setup_ioapic_ids_from_mpc_nocheck(vo=
id)
 	 */
 	for_each_ioapic(ioapic_idx) {
 		/* Read the register 0 value */
-		raw_spin_lock_irqsave(&ioapic_lock, flags);
-		reg_00.raw =3D io_apic_read(ioapic_idx, 0);
-		raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+		scoped_guard (raw_spinlock_irqsave, &ioapic_lock)
+			reg_00.raw =3D io_apic_read(ioapic_idx, 0);
=20
 		old_id =3D mpc_ioapic_id(ioapic_idx);
=20
@@ -1508,47 +1408,42 @@ static void __init setup_ioapic_ids_from_mpc_nocheck(=
void)
 			set_bit(i, phys_id_present_map);
 			ioapics[ioapic_idx].mp_config.apicid =3D i;
 		} else {
-			apic_printk(APIC_VERBOSE, "Setting %d in the phys_id_present_map\n",
-				    mpc_ioapic_id(ioapic_idx));
+			apic_pr_verbose("Setting %d in the phys_id_present_map\n",
+					mpc_ioapic_id(ioapic_idx));
 			set_bit(mpc_ioapic_id(ioapic_idx), phys_id_present_map);
 		}
=20
 		/*
-		 * We need to adjust the IRQ routing table
-		 * if the ID changed.
+		 * We need to adjust the IRQ routing table if the ID
+		 * changed.
 		 */
-		if (old_id !=3D mpc_ioapic_id(ioapic_idx))
-			for (i =3D 0; i < mp_irq_entries; i++)
+		if (old_id !=3D mpc_ioapic_id(ioapic_idx)) {
+			for (i =3D 0; i < mp_irq_entries; i++) {
 				if (mp_irqs[i].dstapic =3D=3D old_id)
-					mp_irqs[i].dstapic
-						=3D mpc_ioapic_id(ioapic_idx);
+					mp_irqs[i].dstapic =3D mpc_ioapic_id(ioapic_idx);
+			}
+		}
=20
 		/*
-		 * Update the ID register according to the right value
-		 * from the MPC table if they are different.
+		 * Update the ID register according to the right value from
+		 * the MPC table if they are different.
 		 */
 		if (mpc_ioapic_id(ioapic_idx) =3D=3D reg_00.bits.ID)
 			continue;
=20
-		apic_printk(APIC_VERBOSE, KERN_INFO
-			"...changing IO-APIC physical APIC ID to %d ...",
-			mpc_ioapic_id(ioapic_idx));
+		apic_pr_verbose("...changing IO-APIC physical APIC ID to %d ...",
+				mpc_ioapic_id(ioapic_idx));
=20
 		reg_00.bits.ID =3D mpc_ioapic_id(ioapic_idx);
-		raw_spin_lock_irqsave(&ioapic_lock, flags);
-		io_apic_write(ioapic_idx, 0, reg_00.raw);
-		raw_spin_unlock_irqrestore(&ioapic_lock, flags);
-
-		/*
-		 * Sanity check
-		 */
-		raw_spin_lock_irqsave(&ioapic_lock, flags);
-		reg_00.raw =3D io_apic_read(ioapic_idx, 0);
-		raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+		scoped_guard (raw_spinlock_irqsave, &ioapic_lock) {
+			io_apic_write(ioapic_idx, 0, reg_00.raw);
+			reg_00.raw =3D io_apic_read(ioapic_idx, 0);
+		}
+		/* Sanity check */
 		if (reg_00.bits.ID !=3D mpc_ioapic_id(ioapic_idx))
 			pr_cont("could not set ID!\n");
 		else
-			apic_printk(APIC_VERBOSE, " ok.\n");
+			apic_pr_verbose(" ok.\n");
 	}
 }
=20
@@ -1593,8 +1488,7 @@ static void __init delay_with_tsc(void)
 	do {
 		rep_nop();
 		now =3D rdtsc();
-	} while ((now - start) < 40000000000ULL / HZ &&
-		time_before_eq(jiffies, end));
+	} while ((now - start) < 40000000000ULL / HZ &&	time_before_eq(jiffies, end=
));
 }
=20
 static void __init delay_without_tsc(void)
@@ -1655,36 +1549,29 @@ static int __init timer_irq_works(void)
  * so we 'resend' these IRQs via IPIs, to the same CPU. It's much
  * better to do it this way as thus we do not have to be aware of
  * 'pending' interrupts in the IRQ path, except at this point.
- */
-/*
- * Edge triggered needs to resend any interrupt
- * that was delayed but this is now handled in the device
- * independent code.
- */
-
-/*
- * Starting up a edge-triggered IO-APIC interrupt is
- * nasty - we need to make sure that we get the edge.
- * If it is already asserted for some reason, we need
- * return 1 to indicate that is was pending.
  *
- * This is not complete - we should be able to fake
- * an edge even if it isn't on the 8259A...
+ *
+ * Edge triggered needs to resend any interrupt that was delayed but this
+ * is now handled in the device independent code.
+ *
+ * Starting up a edge-triggered IO-APIC interrupt is nasty - we need to
+ * make sure that we get the edge.  If it is already asserted for some
+ * reason, we need return 1 to indicate that is was pending.
+ *
+ * This is not complete - we should be able to fake an edge even if it
+ * isn't on the 8259A...
  */
 static unsigned int startup_ioapic_irq(struct irq_data *data)
 {
 	int was_pending =3D 0, irq =3D data->irq;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	if (irq < nr_legacy_irqs()) {
 		legacy_pic->mask(irq);
 		if (legacy_pic->irq_pending(irq))
 			was_pending =3D 1;
 	}
 	__unmask_ioapic(data->chip_data);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
-
 	return was_pending;
 }
=20
@@ -1694,9 +1581,8 @@ atomic_t irq_mis_count;
 static bool io_apic_level_ack_pending(struct mp_chip_data *data)
 {
 	struct irq_pin_list *entry;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	for_each_irq_pin(entry, data->irq_2_pin) {
 		struct IO_APIC_route_entry e;
 		int pin;
@@ -1704,13 +1590,9 @@ static bool io_apic_level_ack_pending(struct mp_chip_d=
ata *data)
 		pin =3D entry->pin;
 		e.w1 =3D io_apic_read(entry->apic, 0x10 + pin*2);
 		/* Is the remote IRR bit set? */
-		if (e.irr) {
-			raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+		if (e.irr)
 			return true;
-		}
 	}
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
-
 	return false;
 }
=20
@@ -1728,7 +1610,8 @@ static inline bool ioapic_prepare_move(struct irq_data =
*data)
 static inline void ioapic_finish_move(struct irq_data *data, bool moveit)
 {
 	if (unlikely(moveit)) {
-		/* Only migrate the irq if the ack has been received.
+		/*
+		 * Only migrate the irq if the ack has been received.
 		 *
 		 * On rare occasions the broadcast level triggered ack gets
 		 * delayed going to ioapics, and if we reprogram the
@@ -1911,18 +1794,16 @@ static void ioapic_configure_entry(struct irq_data *i=
rqd)
 		__ioapic_write_entry(entry->apic, entry->pin, mpd->entry);
 }
=20
-static int ioapic_set_affinity(struct irq_data *irq_data,
-			       const struct cpumask *mask, bool force)
+static int ioapic_set_affinity(struct irq_data *irq_data, const struct cpuma=
sk *mask, bool force)
 {
 	struct irq_data *parent =3D irq_data->parent_data;
-	unsigned long flags;
 	int ret;
=20
 	ret =3D parent->chip->irq_set_affinity(parent, mask, force);
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	if (ret >=3D 0 && ret !=3D IRQ_SET_MASK_OK_DONE)
 		ioapic_configure_entry(irq_data);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
=20
 	return ret;
 }
@@ -1941,9 +1822,8 @@ static int ioapic_set_affinity(struct irq_data *irq_dat=
a,
  *
  * Verify that the corresponding Remote-IRR bits are clear.
  */
-static int ioapic_irq_get_chip_state(struct irq_data *irqd,
-				   enum irqchip_irq_state which,
-				   bool *state)
+static int ioapic_irq_get_chip_state(struct irq_data *irqd, enum irqchip_irq=
_state which,
+				     bool *state)
 {
 	struct mp_chip_data *mcd =3D irqd->chip_data;
 	struct IO_APIC_route_entry rentry;
@@ -1953,7 +1833,8 @@ static int ioapic_irq_get_chip_state(struct irq_data *i=
rqd,
 		return -EINVAL;
=20
 	*state =3D false;
-	raw_spin_lock(&ioapic_lock);
+
+	guard(raw_spinlock)(&ioapic_lock);
 	for_each_irq_pin(p, mcd->irq_2_pin) {
 		rentry =3D __ioapic_read_entry(p->apic, p->pin);
 		/*
@@ -1967,7 +1848,6 @@ static int ioapic_irq_get_chip_state(struct irq_data *i=
rqd,
 			break;
 		}
 	}
-	raw_spin_unlock(&ioapic_lock);
 	return 0;
 }
=20
@@ -2008,14 +1888,13 @@ static inline void init_IO_APIC_traps(void)
 		cfg =3D irq_cfg(irq);
 		if (IO_APIC_IRQ(irq) && cfg && !cfg->vector) {
 			/*
-			 * Hmm.. We don't have an entry for this,
-			 * so default to an old-fashioned 8259
-			 * interrupt if we can..
+			 * Hmm.. We don't have an entry for this, so
+			 * default to an old-fashioned 8259 interrupt if we
+			 * can. Otherwise set the dummy interrupt chip.
 			 */
 			if (irq < nr_legacy_irqs())
 				legacy_pic->make_irq(irq);
 			else
-				/* Strange. Oh, well.. */
 				irq_set_chip(irq, &no_irq_chip);
 		}
 	}
@@ -2024,20 +1903,17 @@ static inline void init_IO_APIC_traps(void)
 /*
  * The local APIC irq-chip implementation:
  */
-
 static void mask_lapic_irq(struct irq_data *data)
 {
-	unsigned long v;
+	unsigned long v =3D apic_read(APIC_LVT0);
=20
-	v =3D apic_read(APIC_LVT0);
 	apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
 }
=20
 static void unmask_lapic_irq(struct irq_data *data)
 {
-	unsigned long v;
+	unsigned long v =3D apic_read(APIC_LVT0);
=20
-	v =3D apic_read(APIC_LVT0);
 	apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED);
 }
=20
@@ -2056,8 +1932,7 @@ static struct irq_chip lapic_chip __read_mostly =3D {
 static void lapic_register_intr(int irq)
 {
 	irq_clear_status_flags(irq, IRQ_LEVEL);
-	irq_set_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq,
-				      "edge");
+	irq_set_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq, "edge");
 }
=20
 /*
@@ -2069,9 +1944,9 @@ static void lapic_register_intr(int irq)
  */
 static inline void __init unlock_ExtINT_logic(void)
 {
-	int apic, pin, i;
-	struct IO_APIC_route_entry entry0, entry1;
 	unsigned char save_control, save_freq_select;
+	struct IO_APIC_route_entry entry0, entry1;
+	int apic, pin, i;
 	u32 apic_id;
=20
 	pin  =3D find_isa_irq_pin(8, mp_INT);
@@ -2131,10 +2006,10 @@ static int __init disable_timer_pin_setup(char *arg)
 }
 early_param("disable_timer_pin_1", disable_timer_pin_setup);
=20
-static int mp_alloc_timer_irq(int ioapic, int pin)
+static int __init mp_alloc_timer_irq(int ioapic, int pin)
 {
-	int irq =3D -1;
 	struct irq_domain *domain =3D mp_ioapic_irqdomain(ioapic);
+	int irq =3D -1;
=20
 	if (domain) {
 		struct irq_alloc_info info;
@@ -2142,21 +2017,36 @@ static int mp_alloc_timer_irq(int ioapic, int pin)
 		ioapic_set_alloc_attr(&info, NUMA_NO_NODE, 0, 0);
 		info.devid =3D mpc_ioapic_id(ioapic);
 		info.ioapic.pin =3D pin;
-		mutex_lock(&ioapic_mutex);
+		guard(mutex)(&ioapic_mutex);
 		irq =3D alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info);
-		mutex_unlock(&ioapic_mutex);
 	}
=20
 	return irq;
 }
=20
+static void __init replace_pin_at_irq_node(struct mp_chip_data *data, int no=
de,
+					   int oldapic, int oldpin,
+					   int newapic, int newpin)
+{
+	struct irq_pin_list *entry;
+
+	for_each_irq_pin(entry, data->irq_2_pin) {
+		if (entry->apic =3D=3D oldapic && entry->pin =3D=3D oldpin) {
+			entry->apic =3D newapic;
+			entry->pin =3D newpin;
+			return;
+		}
+	}
+
+	/* Old apic/pin didn't exist, so just add a new one */
+	add_pin_to_irq_node(data, node, newapic, newpin);
+}
+
 /*
  * This code may look a bit paranoid, but it's supposed to cooperate with
  * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
  * is so screwy.  Thanks to Brian Perkins for testing/hacking this beast
  * fanatically on his truly buggy board.
- *
- * FIXME: really need to revamp this for all platforms.
  */
 static inline void __init check_timer(void)
 {
@@ -2194,9 +2084,8 @@ static inline void __init check_timer(void)
 	pin2  =3D ioapic_i8259.pin;
 	apic2 =3D ioapic_i8259.apic;
=20
-	apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=3D0x%02X "
-		    "apic1=3D%d pin1=3D%d apic2=3D%d pin2=3D%d\n",
-		    cfg->vector, apic1, pin1, apic2, pin2);
+	pr_info("..TIMER: vector=3D0x%02X apic1=3D%d pin1=3D%d apic2=3D%d pin2=3D%d=
\n",
+		cfg->vector, apic1, pin1, apic2, pin2);
=20
 	/*
 	 * Some BIOS writers are clueless and report the ExtINTA
@@ -2240,13 +2129,10 @@ static inline void __init check_timer(void)
 		panic_if_irq_remap("timer doesn't work through Interrupt-remapped IO-APIC"=
);
 		clear_IO_APIC_pin(apic1, pin1);
 		if (!no_pin1)
-			apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: "
-				    "8254 timer not connected to IO-APIC\n");
+			pr_err("..MP-BIOS bug: 8254 timer not connected to IO-APIC\n");
=20
-		apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer "
-			    "(IRQ0) through the 8259A ...\n");
-		apic_printk(APIC_QUIET, KERN_INFO
-			    "..... (found apic %d pin %d) ...\n", apic2, pin2);
+		pr_info("...trying to set up timer (IRQ0) through the 8259A ...\n");
+		pr_info("..... (found apic %d pin %d) ...\n", apic2, pin2);
 		/*
 		 * legacy devices should be connected to IO APIC #0
 		 */
@@ -2255,7 +2141,7 @@ static inline void __init check_timer(void)
 		irq_domain_activate_irq(irq_data, false);
 		legacy_pic->unmask(0);
 		if (timer_irq_works()) {
-			apic_printk(APIC_QUIET, KERN_INFO "....... works.\n");
+			pr_info("....... works.\n");
 			goto out;
 		}
 		/*
@@ -2263,26 +2149,24 @@ static inline void __init check_timer(void)
 		 */
 		legacy_pic->mask(0);
 		clear_IO_APIC_pin(apic2, pin2);
-		apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n");
+		pr_info("....... failed.\n");
 	}
=20
-	apic_printk(APIC_QUIET, KERN_INFO
-		    "...trying to set up timer as Virtual Wire IRQ...\n");
+	pr_info("...trying to set up timer as Virtual Wire IRQ...\n");
=20
 	lapic_register_intr(0);
 	apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector);	/* Fixed mode */
 	legacy_pic->unmask(0);
=20
 	if (timer_irq_works()) {
-		apic_printk(APIC_QUIET, KERN_INFO "..... works.\n");
+		pr_info("..... works.\n");
 		goto out;
 	}
 	legacy_pic->mask(0);
 	apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector);
-	apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n");
+	pr_info("..... failed.\n");
=20
-	apic_printk(APIC_QUIET, KERN_INFO
-		    "...trying to set up timer as ExtINT IRQ...\n");
+	pr_info("...trying to set up timer as ExtINT IRQ...\n");
=20
 	legacy_pic->init(0);
 	legacy_pic->make_irq(0);
@@ -2292,14 +2176,15 @@ static inline void __init check_timer(void)
 	unlock_ExtINT_logic();
=20
 	if (timer_irq_works()) {
-		apic_printk(APIC_QUIET, KERN_INFO "..... works.\n");
+		pr_info("..... works.\n");
 		goto out;
 	}
-	apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n");
-	if (apic_is_x2apic_enabled())
-		apic_printk(APIC_QUIET, KERN_INFO
-			    "Perhaps problem with the pre-enabled x2apic mode\n"
-			    "Try booting with x2apic and interrupt-remapping disabled in the bios=
.\n");
+
+	pr_info("..... failed :\n");
+	if (apic_is_x2apic_enabled()) {
+		pr_info("Perhaps problem with the pre-enabled x2apic mode\n"
+			"Try booting with x2apic and interrupt-remapping disabled in the bios.\n"=
);
+	}
 	panic("IO-APIC + timer doesn't work!  Boot with apic=3Ddebug and send a "
 		"report.  Then try booting with the 'noapic' option.\n");
 out:
@@ -2327,11 +2212,11 @@ static inline void __init check_timer(void)
=20
 static int mp_irqdomain_create(int ioapic)
 {
-	struct irq_domain *parent;
+	struct mp_ioapic_gsi *gsi_cfg =3D mp_ioapic_gsi_routing(ioapic);
 	int hwirqs =3D mp_ioapic_pin_count(ioapic);
 	struct ioapic *ip =3D &ioapics[ioapic];
 	struct ioapic_domain_cfg *cfg =3D &ip->irqdomain_cfg;
-	struct mp_ioapic_gsi *gsi_cfg =3D mp_ioapic_gsi_routing(ioapic);
+	struct irq_domain *parent;
 	struct fwnode_handle *fn;
 	struct irq_fwspec fwspec;
=20
@@ -2367,10 +2252,8 @@ static int mp_irqdomain_create(int ioapic)
 		return -ENOMEM;
 	}
=20
-	if (cfg->type =3D=3D IOAPIC_DOMAIN_LEGACY ||
-	    cfg->type =3D=3D IOAPIC_DOMAIN_STRICT)
-		ioapic_dynirq_base =3D max(ioapic_dynirq_base,
-					 gsi_cfg->gsi_end + 1);
+	if (cfg->type =3D=3D IOAPIC_DOMAIN_LEGACY || cfg->type =3D=3D IOAPIC_DOMAIN=
_STRICT)
+		ioapic_dynirq_base =3D max(ioapic_dynirq_base, gsi_cfg->gsi_end + 1);
=20
 	return 0;
 }
@@ -2397,13 +2280,11 @@ void __init setup_IO_APIC(void)
=20
 	io_apic_irqs =3D nr_legacy_irqs() ? ~PIC_IRQS : ~0UL;
=20
-	apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n");
+	apic_pr_verbose("ENABLING IO-APIC IRQs\n");
 	for_each_ioapic(ioapic)
 		BUG_ON(mp_irqdomain_create(ioapic));
=20
-	/*
-         * Set up IO-APIC IRQ routing.
-         */
+	/* Set up IO-APIC IRQ routing. */
 	x86_init.mpparse.setup_ioapic_ids();
=20
 	sync_Arb_IDs();
@@ -2417,16 +2298,14 @@ void __init setup_IO_APIC(void)
=20
 static void resume_ioapic_id(int ioapic_idx)
 {
-	unsigned long flags;
 	union IO_APIC_reg_00 reg_00;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	reg_00.raw =3D io_apic_read(ioapic_idx, 0);
 	if (reg_00.bits.ID !=3D mpc_ioapic_id(ioapic_idx)) {
 		reg_00.bits.ID =3D mpc_ioapic_id(ioapic_idx);
 		io_apic_write(ioapic_idx, 0, reg_00.raw);
 	}
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 }
=20
 static void ioapic_resume(void)
@@ -2440,8 +2319,8 @@ static void ioapic_resume(void)
 }
=20
 static struct syscore_ops ioapic_syscore_ops =3D {
-	.suspend =3D save_ioapic_entries,
-	.resume =3D ioapic_resume,
+	.suspend	=3D save_ioapic_entries,
+	.resume		=3D ioapic_resume,
 };
=20
 static int __init ioapic_init_ops(void)
@@ -2456,15 +2335,13 @@ device_initcall(ioapic_init_ops);
 static int io_apic_get_redir_entries(int ioapic)
 {
 	union IO_APIC_reg_01	reg_01;
-	unsigned long flags;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	reg_01.raw =3D io_apic_read(ioapic, 1);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
=20
-	/* The register returns the maximum index redir index
-	 * supported, which is one less than the total number of redir
-	 * entries.
+	/*
+	 * The register returns the maximum index redir index supported,
+	 * which is one less than the total number of redir entries.
 	 */
 	return reg_01.bits.entries + 1;
 }
@@ -2494,16 +2371,14 @@ static int io_apic_get_unique_id(int ioapic, int apic=
_id)
 	static DECLARE_BITMAP(apic_id_map, MAX_LOCAL_APIC);
 	const u32 broadcast_id =3D 0xF;
 	union IO_APIC_reg_00 reg_00;
-	unsigned long flags;
 	int i =3D 0;
=20
 	/* Initialize the ID map */
 	if (bitmap_empty(apic_id_map, MAX_LOCAL_APIC))
 		copy_phys_cpu_present_map(apic_id_map);
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
-	reg_00.raw =3D io_apic_read(ioapic, 0);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+	scoped_guard (raw_spinlock_irqsave, &ioapic_lock)
+		reg_00.raw =3D io_apic_read(ioapic, 0);
=20
 	if (apic_id >=3D broadcast_id) {
 		pr_warn("IOAPIC[%d]: Invalid apic_id %d, trying %d\n",
@@ -2530,21 +2405,19 @@ static int io_apic_get_unique_id(int ioapic, int apic=
_id)
 	if (reg_00.bits.ID !=3D apic_id) {
 		reg_00.bits.ID =3D apic_id;
=20
-		raw_spin_lock_irqsave(&ioapic_lock, flags);
-		io_apic_write(ioapic, 0, reg_00.raw);
-		reg_00.raw =3D io_apic_read(ioapic, 0);
-		raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+		scoped_guard (raw_spinlock_irqsave, &ioapic_lock) {
+			io_apic_write(ioapic, 0, reg_00.raw);
+			reg_00.raw =3D io_apic_read(ioapic, 0);
+		}
=20
 		/* Sanity check */
 		if (reg_00.bits.ID !=3D apic_id) {
-			pr_err("IOAPIC[%d]: Unable to change apic_id!\n",
-			       ioapic);
+			pr_err("IOAPIC[%d]: Unable to change apic_id!\n", ioapic);
 			return -1;
 		}
 	}
=20
-	apic_printk(APIC_VERBOSE, KERN_INFO
-			"IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id);
+	apic_pr_verbose("IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id);
=20
 	return apic_id;
 }
@@ -2560,7 +2433,6 @@ static u8 io_apic_unique_id(int idx, u8 id)
 {
 	union IO_APIC_reg_00 reg_00;
 	DECLARE_BITMAP(used, 256);
-	unsigned long flags;
 	u8 new_id;
 	int i;
=20
@@ -2576,26 +2448,23 @@ static u8 io_apic_unique_id(int idx, u8 id)
 	 * Read the current id from the ioapic and keep it if
 	 * available.
 	 */
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
-	reg_00.raw =3D io_apic_read(idx, 0);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+	scoped_guard (raw_spinlock_irqsave, &ioapic_lock)
+		reg_00.raw =3D io_apic_read(idx, 0);
+
 	new_id =3D reg_00.bits.ID;
 	if (!test_bit(new_id, used)) {
-		apic_printk(APIC_VERBOSE, KERN_INFO
-			"IOAPIC[%d]: Using reg apic_id %d instead of %d\n",
-			 idx, new_id, id);
+		apic_pr_verbose("IOAPIC[%d]: Using reg apic_id %d instead of %d\n",
+				idx, new_id, id);
 		return new_id;
 	}
=20
-	/*
-	 * Get the next free id and write it to the ioapic.
-	 */
+	/* Get the next free id and write it to the ioapic. */
 	new_id =3D find_first_zero_bit(used, 256);
 	reg_00.bits.ID =3D new_id;
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
-	io_apic_write(idx, 0, reg_00.raw);
-	reg_00.raw =3D io_apic_read(idx, 0);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
+	scoped_guard (raw_spinlock_irqsave, &ioapic_lock) {
+		io_apic_write(idx, 0, reg_00.raw);
+		reg_00.raw =3D io_apic_read(idx, 0);
+	}
 	/* Sanity check */
 	BUG_ON(reg_00.bits.ID !=3D new_id);
=20
@@ -2605,12 +2474,10 @@ static u8 io_apic_unique_id(int idx, u8 id)
=20
 static int io_apic_get_version(int ioapic)
 {
-	union IO_APIC_reg_01	reg_01;
-	unsigned long flags;
+	union IO_APIC_reg_01 reg_01;
=20
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	reg_01.raw =3D io_apic_read(ioapic, 1);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
=20
 	return reg_01.bits.version;
 }
@@ -2625,8 +2492,8 @@ static struct resource *ioapic_resources;
=20
 static struct resource * __init ioapic_setup_resources(void)
 {
-	unsigned long n;
 	struct resource *res;
+	unsigned long n;
 	char *mem;
 	int i;
=20
@@ -2686,9 +2553,7 @@ void __init io_apic_init_mappings(void)
 			ioapic_phys =3D mpc_ioapic_addr(i);
 #ifdef CONFIG_X86_32
 			if (!ioapic_phys) {
-				printk(KERN_ERR
-				       "WARNING: bogus zero IO-APIC "
-				       "address found in MPTABLE, "
+				pr_err("WARNING: bogus zero IO-APIC address found in MPTABLE, "
 				       "disabling IO/APIC support!\n");
 				smp_found_config =3D 0;
 				ioapic_is_disabled =3D true;
@@ -2707,9 +2572,8 @@ void __init io_apic_init_mappings(void)
 			ioapic_phys =3D __pa(ioapic_phys);
 		}
 		io_apic_set_fixmap(idx, ioapic_phys);
-		apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08lx (%08lx)\n",
-			__fix_to_virt(idx) + (ioapic_phys & ~PAGE_MASK),
-			ioapic_phys);
+		apic_pr_verbose("mapped IOAPIC to %08lx (%08lx)\n",
+				__fix_to_virt(idx) + (ioapic_phys & ~PAGE_MASK), ioapic_phys);
 		idx++;
=20
 		ioapic_res->start =3D ioapic_phys;
@@ -2720,13 +2584,12 @@ void __init io_apic_init_mappings(void)
=20
 void __init ioapic_insert_resources(void)
 {
-	int i;
 	struct resource *r =3D ioapic_resources;
+	int i;
=20
 	if (!r) {
 		if (nr_ioapics > 0)
-			printk(KERN_ERR
-				"IO APIC resources couldn't be allocated.\n");
+			pr_err("IO APIC resources couldn't be allocated.\n");
 		return;
 	}
=20
@@ -2746,11 +2609,12 @@ int mp_find_ioapic(u32 gsi)
 	/* Find the IOAPIC that manages this GSI. */
 	for_each_ioapic(i) {
 		struct mp_ioapic_gsi *gsi_cfg =3D mp_ioapic_gsi_routing(i);
+
 		if (gsi >=3D gsi_cfg->gsi_base && gsi <=3D gsi_cfg->gsi_end)
 			return i;
 	}
=20
-	printk(KERN_ERR "ERROR: Unable to locate IOAPIC for GSI %d\n", gsi);
+	pr_err("ERROR: Unable to locate IOAPIC for GSI %d\n", gsi);
 	return -1;
 }
=20
@@ -2789,12 +2653,10 @@ static int bad_ioapic_register(int idx)
=20
 static int find_free_ioapic_entry(void)
 {
-	int idx;
-
-	for (idx =3D 0; idx < MAX_IO_APICS; idx++)
+	for (int idx =3D 0; idx < MAX_IO_APICS; idx++) {
 		if (ioapics[idx].nr_registers =3D=3D 0)
 			return idx;
-
+	}
 	return MAX_IO_APICS;
 }
=20
@@ -2805,8 +2667,7 @@ static int find_free_ioapic_entry(void)
  * @gsi_base:	base of GSI associated with the IOAPIC
  * @cfg:	configuration information for the IOAPIC
  */
-int mp_register_ioapic(int id, u32 address, u32 gsi_base,
-		       struct ioapic_domain_cfg *cfg)
+int mp_register_ioapic(int id, u32 address, u32 gsi_base, struct ioapic_doma=
in_cfg *cfg)
 {
 	bool hotplug =3D !!ioapic_initialized;
 	struct mp_ioapic_gsi *gsi_cfg;
@@ -2817,12 +2678,13 @@ int mp_register_ioapic(int id, u32 address, u32 gsi_b=
ase,
 		pr_warn("Bogus (zero) I/O APIC address found, skipping!\n");
 		return -EINVAL;
 	}
-	for_each_ioapic(ioapic)
+
+	for_each_ioapic(ioapic) {
 		if (ioapics[ioapic].mp_config.apicaddr =3D=3D address) {
-			pr_warn("address 0x%x conflicts with IOAPIC%d\n",
-				address, ioapic);
+			pr_warn("address 0x%x conflicts with IOAPIC%d\n", address, ioapic);
 			return -EEXIST;
 		}
+	}
=20
 	idx =3D find_free_ioapic_entry();
 	if (idx >=3D MAX_IO_APICS) {
@@ -2857,8 +2719,7 @@ int mp_register_ioapic(int id, u32 address, u32 gsi_bas=
e,
 		    (gsi_end >=3D gsi_cfg->gsi_base &&
 		     gsi_end <=3D gsi_cfg->gsi_end)) {
 			pr_warn("GSI range [%u-%u] for new IOAPIC conflicts with GSI[%u-%u]\n",
-				gsi_base, gsi_end,
-				gsi_cfg->gsi_base, gsi_cfg->gsi_end);
+				gsi_base, gsi_end, gsi_cfg->gsi_base, gsi_cfg->gsi_end);
 			clear_fixmap(FIX_IO_APIC_BASE_0 + idx);
 			return -ENOSPC;
 		}
@@ -2892,8 +2753,7 @@ int mp_register_ioapic(int id, u32 address, u32 gsi_bas=
e,
 	ioapics[idx].nr_registers =3D entries;
=20
 	pr_info("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, GSI %d-%d\n",
-		idx, mpc_ioapic_id(idx),
-		mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
+		idx, mpc_ioapic_id(idx), mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
 		gsi_cfg->gsi_base, gsi_cfg->gsi_end);
=20
 	return 0;
@@ -2904,11 +2764,13 @@ int mp_unregister_ioapic(u32 gsi_base)
 	int ioapic, pin;
 	int found =3D 0;
=20
-	for_each_ioapic(ioapic)
+	for_each_ioapic(ioapic) {
 		if (ioapics[ioapic].gsi_config.gsi_base =3D=3D gsi_base) {
 			found =3D 1;
 			break;
 		}
+	}
+
 	if (!found) {
 		pr_warn("can't find IOAPIC for GSI %d\n", gsi_base);
 		return -ENODEV;
@@ -2922,8 +2784,7 @@ int mp_unregister_ioapic(u32 gsi_base)
 		if (irq >=3D 0) {
 			data =3D irq_get_chip_data(irq);
 			if (data && data->count) {
-				pr_warn("pin%d on IOAPIC%d is still in use.\n",
-					pin, ioapic);
+				pr_warn("pin%d on IOAPIC%d is still in use.\n",	pin, ioapic);
 				return -EBUSY;
 			}
 		}
@@ -2958,8 +2819,7 @@ static void mp_irqdomain_get_attr(u32 gsi, struct mp_ch=
ip_data *data,
 	if (info && info->ioapic.valid) {
 		data->is_level =3D info->ioapic.is_level;
 		data->active_low =3D info->ioapic.active_low;
-	} else if (__acpi_get_override_irq(gsi, &data->is_level,
-					   &data->active_low) < 0) {
+	} else if (__acpi_get_override_irq(gsi, &data->is_level, &data->active_low)=
 < 0) {
 		/* PCI interrupts are always active low level triggered. */
 		data->is_level =3D true;
 		data->active_low =3D true;
@@ -3017,10 +2877,8 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsi=
gned int virq,
 		return -ENOMEM;
=20
 	ret =3D irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, info);
-	if (ret < 0) {
-		kfree(data);
-		return ret;
-	}
+	if (ret < 0)
+		goto free_data;
=20
 	INIT_LIST_HEAD(&data->irq_2_pin);
 	irq_data->hwirq =3D info->ioapic.pin;
@@ -3029,7 +2887,10 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsi=
gned int virq,
 	irq_data->chip_data =3D data;
 	mp_irqdomain_get_attr(mp_pin_to_gsi(ioapic, pin), data, info);
=20
-	add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin);
+	if (!add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin)) {
+		ret =3D -ENOMEM;
+		goto free_irqs;
+	}
=20
 	mp_preconfigure_entry(data);
 	mp_register_handler(virq, data->is_level);
@@ -3039,11 +2900,15 @@ int mp_irqdomain_alloc(struct irq_domain *domain, uns=
igned int virq,
 		legacy_pic->mask(virq);
 	local_irq_restore(flags);
=20
-	apic_printk(APIC_VERBOSE, KERN_DEBUG
-		    "IOAPIC[%d]: Preconfigured routing entry (%d-%d -> IRQ %d Level:%i Act=
iveLow:%i)\n",
-		    ioapic, mpc_ioapic_id(ioapic), pin, virq,
-		    data->is_level, data->active_low);
+	apic_pr_verbose("IOAPIC[%d]: Preconfigured routing entry (%d-%d -> IRQ %d L=
evel:%i ActiveLow:%i)\n",
+			ioapic, mpc_ioapic_id(ioapic), pin, virq, data->is_level, data->active_lo=
w);
 	return 0;
+
+free_irqs:
+	irq_domain_free_irqs_parent(domain, virq, nr_irqs);
+free_data:
+	kfree(data);
+	return ret;
 }
=20
 void mp_irqdomain_free(struct irq_domain *domain, unsigned int virq,
@@ -3056,22 +2921,17 @@ void mp_irqdomain_free(struct irq_domain *domain, uns=
igned int virq,
 	irq_data =3D irq_domain_get_irq_data(domain, virq);
 	if (irq_data && irq_data->chip_data) {
 		data =3D irq_data->chip_data;
-		__remove_pin_from_irq(data, mp_irqdomain_ioapic_idx(domain),
-				      (int)irq_data->hwirq);
+		__remove_pin_from_irq(data, mp_irqdomain_ioapic_idx(domain), (int)irq_data=
->hwirq);
 		WARN_ON(!list_empty(&data->irq_2_pin));
 		kfree(irq_data->chip_data);
 	}
 	irq_domain_free_irqs_top(domain, virq, nr_irqs);
 }
=20
-int mp_irqdomain_activate(struct irq_domain *domain,
-			  struct irq_data *irq_data, bool reserve)
+int mp_irqdomain_activate(struct irq_domain *domain, struct irq_data *irq_da=
ta, bool reserve)
 {
-	unsigned long flags;
-
-	raw_spin_lock_irqsave(&ioapic_lock, flags);
+	guard(raw_spinlock_irqsave)(&ioapic_lock);
 	ioapic_configure_entry(irq_data);
-	raw_spin_unlock_irqrestore(&ioapic_lock, flags);
 	return 0;
 }
=20
@@ -3079,8 +2939,7 @@ void mp_irqdomain_deactivate(struct irq_domain *domain,
 			     struct irq_data *irq_data)
 {
 	/* It won't be called for IRQ with multiple IOAPIC pins associated */
-	ioapic_mask_entry(mp_irqdomain_ioapic_idx(domain),
-			  (int)irq_data->hwirq);
+	ioapic_mask_entry(mp_irqdomain_ioapic_idx(domain), (int)irq_data->hwirq);
 }
=20
 int mp_irqdomain_ioapic_idx(struct irq_domain *domain)
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
index e89171b0347a..4a1b1b28abf9 100644
--- a/arch/x86/kernel/mpparse.c
+++ b/arch/x86/kernel/mpparse.c
@@ -68,7 +68,7 @@ static void __init mpc_oem_bus_info(struct mpc_bus *m, char=
 *str)
 {
 	memcpy(str, m->bustype, 6);
 	str[6] =3D 0;
-	apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->busid, str);
+	apic_pr_verbose("Bus #%d is %s\n", m->busid, str);
 }
=20
 static void __init MP_bus_info(struct mpc_bus *m)
@@ -417,7 +417,7 @@ static unsigned long __init get_mpc_size(unsigned long ph=
ysptr)
 	mpc =3D early_memremap(physptr, PAGE_SIZE);
 	size =3D mpc->length;
 	early_memunmap(mpc, PAGE_SIZE);
-	apic_printk(APIC_VERBOSE, "  mpc: %lx-%lx\n", physptr, physptr + size);
+	apic_pr_verbose("  mpc: %lx-%lx\n", physptr, physptr + size);
=20
 	return size;
 }
@@ -560,8 +560,7 @@ static int __init smp_scan_config(unsigned long base, uns=
igned long length)
 	struct mpf_intel *mpf;
 	int ret =3D 0;
=20
-	apic_printk(APIC_VERBOSE, "Scan for SMP in [mem %#010lx-%#010lx]\n",
-		    base, base + length - 1);
+	apic_pr_verbose("Scan for SMP in [mem %#010lx-%#010lx]\n", base, base + len=
gth - 1);
 	BUILD_BUG_ON(sizeof(*mpf) !=3D 16);
=20
 	while (length > 0) {
@@ -683,13 +682,13 @@ static void __init check_irq_src(struct mpc_intsrc *m, =
int *nr_m_spare)
 {
 	int i;
=20
-	apic_printk(APIC_VERBOSE, "OLD ");
+	apic_pr_verbose("OLD ");
 	print_mp_irq_info(m);
=20
 	i =3D get_MP_intsrc_index(m);
 	if (i > 0) {
 		memcpy(m, &mp_irqs[i], sizeof(*m));
-		apic_printk(APIC_VERBOSE, "NEW ");
+		apic_pr_verbose("NEW ");
 		print_mp_irq_info(&mp_irqs[i]);
 		return;
 	}
@@ -772,7 +771,7 @@ static int  __init replace_intsrc_all(struct mpc_table *m=
pc,
 			continue;
=20
 		if (nr_m_spare > 0) {
-			apic_printk(APIC_VERBOSE, "*NEW* found\n");
+			apic_pr_verbose("*NEW* found\n");
 			nr_m_spare--;
 			memcpy(m_spare[nr_m_spare], &mp_irqs[i], sizeof(mp_irqs[i]));
 			m_spare[nr_m_spare] =3D NULL;
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_re=
mapping.c
index e090ca07364b..7a6d188e3bea 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -1352,12 +1352,11 @@ static void intel_irq_remapping_prepare_irte(struct i=
ntel_ir_data *data,
 	case X86_IRQ_ALLOC_TYPE_IOAPIC:
 		/* Set source-id of interrupt request */
 		set_ioapic_sid(irte, info->devid);
-		apic_printk(APIC_VERBOSE, KERN_DEBUG "IOAPIC[%d]: Set IRTE entry (P:%d FPD=
:%d Dst_Mode:%d Redir_hint:%d Trig_Mode:%d Dlvry_Mode:%X Avail:%X Vector:%02X=
 Dest:%08X SID:%04X SQ:%X SVT:%X)\n",
-			info->devid, irte->present, irte->fpd,
-			irte->dst_mode, irte->redir_hint,
-			irte->trigger_mode, irte->dlvry_mode,
-			irte->avail, irte->vector, irte->dest_id,
-			irte->sid, irte->sq, irte->svt);
+		apic_pr_verbose("IOAPIC[%d]: Set IRTE entry (P:%d FPD:%d Dst_Mode:%d Redir=
_hint:%d Trig_Mode:%d Dlvry_Mode:%X Avail:%X Vector:%02X Dest:%08X SID:%04X S=
Q:%X SVT:%X)\n",
+				info->devid, irte->present, irte->fpd, irte->dst_mode,
+				irte->redir_hint, irte->trigger_mode, irte->dlvry_mode,
+				irte->avail, irte->vector, irte->dest_id, irte->sid,
+				irte->sq, irte->svt);
 		sub_handle =3D info->ioapic.pin;
 		break;
 	case X86_IRQ_ALLOC_TYPE_HPET:


.
Date: Tue, 17 Sep 2024 10:54:14 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] x86/misc for v6.12-rc1

Linus,

please pull the latest x86/misc branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-misc-2024-09=
-17

up to:  4460e8538ef1: MAINTAINERS: Add selftests/x86 entry

Miscellaneous updates for x86:

  - Rework kcpuid to handle the the autogenerated CSV file correctly and
    update the CSV file to cover the whole zoo of CPUID.

  - Avoid memcpy() for ia32 syscall_get_arguments() and use direct
    assignments as fortified memcpy() is unhappy about writing/reading
    beyond the end of the addresses destination/source struct member

  - A few new PCI IDs for AMD

  - Update MAINTAINERS to cover x86 specific selftests


Thanks,

	tglx

------------------>
Ahmed S. Darwish (9):
      tools/x86/kcpuid: Remove unused variable
      tools/x86/kcpuid: Properly align long-description columns
      tools/x86/kcpuid: Set max possible subleaves count to 64
      tools/x86/kcpuid: Protect against faulty "max subleaf" values
      tools/x86/kcpuid: Strip bitfield names leading/trailing whitespace
      tools/x86/kcpuid: Recognize all leaves with subleaves
      tools/x86/kcpuid: Parse subleaf ranges if provided
      tools/x86/kcpuid: Introduce a complete cpuid bitfields CSV file
      MAINTAINERS: Add x86 cpuid database entry

Kees Cook (1):
      x86/syscall: Avoid memcpy() for ia32 syscall_get_arguments()

Muhammad Usama Anjum (1):
      MAINTAINERS: Add selftests/x86 entry

Richard Gong (1):
      x86/amd_nb: Add new PCI IDs for AMD family 1Ah model 60h-70h

Shyam Sundar S K (1):
      x86/amd_nb: Add new PCI IDs for AMD family 1Ah model 60h


 MAINTAINERS                     |   11 +
 arch/x86/include/asm/syscall.h  |    7 +-
 arch/x86/kernel/amd_nb.c        |    7 +
 drivers/hwmon/k10temp.c         |    1 +
 include/linux/pci_ids.h         |    1 +
 tools/arch/x86/kcpuid/cpuid.csv | 1430 +++++++++++++++++++++++++++----------=
--
 tools/arch/x86/kcpuid/kcpuid.c  |  109 +--
 7 files changed, 1100 insertions(+), 466 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 42decde38320..7715a806c255 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -24772,6 +24772,17 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git=
/tip/tip.git x86/core
 F:	Documentation/arch/x86/
 F:	Documentation/devicetree/bindings/x86/
 F:	arch/x86/
+F:	tools/testing/selftests/x86
+
+X86 CPUID DATABASE
+M:	Borislav Petkov <bp@alien8.de>
+M:	Thomas Gleixner <tglx@linutronix.de>
+M:	x86@kernel.org
+R:	Ahmed S. Darwish <darwi@linutronix.de>
+L:	x86-cpuid@lists.linux.dev
+S:	Maintained
+W:	https://x86-cpuid.org
+F:	tools/arch/x86/kcpuid/cpuid.csv
=20
 X86 ENTRY CODE
 M:	Andy Lutomirski <luto@kernel.org>
diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h
index 2fc7bc3863ff..7c488ff0c764 100644
--- a/arch/x86/include/asm/syscall.h
+++ b/arch/x86/include/asm/syscall.h
@@ -82,7 +82,12 @@ static inline void syscall_get_arguments(struct task_struc=
t *task,
 					 struct pt_regs *regs,
 					 unsigned long *args)
 {
-	memcpy(args, &regs->bx, 6 * sizeof(args[0]));
+	args[0] =3D regs->bx;
+	args[1] =3D regs->cx;
+	args[2] =3D regs->dx;
+	args[3] =3D regs->si;
+	args[4] =3D regs->di;
+	args[5] =3D regs->bp;
 }
=20
 static inline int syscall_get_arch(struct task_struct *task)
diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
index 059e5c16af05..dc5d3216af24 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
@@ -26,6 +26,7 @@
 #define PCI_DEVICE_ID_AMD_19H_M70H_ROOT		0x14e8
 #define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT		0x153a
 #define PCI_DEVICE_ID_AMD_1AH_M20H_ROOT		0x1507
+#define PCI_DEVICE_ID_AMD_1AH_M60H_ROOT		0x1122
 #define PCI_DEVICE_ID_AMD_MI200_ROOT		0x14bb
 #define PCI_DEVICE_ID_AMD_MI300_ROOT		0x14f8
=20
@@ -43,6 +44,8 @@
 #define PCI_DEVICE_ID_AMD_19H_M70H_DF_F4	0x14f4
 #define PCI_DEVICE_ID_AMD_19H_M78H_DF_F4	0x12fc
 #define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F4	0x12c4
+#define PCI_DEVICE_ID_AMD_1AH_M60H_DF_F4	0x124c
+#define PCI_DEVICE_ID_AMD_1AH_M70H_DF_F4	0x12bc
 #define PCI_DEVICE_ID_AMD_MI200_DF_F4		0x14d4
 #define PCI_DEVICE_ID_AMD_MI300_DF_F4		0x152c
=20
@@ -63,6 +66,7 @@ static const struct pci_device_id amd_root_ids[] =3D {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_ROOT) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_ROOT) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_ROOT) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI300_ROOT) },
 	{}
@@ -95,6 +99,7 @@ static const struct pci_device_id amd_nb_misc_ids[] =3D {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M70H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI300_DF_F3) },
@@ -122,6 +127,8 @@ static const struct pci_device_id amd_nb_link_ids[] =3D {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F4) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F4) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M70H_DF_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI300_DF_F4) },
 	{}
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
index 543526bac042..f96b91e43312 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
@@ -548,6 +548,7 @@ static const struct pci_device_id k10temp_id_table[] =3D {
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
+	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3) },
 	{ PCI_VDEVICE(HYGON, PCI_DEVICE_ID_AMD_17H_DF_F3) },
 	{}
 };
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index e388c8b1cbc2..91182aa1d2ec 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -580,6 +580,7 @@
 #define PCI_DEVICE_ID_AMD_19H_M78H_DF_F3 0x12fb
 #define PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3 0x12c3
 #define PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3 0x16fb
+#define PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3 0x124b
 #define PCI_DEVICE_ID_AMD_1AH_M70H_DF_F3 0x12bb
 #define PCI_DEVICE_ID_AMD_MI200_DF_F3	0x14d3
 #define PCI_DEVICE_ID_AMD_MI300_DF_F3	0x152b
diff --git a/tools/arch/x86/kcpuid/cpuid.csv b/tools/arch/x86/kcpuid/cpuid.csv
index e0c25b75327e..d751eb8585d0 100644
--- a/tools/arch/x86/kcpuid/cpuid.csv
+++ b/tools/arch/x86/kcpuid/cpuid.csv
@@ -1,451 +1,1053 @@
-# The basic row format is:
-# LEAF, SUBLEAF, register_name, bits, short_name, long_description
-
-# Leaf 00H
-         0,    0,  EAX,   31:0, max_basic_leafs, Max input value for support=
ed subleafs
-
-# Leaf 01H
-         1,    0,  EAX,    3:0, stepping, Stepping ID
-         1,    0,  EAX,    7:4, model, Model
-         1,    0,  EAX,   11:8, family, Family ID
-         1,    0,  EAX,  13:12, processor, Processor Type
-         1,    0,  EAX,  19:16, model_ext, Extended Model ID
-         1,    0,  EAX,  27:20, family_ext, Extended Family ID
-
-         1,    0,  EBX,    7:0, brand, Brand Index
-         1,    0,  EBX,   15:8, clflush_size, CLFLUSH line size (value * 8) =
in bytes
-         1,    0,  EBX,  23:16, max_cpu_id, Maxim number of addressable logi=
c cpu in this package
-         1,    0,  EBX,  31:24, apic_id, Initial APIC ID
-
-         1,    0,  ECX,      0, sse3, Streaming SIMD Extensions 3(SSE3)
-         1,    0,  ECX,      1, pclmulqdq, PCLMULQDQ instruction supported
-         1,    0,  ECX,      2, dtes64, DS area uses 64-bit layout
-         1,    0,  ECX,      3, mwait, MONITOR/MWAIT supported
-         1,    0,  ECX,      4, ds_cpl, CPL Qualified Debug Store which allo=
ws for branch message storage qualified by CPL
-         1,    0,  ECX,      5, vmx, Virtual Machine Extensions supported
-         1,    0,  ECX,      6, smx, Safer Mode Extension supported
-         1,    0,  ECX,      7, eist, Enhanced Intel SpeedStep Technology
-         1,    0,  ECX,      8, tm2, Thermal Monitor 2
-         1,    0,  ECX,      9, ssse3, Supplemental Streaming SIMD Extension=
s 3 (SSSE3)
-         1,    0,  ECX,     10, l1_ctx_id, L1 data cache could be set to eit=
her adaptive mode or shared mode (check IA32_MISC_ENABLE bit 24 definition)
-         1,    0,  ECX,     11, sdbg, IA32_DEBUG_INTERFACE MSR for silicon d=
ebug supported
-         1,    0,  ECX,     12, fma, FMA extensions using YMM state supported
-         1,    0,  ECX,     13, cmpxchg16b, 'CMPXCHG16B - Compare and Exchan=
ge Bytes' supported
-         1,    0,  ECX,     14, xtpr_update, xTPR Update Control supported
-         1,    0,  ECX,     15, pdcm, Perfmon and Debug Capability present
-         1,    0,  ECX,     17, pcid, Process-Context Identifiers feature pr=
esent
-         1,    0,  ECX,     18, dca, Prefetching data from a memory mapped d=
evice supported
-         1,    0,  ECX,     19, sse4_1, SSE4.1 feature present
-         1,    0,  ECX,     20, sse4_2, SSE4.2 feature present
-         1,    0,  ECX,     21, x2apic, x2APIC supported
-         1,    0,  ECX,     22, movbe, MOVBE instruction supported
-         1,    0,  ECX,     23, popcnt, POPCNT instruction supported
-         1,    0,  ECX,     24, tsc_deadline_timer, LAPIC supports one-shot =
operation using a TSC deadline value
-         1,    0,  ECX,     25, aesni, AESNI instruction supported
-         1,    0,  ECX,     26, xsave, XSAVE/XRSTOR processor extended state=
s (XSETBV/XGETBV/XCR0)
-         1,    0,  ECX,     27, osxsave, OS has set CR4.OSXSAVE bit to enabl=
e XSETBV/XGETBV/XCR0
-         1,    0,  ECX,     28, avx, AVX instruction supported
-         1,    0,  ECX,     29, f16c, 16-bit floating-point conversion instr=
uction supported
-         1,    0,  ECX,     30, rdrand, RDRAND instruction supported
-
-         1,    0,  EDX,      0, fpu, x87 FPU on chip
-         1,    0,  EDX,      1, vme, Virtual-8086 Mode Enhancement
-         1,    0,  EDX,      2, de, Debugging Extensions
-         1,    0,  EDX,      3, pse, Page Size Extensions
-         1,    0,  EDX,      4, tsc, Time Stamp Counter
-         1,    0,  EDX,      5, msr, RDMSR and WRMSR Support
-         1,    0,  EDX,      6, pae, Physical Address Extensions
-         1,    0,  EDX,      7, mce, Machine Check Exception
-         1,    0,  EDX,      8, cx8, CMPXCHG8B instr
-         1,    0,  EDX,      9, apic, APIC on Chip
-         1,    0,  EDX,     11, sep, SYSENTER and SYSEXIT instrs
-         1,    0,  EDX,     12, mtrr, Memory Type Range Registers
-         1,    0,  EDX,     13, pge, Page Global Bit
-         1,    0,  EDX,     14, mca, Machine Check Architecture
-         1,    0,  EDX,     15, cmov, Conditional Move Instrs
-         1,    0,  EDX,     16, pat, Page Attribute Table
-         1,    0,  EDX,     17, pse36, 36-Bit Page Size Extension
-         1,    0,  EDX,     18, psn, Processor Serial Number
-         1,    0,  EDX,     19, clflush, CLFLUSH instr
-#         1,    0,  EDX,     20,
-         1,    0,  EDX,     21, ds, Debug Store
-         1,    0,  EDX,     22, acpi, Thermal Monitor and Software Controlle=
d Clock Facilities
-         1,    0,  EDX,     23, mmx, Intel MMX Technology
-         1,    0,  EDX,     24, fxsr, XSAVE and FXRSTOR Instrs
-         1,    0,  EDX,     25, sse, SSE
-         1,    0,  EDX,     26, sse2, SSE2
-         1,    0,  EDX,     27, ss, Self Snoop
-         1,    0,  EDX,     28, hit, Max APIC IDs
-         1,    0,  EDX,     29, tm, Thermal Monitor
-#         1,    0,  EDX,     30,
-         1,    0,  EDX,     31, pbe, Pending Break Enable
-
-# Leaf 02H
-# cache and TLB descriptor info
-
-# Leaf 03H
-# Precessor Serial Number, introduced on Pentium III, not valid for
-# latest models
-
-# Leaf 04H
-# thread/core and cache topology
-         4,    0,  EAX,    4:0, cache_type, Cache type like instr/data or un=
ified
-         4,    0,  EAX,    7:5, cache_level, Cache Level (starts at 1)
-         4,    0,  EAX,      8, cache_self_init, Cache Self Initialization
-         4,    0,  EAX,      9, fully_associate, Fully Associative cache
-#         4,    0,  EAX,  13:10, resvd, resvd
-         4,    0,  EAX,  25:14, max_logical_id, Max number of addressable ID=
s for logical processors sharing the cache
-         4,    0,  EAX,  31:26, max_phy_id, Max number of addressable IDs fo=
r processors in phy package
-
-         4,    0,  EBX,   11:0, cache_linesize, Size of a cache line in bytes
-         4,    0,  EBX,  21:12, cache_partition, Physical Line partitions
-         4,    0,  EBX,  31:22, cache_ways, Ways of associativity
-         4,    0,  ECX,   31:0, cache_sets, Number of Sets - 1
-         4,    0,  EDX,      0, c_wbinvd, 1 means WBINVD/INVD is not ganrant=
eed to act upon lower level caches of non-originating threads sharing this ca=
che
-         4,    0,  EDX,      1, c_incl, Whether cache is inclusive of lower =
cache level
-         4,    0,  EDX,      2, c_comp_index, Complex Cache Indexing
-
-# Leaf 05H
-# MONITOR/MWAIT
-	 5,    0,  EAX,   15:0, min_mon_size, Smallest monitor line size in bytes
-	 5,    0,  EBX,   15:0, max_mon_size, Largest monitor line size in bytes
-	 5,    0,  ECX,      0, mwait_ext, Enum of Monitor-Mwait extensions support=
ed
-	 5,    0,  ECX,      1, mwait_irq_break, Largest monitor line size in bytes
-	 5,    0,  EDX,    3:0, c0_sub_stats, Number of C0* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,    7:4, c1_sub_stats, Number of C1* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,   11:8, c2_sub_stats, Number of C2* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,  15:12, c3_sub_stats, Number of C3* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,  19:16, c4_sub_stats, Number of C4* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,  23:20, c5_sub_stats, Number of C5* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,  27:24, c6_sub_stats, Number of C6* sub C-states supported =
using MWAIT
-	 5,    0,  EDX,  31:28, c7_sub_stats, Number of C7* sub C-states supported =
using MWAIT
-
-# Leaf 06H
-# Thermal & Power Management
-
-	 6,    0,  EAX,      0, dig_temp, Digital temperature sensor supported
-	 6,    0,  EAX,      1, turbo, Intel Turbo Boost
-	 6,    0,  EAX,      2, arat, Always running APIC timer
-#	 6,    0,  EAX,      3, resv, Reserved
-	 6,    0,  EAX,      4, pln, Power limit notifications supported
-	 6,    0,  EAX,      5, ecmd, Clock modulation duty cycle extension support=
ed
-	 6,    0,  EAX,      6, ptm, Package thermal management supported
-	 6,    0,  EAX,      7, hwp, HWP base register
-	 6,    0,  EAX,      8, hwp_notify, HWP notification
-	 6,    0,  EAX,      9, hwp_act_window, HWP activity window
-	 6,    0,  EAX,     10, hwp_energy, HWP energy performance preference
-	 6,    0,  EAX,     11, hwp_pkg_req, HWP package level request
-#	 6,    0,  EAX,     12, resv, Reserved
-	 6,    0,  EAX,     13, hdc, HDC base registers supported
-	 6,    0,  EAX,     14, turbo3, Turbo Boost Max 3.0
-	 6,    0,  EAX,     15, hwp_cap, Highest Performance change supported
-	 6,    0,  EAX,     16, hwp_peci, HWP PECI override is supported
-	 6,    0,  EAX,     17, hwp_flex, Flexible HWP is supported
-	 6,    0,  EAX,     18, hwp_fast, Fast access mode for the IA32_HWP_REQUEST=
 MSR is supported
-#	 6,    0,  EAX,     19, resv, Reserved
-	 6,    0,  EAX,     20, hwp_ignr, Ignoring Idle Logical Processor HWP reque=
st is supported
-
-	 6,    0,  EBX,    3:0, therm_irq_thresh, Number of Interrupt Thresholds in=
 Digital Thermal Sensor
-	 6,    0,  ECX,      0, aperfmperf, Presence of IA32_MPERF and IA32_APERF
-	 6,    0,  ECX,      3, energ_bias, Performance-energy bias preference supp=
orted
-
-# Leaf 07H
-#	ECX =3D=3D 0
-# AVX512 refers to https://en.wikipedia.org/wiki/AVX-512
-# XXX: Do we really need to enumerate each and every AVX512 sub features
-
-	 7,    0,  EBX,      0, fsgsbase, RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE suppo=
rted
-	 7,    0,  EBX,      1, tsc_adjust, TSC_ADJUST MSR supported
-	 7,    0,  EBX,      2, sgx, Software Guard Extensions
-	 7,    0,  EBX,      3, bmi1, BMI1
-	 7,    0,  EBX,      4, hle, Hardware Lock Elision
-	 7,    0,  EBX,      5, avx2, AVX2
-#	 7,    0,  EBX,      6, fdp_excp_only, x87 FPU Data Pointer updated only o=
n x87 exceptions
-	 7,    0,  EBX,      7, smep, Supervisor-Mode Execution Prevention
-	 7,    0,  EBX,      8, bmi2, BMI2
-	 7,    0,  EBX,      9, rep_movsb, Enhanced REP MOVSB/STOSB
-	 7,    0,  EBX,     10, invpcid, INVPCID instruction
-	 7,    0,  EBX,     11, rtm, Restricted Transactional Memory
-	 7,    0,  EBX,     12, rdt_m, Intel RDT Monitoring capability
-	 7,    0,  EBX,     13, depc_fpu_cs_ds, Deprecates FPU CS and FPU DS
-	 7,    0,  EBX,     14, mpx, Memory Protection Extensions
-	 7,    0,  EBX,     15, rdt_a, Intel RDT Allocation capability
-	 7,    0,  EBX,     16, avx512f, AVX512 Foundation instr
-	 7,    0,  EBX,     17, avx512dq, AVX512 Double and Quadword AVX512 instr
-	 7,    0,  EBX,     18, rdseed, RDSEED instr
-	 7,    0,  EBX,     19, adx, ADX instr
-	 7,    0,  EBX,     20, smap, Supervisor Mode Access Prevention
-	 7,    0,  EBX,     21, avx512ifma, AVX512 Integer Fused Multiply Add
-#	 7,    0,  EBX,     22, resvd, resvd
-	 7,    0,  EBX,     23, clflushopt, CLFLUSHOPT instr
-	 7,    0,  EBX,     24, clwb, CLWB instr
-	 7,    0,  EBX,     25, intel_pt, Intel Processor Trace instr
-	 7,    0,  EBX,     26, avx512pf, Prefetch
-	 7,    0,  EBX,     27, avx512er, AVX512 Exponent Reciproca instr
-	 7,    0,  EBX,     28, avx512cd, AVX512 Conflict Detection instr
-	 7,    0,  EBX,     29, sha, Intel Secure Hash Algorithm Extensions instr
-	 7,    0,  EBX,     30, avx512bw, AVX512 Byte & Word instr
-	 7,    0,  EBX,     31, avx512vl, AVX512 Vector Length Extentions (VL)
-	 7,    0,  ECX,      0, prefetchwt1, X
-	 7,    0,  ECX,      1, avx512vbmi, AVX512 Vector Byte Manipulation Instruc=
tions
-	 7,    0,  ECX,      2, umip, User-mode Instruction Prevention
-
-	 7,    0,  ECX,      3, pku, Protection Keys for User-mode pages
-	 7,    0,  ECX,      4, ospke, CR4 PKE set to enable protection keys
-#	 7,    0,  ECX,   16:5, resvd, resvd
-	 7,    0,  ECX,  21:17, mawau, The value of MAWAU used by the BNDLDX and BN=
DSTX instructions in 64-bit mode
-	 7,    0,  ECX,     22, rdpid, RDPID and IA32_TSC_AUX
-#	 7,    0,  ECX,  29:23, resvd, resvd
-	 7,    0,  ECX,     30, sgx_lc, SGX Launch Configuration
-#	 7,    0,  ECX,     31, resvd, resvd
-
-# Leaf 08H
-#
-
-
-# Leaf 09H
-# Direct Cache Access (DCA) information
-	 9,    0,  ECX,   31:0, dca_cap, The value of IA32_PLATFORM_DCA_CAP
+# SPDX-License-Identifier: CC0-1.0
+# Generator: x86-cpuid-db v1.0
=20
-# Leaf 0AH
-# Architectural Performance Monitoring
 #
-# Do we really need to print out the PMU related stuff?
-# Does normal user really care about it?
+# Auto-generated file.
+# Please submit all updates and bugfixes to https://x86-cpuid.org
 #
-       0xA,    0,  EAX,    7:0, pmu_ver, Performance Monitoring Unit version
-       0xA,    0,  EAX,   15:8, pmu_gp_cnt_num, Numer of general-purose PMU =
counters per logical CPU
-       0xA,    0,  EAX,  23:16, pmu_cnt_bits, Bit wideth of PMU counter
-       0xA,    0,  EAX,  31:24, pmu_ebx_bits, Length of EBX bit vector to en=
umerate PMU events
-
-       0xA,    0,  EBX,      0, pmu_no_core_cycle_evt, Core cycle event not =
available
-       0xA,    0,  EBX,      1, pmu_no_instr_ret_evt, Instruction retired ev=
ent not available
-       0xA,    0,  EBX,      2, pmu_no_ref_cycle_evt, Reference cycles event=
 not available
-       0xA,    0,  EBX,      3, pmu_no_llc_ref_evt, Last-level cache referen=
ce event not available
-       0xA,    0,  EBX,      4, pmu_no_llc_mis_evt, Last-level cache misses =
event not available
-       0xA,    0,  EBX,      5, pmu_no_br_instr_ret_evt, Branch instruction =
retired event not available
-       0xA,    0,  EBX,      6, pmu_no_br_mispredict_evt, Branch mispredict =
retired event not available
-
-       0xA,    0,  ECX,    4:0, pmu_fixed_cnt_num, Performance Monitoring Un=
it version
-       0xA,    0,  ECX,   12:5, pmu_fixed_cnt_bits, Numer of PMU counters pe=
r logical CPU
-
-# Leaf 0BH
-# Extended Topology Enumeration Leaf
-#
-
-       0xB,    0,  EAX,    4:0, id_shift, Number of bits to shift right on x=
2APIC ID to get a unique topology ID of the next level type
-       0xB,    0,  EBX,   15:0, cpu_nr, Number of logical processors at this=
 level type
-       0xB,    0,  ECX,   15:8, lvl_type, 0-Invalid 1-SMT 2-Core
-       0xB,    0,  EDX,   31:0, x2apic_id, x2APIC ID the current logical pro=
cessor
-
-
-# Leaf 0DH
-# Processor Extended State
=20
-       0xD,    0,  EAX,      0, x87, X87 state
-       0xD,    0,  EAX,      1, sse, SSE state
-       0xD,    0,  EAX,      2, avx, AVX state
-       0xD,    0,  EAX,    4:3, mpx, MPX state
-       0xD,    0,  EAX,    7:5, avx512, AVX-512 state
-       0xD,    0,  EAX,      9, pkru, PKRU state
-
-       0xD,    0,  EBX,   31:0, max_sz_xcr0, Maximum size (bytes) required b=
y enabled features in XCR0
-       0xD,    0,  ECX,   31:0, max_sz_xsave, Maximum size (bytes) of the XS=
AVE/XRSTOR save area
-
-       0xD,    1,  EAX,      0, xsaveopt, XSAVEOPT available
-       0xD,    1,  EAX,      1, xsavec, XSAVEC and compacted form supported
-       0xD,    1,  EAX,      2, xgetbv, XGETBV supported
-       0xD,    1,  EAX,      3, xsaves, XSAVES/XRSTORS and IA32_XSS supported
-
-       0xD,    1,  EBX,   31:0, max_sz_xcr0, Maximum size (bytes) required b=
y enabled features in XCR0
-       0xD,    1,  ECX,      8, pt, PT state
-       0xD,    1,  ECX,      11, cet_usr, CET user state
-       0xD,    1,  ECX,      12, cet_supv, CET supervisor state
-       0xD,    1,  ECX,      13, hdc, HDC state
-       0xD,    1,  ECX,      16, hwp, HWP state
-
-# Leaf 0FH
-# Intel RDT Monitoring
-
-       0xF,    0,  EBX,   31:0, rmid_range, Maximum range (zero-based) of RM=
ID within this physical processor of all types
-       0xF,    0,  EDX,      1, l3c_rdt_mon, L3 Cache RDT Monitoring support=
ed
-
-       0xF,    1,  ECX,   31:0, rmid_range, Maximum range (zero-based) of RM=
ID of this types
-       0xF,    1,  EDX,      0, l3c_ocp_mon, L3 Cache occupancy Monitoring s=
upported
-       0xF,    1,  EDX,      1, l3c_tbw_mon, L3 Cache Total Bandwidth Monito=
ring supported
-       0xF,    1,  EDX,      2, l3c_lbw_mon, L3 Cache Local Bandwidth Monito=
ring supported
+# The basic row format is:
+#     LEAF, SUBLEAVES,  reg,    bits,    short_name             , long_descr=
iption
+
+# Leaf 0H
+# Maximum standard leaf number + CPU vendor string
+
+         0,         0,  eax,    31:0,    max_std_leaf           , Highest cp=
uid standard leaf supported
+         0,         0,  ebx,    31:0,    cpu_vendorid_0         , CPU vendor=
 ID string bytes 0 - 3
+         0,         0,  ecx,    31:0,    cpu_vendorid_2         , CPU vendor=
 ID string bytes 8 - 11
+         0,         0,  edx,    31:0,    cpu_vendorid_1         , CPU vendor=
 ID string bytes 4 - 7
+
+# Leaf 1H
+# CPU FMS (Family/Model/Stepping) + standard feature flags
+
+         1,         0,  eax,     3:0,    stepping               , Stepping ID
+         1,         0,  eax,     7:4,    base_model             , Base CPU m=
odel ID
+         1,         0,  eax,    11:8,    base_family_id         , Base CPU f=
amily ID
+         1,         0,  eax,   13:12,    cpu_type               , CPU type
+         1,         0,  eax,   19:16,    ext_model              , Extended C=
PU model ID
+         1,         0,  eax,   27:20,    ext_family             , Extended C=
PU family ID
+         1,         0,  ebx,     7:0,    brand_id               , Brand index
+         1,         0,  ebx,    15:8,    clflush_size           , CLFLUSH in=
struction cache line size
+         1,         0,  ebx,   23:16,    n_logical_cpu          , Logical CP=
U (HW threads) count
+         1,         0,  ebx,   31:24,    local_apic_id          , Initial lo=
cal APIC physical ID
+         1,         0,  ecx,       0,    pni                    , Streaming =
SIMD Extensions 3 (SSE3)
+         1,         0,  ecx,       1,    pclmulqdq              , PCLMULQDQ =
instruction support
+         1,         0,  ecx,       2,    dtes64                 , 64-bit DS =
save area
+         1,         0,  ecx,       3,    monitor                , MONITOR/MW=
AIT support
+         1,         0,  ecx,       4,    ds_cpl                 , CPL Qualif=
ied Debug Store
+         1,         0,  ecx,       5,    vmx                    , Virtual Ma=
chine Extensions
+         1,         0,  ecx,       6,    smx                    , Safer Mode=
 Extensions
+         1,         0,  ecx,       7,    est                    , Enhanced I=
ntel SpeedStep
+         1,         0,  ecx,       8,    tm2                    , Thermal Mo=
nitor 2
+         1,         0,  ecx,       9,    ssse3                  , Supplement=
al SSE3
+         1,         0,  ecx,      10,    cid                    , L1 Context=
 ID
+         1,         0,  ecx,      11,    sdbg                   , Sillicon D=
ebug
+         1,         0,  ecx,      12,    fma                    , FMA extens=
ions using YMM state
+         1,         0,  ecx,      13,    cx16                   , CMPXCHG16B=
 instruction support
+         1,         0,  ecx,      14,    xtpr                   , xTPR Updat=
e Control
+         1,         0,  ecx,      15,    pdcm                   , Perfmon an=
d Debug Capability
+         1,         0,  ecx,      17,    pcid                   , Process-co=
ntext identifiers
+         1,         0,  ecx,      18,    dca                    , Direct Cac=
he Access
+         1,         0,  ecx,      19,    sse4_1                 , SSE4.1
+         1,         0,  ecx,      20,    sse4_2                 , SSE4.2
+         1,         0,  ecx,      21,    x2apic                 , X2APIC sup=
port
+         1,         0,  ecx,      22,    movbe                  , MOVBE inst=
ruction support
+         1,         0,  ecx,      23,    popcnt                 , POPCNT ins=
truction support
+         1,         0,  ecx,      24,    tsc_deadline_timer     , APIC timer=
 one-shot operation
+         1,         0,  ecx,      25,    aes                    , AES instru=
ctions
+         1,         0,  ecx,      26,    xsave                  , XSAVE (and=
 related instructions) support
+         1,         0,  ecx,      27,    osxsave                , XSAVE (and=
 related instructions) are enabled by OS
+         1,         0,  ecx,      28,    avx                    , AVX instru=
ctions support
+         1,         0,  ecx,      29,    f16c                   , Half-preci=
sion floating-point conversion support
+         1,         0,  ecx,      30,    rdrand                 , RDRAND ins=
truction support
+         1,         0,  ecx,      31,    guest_status           , System is =
running as guest; (para-)virtualized system
+         1,         0,  edx,       0,    fpu                    , Floating-P=
oint Unit on-chip (x87)
+         1,         0,  edx,       1,    vme                    , Virtual-80=
86 Mode Extensions
+         1,         0,  edx,       2,    de                     , Debugging =
Extensions
+         1,         0,  edx,       3,    pse                    , Page Size =
Extension
+         1,         0,  edx,       4,    tsc                    , Time Stamp=
 Counter
+         1,         0,  edx,       5,    msr                    , Model-Spec=
ific Registers (RDMSR and WRMSR support)
+         1,         0,  edx,       6,    pae                    , Physical A=
ddress Extensions
+         1,         0,  edx,       7,    mce                    , Machine Ch=
eck Exception
+         1,         0,  edx,       8,    cx8                    , CMPXCHG8B =
instruction
+         1,         0,  edx,       9,    apic                   , APIC on-ch=
ip
+         1,         0,  edx,      11,    sep                    , SYSENTER, =
SYSEXIT, and associated MSRs
+         1,         0,  edx,      12,    mtrr                   , Memory Typ=
e Range Registers
+         1,         0,  edx,      13,    pge                    , Page Globa=
l Extensions
+         1,         0,  edx,      14,    mca                    , Machine Ch=
eck Architecture
+         1,         0,  edx,      15,    cmov                   , Conditiona=
l Move Instruction
+         1,         0,  edx,      16,    pat                    , Page Attri=
bute Table
+         1,         0,  edx,      17,    pse36                  , Page Size =
Extension (36-bit)
+         1,         0,  edx,      18,    pn                     , Processor =
Serial Number
+         1,         0,  edx,      19,    clflush                , CLFLUSH in=
struction
+         1,         0,  edx,      21,    dts                    , Debug Store
+         1,         0,  edx,      22,    acpi                   , Thermal mo=
nitor and clock control
+         1,         0,  edx,      23,    mmx                    , MMX instru=
ctions
+         1,         0,  edx,      24,    fxsr                   , FXSAVE and=
 FXRSTOR instructions
+         1,         0,  edx,      25,    sse                    , SSE instru=
ctions
+         1,         0,  edx,      26,    sse2                   , SSE2 instr=
uctions
+         1,         0,  edx,      27,    ss                     , Self Snoop
+         1,         0,  edx,      28,    ht                     , Hyper-thre=
ading
+         1,         0,  edx,      29,    tm                     , Thermal Mo=
nitor
+         1,         0,  edx,      30,    ia64                   , Legacy IA-=
64 (Itanium) support bit, now resreved
+         1,         0,  edx,      31,    pbe                    , Pending Br=
eak Enable
+
+# Leaf 2H
+# Intel cache and TLB information one-byte descriptors
+
+         2,         0,  eax,     7:0,    iteration_count        , Number of =
times this CPUD leaf must be queried
+         2,         0,  eax,    15:8,    desc1                  , Descriptor=
 #1
+         2,         0,  eax,   23:16,    desc2                  , Descriptor=
 #2
+         2,         0,  eax,   30:24,    desc3                  , Descriptor=
 #3
+         2,         0,  eax,      31,    eax_invalid            , Descriptor=
s 1-3 are invalid if set
+         2,         0,  ebx,     7:0,    desc4                  , Descriptor=
 #4
+         2,         0,  ebx,    15:8,    desc5                  , Descriptor=
 #5
+         2,         0,  ebx,   23:16,    desc6                  , Descriptor=
 #6
+         2,         0,  ebx,   30:24,    desc7                  , Descriptor=
 #7
+         2,         0,  ebx,      31,    ebx_invalid            , Descriptor=
s 4-7 are invalid if set
+         2,         0,  ecx,     7:0,    desc8                  , Descriptor=
 #8
+         2,         0,  ecx,    15:8,    desc9                  , Descriptor=
 #9
+         2,         0,  ecx,   23:16,    desc10                 , Descriptor=
 #10
+         2,         0,  ecx,   30:24,    desc11                 , Descriptor=
 #11
+         2,         0,  ecx,      31,    ecx_invalid            , Descriptor=
s 8-11 are invalid if set
+         2,         0,  edx,     7:0,    desc12                 , Descriptor=
 #12
+         2,         0,  edx,    15:8,    desc13                 , Descriptor=
 #13
+         2,         0,  edx,   23:16,    desc14                 , Descriptor=
 #14
+         2,         0,  edx,   30:24,    desc15                 , Descriptor=
 #15
+         2,         0,  edx,      31,    edx_invalid            , Descriptor=
s 12-15 are invalid if set
+
+# Leaf 4H
+# Intel deterministic cache parameters
+
+         4,      31:0,  eax,     4:0,    cache_type             , Cache type=
 field
+         4,      31:0,  eax,     7:5,    cache_level            , Cache leve=
l (1-based)
+         4,      31:0,  eax,       8,    cache_self_init        , Self-initi=
alializing cache level
+         4,      31:0,  eax,       9,    fully_associative      , Fully-asso=
ciative cache
+         4,      31:0,  eax,   25:14,    num_threads_sharing    , Number log=
ical CPUs sharing this cache
+         4,      31:0,  eax,   31:26,    num_cores_on_die       , Number of =
cores in the physical package
+         4,      31:0,  ebx,    11:0,    cache_linesize         , System coh=
erency line size (0-based)
+         4,      31:0,  ebx,   21:12,    cache_npartitions      , Physical l=
ine partitions (0-based)
+         4,      31:0,  ebx,   31:22,    cache_nways            , Ways of as=
sociativity (0-based)
+         4,      31:0,  ecx,    30:0,    cache_nsets            , Cache numb=
er of sets (0-based)
+         4,      31:0,  edx,       0,    wbinvd_rll_no_guarantee, WBINVD/INV=
D not guaranteed for Remote Lower-Level caches
+         4,      31:0,  edx,       1,    ll_inclusive           , Cache is i=
nclusive of Lower-Level caches
+         4,      31:0,  edx,       2,    complex_indexing       , Not a dire=
ct-mapped cache (complex function)
+
+# Leaf 5H
+# MONITOR/MWAIT instructions enumeration
+
+         5,         0,  eax,    15:0,    min_mon_size           , Smallest m=
onitor-line size, in bytes
+         5,         0,  ebx,    15:0,    max_mon_size           , Largest mo=
nitor-line size, in bytes
+         5,         0,  ecx,       0,    mwait_ext              , Enumeratio=
n of MONITOR/MWAIT extensions is supported
+         5,         0,  ecx,       1,    mwait_irq_break        , Interrupts=
 as a break-event for MWAIT is supported
+         5,         0,  edx,     3:0,    n_c0_substates         , Number of =
C0 sub C-states supported using MWAIT
+         5,         0,  edx,     7:4,    n_c1_substates         , Number of =
C1 sub C-states supported using MWAIT
+         5,         0,  edx,    11:8,    n_c2_substates         , Number of =
C2 sub C-states supported using MWAIT
+         5,         0,  edx,   15:12,    n_c3_substates         , Number of =
C3 sub C-states supported using MWAIT
+         5,         0,  edx,   19:16,    n_c4_substates         , Number of =
C4 sub C-states supported using MWAIT
+         5,         0,  edx,   23:20,    n_c5_substates         , Number of =
C5 sub C-states supported using MWAIT
+         5,         0,  edx,   27:24,    n_c6_substates         , Number of =
C6 sub C-states supported using MWAIT
+         5,         0,  edx,   31:28,    n_c7_substates         , Number of =
C7 sub C-states supported using MWAIT
+
+# Leaf 6H
+# Thermal and Power Management enumeration
+
+         6,         0,  eax,       0,    dtherm                 , Digital te=
mprature sensor
+         6,         0,  eax,       1,    turbo_boost            , Intel Turb=
o Boost
+         6,         0,  eax,       2,    arat                   , Always-Run=
ning APIC Timer (not affected by p-state)
+         6,         0,  eax,       4,    pln                    , Power Limi=
t Notification (PLN) event
+         6,         0,  eax,       5,    ecmd                   , Clock modu=
lation duty cycle extension
+         6,         0,  eax,       6,    pts                    , Package th=
ermal management
+         6,         0,  eax,       7,    hwp                    , HWP (Hardw=
are P-states) base registers are supported
+         6,         0,  eax,       8,    hwp_notify             , HWP notifi=
cation (IA32_HWP_INTERRUPT MSR)
+         6,         0,  eax,       9,    hwp_act_window         , HWP activi=
ty window (IA32_HWP_REQUEST[bits 41:32]) supported
+         6,         0,  eax,      10,    hwp_epp                , HWP Energy=
 Performance Preference
+         6,         0,  eax,      11,    hwp_pkg_req            , HWP Packag=
e Level Request
+         6,         0,  eax,      13,    hdc_base_regs          , HDC base r=
egisters are supported
+         6,         0,  eax,      14,    turbo_boost_3_0        , Intel Turb=
o Boost Max 3.0
+         6,         0,  eax,      15,    hwp_capabilities       , HWP Highes=
t Performance change
+         6,         0,  eax,      16,    hwp_peci_override      , HWP PECI o=
verride
+         6,         0,  eax,      17,    hwp_flexible           , Flexible H=
WP
+         6,         0,  eax,      18,    hwp_fast               , IA32_HWP_R=
EQUEST MSR fast access mode
+         6,         0,  eax,      19,    hfi                    , HW_FEEDBAC=
K MSRs supported
+         6,         0,  eax,      20,    hwp_ignore_idle        , Ignoring i=
dle logical CPU HWP req is supported
+         6,         0,  eax,      23,    thread_director        , Intel thre=
ad director support
+         6,         0,  eax,      24,    therm_interrupt_bit25  , IA32_THERM=
_INTERRUPT MSR bit 25 is supported
+         6,         0,  ebx,     3:0,    n_therm_thresholds     , Digital th=
ermometer thresholds
+         6,         0,  ecx,       0,    aperfmperf             , MPERF/APER=
F MSRs (effective frequency interface)
+         6,         0,  ecx,       3,    epb                    , IA32_ENERG=
Y_PERF_BIAS MSR support
+         6,         0,  ecx,    15:8,    thrd_director_nclasses , Number of =
classes, Intel thread director
+         6,         0,  edx,       0,    perfcap_reporting      , Performanc=
e capability reporting
+         6,         0,  edx,       1,    encap_reporting        , Energy eff=
iciency capability reporting
+         6,         0,  edx,    11:8,    feedback_sz            , HW feedbac=
k interface struct size, in 4K pages
+         6,         0,  edx,   31:16,    this_lcpu_hwfdbk_idx   , This logic=
al CPU index @ HW feedback struct, 0-based
+
+# Leaf 7H
+# Extended CPU features enumeration
+
+         7,         0,  eax,    31:0,    leaf7_n_subleaves      , Number of =
cpuid 0x7 subleaves
+         7,         0,  ebx,       0,    fsgsbase               , FSBASE/GSB=
ASE read/write support
+         7,         0,  ebx,       1,    tsc_adjust             , IA32_TSC_A=
DJUST MSR supported
+         7,         0,  ebx,       2,    sgx                    , Intel SGX =
(Software Guard Extensions)
+         7,         0,  ebx,       3,    bmi1                   , Bit manipu=
lation extensions group 1
+         7,         0,  ebx,       4,    hle                    , Hardware L=
ock Elision
+         7,         0,  ebx,       5,    avx2                   , AVX2 instr=
uction set
+         7,         0,  ebx,       6,    fdp_excptn_only        , FPU Data P=
ointer updated only on x87 exceptions
+         7,         0,  ebx,       7,    smep                   , Supervisor=
 Mode Execution Protection
+         7,         0,  ebx,       8,    bmi2                   , Bit manipu=
lation extensions group 2
+         7,         0,  ebx,       9,    erms                   , Enhanced R=
EP MOVSB/STOSB
+         7,         0,  ebx,      10,    invpcid                , INVPCID in=
struction (Invalidate Processor Context ID)
+         7,         0,  ebx,      11,    rtm                    , Intel rest=
ricted transactional memory
+         7,         0,  ebx,      12,    cqm                    , Intel RDT-=
CMT / AMD Platform-QoS cache monitoring
+         7,         0,  ebx,      13,    zero_fcs_fds           , Deprecated=
 FPU CS/DS (stored as zero)
+         7,         0,  ebx,      14,    mpx                    , Intel memo=
ry protection extensions
+         7,         0,  ebx,      15,    rdt_a                  , Intel RDT =
/ AMD Platform-QoS Enforcemeent
+         7,         0,  ebx,      16,    avx512f                , AVX-512 fo=
undation instructions
+         7,         0,  ebx,      17,    avx512dq               , AVX-512 do=
uble/quadword instructions
+         7,         0,  ebx,      18,    rdseed                 , RDSEED ins=
truction
+         7,         0,  ebx,      19,    adx                    , ADCX/ADOX =
instructions
+         7,         0,  ebx,      20,    smap                   , Supervisor=
 mode access prevention
+         7,         0,  ebx,      21,    avx512ifma             , AVX-512 in=
teger fused multiply add
+         7,         0,  ebx,      23,    clflushopt             , CLFLUSHOPT=
 instruction
+         7,         0,  ebx,      24,    clwb                   , CLWB instr=
uction
+         7,         0,  ebx,      25,    intel_pt               , Intel proc=
essor trace
+         7,         0,  ebx,      26,    avx512pf               , AVX-512 pr=
efetch instructions
+         7,         0,  ebx,      27,    avx512er               , AVX-512 ex=
ponent/reciprocal instrs
+         7,         0,  ebx,      28,    avx512cd               , AVX-512 co=
nflict detection instrs
+         7,         0,  ebx,      29,    sha_ni                 , SHA/SHA256=
 instructions
+         7,         0,  ebx,      30,    avx512bw               , AVX-512 BW=
 (byte/word granular) instructions
+         7,         0,  ebx,      31,    avx512vl               , AVX-512 VL=
 (128/256 vector length) extensions
+         7,         0,  ecx,       0,    prefetchwt1            , PREFETCHWT=
1 (Intel Xeon Phi only)
+         7,         0,  ecx,       1,    avx512vbmi             , AVX-512 Ve=
ctor byte manipulation instrs
+         7,         0,  ecx,       2,    umip                   , User mode =
instruction protection
+         7,         0,  ecx,       3,    pku                    , Protection=
 keys for user-space
+         7,         0,  ecx,       4,    ospke                  , OS protect=
ion keys enable
+         7,         0,  ecx,       5,    waitpkg                , WAITPKG in=
structions
+         7,         0,  ecx,       6,    avx512_vbmi2           , AVX-512 ve=
ctor byte manipulation instrs group 2
+         7,         0,  ecx,       7,    cet_ss                 , CET shadow=
 stack features
+         7,         0,  ecx,       8,    gfni                   , Galois fie=
ld new instructions
+         7,         0,  ecx,       9,    vaes                   , Vector AES=
 instrs
+         7,         0,  ecx,      10,    vpclmulqdq             , VPCLMULQDQ=
 256-bit instruction support
+         7,         0,  ecx,      11,    avx512_vnni            , Vector neu=
ral network instructions
+         7,         0,  ecx,      12,    avx512_bitalg          , AVX-512 bi=
t count/shiffle
+         7,         0,  ecx,      13,    tme                    , Intel tota=
l memory encryption
+         7,         0,  ecx,      14,    avx512_vpopcntdq       , AVX-512: P=
OPCNT for vectors of DW/QW
+         7,         0,  ecx,      16,    la57                   , 57-bit lin=
ear addreses (five-level paging)
+         7,         0,  ecx,   21:17,    mawau_val_lm           , BNDLDX/BND=
STX MAWAU value in 64-bit mode
+         7,         0,  ecx,      22,    rdpid                  , RDPID inst=
ruction
+         7,         0,  ecx,      23,    key_locker             , Intel key =
locker support
+         7,         0,  ecx,      24,    bus_lock_detect        , OS bus-loc=
k detection
+         7,         0,  ecx,      25,    cldemote               , CLDEMOTE i=
nstruction
+         7,         0,  ecx,      27,    movdiri                , MOVDIRI in=
struction
+         7,         0,  ecx,      28,    movdir64b              , MOVDIR64B =
instruction
+         7,         0,  ecx,      29,    enqcmd                 , Enqueue st=
ores supported (ENQCMD{,S})
+         7,         0,  ecx,      30,    sgx_lc                 , Intel SGX =
launch configuration
+         7,         0,  ecx,      31,    pks                    , Protection=
 keys for supervisor-mode pages
+         7,         0,  edx,       1,    sgx_keys               , Intel SGX =
attestation services
+         7,         0,  edx,       2,    avx512_4vnniw          , AVX-512 ne=
ural network instructions
+         7,         0,  edx,       3,    avx512_4fmaps          , AVX-512 mu=
ltiply accumulation single precision
+         7,         0,  edx,       4,    fsrm                   , Fast short=
 REP MOV
+         7,         0,  edx,       5,    uintr                  , CPU suppor=
ts user interrupts
+         7,         0,  edx,       8,    avx512_vp2intersect    , VP2INTERSE=
CT{D,Q} instructions
+         7,         0,  edx,       9,    srdbs_ctrl             , SRBDS miti=
gation MSR available
+         7,         0,  edx,      10,    md_clear               , VERW MD_CL=
EAR microcode support
+         7,         0,  edx,      11,    rtm_always_abort       , XBEGIN (RT=
M transaction) always aborts
+         7,         0,  edx,      13,    tsx_force_abort        , MSR TSX_FO=
RCE_ABORT, RTM_ABORT bit, supported
+         7,         0,  edx,      14,    serialize              , SERIALIZE =
instruction
+         7,         0,  edx,      15,    hybrid_cpu             , The CPU is=
 identified as a 'hybrid part'
+         7,         0,  edx,      16,    tsxldtrk               , TSX suspen=
d/resume load address tracking
+         7,         0,  edx,      18,    pconfig                , PCONFIG in=
struction
+         7,         0,  edx,      19,    arch_lbr               , Intel arch=
itectural LBRs
+         7,         0,  edx,      20,    ibt                    , CET indire=
ct branch tracking
+         7,         0,  edx,      22,    amx_bf16               , AMX-BF16: =
tile bfloat16 support
+         7,         0,  edx,      23,    avx512_fp16            , AVX-512 FP=
16 instructions
+         7,         0,  edx,      24,    amx_tile               , AMX-TILE: =
tile architecture support
+         7,         0,  edx,      25,    amx_int8               , AMX-INT8: =
tile 8-bit integer support
+         7,         0,  edx,      26,    spec_ctrl              , Speculatio=
n Control (IBRS/IBPB: indirect branch restrictions)
+         7,         0,  edx,      27,    intel_stibp            , Single thr=
ead indirect branch predictors
+         7,         0,  edx,      28,    flush_l1d              , FLUSH L1D =
cache: IA32_FLUSH_CMD MSR
+         7,         0,  edx,      29,    arch_capabilities      , Intel IA32=
_ARCH_CAPABILITIES MSR
+         7,         0,  edx,      30,    core_capabilities      , IA32_CORE_=
CAPABILITIES MSR
+         7,         0,  edx,      31,    spec_ctrl_ssbd         , Speculativ=
e store bypass disable
+         7,         1,  eax,       4,    avx_vnni               , AVX-VNNI i=
nstructions
+         7,         1,  eax,       5,    avx512_bf16            , AVX-512 bF=
loat16 instructions
+         7,         1,  eax,       6,    lass                   , Linear add=
ress space separation
+         7,         1,  eax,       7,    cmpccxadd              , CMPccXADD =
instructions
+         7,         1,  eax,       8,    arch_perfmon_ext       , ArchPerfmo=
nExt: CPUID leaf 0x23 is supported
+         7,         1,  eax,      10,    fzrm                   , Fast zero-=
length REP MOVSB
+         7,         1,  eax,      11,    fsrs                   , Fast short=
 REP STOSB
+         7,         1,  eax,      12,    fsrc                   , Fast Short=
 REP CMPSB/SCASB
+         7,         1,  eax,      17,    fred                   , FRED: Flex=
ible return and event delivery transitions
+         7,         1,  eax,      18,    lkgs                   , LKGS: Load=
 'kernel' (userspace) GS
+         7,         1,  eax,      19,    wrmsrns                , WRMSRNS in=
str (WRMSR-non-serializing)
+         7,         1,  eax,      21,    amx_fp16               , AMX-FP16: =
FP16 tile operations
+         7,         1,  eax,      22,    hreset                 , History re=
set support
+         7,         1,  eax,      23,    avx_ifma               , Integer fu=
sed multiply add
+         7,         1,  eax,      26,    lam                    , Linear add=
ress masking
+         7,         1,  eax,      27,    rd_wr_msrlist          , RDMSRLIST/=
WRMSRLIST instructions
+         7,         1,  ebx,       0,    intel_ppin             , Protected =
processor inventory number (PPIN{,_CTL} MSRs)
+         7,         1,  edx,       4,    avx_vnni_int8          , AVX-VNNI-I=
NT8 instructions
+         7,         1,  edx,       5,    avx_ne_convert         , AVX-NE-CON=
VERT instructions
+         7,         1,  edx,       8,    amx_complex            , AMX-COMPLE=
X instructions (starting from Granite Rapids)
+         7,         1,  edx,      14,    prefetchit_0_1         , PREFETCHIT=
0/1 instructions
+         7,         1,  edx,      18,    cet_sss                , CET superv=
isor shadow stacks safe to use
+         7,         2,  edx,       0,    intel_psfd             , Intel pred=
ictive store forward disable
+         7,         2,  edx,       1,    ipred_ctrl             , MSR bits I=
A32_SPEC_CTRL.IPRED_DIS_{U,S}
+         7,         2,  edx,       2,    rrsba_ctrl             , MSR bits I=
A32_SPEC_CTRL.RRSBA_DIS_{U,S}
+         7,         2,  edx,       3,    ddp_ctrl               , MSR bit  I=
A32_SPEC_CTRL.DDPD_U
+         7,         2,  edx,       4,    bhi_ctrl               , MSR bit  I=
A32_SPEC_CTRL.BHI_DIS_S
+         7,         2,  edx,       5,    mcdt_no                , MCDT mitig=
ation not needed
+         7,         2,  edx,       6,    uclock_disable         , UC-lock di=
sable is supported
+
+# Leaf 9H
+# Intel DCA (Direct Cache Access) enumeration
+
+         9,         0,  eax,       0,    dca_enabled_in_bios    , DCA is ena=
bled in BIOS
+
+# Leaf AH
+# Intel PMU (Performance Monitoring Unit) enumeration
+
+       0xa,         0,  eax,     7:0,    pmu_version            , Performanc=
e monitoring unit version ID
+       0xa,         0,  eax,    15:8,    pmu_n_gcounters        , Number of =
general PMU counters per logical CPU
+       0xa,         0,  eax,   23:16,    pmu_gcounters_nbits    , Bitwidth o=
f PMU general counters
+       0xa,         0,  eax,   31:24,    pmu_cpuid_ebx_bits     , Length of =
cpuid leaf 0xa EBX bit vector
+       0xa,         0,  ebx,       0,    no_core_cycle_evt      , Core cycle=
 event not available
+       0xa,         0,  ebx,       1,    no_insn_retired_evt    , Instructio=
n retired event not available
+       0xa,         0,  ebx,       2,    no_refcycle_evt        , Reference =
cycles event not available
+       0xa,         0,  ebx,       3,    no_llc_ref_evt         , LLC-refere=
nce event not available
+       0xa,         0,  ebx,       4,    no_llc_miss_evt        , LLC-misses=
 event not available
+       0xa,         0,  ebx,       5,    no_br_insn_ret_evt     , Branch ins=
truction retired event not available
+       0xa,         0,  ebx,       6,    no_br_mispredict_evt   , Branch mis=
predict retired event not available
+       0xa,         0,  ebx,       7,    no_td_slots_evt        , Topdown sl=
ots event not available
+       0xa,         0,  ecx,    31:0,    pmu_fcounters_bitmap   , Fixed-func=
tion PMU counters support bitmap
+       0xa,         0,  edx,     4:0,    pmu_n_fcounters        , Number of =
fixed PMU counters
+       0xa,         0,  edx,    12:5,    pmu_fcounters_nbits    , Bitwidth o=
f PMU fixed counters
+       0xa,         0,  edx,      15,    anythread_depr         , AnyThread =
deprecation
+
+# Leaf BH
+# CPUs v1 extended topology enumeration
+
+       0xb,       1:0,  eax,     4:0,    x2apic_id_shift        , Bit width =
of this level (previous levels inclusive)
+       0xb,       1:0,  ebx,    15:0,    domain_lcpus_count     , Logical CP=
Us count across all instances of this domain
+       0xb,       1:0,  ecx,     7:0,    domain_nr              , This domai=
n level (subleaf ID)
+       0xb,       1:0,  ecx,    15:8,    domain_type            , This domai=
n type
+       0xb,       1:0,  edx,    31:0,    x2apic_id              , x2APIC ID =
of current logical CPU
+
+# Leaf DH
+# Processor extended state enumeration
+
+       0xd,         0,  eax,       0,    xcr0_x87               , XCR0.X87 (=
bit 0) supported
+       0xd,         0,  eax,       1,    xcr0_sse               , XCR0.SEE (=
bit 1) supported
+       0xd,         0,  eax,       2,    xcr0_avx               , XCR0.AVX (=
bit 2) supported
+       0xd,         0,  eax,       3,    xcr0_mpx_bndregs       , XCR0.BNDRE=
GS (bit 3) supported (MPX BND0-BND3 regs)
+       0xd,         0,  eax,       4,    xcr0_mpx_bndcsr        , XCR0.BNDCS=
R (bit 4) supported (MPX BNDCFGU/BNDSTATUS regs)
+       0xd,         0,  eax,       5,    xcr0_avx512_opmask     , XCR0.OPMAS=
K (bit 5) supported (AVX-512 k0-k7 regs)
+       0xd,         0,  eax,       6,    xcr0_avx512_zmm_hi256  , XCR0.ZMM_H=
i256 (bit 6) supported (AVX-512 ZMM0->ZMM7/15 regs)
+       0xd,         0,  eax,       7,    xcr0_avx512_hi16_zmm   , XCR0.HI16_=
ZMM (bit 7) supported (AVX-512 ZMM16->ZMM31 regs)
+       0xd,         0,  eax,       9,    xcr0_pkru              , XCR0.PKRU =
(bit 9) supported (XSAVE PKRU reg)
+       0xd,         0,  eax,      11,    xcr0_cet_u             , AMD XCR0.C=
ET_U (bit 11) supported (CET supervisor state)
+       0xd,         0,  eax,      12,    xcr0_cet_s             , AMD XCR0.C=
ET_S (bit 12) support (CET user state)
+       0xd,         0,  eax,      17,    xcr0_tileconfig        , XCR0.TILEC=
ONFIG (bit 17) supported (AMX can manage TILECONFIG)
+       0xd,         0,  eax,      18,    xcr0_tiledata          , XCR0.TILED=
ATA (bit 18) supported (AMX can manage TILEDATA)
+       0xd,         0,  ebx,    31:0,    xsave_sz_xcr0_enabled  , XSAVE/XRST=
R area byte size, for XCR0 enabled features
+       0xd,         0,  ecx,    31:0,    xsave_sz_max           , XSAVE/XRST=
R area max byte size, all CPU features
+       0xd,         0,  edx,      30,    xcr0_lwp               , AMD XCR0.L=
WP (bit 62) supported (Light-weight Profiling)
+       0xd,         1,  eax,       0,    xsaveopt               , XSAVEOPT i=
nstruction
+       0xd,         1,  eax,       1,    xsavec                 , XSAVEC ins=
truction
+       0xd,         1,  eax,       2,    xgetbv1                , XGETBV ins=
truction with ECX =3D 1
+       0xd,         1,  eax,       3,    xsaves                 , XSAVES/XRS=
TORS instructions (and XSS MSR)
+       0xd,         1,  eax,       4,    xfd                    , Extended f=
eature disable support
+       0xd,         1,  ebx,    31:0,    xsave_sz_xcr0_xmms_enabled, XSAVE a=
rea size, all XCR0 and XMMS features enabled
+       0xd,         1,  ecx,       8,    xss_pt                 , PT state, =
supported
+       0xd,         1,  ecx,      10,    xss_pasid              , PASID stat=
e, supported
+       0xd,         1,  ecx,      11,    xss_cet_u              , CET user s=
tate, supported
+       0xd,         1,  ecx,      12,    xss_cet_p              , CET superv=
isor state, supported
+       0xd,         1,  ecx,      13,    xss_hdc                , HDC state,=
 supported
+       0xd,         1,  ecx,      14,    xss_uintr              , UINTR stat=
e, supported
+       0xd,         1,  ecx,      15,    xss_lbr                , LBR state,=
 supported
+       0xd,         1,  ecx,      16,    xss_hwp                , HWP state,=
 supported
+       0xd,      63:2,  eax,    31:0,    xsave_sz               , Size of sa=
ve area for subleaf-N feature, in bytes
+       0xd,      63:2,  ebx,    31:0,    xsave_offset           , Offset of =
save area for subleaf-N feature, in bytes
+       0xd,      63:2,  ecx,       0,    is_xss_bit             , Subleaf N =
describes an XSS bit, otherwise XCR0 bit
+       0xd,      63:2,  ecx,       1,    compacted_xsave_64byte_aligned, Whe=
n compacted, subleaf-N feature xsave area is 64-byte aligned
+
+# Leaf FH
+# Intel RDT / AMD PQoS resource monitoring
+
+       0xf,         0,  ebx,    31:0,    core_rmid_max          , RMID max, =
within this core, all types (0-based)
+       0xf,         0,  edx,       1,    cqm_llc                , LLC QoS-mo=
nitoring supported
+       0xf,         1,  eax,     7:0,    l3c_qm_bitwidth        , L3 QoS-mon=
itoring counter bitwidth (24-based)
+       0xf,         1,  eax,       8,    l3c_qm_overflow_bit    , QM_CTR MSR=
 bit 61 is an overflow bit
+       0xf,         1,  ebx,    31:0,    l3c_qm_conver_factor   , QM_CTR MSR=
 conversion factor to bytes
+       0xf,         1,  ecx,    31:0,    l3c_qm_rmid_max        , L3 QoS-mon=
itoring max RMID
+       0xf,         1,  edx,       0,    cqm_occup_llc          , L3 QoS occ=
upancy monitoring supported
+       0xf,         1,  edx,       1,    cqm_mbm_total          , L3 QoS tot=
al bandwidth monitoring supported
+       0xf,         1,  edx,       2,    cqm_mbm_local          , L3 QoS loc=
al bandwidth monitoring supported
=20
 # Leaf 10H
-# Intel RDT Allocation
-
-      0x10,    0,  EBX,      1, l3c_rdt_alloc, L3 Cache Allocation supported
-      0x10,    0,  EBX,      2, l2c_rdt_alloc, L2 Cache Allocation supported
-      0x10,    0,  EBX,      3, mem_bw_alloc, Memory Bandwidth Allocation su=
pported
-
+# Intel RDT / AMD PQoS allocation enumeration
+
+      0x10,         0,  ebx,       1,    cat_l3                 , L3 Cache A=
llocation Technology supported
+      0x10,         0,  ebx,       2,    cat_l2                 , L2 Cache A=
llocation Technology supported
+      0x10,         0,  ebx,       3,    mba                    , Memory Ban=
dwidth Allocation supported
+      0x10,       2:1,  eax,     4:0,    cat_cbm_len            , L3/L2_CAT =
capacity bitmask length, minus-one notation
+      0x10,       2:1,  ebx,    31:0,    cat_units_bitmap       , L3/L2_CAT =
bitmap of allocation units
+      0x10,       2:1,  ecx,       1,    l3_cat_cos_infreq_updates, L3_CAT C=
OS updates should be infrequent
+      0x10,       2:1,  ecx,       2,    cdp_l3                 , L3/L2_CAT =
CDP (Code and Data Prioritization)
+      0x10,       2:1,  ecx,       3,    cat_sparse_1s          , L3/L2_CAT =
non-contiguous 1s value supported
+      0x10,       2:1,  edx,    15:0,    cat_cos_max            , L3/L2_CAT =
max COS (Class of Service) supported
+      0x10,         3,  eax,    11:0,    mba_max_delay          , Max MBA th=
rottling value; minus-one notation
+      0x10,         3,  ecx,       0,    per_thread_mba         , Per-thread=
 MBA controls are supported
+      0x10,         3,  ecx,       2,    mba_delay_linear       , Delay valu=
es are linear
+      0x10,         3,  edx,    15:0,    mba_cos_max            , MBA max Cl=
ass of Service supported
=20
 # Leaf 12H
-# SGX Capability
-#
-# Some detailed SGX features not added yet
-
-      0x12,    0,  EAX,      0, sgx1, L3 Cache Allocation supported
-      0x12,    1,  EAX,      0, sgx2, L3 Cache Allocation supported
-
+# Intel Software Guard Extensions (SGX) enumeration
+
+      0x12,         0,  eax,       0,    sgx1                   , SGX1 leaf =
functions supported
+      0x12,         0,  eax,       1,    sgx2                   , SGX2 leaf =
functions supported
+      0x12,         0,  eax,       5,    enclv_leaves           , ENCLV leav=
es (E{INC,DEC}VIRTCHILD, ESETCONTEXT) supported
+      0x12,         0,  eax,       6,    encls_leaves           , ENCLS leav=
es (ENCLS ETRACKC, ERDINFO, ELDBC, ELDUC) supported
+      0x12,         0,  eax,       7,    enclu_everifyreport2   , ENCLU leaf=
 EVERIFYREPORT2 supported
+      0x12,         0,  eax,      10,    encls_eupdatesvn       , ENCLS leaf=
 EUPDATESVN supported
+      0x12,         0,  eax,      11,    sgx_edeccssa           , ENCLU leaf=
 EDECCSSA supported
+      0x12,         0,  ebx,       0,    miscselect_exinfo      , SSA.MISC f=
rame: reporting #PF and #GP exceptions inside enclave supported
+      0x12,         0,  ebx,       1,    miscselect_cpinfo      , SSA.MISC f=
rame: reporting #CP exceptions inside enclave supported
+      0x12,         0,  edx,     7:0,    max_enclave_sz_not64   , Maximum en=
clave size in non-64-bit mode (log2)
+      0x12,         0,  edx,    15:8,    max_enclave_sz_64      , Maximum en=
clave size in 64-bit mode (log2)
+      0x12,         1,  eax,       0,    secs_attr_init         , ATTRIBUTES=
.INIT supported (enclave initialized by EINIT)
+      0x12,         1,  eax,       1,    secs_attr_debug        , ATTRIBUTES=
.DEBUG supported (enclave permits debugger read/write)
+      0x12,         1,  eax,       2,    secs_attr_mode64bit    , ATTRIBUTES=
.MODE64BIT supported (enclave runs in 64-bit mode)
+      0x12,         1,  eax,       4,    secs_attr_provisionkey , ATTRIBUTES=
.PROVISIONKEY supported (provisioning key available)
+      0x12,         1,  eax,       5,    secs_attr_einittoken_key, ATTRIBUTE=
S.EINITTOKEN_KEY supported (EINIT token key available)
+      0x12,         1,  eax,       6,    secs_attr_cet          , ATTRIBUTES=
.CET supported (enable CET attributes)
+      0x12,         1,  eax,       7,    secs_attr_kss          , ATTRIBUTES=
.KSS supported (Key Separation and Sharing enabled)
+      0x12,         1,  eax,      10,    secs_attr_aexnotify    , ATTRIBUTES=
.AEXNOTIFY supported (enclave threads may get AEX notifications
+      0x12,         1,  ecx,       0,    xfrm_x87               , Enclave XF=
RM.X87 (bit 0) supported
+      0x12,         1,  ecx,       1,    xfrm_sse               , Enclave XF=
RM.SEE (bit 1) supported
+      0x12,         1,  ecx,       2,    xfrm_avx               , Enclave XF=
RM.AVX (bit 2) supported
+      0x12,         1,  ecx,       3,    xfrm_mpx_bndregs       , Enclave XF=
RM.BNDREGS (bit 3) supported (MPX BND0-BND3 regs)
+      0x12,         1,  ecx,       4,    xfrm_mpx_bndcsr        , Enclave XF=
RM.BNDCSR (bit 4) supported (MPX BNDCFGU/BNDSTATUS regs)
+      0x12,         1,  ecx,       5,    xfrm_avx512_opmask     , Enclave XF=
RM.OPMASK (bit 5) supported (AVX-512 k0-k7 regs)
+      0x12,         1,  ecx,       6,    xfrm_avx512_zmm_hi256  , Enclave XF=
RM.ZMM_Hi256 (bit 6) supported (AVX-512 ZMM0->ZMM7/15 regs)
+      0x12,         1,  ecx,       7,    xfrm_avx512_hi16_zmm   , Enclave XF=
RM.HI16_ZMM (bit 7) supported (AVX-512 ZMM16->ZMM31 regs)
+      0x12,         1,  ecx,       9,    xfrm_pkru              , Enclave XF=
RM.PKRU (bit 9) supported (XSAVE PKRU reg)
+      0x12,         1,  ecx,      17,    xfrm_tileconfig        , Enclave XF=
RM.TILECONFIG (bit 17) supported (AMX can manage TILECONFIG)
+      0x12,         1,  ecx,      18,    xfrm_tiledata          , Enclave XF=
RM.TILEDATA (bit 18) supported (AMX can manage TILEDATA)
+      0x12,      31:2,  eax,     3:0,    subleaf_type           , Subleaf ty=
pe (dictates output layout)
+      0x12,      31:2,  eax,   31:12,    epc_sec_base_addr_0    , EPC sectio=
n base addr, bits[12:31]
+      0x12,      31:2,  ebx,    19:0,    epc_sec_base_addr_1    , EPC sectio=
n base addr, bits[32:51]
+      0x12,      31:2,  ecx,     3:0,    epc_sec_type           , EPC sectio=
n type / property encoding
+      0x12,      31:2,  ecx,   31:12,    epc_sec_size_0         , EPC sectio=
n size, bits[12:31]
+      0x12,      31:2,  edx,    19:0,    epc_sec_size_1         , EPC sectio=
n size, bits[32:51]
=20
 # Leaf 14H
-# Intel Processor Tracer
-#
+# Intel Processor Trace enumeration
+
+      0x14,         0,  eax,    31:0,    pt_max_subleaf         , Max cpuid =
0x14 subleaf
+      0x14,         0,  ebx,       0,    cr3_filtering          , IA32_RTIT_=
CR3_MATCH is accessible
+      0x14,         0,  ebx,       1,    psb_cyc                , Configurab=
le PSB and cycle-accurate mode
+      0x14,         0,  ebx,       2,    ip_filtering           , IP/TraceSt=
op filtering; Warm-reset PT MSRs preservation
+      0x14,         0,  ebx,       3,    mtc_timing             , MTC timing=
 packet; COFI-based packets suppression
+      0x14,         0,  ebx,       4,    ptwrite                , PTWRITE su=
pport
+      0x14,         0,  ebx,       5,    power_event_trace      , Power Even=
t Trace support
+      0x14,         0,  ebx,       6,    psb_pmi_preserve       , PSB and PM=
I preservation support
+      0x14,         0,  ebx,       7,    event_trace            , Event Trac=
e packet generation through IA32_RTIT_CTL.EventEn
+      0x14,         0,  ebx,       8,    tnt_disable            , TNT packet=
 generation disable through IA32_RTIT_CTL.DisTNT
+      0x14,         0,  ecx,       0,    topa_output            , ToPA outpu=
t scheme support
+      0x14,         0,  ecx,       1,    topa_multiple_entries  , ToPA table=
s can hold multiple entries
+      0x14,         0,  ecx,       2,    single_range_output    , Single-ran=
ge output scheme supported
+      0x14,         0,  ecx,       3,    trance_transport_output, Trace Tran=
sport subsystem output support
+      0x14,         0,  ecx,      31,    ip_payloads_lip        , IP payload=
s have LIP values (CS base included)
+      0x14,         1,  eax,     2:0,    num_address_ranges     , Filtering =
number of configurable Address Ranges
+      0x14,         1,  eax,   31:16,    mtc_periods_bmp        , Bitmap of =
supported MTC period encodings
+      0x14,         1,  ebx,    15:0,    cycle_thresholds_bmp   , Bitmap of =
supported Cycle Threshold encodings
+      0x14,         1,  ebx,   31:16,    psb_periods_bmp        , Bitmap of =
supported Configurable PSB frequency encodings
=20
 # Leaf 15H
-# Time Stamp Counter and Nominal Core Crystal Clock Information
+# Intel TSC (Time Stamp Counter) enumeration
=20
-      0x15,    0,  EAX,   31:0, tsc_denominator, The denominator of the TSC/=
=E2=80=9Dcore crystal clock=E2=80=9D ratio
-      0x15,    0,  EBX,   31:0, tsc_numerator, The numerator of the TSC/=E2=
=80=9Dcore crystal clock=E2=80=9D ratio
-      0x15,    0,  ECX,   31:0, nom_freq, Nominal frequency of the core crys=
tal clock in Hz
+      0x15,         0,  eax,    31:0,    tsc_denominator        , Denominato=
r of the TSC/'core crystal clock' ratio
+      0x15,         0,  ebx,    31:0,    tsc_numerator          , Numerator =
of the TSC/'core crystal clock' ratio
+      0x15,         0,  ecx,    31:0,    cpu_crystal_hz         , Core cryst=
al clock nominal frequency, in Hz
=20
 # Leaf 16H
-# Processor Frequency Information
+# Intel processor fequency enumeration
=20
-      0x16,    0,  EAX,   15:0, cpu_base_freq, Processor Base Frequency in M=
Hz
-      0x16,    0,  EBX,   15:0, cpu_max_freq, Maximum Frequency in MHz
-      0x16,    0,  ECX,   15:0, bus_freq, Bus (Reference) Frequency in MHz
+      0x16,         0,  eax,    15:0,    cpu_base_mhz           , Processor =
base frequency, in MHz
+      0x16,         0,  ebx,    15:0,    cpu_max_mhz            , Processor =
max frequency, in MHz
+      0x16,         0,  ecx,    15:0,    bus_mhz                , Bus refere=
nce frequency, in MHz
=20
 # Leaf 17H
-# System-On-Chip Vendor Attribute
-
-      0x17,    0,  EAX,   31:0, max_socid, Maximum input value of supported =
sub-leaf
-      0x17,    0,  EBX,   15:0, soc_vid, SOC Vendor ID
-      0x17,    0,  EBX,     16, std_vid, SOC Vendor ID is assigned via an in=
dustry standard scheme
-      0x17,    0,  ECX,   31:0, soc_pid, SOC Project ID assigned by vendor
-      0x17,    0,  EDX,   31:0, soc_sid, SOC Stepping ID
+# Intel SoC vendor attributes enumeration
+
+      0x17,         0,  eax,    31:0,    soc_max_subleaf        , Max cpuid =
leaf 0x17 subleaf
+      0x17,         0,  ebx,    15:0,    soc_vendor_id          , SoC vendor=
 ID
+      0x17,         0,  ebx,      16,    is_vendor_scheme       , Assigned b=
y industry enumaeratoion scheme (not Intel)
+      0x17,         0,  ecx,    31:0,    soc_proj_id            , SoC projec=
t ID, assigned by vendor
+      0x17,         0,  edx,    31:0,    soc_stepping_id        , Soc projec=
t stepping ID, assigned by vendor
+      0x17,       3:1,  eax,    31:0,    vendor_brand_a         , Vendor Bra=
nd ID string, bytes subleaf_nr * (0 -> 3)
+      0x17,       3:1,  ebx,    31:0,    vendor_brand_b         , Vendor Bra=
nd ID string, bytes subleaf_nr * (4 -> 7)
+      0x17,       3:1,  ecx,    31:0,    vendor_brand_c         , Vendor Bra=
nd ID string, bytes subleaf_nr * (8 -> 11)
+      0x17,       3:1,  edx,    31:0,    vendor_brand_d         , Vendor Bra=
nd ID string, bytes subleaf_nr * (12 -> 15)
=20
 # Leaf 18H
-# Deterministic Address Translation Parameters
-
+# Intel determenestic address translation (TLB) parameters
+
+      0x18,      31:0,  eax,    31:0,    tlb_max_subleaf        , Max cpuid =
0x18 subleaf
+      0x18,      31:0,  ebx,       0,    tlb_4k_page            , TLB 4KB-pa=
ge entries supported
+      0x18,      31:0,  ebx,       1,    tlb_2m_page            , TLB 2MB-pa=
ge entries supported
+      0x18,      31:0,  ebx,       2,    tlb_4m_page            , TLB 4MB-pa=
ge entries supported
+      0x18,      31:0,  ebx,       3,    tlb_1g_page            , TLB 1GB-pa=
ge entries supported
+      0x18,      31:0,  ebx,    10:8,    hard_partitioning      , (Hard/Soft=
) partitioning between logical CPUs sharing this struct
+      0x18,      31:0,  ebx,   31:16,    n_way_associative      , Ways of as=
sociativity
+      0x18,      31:0,  ecx,    31:0,    n_sets                 , Number of =
sets
+      0x18,      31:0,  edx,     4:0,    tlb_type               , Translatio=
n cache type (TLB type)
+      0x18,      31:0,  edx,     7:5,    tlb_cache_level        , Translatio=
n cache level (1-based)
+      0x18,      31:0,  edx,       8,    is_fully_associative   , Fully-asso=
ciative structure
+      0x18,      31:0,  edx,   25:14,    tlb_max_addressible_ids, Max num of=
 addressible IDs for logical CPUs sharing this TLB - 1
=20
 # Leaf 19H
-# Key Locker Leaf
+# Intel Key Locker enumeration
=20
+      0x19,         0,  eax,       0,    kl_cpl0_only           , CPL0-only =
key Locker restriction supported
+      0x19,         0,  eax,       1,    kl_no_encrypt          , No-encrypt=
 key locker restriction supported
+      0x19,         0,  eax,       2,    kl_no_decrypt          , No-decrypt=
 key locker restriction supported
+      0x19,         0,  ebx,       0,    aes_keylocker          , AES key lo=
cker instructions supported
+      0x19,         0,  ebx,       2,    aes_keylocker_wide     , AES wide k=
ey locker instructions supported
+      0x19,         0,  ebx,       4,    kl_msr_iwkey           , Key locker=
 MSRs and IWKEY backups supported
+      0x19,         0,  ecx,       0,    loadiwkey_no_backup    , LOADIWKEY =
NoBackup parameter supported
+      0x19,         0,  ecx,       1,    iwkey_rand             , IWKEY rand=
omization (KeySource encoding 1) supported
=20
 # Leaf 1AH
-# Hybrid Information
-
-      0x1A,    0,  EAX,  31:24, core_type, 20H-Intel_Atom 40H-Intel_Core
-
+# Intel hybrid CPUs identification (e.g. Atom, Core)
+
+      0x1a,         0,  eax,    23:0,    core_native_model      , This core'=
s native model ID
+      0x1a,         0,  eax,   31:24,    core_type              , This core'=
s type
+
+# Leaf 1BH
+# Intel PCONFIG (Platform configuration) enumeration
+
+      0x1b,      31:0,  eax,    11:0,    pconfig_subleaf_type   , CPUID 0x1b=
 subleaf type
+      0x1b,      31:0,  ebx,    31:0,    pconfig_target_id_x    , A supporte=
d PCONFIG target ID
+      0x1b,      31:0,  ecx,    31:0,    pconfig_target_id_y    , A supporte=
d PCONFIG target ID
+      0x1b,      31:0,  edx,    31:0,    pconfig_target_id_z    , A supporte=
d PCONFIG target ID
+
+# Leaf 1CH
+# Intel LBR (Last Branch Record) enumeration
+
+      0x1c,         0,  eax,       0,    lbr_depth_8            , Max stack =
depth (number of LBR entries) =3D 8
+      0x1c,         0,  eax,       1,    lbr_depth_16           , Max stack =
depth (number of LBR entries) =3D 16
+      0x1c,         0,  eax,       2,    lbr_depth_24           , Max stack =
depth (number of LBR entries) =3D 24
+      0x1c,         0,  eax,       3,    lbr_depth_32           , Max stack =
depth (number of LBR entries) =3D 32
+      0x1c,         0,  eax,       4,    lbr_depth_40           , Max stack =
depth (number of LBR entries) =3D 40
+      0x1c,         0,  eax,       5,    lbr_depth_48           , Max stack =
depth (number of LBR entries) =3D 48
+      0x1c,         0,  eax,       6,    lbr_depth_56           , Max stack =
depth (number of LBR entries) =3D 56
+      0x1c,         0,  eax,       7,    lbr_depth_64           , Max stack =
depth (number of LBR entries) =3D 64
+      0x1c,         0,  eax,      30,    lbr_deep_c_reset       , LBRs maybe=
 cleared on MWAIT C-state > C1
+      0x1c,         0,  eax,      31,    lbr_ip_is_lip          , LBR IP con=
tain Last IP, otherwise effective IP
+      0x1c,         0,  ebx,       0,    lbr_cpl                , CPL filter=
ing (non-zero IA32_LBR_CTL[2:1]) supported
+      0x1c,         0,  ebx,       1,    lbr_branch_filter      , Branch fil=
tering (non-zero IA32_LBR_CTL[22:16]) supported
+      0x1c,         0,  ebx,       2,    lbr_call_stack         , Call-stack=
 mode (IA32_LBR_CTL[3] =3D 1) supported
+      0x1c,         0,  ecx,       0,    lbr_mispredict         , Branch mis=
prediction bit supported (IA32_LBR_x_INFO[63])
+      0x1c,         0,  ecx,       1,    lbr_timed_lbr          , Timed LBRs=
 (CPU cycles since last LBR entry) supported
+      0x1c,         0,  ecx,       2,    lbr_branch_type        , Branch typ=
e field (IA32_LBR_INFO_x[59:56]) supported
+      0x1c,         0,  ecx,   19:16,    lbr_events_gpc_bmp     , LBR PMU-ev=
ents logging support; bitmap for first 4 GP (general-purpose) Counters
+
+# Leaf 1DH
+# Intel AMX (Advanced Matrix Extensions) tile information
+
+      0x1d,         0,  eax,    31:0,    amx_max_palette        , Highest pa=
lette ID / subleaf ID
+      0x1d,         1,  eax,    15:0,    amx_palette_size       , AMX palett=
e total tiles size, in bytes
+      0x1d,         1,  eax,   31:16,    amx_tile_size          , AMX single=
 tile's size, in bytes
+      0x1d,         1,  ebx,    15:0,    amx_tile_row_size      , AMX tile s=
ingle row's size, in bytes
+      0x1d,         1,  ebx,   31:16,    amx_palette_nr_tiles   , AMX palett=
e number of tiles
+      0x1d,         1,  ecx,    15:0,    amx_tile_nr_rows       , AMX tile m=
ax number of rows
+
+# Leaf 1EH
+# Intel AMX, TMUL (Tile-matrix MULtiply) accelerator unit enumeration
+
+      0x1e,         0,  ebx,     7:0,    tmul_maxk              , TMUL unit =
maximum height, K (rows or columns)
+      0x1e,         0,  ebx,    23:8,    tmul_maxn              , TMUL unit =
maxiumum SIMD dimension, N (column bytes)
=20
 # Leaf 1FH
-# V2 Extended Topology - A preferred superset to leaf 0BH
-
-
-# According to SDM
-# 40000000H - 4FFFFFFFH is invalid range
+# Intel extended topology enumeration v2
+
+      0x1f,       5:0,  eax,     4:0,    x2apic_id_shift        , Bit width =
of this level (previous levels inclusive)
+      0x1f,       5:0,  ebx,    15:0,    domain_lcpus_count     , Logical CP=
Us count across all instances of this domain
+      0x1f,       5:0,  ecx,     7:0,    domain_level           , This domai=
n level (subleaf ID)
+      0x1f,       5:0,  ecx,    15:8,    domain_type            , This domai=
n type
+      0x1f,       5:0,  edx,    31:0,    x2apic_id              , x2APIC ID =
of current logical CPU
+
+# Leaf 20H
+# Intel HRESET (History Reset) enumeration
+
+      0x20,         0,  eax,    31:0,    hreset_nr_subleaves    , CPUID 0x20=
 max subleaf + 1
+      0x20,         0,  ebx,       0,    hreset_thread_director , HRESET of =
Intel thread director is supported
+
+# Leaf 21H
+# Intel TD (Trust Domain) guest execution environment enumeration
+
+      0x21,         0,  ebx,    31:0,    tdx_vendorid_0         , TDX vendor=
 ID string bytes 0 - 3
+      0x21,         0,  ecx,    31:0,    tdx_vendorid_2         , CPU vendor=
 ID string bytes 8 - 11
+      0x21,         0,  edx,    31:0,    tdx_vendorid_1         , CPU vendor=
 ID string bytes 4 - 7
+
+# Leaf 23H
+# Intel Architectural Performance Monitoring Extended (ArchPerfmonExt)
+
+      0x23,         0,  eax,       1,    subleaf_1_counters     , Subleaf 1,=
 PMU counters bitmaps, is valid
+      0x23,         0,  eax,       3,    subleaf_3_events       , Subleaf 3,=
 PMU events bitmaps, is valid
+      0x23,         0,  ebx,       0,    unitmask2              , IA32_PERFE=
VTSELx MSRs UnitMask2 is supported
+      0x23,         0,  ebx,       1,    zbit                   , IA32_PERFE=
VTSELx MSRs Z-bit is supported
+      0x23,         1,  eax,    31:0,    pmu_gp_counters_bitmap , General-pu=
rpose PMU counters bitmap
+      0x23,         1,  ebx,    31:0,    pmu_f_counters_bitmap  , Fixed PMU =
counters bitmap
+      0x23,         3,  eax,       0,    core_cycles_evt        , Core cycle=
s event supported
+      0x23,         3,  eax,       1,    insn_retired_evt       , Instructio=
ns retired event supported
+      0x23,         3,  eax,       2,    ref_cycles_evt         , Reference =
cycles event supported
+      0x23,         3,  eax,       3,    llc_refs_evt           , Last-level=
 cache references event supported
+      0x23,         3,  eax,       4,    llc_misses_evt         , Last-level=
 cache misses event supported
+      0x23,         3,  eax,       5,    br_insn_ret_evt        , Branch ins=
truction retired event supported
+      0x23,         3,  eax,       6,    br_mispr_evt           , Branch mis=
predict retired event supported
+      0x23,         3,  eax,       7,    td_slots_evt           , Topdown sl=
ots event supported
+      0x23,         3,  eax,       8,    td_backend_bound_evt   , Topdown ba=
ckend bound event supported
+      0x23,         3,  eax,       9,    td_bad_spec_evt        , Topdown ba=
d speculation event supported
+      0x23,         3,  eax,      10,    td_frontend_bound_evt  , Topdown fr=
ontend bound event supported
+      0x23,         3,  eax,      11,    td_retiring_evt        , Topdown re=
tiring event support
+
+# Leaf 40000000H
+# Maximum hypervisor standard leaf + hypervisor vendor string
+
+0x40000000,         0,  eax,    31:0,    max_hyp_leaf           , Maximum hy=
pervisor standard leaf number
+0x40000000,         0,  ebx,    31:0,    hypervisor_id_0        , Hypervisor=
 ID string bytes 0 - 3
+0x40000000,         0,  ecx,    31:0,    hypervisor_id_1        , Hypervisor=
 ID string bytes 4 - 7
+0x40000000,         0,  edx,    31:0,    hypervisor_id_2        , Hypervisor=
 ID string bytes 8 - 11
+
+# Leaf 80000000H
+# Maximum extended leaf number + CPU vendor string (AMD)
+
+0x80000000,         0,  eax,    31:0,    max_ext_leaf           , Maximum ex=
tended cpuid leaf supported
+0x80000000,         0,  ebx,    31:0,    cpu_vendorid_0         , Vendor ID =
string bytes 0 - 3
+0x80000000,         0,  ecx,    31:0,    cpu_vendorid_2         , Vendor ID =
string bytes 8 - 11
+0x80000000,         0,  edx,    31:0,    cpu_vendorid_1         , Vendor ID =
string bytes 4 - 7
=20
 # Leaf 80000001H
-# Extended Processor Signature and Feature Bits
-
-0x80000001,    0,  EAX,  27:20, extfamily, Extended family
-0x80000001,    0,  EAX,  19:16, extmodel, Extended model
-0x80000001,    0,  EAX,   11:8, basefamily, Description of Family
-0x80000001,    0,  EAX,   11:8, basemodel, Model numbers vary with product
-0x80000001,    0,  EAX,    3:0, stepping, Processor stepping (revision) for =
a specific model
-
-0x80000001,    0,  EBX,  31:28, pkgtype, Specifies the package type
-
-0x80000001,    0,  ECX,      0, lahf_lm, LAHF/SAHF available in 64-bit mode
-0x80000001,    0,  ECX,      1, cmplegacy, Core multi-processing legacy mode
-0x80000001,    0,  ECX,      2, svm, Indicates support for: VMRUN, VMLOAD, V=
MSAVE, CLGI, VMMCALL, and INVLPGA
-0x80000001,    0,  ECX,      3, extapicspace, Extended APIC register space
-0x80000001,    0,  ECX,      4, altmovecr8, Indicates support for LOCK MOV C=
R0 means MOV CR8
-0x80000001,    0,  ECX,      5, lzcnt, LZCNT
-0x80000001,    0,  ECX,      6, sse4a, EXTRQ, INSERTQ, MOVNTSS, and MOVNTSD =
instruction support
-0x80000001,    0,  ECX,      7, misalignsse, Misaligned SSE Mode
-0x80000001,    0,  ECX,      8, prefetchw, PREFETCHW
-0x80000001,    0,  ECX,      9, osvw, OS Visible Work-around support
-0x80000001,    0,  ECX,     10, ibs, Instruction Based Sampling
-0x80000001,    0,  ECX,     11, xop, Extended operation support
-0x80000001,    0,  ECX,     12, skinit, SKINIT and STGI support
-0x80000001,    0,  ECX,     13, wdt, Watchdog timer support
-0x80000001,    0,  ECX,     15, lwp, Lightweight profiling support
-0x80000001,    0,  ECX,     16, fma4, Four-operand FMA instruction support
-0x80000001,    0,  ECX,     17, tce, Translation cache extension
-0x80000001,    0,  ECX,     22, TopologyExtensions, Indicates support for Co=
re::X86::Cpuid::CachePropEax0 and Core::X86::Cpuid::ExtApicId
-0x80000001,    0,  ECX,     23, perfctrextcore, Indicates support for Core::=
X86::Msr::PERF_CTL0 - 5 and Core::X86::Msr::PERF_CTR
-0x80000001,    0,  ECX,     24, perfctrextdf, Indicates support for Core::X8=
6::Msr::DF_PERF_CTL and Core::X86::Msr::DF_PERF_CTR
-0x80000001,    0,  ECX,     26, databreakpointextension, Indicates data brea=
kpoint support for Core::X86::Msr::DR0_ADDR_MASK, Core::X86::Msr::DR1_ADDR_MA=
SK, Core::X86::Msr::DR2_ADDR_MASK and Core::X86::Msr::DR3_ADDR_MASK
-0x80000001,    0,  ECX,     27, perftsc, Performance time-stamp counter supp=
orted
-0x80000001,    0,  ECX,     28, perfctrextllc, Indicates support for L3 perf=
ormance counter extensions
-0x80000001,    0,  ECX,     29, mwaitextended, MWAITX and MONITORX capabilit=
y is supported
-0x80000001,    0,  ECX,     30, admskextn, Indicates support for address mas=
k extension (to 32 bits and to all 4 DRs) for instruction breakpoints
-
-0x80000001,    0,  EDX,      0, fpu, x87 floating point unit on-chip
-0x80000001,    0,  EDX,      1, vme, Virtual-mode enhancements
-0x80000001,    0,  EDX,      2, de, Debugging extensions, IO breakpoints, CR=
4.DE
-0x80000001,    0,  EDX,      3, pse, Page-size extensions (4 MB pages)
-0x80000001,    0,  EDX,      4, tsc, Time stamp counter, RDTSC/RDTSCP instru=
ctions, CR4.TSD
-0x80000001,    0,  EDX,      5, msr, Model-specific registers (MSRs), with R=
DMSR and WRMSR instructions
-0x80000001,    0,  EDX,      6, pae, Physical-address extensions (PAE)
-0x80000001,    0,  EDX,      7, mce, Machine Check Exception, CR4.MCE
-0x80000001,    0,  EDX,      8, cmpxchg8b, CMPXCHG8B instruction
-0x80000001,    0,  EDX,      9, apic, advanced programmable interrupt contro=
ller (APIC) exists and is enabled
-0x80000001,    0,  EDX,     11, sysret, SYSCALL/SYSRET supported
-0x80000001,    0,  EDX,     12, mtrr, Memory-type range registers
-0x80000001,    0,  EDX,     13, pge, Page global extension, CR4.PGE
-0x80000001,    0,  EDX,     14, mca, Machine check architecture, MCG_CAP
-0x80000001,    0,  EDX,     15, cmov, Conditional move instructions, CMOV, F=
COMI, FCMOV
-0x80000001,    0,  EDX,     16, pat, Page attribute table
-0x80000001,    0,  EDX,     17, pse36, Page-size extensions
-0x80000001,    0,  EDX,     20, exec_dis, Execute Disable Bit available
-0x80000001,    0,  EDX,     22, mmxext, AMD extensions to MMX instructions
-0x80000001,    0,  EDX,     23, mmx, MMX instructions
-0x80000001,    0,  EDX,     24, fxsr, FXSAVE and FXRSTOR instructions
-0x80000001,    0,  EDX,     25, ffxsr, FXSAVE and FXRSTOR instruction optimi=
zations
-0x80000001,    0,  EDX,     26, 1gb_page, 1GB page supported
-0x80000001,    0,  EDX,     27, rdtscp, RDTSCP and IA32_TSC_AUX are available
-0x80000001,    0,  EDX,     29, lm, 64b Architecture supported
-0x80000001,    0,  EDX,     30, threednowext, AMD extensions to 3DNow! instr=
uctions
-0x80000001,    0,  EDX,     31, threednow, 3DNow! instructions
-
-# Leaf 80000002H/80000003H/80000004H
-# Processor Brand String
+# Extended CPU feature identifiers
+
+0x80000001,         0,  eax,     3:0,    e_stepping_id          , Stepping ID
+0x80000001,         0,  eax,     7:4,    e_base_model           , Base proce=
ssor model
+0x80000001,         0,  eax,    11:8,    e_base_family          , Base proce=
ssor family
+0x80000001,         0,  eax,   19:16,    e_ext_model            , Extended p=
rocessor model
+0x80000001,         0,  eax,   27:20,    e_ext_family           , Extended p=
rocessor family
+0x80000001,         0,  ebx,    15:0,    brand_id               , Brand ID
+0x80000001,         0,  ebx,   31:28,    pkg_type               , Package ty=
pe
+0x80000001,         0,  ecx,       0,    lahf_lm                , LAHF and S=
AHF in 64-bit mode
+0x80000001,         0,  ecx,       1,    cmp_legacy             , Multi-proc=
essing legacy mode (No HT)
+0x80000001,         0,  ecx,       2,    svm                    , Secure Vir=
tual Machine
+0x80000001,         0,  ecx,       3,    extapic                , Extended A=
PIC space
+0x80000001,         0,  ecx,       4,    cr8_legacy             , LOCK MOV C=
R0 means MOV CR8
+0x80000001,         0,  ecx,       5,    abm                    , LZCNT adva=
nced bit manipulation
+0x80000001,         0,  ecx,       6,    sse4a                  , SSE4A supp=
ort
+0x80000001,         0,  ecx,       7,    misalignsse            , Misaligned=
 SSE mode
+0x80000001,         0,  ecx,       8,    3dnowprefetch          , 3DNow PREF=
ETCH/PREFETCHW support
+0x80000001,         0,  ecx,       9,    osvw                   , OS visible=
 workaround
+0x80000001,         0,  ecx,      10,    ibs                    , Instructio=
n based sampling
+0x80000001,         0,  ecx,      11,    xop                    , XOP: exten=
ded operation (AVX instructions)
+0x80000001,         0,  ecx,      12,    skinit                 , SKINIT/STG=
I support
+0x80000001,         0,  ecx,      13,    wdt                    , Watchdog t=
imer support
+0x80000001,         0,  ecx,      15,    lwp                    , Lightweigh=
t profiling
+0x80000001,         0,  ecx,      16,    fma4                   , 4-operand =
FMA instruction
+0x80000001,         0,  ecx,      17,    tce                    , Translatio=
n cache extension
+0x80000001,         0,  ecx,      19,    nodeid_msr             , NodeId MSR=
 (0xc001100c)
+0x80000001,         0,  ecx,      21,    tbm                    , Trailing b=
it manipulations
+0x80000001,         0,  ecx,      22,    topoext                , Topology E=
xtensions (cpuid leaf 0x8000001d)
+0x80000001,         0,  ecx,      23,    perfctr_core           , Core perfo=
rmance counter extensions
+0x80000001,         0,  ecx,      24,    perfctr_nb             , NB/DF perf=
ormance counter extensions
+0x80000001,         0,  ecx,      26,    bpext                  , Data acces=
s breakpoint extension
+0x80000001,         0,  ecx,      27,    ptsc                   , Performanc=
e time-stamp counter
+0x80000001,         0,  ecx,      28,    perfctr_llc            , LLC (L3) p=
erformance counter extensions
+0x80000001,         0,  ecx,      29,    mwaitx                 , MWAITX/MON=
ITORX support
+0x80000001,         0,  ecx,      30,    addr_mask_ext          , Breakpoint=
 address mask extension (to bit 31)
+0x80000001,         0,  edx,       0,    e_fpu                  , Floating-P=
oint Unit on-chip (x87)
+0x80000001,         0,  edx,       1,    e_vme                  , Virtual-80=
86 Mode Extensions
+0x80000001,         0,  edx,       2,    e_de                   , Debugging =
Extensions
+0x80000001,         0,  edx,       3,    e_pse                  , Page Size =
Extension
+0x80000001,         0,  edx,       4,    e_tsc                  , Time Stamp=
 Counter
+0x80000001,         0,  edx,       5,    e_msr                  , Model-Spec=
ific Registers (RDMSR and WRMSR support)
+0x80000001,         0,  edx,       6,    pae                    , Physical A=
ddress Extensions
+0x80000001,         0,  edx,       7,    mce                    , Machine Ch=
eck Exception
+0x80000001,         0,  edx,       8,    cx8                    , CMPXCHG8B =
instruction
+0x80000001,         0,  edx,       9,    apic                   , APIC on-ch=
ip
+0x80000001,         0,  edx,      11,    syscall                , SYSCALL an=
d SYSRET instructions
+0x80000001,         0,  edx,      12,    mtrr                   , Memory Typ=
e Range Registers
+0x80000001,         0,  edx,      13,    pge                    , Page Globa=
l Extensions
+0x80000001,         0,  edx,      14,    mca                    , Machine Ch=
eck Architecture
+0x80000001,         0,  edx,      15,    cmov                   , Conditiona=
l Move Instruction
+0x80000001,         0,  edx,      16,    pat                    , Page Attri=
bute Table
+0x80000001,         0,  edx,      17,    pse36                  , Page Size =
Extension (36-bit)
+0x80000001,         0,  edx,      19,    mp                     , Out-of-spe=
c AMD Multiprocessing bit
+0x80000001,         0,  edx,      20,    nx                     , No-execute=
 page protection
+0x80000001,         0,  edx,      22,    mmxext                 , AMD MMX ex=
tensions
+0x80000001,         0,  edx,      24,    e_fxsr                 , FXSAVE and=
 FXRSTOR instructions
+0x80000001,         0,  edx,      25,    fxsr_opt               , FXSAVE and=
 FXRSTOR optimizations
+0x80000001,         0,  edx,      26,    pdpe1gb                , 1-GB large=
 page support
+0x80000001,         0,  edx,      27,    rdtscp                 , RDTSCP ins=
truction
+0x80000001,         0,  edx,      29,    lm                     , Long mode =
(x86-64, 64-bit support)
+0x80000001,         0,  edx,      30,    3dnowext               , AMD 3DNow =
extensions
+0x80000001,         0,  edx,      31,    3dnow                  , 3DNow inst=
ructions
+
+# Leaf 80000002H
+# CPU brand ID string, bytes 0 - 15
+
+0x80000002,         0,  eax,    31:0,    cpu_brandid_0          , CPU brand =
ID string, bytes 0 - 3
+0x80000002,         0,  ebx,    31:0,    cpu_brandid_1          , CPU brand =
ID string, bytes 4 - 7
+0x80000002,         0,  ecx,    31:0,    cpu_brandid_2          , CPU brand =
ID string, bytes 8 - 11
+0x80000002,         0,  edx,    31:0,    cpu_brandid_3          , CPU brand =
ID string, bytes 12 - 15
+
+# Leaf 80000003H
+# CPU brand ID string, bytes 16 - 31
+
+0x80000003,         0,  eax,    31:0,    cpu_brandid_4          , CPU brand =
ID string bytes, 16 - 19
+0x80000003,         0,  ebx,    31:0,    cpu_brandid_5          , CPU brand =
ID string bytes, 20 - 23
+0x80000003,         0,  ecx,    31:0,    cpu_brandid_6          , CPU brand =
ID string bytes, 24 - 27
+0x80000003,         0,  edx,    31:0,    cpu_brandid_7          , CPU brand =
ID string bytes, 28 - 31
+
+# Leaf 80000004H
+# CPU brand ID string, bytes 32 - 47
+
+0x80000004,         0,  eax,    31:0,    cpu_brandid_8          , CPU brand =
ID string, bytes 32 - 35
+0x80000004,         0,  ebx,    31:0,    cpu_brandid_9          , CPU brand =
ID string, bytes 36 - 39
+0x80000004,         0,  ecx,    31:0,    cpu_brandid_10         , CPU brand =
ID string, bytes 40 - 43
+0x80000004,         0,  edx,    31:0,    cpu_brandid_11         , CPU brand =
ID string, bytes 44 - 47
=20
 # Leaf 80000005H
-# Reserved
+# AMD L1 cache and L1 TLB enumeration
+
+0x80000005,         0,  eax,     7:0,    l1_itlb_2m_4m_nentries , L1 ITLB #e=
ntires, 2M and 4M pages
+0x80000005,         0,  eax,    15:8,    l1_itlb_2m_4m_assoc    , L1 ITLB as=
sociativity, 2M and 4M pages
+0x80000005,         0,  eax,   23:16,    l1_dtlb_2m_4m_nentries , L1 DTLB #e=
ntires, 2M and 4M pages
+0x80000005,         0,  eax,   31:24,    l1_dtlb_2m_4m_assoc    , L1 DTLB as=
sociativity, 2M and 4M pages
+0x80000005,         0,  ebx,     7:0,    l1_itlb_4k_nentries    , L1 ITLB #e=
ntries, 4K pages
+0x80000005,         0,  ebx,    15:8,    l1_itlb_4k_assoc       , L1 ITLB as=
sociativity, 4K pages
+0x80000005,         0,  ebx,   23:16,    l1_dtlb_4k_nentries    , L1 DTLB #e=
ntries, 4K pages
+0x80000005,         0,  ebx,   31:24,    l1_dtlb_4k_assoc       , L1 DTLB as=
sociativity, 4K pages
+0x80000005,         0,  ecx,     7:0,    l1_dcache_line_size    , L1 dcache =
line size, in bytes
+0x80000005,         0,  ecx,    15:8,    l1_dcache_nlines       , L1 dcache =
lines per tag
+0x80000005,         0,  ecx,   23:16,    l1_dcache_assoc        , L1 dcache =
associativity
+0x80000005,         0,  ecx,   31:24,    l1_dcache_size_kb      , L1 dcache =
size, in KB
+0x80000005,         0,  edx,     7:0,    l1_icache_line_size    , L1 icache =
line size, in bytes
+0x80000005,         0,  edx,    15:8,    l1_icache_nlines       , L1 icache =
lines per tag
+0x80000005,         0,  edx,   23:16,    l1_icache_assoc        , L1 icache =
associativity
+0x80000005,         0,  edx,   31:24,    l1_icache_size_kb      , L1 icache =
size, in KB
=20
 # Leaf 80000006H
-# Extended L2 Cache Features
-
-0x80000006,    0,  ECX,    7:0, clsize, Cache Line size in bytes
-0x80000006,    0,  ECX,  15:12, l2c_assoc, L2 Associativity
-0x80000006,    0,  ECX,  31:16, csize, Cache size in 1K units
-
+# (Mostly AMD) L2 TLB, L2 cache, and L3 cache enumeration
+
+0x80000006,         0,  eax,    11:0,    l2_itlb_2m_4m_nentries , L2 iTLB #e=
ntries, 2M and 4M pages
+0x80000006,         0,  eax,   15:12,    l2_itlb_2m_4m_assoc    , L2 iTLB as=
sociativity, 2M and 4M pages
+0x80000006,         0,  eax,   27:16,    l2_dtlb_2m_4m_nentries , L2 dTLB #e=
ntries, 2M and 4M pages
+0x80000006,         0,  eax,   31:28,    l2_dtlb_2m_4m_assoc    , L2 dTLB as=
sociativity, 2M and 4M pages
+0x80000006,         0,  ebx,    11:0,    l2_itlb_4k_nentries    , L2 iTLB #e=
ntries, 4K pages
+0x80000006,         0,  ebx,   15:12,    l2_itlb_4k_assoc       , L2 iTLB as=
sociativity, 4K pages
+0x80000006,         0,  ebx,   27:16,    l2_dtlb_4k_nentries    , L2 dTLB #e=
ntries, 4K pages
+0x80000006,         0,  ebx,   31:28,    l2_dtlb_4k_assoc       , L2 dTLB as=
sociativity, 4K pages
+0x80000006,         0,  ecx,     7:0,    l2_line_size           , L2 cache l=
ine size, in bytes
+0x80000006,         0,  ecx,    11:8,    l2_nlines              , L2 cache n=
umber of lines per tag
+0x80000006,         0,  ecx,   15:12,    l2_assoc               , L2 cache a=
ssociativity
+0x80000006,         0,  ecx,   31:16,    l2_size_kb             , L2 cache s=
ize, in KB
+0x80000006,         0,  edx,     7:0,    l3_line_size           , L3 cache l=
ine size, in bytes
+0x80000006,         0,  edx,    11:8,    l3_nlines              , L3 cache n=
umber of lines per tag
+0x80000006,         0,  edx,   15:12,    l3_assoc               , L3 cache a=
ssociativity
+0x80000006,         0,  edx,   31:18,    l3_size_range          , L3 cache s=
ize range
=20
 # Leaf 80000007H
-
-0x80000007,    0,  EDX,      8, nonstop_tsc, Invariant TSC available
-
+# CPU power management (mostly AMD) and AMD RAS enumeration
+
+0x80000007,         0,  ebx,       0,    overflow_recov         , MCA overfl=
ow conditions not fatal
+0x80000007,         0,  ebx,       1,    succor                 , Software c=
ontainment of UnCORRectable errors
+0x80000007,         0,  ebx,       2,    hw_assert              , Hardware a=
ssert MSRs
+0x80000007,         0,  ebx,       3,    smca                   , Scalable M=
CA (MCAX MSRs)
+0x80000007,         0,  ecx,    31:0,    cpu_pwr_sample_ratio   , CPU power =
sample time ratio
+0x80000007,         0,  edx,       0,    digital_temp           , Digital te=
mprature sensor
+0x80000007,         0,  edx,       1,    powernow_freq_id       , PowerNOW! =
frequency scaling
+0x80000007,         0,  edx,       2,    powernow_volt_id       , PowerNOW! =
voltage scaling
+0x80000007,         0,  edx,       3,    thermal_trip           , THERMTRIP =
(Thermal Trip)
+0x80000007,         0,  edx,       4,    hw_thermal_control     , Hardware t=
hermal control
+0x80000007,         0,  edx,       5,    sw_thermal_control     , Software t=
hermal control
+0x80000007,         0,  edx,       6,    100mhz_steps           , 100 MHz mu=
ltiplier control
+0x80000007,         0,  edx,       7,    hw_pstate              , Hardware P=
-state control
+0x80000007,         0,  edx,       8,    constant_tsc           , TSC ticks =
at constant rate across all P and C states
+0x80000007,         0,  edx,       9,    cpb                    , Core perfo=
rmance boost
+0x80000007,         0,  edx,      10,    eff_freq_ro            , Read-only =
effective frequency interface
+0x80000007,         0,  edx,      11,    proc_feedback          , Processor =
feedback interface (deprecated)
+0x80000007,         0,  edx,      12,    acc_power              , Processor =
power reporting interface
+0x80000007,         0,  edx,      13,    connected_standby      , CPU Connec=
ted Standby support
+0x80000007,         0,  edx,      14,    rapl                   , Runtime Av=
erage Power Limit interface
=20
 # Leaf 80000008H
-
-0x80000008,    0,  EAX,    7:0, phy_adr_bits, Physical Address Bits
-0x80000008,    0,  EAX,   15:8, lnr_adr_bits, Linear Address Bits
-0x80000007,    0,  EBX,      9, wbnoinvd, WBNOINVD
-
-# 0x8000001E
-# EAX: Extended APIC ID
-0x8000001E,	0, EAX,   31:0, extended_apic_id, Extended APIC ID
-# EBX: Core Identifiers
-0x8000001E,	0, EBX,    7:0, core_id, Identifies the logical core ID
-0x8000001E,	0, EBX,   15:8, threads_per_core, The number of threads per core=
 is threads_per_core + 1
-# ECX: Node Identifiers
-0x8000001E,	0, ECX,    7:0, node_id, Node ID
-0x8000001E,	0, ECX,   10:8, nodes_per_processor, Nodes per processor { 0: 1 =
node, else reserved }
-
-# 8000001F: AMD Secure Encryption
-0x8000001F,	0, EAX,	     0, sme,	Secure Memory Encryption
-0x8000001F,	0, EAX,      1, sev,	Secure Encrypted Virtualization
-0x8000001F,	0, EAX,      2, vmpgflush, VM Page Flush MSR
-0x8000001F,	0, EAX,      3, seves, SEV Encrypted State
-0x8000001F,	0, EBX,    5:0, c-bit, Page table bit number used to enable memo=
ry encryption
-0x8000001F,	0, EBX,   11:6, mem_encrypt_physaddr_width, Reduction of physica=
l address space in bits with SME enabled
-0x8000001F,	0, ECX,   31:0, num_encrypted_guests, Maximum ASID value that ma=
y be used for an SEV-enabled guest
-0x8000001F,	0, EDX,   31:0, minimum_sev_asid, Minimum ASID value that must b=
e used for an SEV-enabled, SEV-ES-disabled guest
+# CPU capacity parameters and extended feature flags (mostly AMD)
+
+0x80000008,         0,  eax,     7:0,    phys_addr_bits         , Max physic=
al address bits
+0x80000008,         0,  eax,    15:8,    virt_addr_bits         , Max virtua=
l address bits
+0x80000008,         0,  eax,   23:16,    guest_phys_addr_bits   , Max nested=
-paging guest physical address bits
+0x80000008,         0,  ebx,       0,    clzero                 , CLZERO sup=
ported
+0x80000008,         0,  ebx,       1,    irperf                 , Instructio=
n retired counter MSR
+0x80000008,         0,  ebx,       2,    xsaveerptr             , XSAVE/XRST=
OR always saves/restores FPU error pointers
+0x80000008,         0,  ebx,       3,    invlpgb                , INVLPGB br=
oadcasts a TLB invalidate to all threads
+0x80000008,         0,  ebx,       4,    rdpru                  , RDPRU (Rea=
d Processor Register at User level) supported
+0x80000008,         0,  ebx,       6,    mba                    , Memory Ban=
dwidth Allocation (AMD bit)
+0x80000008,         0,  ebx,       8,    mcommit                , MCOMMIT (M=
emory commit) supported
+0x80000008,         0,  ebx,       9,    wbnoinvd               , WBNOINVD s=
upported
+0x80000008,         0,  ebx,      12,    amd_ibpb               , Indirect B=
ranch Prediction Barrier
+0x80000008,         0,  ebx,      13,    wbinvd_int             , Interrupti=
ble WBINVD/WBNOINVD
+0x80000008,         0,  ebx,      14,    amd_ibrs               , Indirect B=
ranch Restricted Speculation
+0x80000008,         0,  ebx,      15,    amd_stibp              , Single Thr=
ead Indirect Branch Prediction mode
+0x80000008,         0,  ebx,      16,    ibrs_always_on         , IBRS alway=
s-on preferred
+0x80000008,         0,  ebx,      17,    amd_stibp_always_on    , STIBP alwa=
ys-on preferred
+0x80000008,         0,  ebx,      18,    ibrs_fast              , IBRS is pr=
eferred over software solution
+0x80000008,         0,  ebx,      19,    ibrs_same_mode         , IBRS provi=
des same mode protection
+0x80000008,         0,  ebx,      20,    no_efer_lmsle          , EFER[LMSLE=
] bit (Long-Mode Segment Limit Enable) unsupported
+0x80000008,         0,  ebx,      21,    tlb_flush_nested       , INVLPGB RA=
X[5] bit can be set (nested translations)
+0x80000008,         0,  ebx,      23,    amd_ppin               , Protected =
Processor Inventory Number
+0x80000008,         0,  ebx,      24,    amd_ssbd               , Speculativ=
e Store Bypass Disable
+0x80000008,         0,  ebx,      25,    virt_ssbd              , virtualize=
d SSBD (Speculative Store Bypass Disable)
+0x80000008,         0,  ebx,      26,    amd_ssb_no             , SSBD not n=
eeded (fixed in HW)
+0x80000008,         0,  ebx,      27,    cppc                   , Collaborat=
ive Processor Performance Control
+0x80000008,         0,  ebx,      28,    amd_psfd               , Predictive=
 Store Forward Disable
+0x80000008,         0,  ebx,      29,    btc_no                 , CPU not af=
fected by Branch Type Confusion
+0x80000008,         0,  ebx,      30,    ibpb_ret               , IBPB clear=
s RSB/RAS too
+0x80000008,         0,  ebx,      31,    brs                    , Branch Sam=
pling supported
+0x80000008,         0,  ecx,     7:0,    cpu_nthreads           , Number of =
physical threads - 1
+0x80000008,         0,  ecx,   15:12,    apicid_coreid_len      , Number of =
thread core ID bits (shift) in APIC ID
+0x80000008,         0,  ecx,   17:16,    perf_tsc_len           , Performanc=
e time-stamp counter size
+0x80000008,         0,  edx,    15:0,    invlpgb_max_pages      , INVLPGB ma=
ximum page count
+0x80000008,         0,  edx,   31:16,    rdpru_max_reg_id       , RDPRU max =
register ID (ECX input)
+
+# Leaf 8000000AH
+# AMD SVM (Secure Virtual Machine) enumeration
+
+0x8000000a,         0,  eax,     7:0,    svm_version            , SVM revisi=
on number
+0x8000000a,         0,  ebx,    31:0,    svm_nasid              , Number of =
address space identifiers (ASID)
+0x8000000a,         0,  edx,       0,    npt                    , Nested pag=
ing
+0x8000000a,         0,  edx,       1,    lbrv                   , LBR virtua=
lization
+0x8000000a,         0,  edx,       2,    svm_lock               , SVM lock
+0x8000000a,         0,  edx,       3,    nrip_save              , NRIP save =
support on #VMEXIT
+0x8000000a,         0,  edx,       4,    tsc_scale              , MSR based =
TSC rate control
+0x8000000a,         0,  edx,       5,    vmcb_clean             , VMCB clean=
 bits support
+0x8000000a,         0,  edx,       6,    flushbyasid            , Flush by A=
SID + Extended VMCB TLB_Control
+0x8000000a,         0,  edx,       7,    decodeassists          , Decode Ass=
ists support
+0x8000000a,         0,  edx,      10,    pausefilter            , Pause inte=
rcept filter
+0x8000000a,         0,  edx,      12,    pfthreshold            , Pause filt=
er threshold
+0x8000000a,         0,  edx,      13,    avic                   , Advanced v=
irtual interrupt controller
+0x8000000a,         0,  edx,      15,    v_vmsave_vmload        , Virtual VM=
SAVE/VMLOAD (nested virt)
+0x8000000a,         0,  edx,      16,    vgif                   , Virtualize=
 the Global Interrupt Flag
+0x8000000a,         0,  edx,      17,    gmet                   , Guest mode=
 execution trap
+0x8000000a,         0,  edx,      18,    x2avic                 , Virtual x2=
APIC
+0x8000000a,         0,  edx,      19,    sss_check              , Supervisor=
 Shadow Stack restrictions
+0x8000000a,         0,  edx,      20,    v_spec_ctrl            , Virtual SP=
EC_CTRL
+0x8000000a,         0,  edx,      21,    ro_gpt                 , Read-Only =
guest page table support
+0x8000000a,         0,  edx,      23,    h_mce_override         , Host MCE o=
verride
+0x8000000a,         0,  edx,      24,    tlbsync_int            , TLBSYNC in=
tercept + INVLPGB/TLBSYNC in VMCB
+0x8000000a,         0,  edx,      25,    vnmi                   , NMI virtua=
lization
+0x8000000a,         0,  edx,      26,    ibs_virt               , IBS Virtua=
lization
+0x8000000a,         0,  edx,      27,    ext_lvt_off_chg        , Extended L=
VT offset fault change
+0x8000000a,         0,  edx,      28,    svme_addr_chk          , Guest SVME=
 addr check
+
+# Leaf 80000019H
+# AMD TLB 1G-pages enumeration
+
+0x80000019,         0,  eax,    11:0,    l1_itlb_1g_nentries    , L1 iTLB #e=
ntries, 1G pages
+0x80000019,         0,  eax,   15:12,    l1_itlb_1g_assoc       , L1 iTLB as=
sociativity, 1G pages
+0x80000019,         0,  eax,   27:16,    l1_dtlb_1g_nentries    , L1 dTLB #e=
ntries, 1G pages
+0x80000019,         0,  eax,   31:28,    l1_dtlb_1g_assoc       , L1 dTLB as=
sociativity, 1G pages
+0x80000019,         0,  ebx,    11:0,    l2_itlb_1g_nentries    , L2 iTLB #e=
ntries, 1G pages
+0x80000019,         0,  ebx,   15:12,    l2_itlb_1g_assoc       , L2 iTLB as=
sociativity, 1G pages
+0x80000019,         0,  ebx,   27:16,    l2_dtlb_1g_nentries    , L2 dTLB #e=
ntries, 1G pages
+0x80000019,         0,  ebx,   31:28,    l2_dtlb_1g_assoc       , L2 dTLB as=
sociativity, 1G pages
+
+# Leaf 8000001AH
+# AMD instruction optimizations enumeration
+
+0x8000001a,         0,  eax,       0,    fp_128                 , Internal F=
P/SIMD exec data path is 128-bits wide
+0x8000001a,         0,  eax,       1,    movu_preferred         , SSE: MOVU*=
 better than MOVL*/MOVH*
+0x8000001a,         0,  eax,       2,    fp_256                 , internal F=
P/SSE exec data path is 256-bits wide
+
+# Leaf 8000001BH
+# AMD IBS (Instruction-Based Sampling) enumeration
+
+0x8000001b,         0,  eax,       0,    ibs_flags_valid        , IBS featur=
e flags valid
+0x8000001b,         0,  eax,       1,    ibs_fetch_sampling     , IBS fetch =
sampling supported
+0x8000001b,         0,  eax,       2,    ibs_op_sampling        , IBS execut=
ion sampling supported
+0x8000001b,         0,  eax,       3,    ibs_rdwr_op_counter    , IBS read/w=
rite of op counter supported
+0x8000001b,         0,  eax,       4,    ibs_op_count           , IBS OP cou=
nting mode supported
+0x8000001b,         0,  eax,       5,    ibs_branch_target      , IBS branch=
 target address reporting supported
+0x8000001b,         0,  eax,       6,    ibs_op_counters_ext    , IBS IbsOpC=
urCnt/IbsOpMaxCnt extend by 7 bits
+0x8000001b,         0,  eax,       7,    ibs_rip_invalid_chk    , IBS invali=
d RIP indication supported
+0x8000001b,         0,  eax,       8,    ibs_op_branch_fuse     , IBS fused =
branch micro-op indication supported
+0x8000001b,         0,  eax,       9,    ibs_fetch_ctl_ext      , IBS Fetch =
Control Extended MSR (0xc001103c) supported
+0x8000001b,         0,  eax,      10,    ibs_op_data_4          , IBS op dat=
a 4 MSR supported
+0x8000001b,         0,  eax,      11,    ibs_l3_miss_filter     , IBS L3-mis=
s filtering supported (Zen4+)
+
+# Leaf 8000001CH
+# AMD LWP (Lightweight Profiling)
+
+0x8000001c,         0,  eax,       0,    os_lwp_avail           , LWP is ava=
ilable to application programs (supported by OS)
+0x8000001c,         0,  eax,       1,    os_lpwval              , LWPVAL ins=
truction (EventId=3D1) is supported by OS
+0x8000001c,         0,  eax,       2,    os_lwp_ire             , Instructio=
ns Retired Event (EventId=3D2) is supported by OS
+0x8000001c,         0,  eax,       3,    os_lwp_bre             , Branch Ret=
ired Event (EventId=3D3) is supported by OS
+0x8000001c,         0,  eax,       4,    os_lwp_dme             , DCache Mis=
s Event (EventId=3D4) is supported by OS
+0x8000001c,         0,  eax,       5,    os_lwp_cnh             , CPU Clocks=
 Not Halted event (EventId=3D5) is supported by OS
+0x8000001c,         0,  eax,       6,    os_lwp_rnh             , CPU Refere=
nce clocks Not Halted event (EventId=3D6) is supported by OS
+0x8000001c,         0,  eax,      29,    os_lwp_cont            , LWP sampli=
ng in continuous mode is supported by OS
+0x8000001c,         0,  eax,      30,    os_lwp_ptsc            , Performanc=
e Time Stamp Counter in event records is supported by OS
+0x8000001c,         0,  eax,      31,    os_lwp_int             , Interrupt =
on threshold overflow is supported by OS
+0x8000001c,         0,  ebx,     7:0,    lwp_lwpcb_sz           , LWP Contro=
l Block size, in quadwords
+0x8000001c,         0,  ebx,    15:8,    lwp_event_sz           , LWP event =
record size, in bytes
+0x8000001c,         0,  ebx,   23:16,    lwp_max_events         , LWP max su=
pported EventId value (EventID 255 not included)
+0x8000001c,         0,  ebx,   31:24,    lwp_event_offset       , LWP events=
 area offset in the LWP Control Block
+0x8000001c,         0,  ecx,     4:0,    lwp_latency_max        , Num of bit=
s in cache latency counters (10 to 31)
+0x8000001c,         0,  ecx,       5,    lwp_data_adddr         , Cache miss=
 events report the data address of the reference
+0x8000001c,         0,  ecx,     8:6,    lwp_latency_rnd        , Amount by =
which cache latency is rounded
+0x8000001c,         0,  ecx,    15:9,    lwp_version            , LWP implem=
entation version
+0x8000001c,         0,  ecx,   23:16,    lwp_buf_min_sz         , LWP event =
ring buffer min size, in units of 32 event records
+0x8000001c,         0,  ecx,      28,    lwp_branch_predict     , Branches R=
etired events can be filtered
+0x8000001c,         0,  ecx,      29,    lwp_ip_filtering       , IP filteri=
ng (IPI, IPF, BaseIP, and LimitIP @ LWPCP) supported
+0x8000001c,         0,  ecx,      30,    lwp_cache_levels       , Cache-rela=
ted events can be filtered by cache level
+0x8000001c,         0,  ecx,      31,    lwp_cache_latency      , Cache-rela=
ted events can be filtered by latency
+0x8000001c,         0,  edx,       0,    hw_lwp_avail           , LWP is ava=
ilable in Hardware
+0x8000001c,         0,  edx,       1,    hw_lpwval              , LWPVAL ins=
truction (EventId=3D1) is available in HW
+0x8000001c,         0,  edx,       2,    hw_lwp_ire             , Instructio=
ns Retired Event (EventId=3D2) is available in HW
+0x8000001c,         0,  edx,       3,    hw_lwp_bre             , Branch Ret=
ired Event (EventId=3D3) is available in HW
+0x8000001c,         0,  edx,       4,    hw_lwp_dme             , DCache Mis=
s Event (EventId=3D4) is available in HW
+0x8000001c,         0,  edx,       5,    hw_lwp_cnh             , CPU Clocks=
 Not Halted event (EventId=3D5) is available in HW
+0x8000001c,         0,  edx,       6,    hw_lwp_rnh             , CPU Refere=
nce clocks Not Halted event (EventId=3D6) is available in HW
+0x8000001c,         0,  edx,      29,    hw_lwp_cont            , LWP sampli=
ng in continuous mode is available in HW
+0x8000001c,         0,  edx,      30,    hw_lwp_ptsc            , Performanc=
e Time Stamp Counter in event records is available in HW
+0x8000001c,         0,  edx,      31,    hw_lwp_int             , Interrupt =
on threshold overflow is available in HW
+
+# Leaf 8000001DH
+# AMD deterministic cache parameters
+
+0x8000001d,      31:0,  eax,     4:0,    cache_type             , Cache type=
 field
+0x8000001d,      31:0,  eax,     7:5,    cache_level            , Cache leve=
l (1-based)
+0x8000001d,      31:0,  eax,       8,    cache_self_init        , Self-initi=
alizing cache level
+0x8000001d,      31:0,  eax,       9,    fully_associative      , Fully-asso=
ciative cache
+0x8000001d,      31:0,  eax,   25:14,    num_threads_sharing    , Number of =
logical CPUs sharing cache
+0x8000001d,      31:0,  ebx,    11:0,    cache_linesize         , System coh=
erency line size (0-based)
+0x8000001d,      31:0,  ebx,   21:12,    cache_npartitions      , Physical l=
ine partitions (0-based)
+0x8000001d,      31:0,  ebx,   31:22,    cache_nways            , Ways of as=
sociativity (0-based)
+0x8000001d,      31:0,  ecx,    30:0,    cache_nsets            , Cache numb=
er of sets (0-based)
+0x8000001d,      31:0,  edx,       0,    wbinvd_rll_no_guarantee, WBINVD/INV=
D not guaranteed for Remote Lower-Level caches
+0x8000001d,      31:0,  edx,       1,    ll_inclusive           , Cache is i=
nclusive of Lower-Level caches
+
+# Leaf 8000001EH
+# AMD CPU topology enumeration
+
+0x8000001e,         0,  eax,    31:0,    ext_apic_id            , Extended A=
PIC ID
+0x8000001e,         0,  ebx,     7:0,    core_id                , Unique per=
-socket logical core unit ID
+0x8000001e,         0,  ebx,    15:8,    core_nthreas           , #Threads p=
er core (zero-based)
+0x8000001e,         0,  ecx,     7:0,    node_id                , Node (die)=
 ID of invoking logical CPU
+0x8000001e,         0,  ecx,    10:8,    nnodes_per_socket      , #nodes in =
invoking logical CPU's package/socket
+
+# Leaf 8000001FH
+# AMD encrypted memory capabilities enumeration (SME/SEV)
+
+0x8000001f,         0,  eax,       0,    sme                    , Secure Mem=
ory Encryption supported
+0x8000001f,         0,  eax,       1,    sev                    , Secure Enc=
rypted Virtualization supported
+0x8000001f,         0,  eax,       2,    vm_page_flush          , VM Page Fl=
ush MSR (0xc001011e) available
+0x8000001f,         0,  eax,       3,    sev_es                 , SEV Encryp=
ted State supported
+0x8000001f,         0,  eax,       4,    sev_nested_paging      , SEV secure=
 nested paging supported
+0x8000001f,         0,  eax,       5,    vm_permission_levels   , VMPL suppo=
rted
+0x8000001f,         0,  eax,       6,    rpmquery               , RPMQUERY i=
nstruction supported
+0x8000001f,         0,  eax,       7,    vmpl_sss               , VMPL super=
visor shadwo stack supported
+0x8000001f,         0,  eax,       8,    secure_tsc             , Secure TSC=
 supported
+0x8000001f,         0,  eax,       9,    v_tsc_aux              , Hardware v=
irtualizes TSC_AUX
+0x8000001f,         0,  eax,      10,    sme_coherent           , HW enforce=
s cache coherency across encryption domains
+0x8000001f,         0,  eax,      11,    req_64bit_hypervisor   , SEV guest =
mandates 64-bit hypervisor
+0x8000001f,         0,  eax,      12,    restricted_injection   , Restricted=
 Injection supported
+0x8000001f,         0,  eax,      13,    alternate_injection    , Alternate =
Injection supported
+0x8000001f,         0,  eax,      14,    debug_swap             , SEV-ES: fu=
ll debug state swap is supported
+0x8000001f,         0,  eax,      15,    disallow_host_ibs      , SEV-ES: Di=
sallowing IBS use by the host is supported
+0x8000001f,         0,  eax,      16,    virt_transparent_enc   , Virtual Tr=
ansparent Encryption
+0x8000001f,         0,  eax,      17,    vmgexit_paremeter      , VmgexitPar=
ameter is supported in SEV_FEATURES
+0x8000001f,         0,  eax,      18,    virt_tom_msr           , Virtual TO=
M MSR is supported
+0x8000001f,         0,  eax,      19,    virt_ibs               , IBS state =
virtualization is supported for SEV-ES guests
+0x8000001f,         0,  eax,      24,    vmsa_reg_protection    , VMSA regis=
ter protection is supported
+0x8000001f,         0,  eax,      25,    smt_protection         , SMT protec=
tion is supported
+0x8000001f,         0,  eax,      28,    svsm_page_msr          , SVSM commu=
nication page MSR (0xc001f000h) is supported
+0x8000001f,         0,  eax,      29,    nested_virt_snp_msr    , VIRT_RMPUP=
DATE/VIRT_PSMASH MSRs are supported
+0x8000001f,         0,  ebx,     5:0,    pte_cbit_pos           , PTE bit nu=
mber used to enable memory encryption
+0x8000001f,         0,  ebx,    11:6,    phys_addr_reduction_nbits, Reductio=
n of phys address space when encryption is enabled, in bits
+0x8000001f,         0,  ebx,   15:12,    vmpl_count             , Number of =
VM permission levels (VMPL) supported
+0x8000001f,         0,  ecx,    31:0,    enc_guests_max         , Max suppor=
ted number of simultaneous encrypted guests
+0x8000001f,         0,  edx,    31:0,    min_sev_asid_no_sev_es , Mininum AS=
ID for SEV-enabled SEV-ES-disabled guest
+
+# Leaf 80000020H
+# AMD Platform QoS extended feature IDs
+
+0x80000020,         0,  ebx,       1,    mba                    , Memory Ban=
dwidth Allocation support
+0x80000020,         0,  ebx,       2,    smba                   , Slow Memor=
y Bandwidth Allocation support
+0x80000020,         0,  ebx,       3,    bmec                   , Bandwidth =
Monitoring Event Configuration support
+0x80000020,         0,  ebx,       4,    l3rr                   , L3 Range R=
eservation support
+0x80000020,         1,  eax,    31:0,    mba_limit_len          , MBA enforc=
ement limit size
+0x80000020,         1,  edx,    31:0,    mba_cos_max            , MBA max Cl=
ass of Service number (zero-based)
+0x80000020,         2,  eax,    31:0,    smba_limit_len         , SMBA enfor=
cement limit size
+0x80000020,         2,  edx,    31:0,    smba_cos_max           , SMBA max C=
lass of Service number (zero-based)
+0x80000020,         3,  ebx,     7:0,    bmec_num_events        , BMEC numbe=
r of bandwidth events available
+0x80000020,         3,  ecx,       0,    bmec_local_reads       , Local NUMA=
 reads can be tracked
+0x80000020,         3,  ecx,       1,    bmec_remote_reads      , Remote NUM=
A reads can be tracked
+0x80000020,         3,  ecx,       2,    bmec_local_nontemp_wr  , Local NUMA=
 non-temporal writes can be tracked
+0x80000020,         3,  ecx,       3,    bmec_remote_nontemp_wr , Remote NUM=
A non-temporal writes can be tracked
+0x80000020,         3,  ecx,       4,    bmec_local_slow_mem_rd , Local NUMA=
 slow-memory reads can be tracked
+0x80000020,         3,  ecx,       5,    bmec_remote_slow_mem_rd, Remote NUM=
A slow-memory reads can be tracked
+0x80000020,         3,  ecx,       6,    bmec_all_dirty_victims , Dirty QoS =
victims to all types of memory can be tracked
+
+# Leaf 80000021H
+# AMD extended features enumeration 2
+
+0x80000021,         0,  eax,       0,    no_nested_data_bp      , No nested =
data breakpoints
+0x80000021,         0,  eax,       1,    fsgs_non_serializing   , WRMSR to {=
FS,GS,KERNEL_GS}_BASE is non-serializing
+0x80000021,         0,  eax,       2,    lfence_rdtsc           , LFENCE alw=
ays serializing / synchronizes RDTSC
+0x80000021,         0,  eax,       3,    smm_page_cfg_lock      , SMM paging=
 configuration lock is supported
+0x80000021,         0,  eax,       6,    null_sel_clr_base      , Null selec=
tor clears base
+0x80000021,         0,  eax,       7,    upper_addr_ignore      , EFER MSR U=
pper Address Ignore Enable bit supported
+0x80000021,         0,  eax,       8,    autoibrs               , EFER MSR A=
utomatic IBRS enable bit supported
+0x80000021,         0,  eax,       9,    no_smm_ctl_msr         , SMM_CTL MS=
R (0xc0010116) is not present
+0x80000021,         0,  eax,      10,    fsrs_supported         , Fast Short=
 Rep Stosb (FSRS) is supported
+0x80000021,         0,  eax,      11,    fsrc_supported         , Fast Short=
 Repe Cmpsb (FSRC) is supported
+0x80000021,         0,  eax,      13,    prefetch_ctl_msr       , Prefetch c=
ontrol MSR is supported
+0x80000021,         0,  eax,      17,    user_cpuid_disable     , #GP when e=
xecuting CPUID at CPL > 0 is supported
+0x80000021,         0,  eax,      18,    epsf_supported         , Enhanced P=
redictive Store Forwarding (EPSF) is supported
+0x80000021,         0,  ebx,    11:0,    microcode_patch_size   , Size of mi=
crocode patch, in 16-byte units
+
+# Leaf 80000022H
+# AMD Performance Monitoring v2 enumeration
+
+0x80000022,         0,  eax,       0,    perfmon_v2             , Performanc=
e monitoring v2 supported
+0x80000022,         0,  eax,       1,    lbr_v2                 , Last Branc=
h Record v2 extensions (LBR Stack)
+0x80000022,         0,  eax,       2,    lbr_pmc_freeze         , Freezing c=
ore performance counters / LBR Stack supported
+0x80000022,         0,  ebx,     3:0,    n_pmc_core             , Number of =
core perfomance counters
+0x80000022,         0,  ebx,     9:4,    lbr_v2_stack_size      , Number of =
available LBR stack entries
+0x80000022,         0,  ebx,   15:10,    n_pmc_northbridge      , Number of =
available northbridge (data fabric) performance counters
+0x80000022,         0,  ebx,   21:16,    n_pmc_umc              , Number of =
available UMC performance counters
+0x80000022,         0,  ecx,    31:0,    active_umc_bitmask     , Active UMC=
s bitmask
+
+# Leaf 80000023H
+# AMD Secure Multi-key Encryption enumeration
+
+0x80000023,         0,  eax,       0,    mem_hmk_mode           , MEM-HMK en=
cryption mode is supported
+0x80000023,         0,  ebx,    15:0,    mem_hmk_avail_keys     , MEM-HMK mo=
de: total num of available encryption keys
+
+# Leaf 80000026H
+# AMD extended topology enumeration v2
+
+0x80000026,       3:0,  eax,     4:0,    x2apic_id_shift        , Bit width =
of this level (previous levels inclusive)
+0x80000026,       3:0,  eax,      29,    core_has_pwreff_ranking, This core =
has a power efficiency ranking
+0x80000026,       3:0,  eax,      30,    domain_has_hybrid_cores, This domai=
n level has hybrid (E, P) cores
+0x80000026,       3:0,  eax,      31,    domain_core_count_asymm, The 'Core'=
 domain has asymmetric cores count
+0x80000026,       3:0,  ebx,    15:0,    domain_lcpus_count     , Number of =
logical CPUs at this domain instance
+0x80000026,       3:0,  ebx,   23:16,    core_pwreff_ranking    , This core'=
s static power efficiency ranking
+0x80000026,       3:0,  ebx,   27:24,    core_native_model_id   , This core'=
s native model ID
+0x80000026,       3:0,  ebx,   31:28,    core_type              , This core'=
s type
+0x80000026,       3:0,  ecx,     7:0,    domain_level           , This domai=
n level (subleaf ID)
+0x80000026,       3:0,  ecx,    15:8,    domain_type            , This domai=
n type
+0x80000026,       3:0,  edx,    31:0,    x2apic_id              , x2APIC ID =
of current logical CPU
diff --git a/tools/arch/x86/kcpuid/kcpuid.c b/tools/arch/x86/kcpuid/kcpuid.c
index 24b7d017ec2c..1b25c0a95d3f 100644
--- a/tools/arch/x86/kcpuid/kcpuid.c
+++ b/tools/arch/x86/kcpuid/kcpuid.c
@@ -7,7 +7,8 @@
 #include <string.h>
 #include <getopt.h>
=20
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define ARRAY_SIZE(x)	(sizeof(x) / sizeof((x)[0]))
+#define min(a, b)	(((a) < (b)) ? (a) : (b))
=20
 typedef unsigned int u32;
 typedef unsigned long long u64;
@@ -76,7 +77,6 @@ struct cpuid_range {
  */
 struct cpuid_range *leafs_basic, *leafs_ext;
=20
-static int num_leafs;
 static bool is_amd;
 static bool show_details;
 static bool show_raw;
@@ -98,27 +98,17 @@ static inline void cpuid(u32 *eax, u32 *ebx, u32 *ecx, u3=
2 *edx)
=20
 static inline bool has_subleafs(u32 f)
 {
-	if (f =3D=3D 0x7 || f =3D=3D 0xd)
-		return true;
-
-	if (is_amd) {
-		if (f =3D=3D 0x8000001d)
+	u32 with_subleaves[] =3D {
+		0x4,  0x7,  0xb,  0xd,  0xf,  0x10, 0x12,
+		0x14, 0x17, 0x18, 0x1b, 0x1d, 0x1f, 0x23,
+		0x8000001d, 0x80000020, 0x80000026,
+	};
+
+	for (unsigned i =3D 0; i < ARRAY_SIZE(with_subleaves); i++)
+		if (f =3D=3D with_subleaves[i])
 			return true;
-		return false;
-	}
=20
-	switch (f) {
-	case 0x4:
-	case 0xb:
-	case 0xf:
-	case 0x10:
-	case 0x14:
-	case 0x18:
-	case 0x1f:
-		return true;
-	default:
-		return false;
-	}
+	return false;
 }
=20
 static void leaf_print_raw(struct subleaf *leaf)
@@ -204,15 +194,12 @@ static void raw_dump_range(struct cpuid_range *range)
 	}
 }
=20
-#define MAX_SUBLEAF_NUM		32
+#define MAX_SUBLEAF_NUM		64
 struct cpuid_range *setup_cpuid_range(u32 input_eax)
 {
-	u32 max_func, idx_func;
-	int subleaf;
+	u32 max_func, idx_func, subleaf, max_subleaf;
+	u32 eax, ebx, ecx, edx, f =3D input_eax;
 	struct cpuid_range *range;
-	u32 eax, ebx, ecx, edx;
-	u32 f =3D input_eax;
-	int max_subleaf;
 	bool allzero;
=20
 	eax =3D input_eax;
@@ -246,7 +233,6 @@ struct cpuid_range *setup_cpuid_range(u32 input_eax)
 		allzero =3D cpuid_store(range, f, subleaf, eax, ebx, ecx, edx);
 		if (allzero)
 			continue;
-		num_leafs++;
=20
 		if (!has_subleafs(f))
 			continue;
@@ -257,11 +243,18 @@ struct cpuid_range *setup_cpuid_range(u32 input_eax)
 		 * Some can provide the exact number of subleafs,
 		 * others have to be tried (0xf)
 		 */
-		if (f =3D=3D 0x7 || f =3D=3D 0x14 || f =3D=3D 0x17 || f =3D=3D 0x18)
-			max_subleaf =3D (eax & 0xff) + 1;
-
+		if (f =3D=3D 0x7 || f =3D=3D 0x14 || f =3D=3D 0x17 || f =3D=3D 0x18 || f =
=3D=3D 0x1d)
+			max_subleaf =3D min((eax & 0xff) + 1, max_subleaf);
 		if (f =3D=3D 0xb)
 			max_subleaf =3D 2;
+		if (f =3D=3D 0x1f)
+			max_subleaf =3D 6;
+		if (f =3D=3D 0x23)
+			max_subleaf =3D 4;
+		if (f =3D=3D 0x80000020)
+			max_subleaf =3D 4;
+		if (f =3D=3D 0x80000026)
+			max_subleaf =3D 5;
=20
 		for (subleaf =3D 1; subleaf < max_subleaf; subleaf++) {
 			eax =3D f;
@@ -272,7 +265,6 @@ struct cpuid_range *setup_cpuid_range(u32 input_eax)
 						eax, ebx, ecx, edx);
 			if (allzero)
 				continue;
-			num_leafs++;
 		}
=20
 	}
@@ -313,6 +305,8 @@ static int parse_line(char *line)
 	struct bits_desc *bdesc;
 	int reg_index;
 	char *start, *end;
+	u32 subleaf_start, subleaf_end;
+	unsigned bit_start, bit_end;
=20
 	/* Skip comments and NULL line */
 	if (line[0] =3D=3D '#' || line[0] =3D=3D '\n')
@@ -351,13 +345,25 @@ static int parse_line(char *line)
 		return 0;
=20
 	/* subleaf */
-	sub =3D strtoul(tokens[1], NULL, 0);
-	if ((int)sub > func->nr)
-		return -1;
+	buf =3D tokens[1];
+	end =3D strtok(buf, ":");
+	start =3D strtok(NULL, ":");
+	subleaf_end =3D strtoul(end, NULL, 0);
+
+	/* A subleaf range is given? */
+	if (start) {
+		subleaf_start =3D strtoul(start, NULL, 0);
+		subleaf_end =3D min(subleaf_end, (u32)(func->nr - 1));
+		if (subleaf_start > subleaf_end)
+			return 0;
+	} else {
+		subleaf_start =3D subleaf_end;
+		if (subleaf_start > (u32)(func->nr - 1))
+			return 0;
+	}
=20
-	leaf =3D &func->leafs[sub];
+	/* register */
 	buf =3D tokens[2];
-
 	if (strcasestr(buf, "EAX"))
 		reg_index =3D R_EAX;
 	else if (strcasestr(buf, "EBX"))
@@ -369,23 +375,23 @@ static int parse_line(char *line)
 	else
 		goto err_exit;
=20
-	reg =3D &leaf->info[reg_index];
-	bdesc =3D &reg->descs[reg->nr++];
-
 	/* bit flag or bits field */
 	buf =3D tokens[3];
-
 	end =3D strtok(buf, ":");
-	bdesc->end =3D strtoul(end, NULL, 0);
-	bdesc->start =3D bdesc->end;
-
-	/* start !=3D NULL means it is bit fields */
 	start =3D strtok(NULL, ":");
-	if (start)
-		bdesc->start =3D strtoul(start, NULL, 0);
-
-	strcpy(bdesc->simp, tokens[4]);
-	strcpy(bdesc->detail, tokens[5]);
+	bit_end =3D strtoul(end, NULL, 0);
+	bit_start =3D (start) ? strtoul(start, NULL, 0) : bit_end;
+
+	for (sub =3D subleaf_start; sub <=3D subleaf_end; sub++) {
+		leaf =3D &func->leafs[sub];
+		reg =3D &leaf->info[reg_index];
+		bdesc =3D &reg->descs[reg->nr++];
+
+		bdesc->end =3D bit_end;
+		bdesc->start =3D bit_start;
+		strcpy(bdesc->simp, strtok(tokens[4], " \t"));
+		strcpy(bdesc->detail, tokens[5]);
+	}
 	return 0;
=20
 err_exit:
@@ -452,8 +458,9 @@ static void decode_bits(u32 value, struct reg_desc *rdesc=
, enum cpuid_reg reg)
 		if (start =3D=3D end) {
 			/* single bit flag */
 			if (value & (1 << start))
-				printf("\t%-20s %s%s\n",
+				printf("\t%-20s %s%s%s\n",
 					bdesc->simp,
+				        show_flags_only ? "" : "\t\t\t",
 					show_details ? "-" : "",
 					show_details ? bdesc->detail : ""
 					);


.
Date: Tue, 17 Sep 2024 11:01:09 +0200 (CEST)
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [GIT pull] irq/domain for v6.12-rc1

Linus,

please pull the latest irq/domain branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-domain-2024-=
09-17

up to:  74c60a96ef6a: irqdomain: Remove stray '-' in the domain name

Two small updates for interrupt domains:

  - Remove a stray '-' in the domain name

  - Consolidate and clarify the bus token checks so they explicitely check
    for DOMAIN_BUS_ANY instead of unspecified checks for zero.

Thanks,

	tglx

------------------>
Andy Shevchenko (2):
      irqdomain: Clarify checks for bus_token
      irqdomain: Remove stray '-' in the domain name


 kernel/irq/irqdomain.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 01001eb615ec..1acc5308fcb7 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -130,8 +130,10 @@ EXPORT_SYMBOL_GPL(irq_domain_free_fwnode);
=20
 static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain=
_bus_token bus_token)
 {
-	domain->name =3D bus_token ? kasprintf(GFP_KERNEL, "%s-%d", base, bus_token=
) :
-				   kasprintf(GFP_KERNEL, "%s", base);
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		domain->name =3D kasprintf(GFP_KERNEL, "%s", base);
+	else
+		domain->name =3D kasprintf(GFP_KERNEL, "%s-%d", base, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
=20
@@ -146,8 +148,10 @@ static int alloc_fwnode_name(struct irq_domain *domain, =
const struct fwnode_hand
 	const char *suf =3D suffix ? : "";
 	char *name;
=20
-	name =3D bus_token ? kasprintf(GFP_KERNEL, "%pfw-%s%s%d", fwnode, suf, sep,=
 bus_token) :
-			   kasprintf(GFP_KERNEL, "%pfw-%s", fwnode, suf);
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		name =3D kasprintf(GFP_KERNEL, "%pfw%s%s", fwnode, sep, suf);
+	else
+		name =3D kasprintf(GFP_KERNEL, "%pfw%s%s-%d", fwnode, sep, suf, bus_token);
 	if (!name)
 		return -ENOMEM;
=20
@@ -166,11 +170,13 @@ static int alloc_unknown_name(struct irq_domain *domain=
, enum irq_domain_bus_tok
 	static atomic_t unknown_domains;
 	int id =3D atomic_inc_return(&unknown_domains);
=20
-	domain->name =3D bus_token ? kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus=
_token) :
-				   kasprintf(GFP_KERNEL, "unknown-%d", id);
-
+	if (bus_token =3D=3D DOMAIN_BUS_ANY)
+		domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d", id);
+	else
+		domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
+
 	domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED;
 	return 0;
 }
@@ -200,7 +206,7 @@ static int irq_domain_set_name(struct irq_domain *domain,=
 const struct irq_domai
 			return alloc_name(domain, fwid->name, bus_token);
 		default:
 			domain->name =3D fwid->name;
-			if (bus_token)
+			if (bus_token !=3D DOMAIN_BUS_ANY)
 				return alloc_name(domain, fwid->name, bus_token);
 		}
=20


.
Date: Tue, 17 Sep 2024 11:39:56 +0200
From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	linux-gpio@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [GIT PULL] gpio updates for v6.12-rc1

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Linus,

Here are the updates from the GPIO tree for the next release. We have one
new driver, some improvements to core GPIO code, various changes in
drivers and their DT bindings as well fixes to kerneldocs.

Overall it has been a slow cycle, most likely due to the summertime
vacation period and the changelog reflects it.

The merge from the MFD tree is there to pull dependencies for the new
driver.

There is a trivial conflict with the SoC tree (just drop
arch/arm/mach-ep93xx/vision_ep9307.c).

Details are in the signed tag. Please pull.

Bartosz Golaszewski

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git tags/gpio-updates-for-v6.12-rc1

for you to fetch changes up to 6b5e97c020060c2b8ad286002415106ab7034435:

  gpio: mpc8xxx: switch to using DEFINE_RUNTIME_DEV_PM_OPS() (2024-09-06 08:50:48 +0200)

----------------------------------------------------------------
gpio updates for v6.12-rc1

Core GPIOLIB:
- provide and add users for a macro allowing to iterate over accepted
  GPIO property names of consumer device nodes
- remove legacy definitions that are no longer used
- put legacy GPIO devres helpers together with the rest of the deprecated
  code
- implement and use swnode_gpio_get_reference(): a wrapper simplifying
  the underlying calls to fwnode_property_get_reference_args()
- use IS_ERR_OR_NULL() where it makes sense
- replace of_find_property() with of_property_present()
- simplify code with the scoped variant of OF-node children iterator

Documentation:
- update GPIO kerneldocs with Return sections
- fix "Excess struct member description" warnings now being triggered
  with W=1

New drivers:
- add support for Analog Devices ADP5585

Driver improvements:
- add support for wake-on-GPIO to gpio-mpc8xxx
- use GPIO_LOOKUP_IDX() in gpio-virtuser
- use devm_clk_get_[optional_]enabled() where applicable in several
  drivers
- replace OF-specific functions with provider-agnostic alternatives where
  possible
- drop support for legacy platform data from gpio-ath79 and gpio-davinci
- refactor gpio-stmpe
- improve error reporting in gpio-pca953x
- add support for reading the direction of pins for some models to
  gpio-vf610

DT bindings:
- convert the bindings for nxp,lpc3220 to YAML
- add gpio-reserved-ranges to gpio-davinci
- simplify the GPIO hog schema
- fix a GPIO hog issue in bindings for fcs,fxl6408

Other:
- fix format specifiers in user-space tools
- remove leftover files on make clean in tools/gpio/

----------------------------------------------------------------
Andy Shevchenko (22):
      gpiolib: Introduce for_each_gpio_property_name() helper
      gpiolib: swnode: Unify return code variable name
      gpiolib: swnode: Introduce swnode_gpio_get_reference() helper
      gpiolib: swnode: Make use of for_each_gpio_property_name()
      gpiolib: Replace gpio_suffix_count with NULL-terminated array
      gpio: virtuser: Use GPIO_LOOKUP_IDX() macro
      gpiolib: legacy: Kill GPIOF_INIT_* definitions
      gpiolib: legacy: Kill GPIOF_DIR_* definitions
      gpio: tegra: Replace of_node_to_fwnode() with more suitable API
      gpio: msc313: Replace of_node_to_fwnode() with more suitable API
      gpio: uniphier: Replace of_node_to_fwnode() with more suitable API
      gpio: tegra186: Replace of_node_to_fwnode() with more suitable API
      gpio: thunderx: Replace of_node_to_fwnode() with more suitable API
      gpio: visconti: Replace of_node_to_fwnode() with more suitable API
      gpio: ixp4xx: Replace of_node_to_fwnode() with more suitable API
      gpiolib: Update the kernel documentation - add Return sections
      gpiolib: legacy: Consolidate devm_gpio_*() with other legacy APIs
      gpio: stmpe: Fix IRQ related error messages
      gpio: stmpe: Remove unused 'dev' member of struct stmpe_gpio
      gpio: stmpe: Utilise temporary variable for struct device
      gpio: stmpe: Make use of device properties
      gpio: stmpe: Sort headers

Animesh Agarwal (1):
      dt-bindings: gpio: nxp,lpc3220-gpio: Convert to dtschema

Bartosz Golaszewski (9):
      Merge tag 'ib-mfd-gpio-pwm-v6.12' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/lee/mfd into gpio/for-next
      gpio: ath79: order headers alphabetically
      gpio: ath79: add missing header
      gpio: ath79: use generic device property getters
      gpio: ath79: remove support for platform data
      gpio: davinci: drop platform data support
      gpio: davinci: use devm_clk_get_enabled()
      gpio: mpc8xxx: order headers alphabetically
      gpio: mpc8xxx: switch to using DEFINE_RUNTIME_DEV_PM_OPS()

Chen Ni (1):
      gpio: sama5d2-piobu: convert comma to semicolon

Clark Wang (1):
      pwm: adp5585: Add Analog Devices ADP5585 support

Dhruva Gole (1):
      gpio: syscon: fix excess struct member build warning

Fabio Estevam (1):
      gpio: pca953x: Print the error code on read/write failures

Haibo Chen (4):
      mfd: adp5585: Add Analog Devices ADP5585 core support
      gpio: adp5585: Add Analog Devices ADP5585 support
      gpio: gpio-vf610: use u32 mask to handle 32 number gpios
      gpio: vf610: add get_direction() support

Hongbo Li (1):
      gpio: Use IS_ERR_OR_NULL() helper function

Jared McArthur (1):
      dt-bindings: gpio: gpio-davinci: Add the gpio-reserved-ranges property

Krzysztof Kozlowski (4):
      gpio: of: simplify with scoped for each OF child loop
      dt-bindings: gpio: fcs,fxl6408: add missing type to GPIO hogs
      dt-bindings: gpio: simplify GPIO hog nodes schema
      gpio: pch: kerneldoc fixes for excess members

Laurent Pinchart (1):
      dt-bindings: mfd: Add Analog Devices ADP5585

Martyn Welch (1):
      gpio: mpc8xxx: Add wake on GPIO support

Rob Herring (Arm) (1):
      gpio: Use of_property_present()

Rong Qianfeng (2):
      gpio: stp-xway: Simplify using devm_clk_get_enabled()
      gpio: zynq: Simplify using devm_clk_get_enabled()

Shen Lichuan (1):
      gpio: stmpe: Simplify with dev_err_probe()

Uwe Kleine-König (1):
      gpio: Drop explicit initialization of struct i2c_device_id::driver_data to 0

Zhang Zekun (4):
      gpio: cadence: Use helper function devm_clk_get_enabled()
      gpio: lpc18xx: Use helper function devm_clk_get_enabled()
      gpio: mb86s7x: Use helper function devm_clk_get_optional_enabled()
      gpio: xilinx: Use helper function devm_clk_get_optional_enabled()

Zhu Jun (1):
      tools: gpio: Fix the wrong format specifier

zhangjiao (1):
      tools: gpio: rm .*.cmd on make clean

 .../bindings/gpio/fairchild,74hc595.yaml           |  11 -
 .../devicetree/bindings/gpio/fcs,fxl6408.yaml      |   1 +
 .../devicetree/bindings/gpio/fsl-imx-gpio.yaml     |  11 -
 .../devicetree/bindings/gpio/gpio-davinci.yaml     |   2 +
 .../devicetree/bindings/gpio/gpio-pca95xx.yaml     |  11 -
 .../devicetree/bindings/gpio/gpio_lpc32xx.txt      |  43 ----
 .../bindings/gpio/microchip,mpfs-gpio.yaml         |  12 --
 .../devicetree/bindings/gpio/nxp,lpc3220-gpio.yaml |  50 +++++
 .../bindings/gpio/socionext,uniphier-gpio.yaml     |  11 -
 .../devicetree/bindings/mfd/adi,adp5585.yaml       |  92 +++++++++
 .../devicetree/bindings/trivial-devices.yaml       |   4 -
 MAINTAINERS                                        |  11 +
 arch/arm/mach-ep93xx/vision_ep9307.c               |   6 +-
 arch/mips/bcm63xx/boards/board_bcm963xx.c          |   2 +-
 drivers/gpio/Kconfig                               |   7 +
 drivers/gpio/Makefile                              |   1 +
 drivers/gpio/gpio-adp5585.c                        | 229 +++++++++++++++++++++
 drivers/gpio/gpio-ath79.c                          |  31 +--
 drivers/gpio/gpio-cadence.c                        |  23 +--
 drivers/gpio/gpio-davinci.c                        | 102 +++------
 drivers/gpio/gpio-fxl6408.c                        |   2 +-
 drivers/gpio/gpio-ixp4xx.c                         |  10 +-
 drivers/gpio/gpio-lpc18xx.c                        |  23 +--
 drivers/gpio/gpio-max7300.c                        |   2 +-
 drivers/gpio/gpio-mb86s7x.c                        |  21 +-
 drivers/gpio/gpio-mpc8xxx.c                        |  50 ++++-
 drivers/gpio/gpio-msc313.c                         |   5 +-
 drivers/gpio/gpio-pca953x.c                        |   4 +-
 drivers/gpio/gpio-pch.c                            |   1 -
 drivers/gpio/gpio-sama5d2-piobu.c                  |  18 +-
 drivers/gpio/gpio-stmpe.c                          |  55 ++---
 drivers/gpio/gpio-stp-xway.c                       |  10 +-
 drivers/gpio/gpio-syscon.c                         |   1 -
 drivers/gpio/gpio-tegra.c                          |   5 +-
 drivers/gpio/gpio-tegra186.c                       |   3 +-
 drivers/gpio/gpio-thunderx.c                       |   5 +-
 drivers/gpio/gpio-uniphier.c                       |   5 +-
 drivers/gpio/gpio-vf610.c                          |  31 ++-
 drivers/gpio/gpio-virtuser.c                       |  13 +-
 drivers/gpio/gpio-visconti.c                       |   5 +-
 drivers/gpio/gpio-xilinx.c                         |  11 +-
 drivers/gpio/gpio-zynq.c                           |  10 +-
 drivers/gpio/gpiolib-acpi.c                        |  43 ++--
 drivers/gpio/gpiolib-cdev.c                        |   8 +-
 drivers/gpio/gpiolib-devres.c                      | 120 ++++-------
 drivers/gpio/gpiolib-legacy.c                      |  94 ++++++++-
 drivers/gpio/gpiolib-of.c                          |  92 ++++-----
 drivers/gpio/gpiolib-swnode.c                      |  62 +++---
 drivers/gpio/gpiolib-sysfs.c                       |   6 +-
 drivers/gpio/gpiolib.c                             | 164 +++++++++++----
 drivers/gpio/gpiolib.h                             |  16 +-
 drivers/mfd/Kconfig                                |  12 ++
 drivers/mfd/Makefile                               |   1 +
 drivers/mfd/adp5585.c                              | 205 ++++++++++++++++++
 drivers/pwm/Kconfig                                |   7 +
 drivers/pwm/Makefile                               |   1 +
 drivers/pwm/pwm-adp5585.c                          | 184 +++++++++++++++++
 include/linux/gpio.h                               |  12 +-
 include/linux/mfd/adp5585.h                        | 126 ++++++++++++
 include/linux/platform_data/gpio-ath79.h           |  16 --
 include/linux/platform_data/gpio-davinci.h         |  21 --
 tools/gpio/Makefile                                |   2 +-
 tools/gpio/gpio-hammer.c                           |   4 +-
 63 files changed, 1503 insertions(+), 643 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/gpio/gpio_lpc32xx.txt
 create mode 100644 Documentation/devicetree/bindings/gpio/nxp,lpc3220-gpio.yaml
 create mode 100644 Documentation/devicetree/bindings/mfd/adi,adp5585.yaml
 create mode 100644 drivers/gpio/gpio-adp5585.c
 create mode 100644 drivers/mfd/adp5585.c
 create mode 100644 drivers/pwm/pwm-adp5585.c
 create mode 100644 include/linux/mfd/adp5585.h
 delete mode 100644 include/linux/platform_data/gpio-ath79.h
 delete mode 100644 include/linux/platform_data/gpio-davinci.h

.
Date: Tue, 17 Sep 2024 11:45:57 +0200
From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [GIT PULL] power sequencing updates for v6.12-rc1

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Linus,

Please pull the following updates for the power sequencing subsystem.
There's one change adding support for a new PMU model and another adding
documentation for the subsystem which probably should have been part of
the initial commit but better late than never.

Details are in the signed tag.

Thanks,
Bartosz Golaszewski

The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git tags/pwrseq-updates-for-v6.12-rc1

for you to fetch changes up to 8b7e0a6c443e855374a426dcdfd0a19912d70df3:

  Documentation: add a driver API doc for the power sequencing subsystem (2024-08-22 15:29:29 +0200)

----------------------------------------------------------------
power sequencing updates for v6.12-rc1

- add support for the new PMU variant inside the WCN6855 chipset
- add documentation for the subsystem

----------------------------------------------------------------
Bartosz Golaszewski (1):
      Documentation: add a driver API doc for the power sequencing subsystem

Konrad Dybcio (1):
      power: sequencing: qcom-wcn: add support for the WCN6855 PMU

 Documentation/driver-api/index.rst         |  1 +
 Documentation/driver-api/pwrseq.rst        | 95 ++++++++++++++++++++++++++++++
 MAINTAINERS                                |  1 +
 drivers/power/sequencing/pwrseq-qcom-wcn.c | 11 ++++
 4 files changed, 108 insertions(+)
 create mode 100644 Documentation/driver-api/pwrseq.rst

.
Date: Tue, 17 Sep 2024 06:49:05 -0700
From: "Paul E. McKenney" <paulmck@kernel.org>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, lkmm@lists.linux.dev,
	parri.andrea@gmail.com, akiyks@gmail.com, boqun.feng@gmail.com
Subject: [GIT PULL] LKMM changes for v6.12

Hello, Linus,

Please pull this LKMM update from:

  git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/lkmm.2024.09.14b
  # HEAD: a49f48cc7d26270bee727d30ce830d4129b33d4a: MAINTAINERS: Add the dedicated maillist info for LKMM (2024-09-13 23:56:44 -0700)

----------------------------------------------------------------
lkmm: Add documentation and mailing list

This pull request contains documentation updates from Andrea Parri and
Akira Yokosawa.  Also, there is now an lkmm@lists.linux.dev, and Boqun
Feng's update adds this to the LKMM MAINTAINERS entry.

Not included in this pull request are a couple of more commits from
Puranjay Mohan adding more atomic operations to LKMM, but these await a
herdtools7 release that includes tool-side support for this functionality.
With luck, I will send a separate pull request for these later in the
merge window.

----------------------------------------------------------------
Akira Yokosawa (3):
      tools/memory-model: Add locking.txt and glossary.txt to README
      tools/memory-model: simple.txt: Fix stale reference to recipes-pairs.txt
      docs/memory-barriers.txt: Remove left-over references to "CACHE COHERENCY"

Andrea Parri (1):
      tools/memory-model: Document herd7 (abstract) representation

Boqun Feng (1):
      MAINTAINERS: Add the dedicated maillist info for LKMM

 Documentation/memory-barriers.txt                  |   3 -
 MAINTAINERS                                        |   1 +
 tools/memory-model/Documentation/README            |  24 ++++-
 .../Documentation/herd-representation.txt          | 110 +++++++++++++++++++++
 tools/memory-model/Documentation/simple.txt        |   2 +-
 5 files changed, 135 insertions(+), 5 deletions(-)
 create mode 100644 tools/memory-model/Documentation/herd-representation.txt

.
Date: Tue, 17 Sep 2024 17:45:40 +0200
From: Helge Deller <deller@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-fbdev@vger.kernel.org,
	dri-devel@lists.freedesktop.org
Subject: [GIT PULL] fbdev fixes and cleanups for v6.12-rc1

Hi Linus,

please pull some updates and cleanups for the fbdev drivers for kernel 6.12-rc1.
This patchset includes a crashfix for xen and a possible use-after-free fix in pxafb.

Thanks!
Helge

----------------------------------------------------------------
The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b:

  Linux 6.11-rc1 (2024-07-28 14:19:55 -0700)

are available in the Git repository at:

  http://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev.git tags/fbdev-for-6.12-rc1

for you to fetch changes up to de5e89b6654ea0b021a5737e0f55fc6bed625550:

  fbdev: omapfb: Fix typo in comment (2024-09-11 20:53:04 +0200)

----------------------------------------------------------------
fbdev fixes and updates for 6.12-rc1:

- video: Reduce code when CONFIG_HAS_IOPORT=n
- xenfb: Fix crash by assigning fb_info->device
- pxafb: Fix possible use after free in pxafb_task()
- efifb: Introduce and use new devm_register_framebuffer() function
- mmpfb: Utilize devm_clk_get_enabled() helpers
- various typo fixes and code cleanups

----------------------------------------------------------------
Andrew Kreimer (1):
      fbdev: omapfb: Fix typo in comment

Chen Ni (3):
      fbdev: pxa3xx-gcu: Convert comma to semicolon
      fbdev: imsttfb: convert comma to semicolon
      fbdev: hyperv_fb: Convert comma to semicolon

Christophe JAILLET (3):
      fbdev: hpfb: Fix an error handling path in hpfb_dio_probe()
      fbdev: omapfb: panel-sony-acx565akm: Simplify show_cabc_available_modes()
      fbdev: omapfb: Use sysfs_emit_at() to simplify code

Jason Andryuk (1):
      fbdev: xen-fbfront: Assign fb_info->device

Kaixin Wang (1):
      fbdev: pxafb: Fix possible use after free in pxafb_task()

Niklas Schnelle (1):
      video: Handle HAS_IOPORT dependencies

Thomas Weißschuh (4):
      fbdev: Introduce devm_register_framebuffer()
      fbdev: efifb: Register sysfs groups through driver core
      fbdev: efifb: Use devm_register_framebuffer()
      fbdev: efifb: Use driver-private screen_info for sysfs

ying zuxin (1):
      fbdev: mmp: Use devm_clk_get_enabled() helpers

 drivers/video/fbdev/core/fbmem.c                   | 30 +++++++++++
 drivers/video/fbdev/efifb.c                        | 27 +++-------
 drivers/video/fbdev/hpfb.c                         |  1 +
 drivers/video/fbdev/hyperv_fb.c                    |  2 +-
 drivers/video/fbdev/imsttfb.c                      |  4 +-
 drivers/video/fbdev/mmp/hw/mmp_ctrl.c              |  6 +--
 drivers/video/fbdev/omap/omapfb_main.c             | 36 ++++++--------
 .../omap2/omapfb/displays/panel-sony-acx565akm.c   | 15 +++---
 drivers/video/fbdev/omap2/omapfb/dss/hdmi.h        |  2 +-
 drivers/video/fbdev/pxa3xx-gcu.c                   |  4 +-
 drivers/video/fbdev/pxafb.c                        |  1 +
 drivers/video/fbdev/xen-fbfront.c                  |  1 +
 include/linux/fb.h                                 |  1 +
 include/video/vga.h                                | 58 ++++++++++++++++------
 14 files changed, 111 insertions(+), 77 deletions(-)

.
Date: Tue, 17 Sep 2024 19:15:28 +0300
From: "Jarkko Sakkinen" <jarkko@kernel.org>
To: "Linus Torvalds" <torvalds@linux-foundation.org>
Cc: "Peter Huewe" <peterhuewe@gmx.de>, "Jason Gunthorpe" <jgg@ziepe.ca>,
 "David Howells" <dhowells@redhat.com>, <keyrings@vger.kernel.org>,
 <linux-integrity@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [GIT PULL] TPM DEVICE DRIVER: tpmdd-next-6.12-rc1

The following changes since commit 2f27fce67173bbb05d5a0ee03dae5c021202c912=
:

  Merge tag 'sound-6.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/g=
it/tiwai/sound (2024-09-17 17:03:43 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git tags=
/tpmdd-next-6.12-rc1

for you to fetch changes up to f168c000d27f8134160d4a52dfc474a948a3d7e9:

  tpm: export tpm2_sessions_init() to fix ibmvtpm building (2024-09-17 18:5=
6:37 +0300)

----------------------------------------------------------------
Hi,

Just updates and fixes, no major changes.

I might send a PR during the release cycle addressing a performance issue i=
n the
bus encryption:

1. https://bugzilla.kernel.org/show_bug.cgi?id=3D219229
2. https://lore.kernel.org/linux-integrity/20240917154444.702370-1-jarkko@k=
ernel.org/

The first version of the patch set cut out already five seconds and I
expect similar figures from the current version but I really need some
more feedback. However, this week is not exactly optimal for getting
it, given the Vienna conference.

BR, Jarkko

----------------------------------------------------------------
Jonathan McDowell (1):
      tpm: Clean up TPM space after command failure

Kexy Biscuit (1):
      tpm: export tpm2_sessions_init() to fix ibmvtpm building

Michal Suchanek (2):
      MAINTAINERS: Add selftest files to TPM section
      selftests: tpm2: test_smoke: Run only when TPM2 is avaialable.

Uwe Kleine-K=C3=B6nig (1):
      tpm: Drop explicit initialization of struct i2c_device_id::driver_dat=
a to 0

 MAINTAINERS                                | 1 +
 drivers/char/tpm/st33zp24/i2c.c            | 2 +-
 drivers/char/tpm/tpm-dev-common.c          | 2 ++
 drivers/char/tpm/tpm2-sessions.c           | 1 +
 drivers/char/tpm/tpm2-space.c              | 3 +++
 drivers/char/tpm/tpm_i2c_atmel.c           | 2 +-
 drivers/char/tpm/tpm_tis_i2c.c             | 2 +-
 tools/testing/selftests/tpm2/test_smoke.sh | 2 ++
 8 files changed, 12 insertions(+), 3 deletions(-)

.
Date: Tue, 17 Sep 2024 18:31:19 +0200
From: Helge Deller <deller@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org,
	James Bottomley <James.Bottomley@hansenpartnership.com>,
	John David Anglin <dave.anglin@bell.net>
Subject: [GIT PULL] parisc architecture fixes and updates for v6.12-rc1

Hi Linus,

Please pull the parisc architecture fixes and updates for 6.12-rc1, which
includes:

- On parisc we now use the generic clockevent framework for timekeeping.

- Although there is no 64-bit glibc/userspace for parisc yet, for testing
  purposes one can run statically linked 64-bit binaries. This patchset
  contains two patches which fix 64-bit userspace which has been broken since
  kernel 4.19.

- Fix the userspace stack position and size when the ADDR_NO_RANDOMIZE
  personality is enabled.

- On other architectures mmap(MAP_GROWSDOWN | MAP_STACK) creates a
  downward-growing stack. On parisc mmap(MAP_STACK) is now sufficient
  to create an upward-growing stack.

Thanks!
Helge

----------------------------------------------------------------
The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63:

  Linux 6.11-rc7 (2024-09-08 14:50:28 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git tags/parisc-for-6.12-rc1

for you to fetch changes up to 5d698966fa7b452035c44c937d704910bf3440dd:

  parisc: Allow mmap(MAP_STACK) memory to automatically expand upwards (2024-09-16 23:01:43 +0200)

----------------------------------------------------------------
parisc architecture fixes and updates for kernel v6.12-rc1:

- Convert parisc to the generic clockevents framework
- Fix syscall and mm for 64-bit userspace
- Fix stack start when ADDR_NO_RANDOMIZE personality is set
- Fix mmap(MAP_STACK) to map upward growing expandable memory on parisc

----------------------------------------------------------------
Helge Deller (6):
      parisc: Convert to generic clockevents
      parisc: Fix stack start for ADDR_NO_RANDOMIZE personality
      parisc: Fix 64-bit userspace syscall path
      parisc: Fix itlb miss handler for 64-bit programs
      parisc: Use PRIV_USER instead of hardcoded value
      parisc: Allow mmap(MAP_STACK) memory to automatically expand upwards

Hongbo Li (1):
      parisc: pdc_stable: Constify struct kobj_type

 arch/parisc/Kconfig                 |   2 +-
 arch/parisc/include/asm/mman.h      |  14 ++
 arch/parisc/include/asm/processor.h |   2 +-
 arch/parisc/kernel/entry.S          |   6 +-
 arch/parisc/kernel/smp.c            |   2 +-
 arch/parisc/kernel/syscall.S        |  14 +-
 arch/parisc/kernel/time.c           | 261 +++++++++++++++---------------------
 arch/parisc/kernel/traps.c          |   2 +-
 drivers/parisc/pdc_stable.c         |   2 +-
 fs/exec.c                           |   3 +-
 10 files changed, 136 insertions(+), 172 deletions(-)

.
Date: Tue, 17 Sep 2024 12:05:50 -0500
From: David Teigland <teigland@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, gfs2@lists.linux.dev
Subject: [GIT PULL] dlm updates for 6.12

Hi Linus,

Please pull dlm updates from tag:

git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git dlm-6.12

Summary:

- Remove some unnecesary hold/unhold rsb refcounting
  in cases where an existing refcount is known to exist.
- Remove some unnecessary checking for zero nodeids, which
  should never exist, and add some warning if they do.
- Make the slow freeing of structs in release_lockspace()
  async, run from a workqueue.
- Prior rcu freeing allows some further struct lookups to
  run without a lock.
- Use blocking kernel_connect on sockets to avoid EINPROGRESS.

Thanks,
Dave


Alexander Aring (11):
      dlm: cleanup memory allocation helpers
      dlm: remove unnecessary refcounts
      dlm: never return invalid nodeid by dlm_our_nodeid()
      dlm: warn about invalid nodeid comparsions
      dlm: drop kobject release callback handling
      dlm: async freeing of lockspace resources
      dlm: use RSB_HASHED to avoid lookup twice
      dlm: move dlm_search_rsb_tree() out of lock
      dlm: move lkb xarray lookup out of lock
      dlm: do synchronized socket connect call
      dlm: add missing -ENOMEM if alloc_workqueue() fails


 fs/dlm/config.c       |   2 +-
 fs/dlm/dlm_internal.h |   5 ++
 fs/dlm/lock.c         | 134 +++++++++++++++++++++++++++-----------------------
 fs/dlm/lock.h         |   2 +
 fs/dlm/lockspace.c    |  97 ++++++++++++++++++------------------
 fs/dlm/lowcomms.c     |  36 +-------------
 fs/dlm/main.c         |  12 +++++
 fs/dlm/member.c       |   2 +
 fs/dlm/memory.c       |  28 +++++------
 fs/dlm/memory.h       |   4 +-
 fs/dlm/recover.c      |   9 ++--
 11 files changed, 164 insertions(+), 167 deletions(-)


.
