Subject: [PATCH] ext4: Prevent successful remount as r/w after filesystem abort
From: Fanqi Yu <fanqi.yu@columbia.edu>
To: tytso@mit.edu, adilger.kernel@dilger.ca
Cc: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
        Fanqi Yu <fanqi.yu@columbia.edu>
Date: Sun, 15 Sep 2024 17:08:04 -0400

.
Subject: [PATCH 6.6 v3] riscv: dts: starfive: add assigned-clock* to limit frquency
From: WangYuli <wangyuli@uniontech.com>
To: stable@vger.kernel.org,
	gregkh@linuxfoundation.org,
	sashal@kernel.org,
	william.qiu@starfivetech.com,
	emil.renner.berthing@canonical.com,
	conor.dooley@microchip.com,
	wangyuli@uniontech.com
Cc: kernel@esmil.dk,
	conor@kernel.org,
	robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org,
	paul.walmsley@sifive.com,
	palmer@dabbelt.com,
	aou@eecs.berkeley.edu,
	linux-riscv@lists.infradead.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 11:46:02 +0800

.
Subject: Re: [PATCH 0/7 v2 RFC] Make wake_up_{bit,var} less fragile
From: "NeilBrown" <neilb@suse.de>
To: "Ingo Molnar" <mingo@redhat.com>, "Peter Zijlstra" <peterz@infradead.org>,
 "Linus Torvalds" <torvalds@linux-foundation.org>,
 "Jens Axboe" <axboe@kernel.dk>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
 linux-block@vger.kernel.org
Date: Mon, 16 Sep 2024 09:52:47 +1000

.
Subject: [PATCH 0/2] Add touchscreen and TMP451 tempsensor nodes to Google
 Pixel C (tegra210-smaug) Device Tree
From: Jasper Korten via B4 Relay <devnull+jja2000.gmail.com@kernel.org>
To: Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, 
 Thierry Reding <thierry.reding@gmail.com>, 
 Jonathan Hunter <jonathanh@nvidia.com>
Cc: devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, 
 linux-kernel@vger.kernel.org, Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>, 
 Jasper Korten <jja2000@gmail.com>
Date: Mon, 16 Sep 2024 00:48:12 +0200

.
Subject: [GIT PULL] regmap updates for v6.12
From: Mark Brown <broonie@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Date: Mon, 16 Sep 2024 00:26:11 +0100

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(-)

.
Subject: [GIT PULL] regulator updates for v6.12
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>
Date: Mon, 16 Sep 2024 00:26:27 +0100

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

.
Subject: [GIT PULL] SPI updates for v6.12
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>
Date: Mon, 16 Sep 2024 00:26:43 +0100

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

.
Subject: [syzbot] [jfs?] UBSAN: shift-out-of-bounds in jfs_statfs (2)
From: syzbot <syzbot+bb0aa125eb8d70475ebd@syzkaller.appspotmail.com>
To: jfs-discussion@lists.sourceforge.net, linux-kernel@vger.kernel.org, 
	shaggy@kernel.org, syzkaller-bugs@googlegroups.com
Date: Sun, 15 Sep 2024 16:58:25 -0700

.
Subject: error[E0428]: the name `ARCH_SLAB_MINALIGN` is defined multiple times
From: kernel test robot <lkp@intel.com>
To: Miguel Ojeda <ojeda@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	linux-kernel@vger.kernel.org, Palmer Dabbelt <palmer@rivosinc.com>,
	Gary Guo <gary@garyguo.net>,
	Conor Dooley <conor.dooley@microchip.com>
Date: Mon, 16 Sep 2024 08:09:54 +0800

.
Subject: [PATCH] kselftest/alsa: add silent flag to reduce noise
From: Abdul Rahim <abdul.rahim@myyahoo.com>
To: perex@perex.cz,
	tiwai@suse.com,
	broonie@kernel.org,
	shuah@kernel.org
Cc: Abdul Rahim <abdul.rahim@myyahoo.com>,
	linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 05:11:30 +0530

.
Subject: [ANNOUNCE] 5.10.225-rt117
From: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
To: LKML <linux-kernel@vger.kernel.org>,
	linux-rt-users <linux-rt-users@vger.kernel.org>,
	stable-rt <stable-rt@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Carsten Emde <C.Emde@osadl.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Daniel Wagner <daniel.wagner@suse.com>,
	Tom Zanussi <tom.zanussi@linux.intel.com>,
	Clark Williams <williams@redhat.com>,
	Mark Gross <markgross@kernel.org>, Pavel Machek <pavel@denx.de>,
	Jeff Brady <jeffreyjbrady@gmail.com>,
	Luis Goncalves <lgoncalv@redhat.com>
Date: Sun, 15 Sep 2024 21:52:59 -0300

.
Subject: [PATCH] fbcon: Fix a NULL pointer dereference issue in fbcon_putcs
From: Qianqiang Liu <qianqiang.liu@163.com>
To: aniel@ffwll.ch,
	deller@gmx.de,
	gregkh@linuxfoundation.org,
	linux-kernel@vger.kernel.org
Cc: linux-fbdev@vger.kernel.org,
	dri-devel@lists.freedesktop.org,
	Qianqiang Liu <qianqiang.liu@163.com>,
	stable@vger.kernel.org,
	syzbot+3d613ae53c031502687a@syzkaller.appspotmail.com
Date: Mon, 16 Sep 2024 09:10:28 +0800

.
Subject: [PATCH] Fix spelling errors and codestyle in file drivers/usb/gadget/udc/m66592-udc.c
From: "Everest K.C." <everestkc@everestkc.com.np>
To: gregkh@linuxfoundation.org,
	u.kleine-koenig@pengutronix.de
Cc: "Everest K.C." <everestkc@everestkc.com.np>,
	linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Sun, 15 Sep 2024 19:45:07 -0600

.
Subject: [PATCH -next v3 0/2] perf stat: Support inherit events for bperf
From: Tengda Wu <wutengda@huaweicloud.com>
To: Peter Zijlstra <peterz@infradead.org>,
	Namhyung Kim <namhyung@kernel.org>
Cc: song@kernel.org,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	kan.liang@linux.intel.com,
	linux-perf-users@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	bpf@vger.kernel.org
Date: Mon, 16 Sep 2024 01:43:16 +0000

.
Subject: [PATCH] Bluetooth: btusb: Add USB HW IDs for MT7920/MT7925
From: Jiande Lu <jiande.lu@mediatek.com>
To: Marcel Holtmann <marcel@holtmann.org>, Johan Hedberg
	<johan.hedberg@gmail.com>, Luiz Von Dentz <luiz.dentz@gmail.com>
Date: Mon, 16 Sep 2024 11:22:28 +0800

.
Subject: [PATCH bpf-next v2 0/2] Support eliding map lookup nullness
From: Daniel Xu <dxu@dxuuu.xyz>
To: bpf@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org,
	ast@kernel.org,
	andrii@kernel.org
Cc: kernel-team@meta.com
Date: Sun, 15 Sep 2024 21:45:18 -0600

.
Subject: [PATCH] usb: use mutex_lock in iowarrior_read()
From: Jeongjun Park <aha310510@gmail.com>
To: gregkh@linuxfoundation.org
Cc: colin.i.king@gmail.com,
	linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Jeongjun Park <aha310510@gmail.com>
Date: Mon, 16 Sep 2024 13:06:29 +0900

.
Subject: linux-next: manual merge of the drm tree with Linus' tree
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Dave Airlie <airlied@redhat.com>
Cc: Alex Deucher <alexander.deucher@amd.com>, Jerry Zuo <jerry.zuo@amd.com>,
 DRI <dri-devel@lists.freedesktop.org>, Linux Kernel Mailing List
 <linux-kernel@vger.kernel.org>, Linux Next Mailing List
 <linux-next@vger.kernel.org>, Mario Limonciello
 <mario.limonciello@amd.com>, Sung Joon Kim <sungjoon.kim@amd.com>, Tobias
 Jakobi <tjakobi@math.uni-bielefeld.de>
Date: Mon, 16 Sep 2024 14:15:17 +1000

.
Subject: linux-next: manual merge of the sound tree with the arm-soc tree
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Takashi Iwai <tiwai@suse.de>, Olof Johansson <olof@lixom.net>, Arnd
 Bergmann <arnd@arndb.de>
Cc: Alexander Sverdlin <alexander.sverdlin@gmail.com>, Linux Kernel Mailing
 List <linux-kernel@vger.kernel.org>, Linux Next Mailing List
 <linux-next@vger.kernel.org>, ARM <linux-arm-kernel@lists.infradead.org>,
 Mark Brown <broonie@kernel.org>, Nikita Shubin <nikita.shubin@maquefel.me>,
 Uwe =?UTF-8?B?S2xlaW5lLUvDtm5pZw==?= <u.kleine-koenig@baylibre.com>
Date: Mon, 16 Sep 2024 14:58:00 +1000

.
Subject: [PATCH v2 0/4] Minor physmem cleanups/fixes
From: "Tiwei Bie" <tiwei.btw@antgroup.com>
To: richard@nod.at,
	anton.ivanov@cambridgegreys.com,
	johannes@sipsolutions.net
Cc:  <linux-um@lists.infradead.org>,
   <linux-kernel@vger.kernel.org>,
   <benjamin@sipsolutions.net>,
  "Tiwei Bie" <tiwei.btw@antgroup.com>
Date: Mon, 16 Sep 2024 12:59:46 +0800

.
Subject: [RFC 0/6] Managed Percpu Refcount
From: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
To: <linux-kernel@vger.kernel.org>
Date: Mon, 16 Sep 2024 10:38:05 +0530

.
Subject: [RESEND PATCH] sched/syscalls: Allow setting niceness using sched_param struct
From: Michael Pratt <mcpratt@pm.me>
To: Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Vincent Guittot <vincent.guittot@linaro.org>, Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: linux-kernel@vger.kernel.org, Michael Pratt <mcpratt@pm.me>, stable@vger.kernel.org
Date: Mon, 16 Sep 2024 05:08:49 +0000

.
Subject: [PATCH v2] fs/exfat: resolve memory leak from exfat_create_upcase_table()
From: Daniel Yang <danielyangkang@gmail.com>
To: viro@zeniv.linux.org.uk,
	Namjae Jeon <linkinjeon@kernel.org>,
	Sungjong Seo <sj1557.seo@samsung.com>,
	linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Daniel Yang <danielyangkang@gmail.com>,
	syzbot+e1c69cadec0f1a078e3d@syzkaller.appspotmail.com
Date: Sun, 15 Sep 2024 22:21:27 -0700

.
Subject: [PATCH v1] arm64: defconfig: enable WCD937x driver as module
From: Mohammad Rafi Shaik <quic_mohs@quicinc.com>
To: Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>
Date: Mon, 16 Sep 2024 10:53:52 +0530

.
Subject: [PATCH] ASoC: amd: acp: don't set card long_name
From: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
To: <broonie@kernel.org>
Date: Mon, 16 Sep 2024 11:43:18 +0530

.
Subject: [RESEND PATCH 0/3] Add initial support for Canaan Kendryte K230 pinctrl
From: Ze Huang <18771902331@163.com>
To: Linus Walleij <linus.walleij@linaro.org>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Ze Huang <18771902331@163.com>,
	Yangyu Chen <cyy@cyyself.name>
Cc: linux-gpio@vger.kernel.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org
Date: Mon, 16 Sep 2024 14:30:21 +0800

.
Subject: linux-next: duplicate patch in the devicetree tree
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Rob Herring <robh@kernel.org>, Wim Van Sebroeck <wim@iguana.be>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Linux Next
 Mailing List <linux-next@vger.kernel.org>
Date: Mon, 16 Sep 2024 16:01:27 +1000

.
Subject: [PATCH net v2] octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx()
From: Aleksandr Mishin <amishin@t-argos.ru>
To: Veerasenareddy Burru <vburru@marvell.com>
Date: Mon, 16 Sep 2024 09:02:12 +0300

.
Subject: [PowerPC][Linux-next][6.11.0-rc4-next-20240820] OOPs while running
 LTP FS Stress
From: Venkat Rao Bagalkote <venkat88@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
        peterz@infradead.org, vschneid@redhat.com, mingo@kernel.org,
        sfr@canb.auug.org.au
Date: Mon, 16 Sep 2024 12:00:52 +0530

.
Subject: [PATCH] ARM: dts: microchip: Add trng labels for all at91 SoCs
From: Alexander Dahl <ada@thorsis.com>
To: Conor Dooley <conor+dt@kernel.org>
Cc: Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Nicolas Ferre <nicolas.ferre@microchip.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Claudiu Beznea <claudiu.beznea@tuxon.dev>,
	devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS),
	linux-arm-kernel@lists.infradead.org (moderated list:ARM/Microchip (AT91) SoC support),
	linux-kernel@vger.kernel.org (open list)
Date: Mon, 16 Sep 2024 08:42:32 +0200

.
Subject: [PATCH v2 0/2] xen/swiotlb: fix 2 issues in xen-swiotlb
From: Juergen Gross <jgross@suse.com>
To: linux-kernel@vger.kernel.org,
	iommu@lists.linux.dev
Cc: Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	xen-devel@lists.xenproject.org
Date: Mon, 16 Sep 2024 08:47:46 +0200

.
Subject: drivers/vdpa/octeon_ep/octep_vdpa_hw.c:143 octep_process_mbox()
 warn: missing error code? 'ret'
From: Dan Carpenter <dan.carpenter@linaro.org>
To: oe-kbuild@lists.linux.dev, Srujana Challa <schalla@marvell.com>
Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev,
	linux-kernel@vger.kernel.org, "Michael S. Tsirkin" <mst@redhat.com>,
	Vamsi Attunuru <vattunuru@marvell.com>,
	Shijith Thotton <sthotton@marvell.com>,
	Nithin Dabilpuram <ndabilpuram@marvell.com>
Date: Mon, 16 Sep 2024 10:35:28 +0300

.
Subject: Please revert the addition of the AMD QDMA driver
From: Christoph Hellwig <hch@lst.de>
To: Vinod Koul <vkoul@kernel.org>, Nishad Saraf <nishads@amd.com>,
	Lizhi Hou <lizhi.hou@amd.com>
Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 09:40:51 +0200

.
Subject: [PATCH] ata: libata-eh: Fix the low data link negotiation
From: Guoliang Zhang <zhangguoliang@zspace.cn>
To: dlemoal@kernel.org
Cc: cassel@kernel.org,
	linux-ide@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Guoliang Zhang <zhangguoliang@zspace.cn>
Date: Mon, 16 Sep 2024 15:42:31 +0800

.
Subject: [PATCH] selftests: Makefile: create OUTPUT dir
From: Anders Roxell <anders.roxell@linaro.org>
To: shuah@kernel.org
Cc: willemb@google.com,
	kuba@kernel.org,
	linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Anders Roxell <anders.roxell@linaro.org>
Date: Mon, 16 Sep 2024 09:56:55 +0200

.
Subject: [PATCH] crypto: Fix logical operator in _aead_recvmsg()
From: George Rurikov <g.ryurikov@securitycode.ru>
To: Herbert Xu <herbert@gondor.apana.org.au>
Date: Mon, 16 Sep 2024 10:44:22 +0300

.
Subject: [GIT PULL] pstore updates for v6.12-rc1
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>
Date: Mon, 16 Sep 2024 01:24:35 -0700

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

.
Subject: linux-next: manual merge of the rust tree with Linus' tree
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Miguel Ojeda <ojeda@kernel.org>
Cc: Alice Ryhl <aliceryhl@google.com>, Andreas Hindborg
 <a.hindborg@kernel.org>, Andreas Hindborg <a.hindborg@samsung.com>, Linux
 Kernel Mailing List <linux-kernel@vger.kernel.org>, Linux Next Mailing List
 <linux-next@vger.kernel.org>, Matthew Maurer <mmaurer@google.com>
Date: Mon, 16 Sep 2024 18:03:16 +1000

.
Subject: [PATCH v2 00/11] ARM: dts: amlogic: first easy dtbs fixes
From: Neil Armstrong <neil.armstrong@linaro.org>
To: Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, Kevin Hilman <khilman@baylibre.com>, 
 Jerome Brunet <jbrunet@baylibre.com>, 
 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, 
 linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, 
 Neil Armstrong <neil.armstrong@linaro.org>
Date: Mon, 16 Sep 2024 10:08:29 +0200

.
Subject: [linux-next:master] [mm]  cc8cb3697a:  stress-ng.pkey.ops_per_sec
 4.4% improvement
From: kernel test robot <oliver.sang@intel.com>
To: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Date: Mon, 16 Sep 2024 16:11:48 +0800

.
Subject: [PATCH 0/3] arm64: dts: qcom: x1e80100: fix missing PCIe PHY clocks
From: Johan Hovold <johan+linaro@kernel.org>
To: Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konradybcio@kernel.org>,
	Vinod Koul <vkoul@kernel.org>
Cc: Kishon Vijay Abraham I <kishon@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Abel Vesa <abel.vesa@linaro.org>,
	Rajendra Nayak <quic_rjendra@quicinc.com>,
	Sibi Sankar <quic_sibis@quicinc.com>,
	linux-arm-msm@vger.kernel.org,
	linux-phy@lists.infradead.org,
	devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Johan Hovold <johan+linaro@kernel.org>
Date: Mon, 16 Sep 2024 10:23:04 +0200

.
Subject: [RFC PATCH] remoteproc: k3-r5: Fix check performed in k3_r5_rproc_{mbox_callback/kick}
From: Siddharth Vadapalli <s-vadapalli@ti.com>
To: <andersson@kernel.org>, <mathieu.poirier@linaro.org>, <b-padhi@ti.com>
Date: Mon, 16 Sep 2024 14:01:31 +0530

.
Subject: linux-next: build warnings after merge of the block tree
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Jens Axboe <axboe@kernel.dk>
Cc: Keith Busch <kbusch@kernel.org>, Linux Kernel Mailing List
 <linux-kernel@vger.kernel.org>, Linux Next Mailing List
 <linux-next@vger.kernel.org>
Date: Mon, 16 Sep 2024 18:36:22 +1000

.
Subject: [GIT pull] core/debugobjects for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:38:34 +0200 (CEST)

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);


.
Subject: [PATCH 0/2] ASoC: tas5805m: Adjustments for tas5805m_i2c_probe()
From: Markus Elfring <Markus.Elfring@web.de>
To: linux-sound@vger.kernel.org, Jaroslav Kysela <perex@perex.cz>,
 Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>,
 Takashi Iwai <tiwai@suse.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Julia Lawall <julia.lawall@inria.fr>
Date: Mon, 16 Sep 2024 10:38:09 +0200

.
Subject: [GIT pull] smp/core for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:38:37 +0200 (CEST)

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)
 {


.
Subject: [GIT pull] timers/clocksource for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:38:39 +0200 (CEST)

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);


.
Subject: [GIT pull] timers/core for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:38:41 +0200 (CEST)

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();
 }


.
Subject: [GIT pull] irq/core for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:38:36 +0200 (CEST)

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 +


.
Subject: [GIT PULL] execve updates for v6.12-rc1
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>
Date: Mon, 16 Sep 2024 01:39:39 -0700

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

.
Subject: [GIT pull] core/debugobjects for v6.12-rc1
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org
Date: Mon, 16 Sep 2024 10:44:05 +0200 (CEST)

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);


.
Subject: [PATCH 0/2] Updates for Atmel SSC DAI
From: Andrei Simion <andrei.simion@microchip.com>
To: <claudiu.beznea@tuxon.dev>, <lgirdwood@gmail.com>, <broonie@kernel.org>,
	<perex@perex.cz>, <tiwai@suse.com>, <nicolas.ferre@microchip.com>,
	<alexandre.belloni@bootlin.com>
Date: Mon, 16 Sep 2024 11:52:13 +0300

.
Subject: [PATCH 6.10] LoongArch: KVM: Remove unnecessary definition of KVM_PRIVATE_MEM_SLOTS
From: WangYuli <wangyuli@uniontech.com>
To: stable@vger.kernel.org,
	gregkh@linuxfoundation.org,
	sashal@kernel.org,
	maobibo@loongson.cn,
	guanwentao@uniontech.com,
	wangyuli@uniontech.com,
	chenhuacai@loongson.cn
Cc: zhaotianrui@loongson.cn,
	kernel@xen0n.name,
	kvm@vger.kernel.org,
	loongarch@lists.linux.dev,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 17:20:52 +0800

.
Subject: [PATCH 6.10] LoongArch: KVM: Remove undefined a6 argument comment for kvm_hypercall()
From: WangYuli <wangyuli@uniontech.com>
To: stable@vger.kernel.org,
	gregkh@linuxfoundation.org,
	sashal@kernel.org,
	maobibo@loongson.cn,
	guanwentao@uniontech.com,
	zhangdandan@uniontech.com,
	wangyuli@uniontech.com,
	chenhuacai@loongson.cn
Cc: zhaotianrui@loongson.cn,
	kernel@xen0n.name,
	kvm@vger.kernel.org,
	loongarch@lists.linux.dev,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 17:25:46 +0800

.
Subject: [PATCH v2 6.10] LoongArch: KVM: Remove undefined a6 argument comment for kvm_hypercall()
From: WangYuli <wangyuli@uniontech.com>
To: stable@vger.kernel.org,
	gregkh@linuxfoundation.org,
	sashal@kernel.org,
	maobibo@loongson.cn,
	guanwentao@uniontech.com,
	zhangdandan@uniontech.com,
	wangyuli@uniontech.com,
	chenhuacai@loongson.cn
Cc: zhaotianrui@loongson.cn,
	kernel@xen0n.name,
	kvm@vger.kernel.org,
	loongarch@lists.linux.dev,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 17:28:57 +0800

.
Subject: [PATCH] HID: plantronics: Workaround for an unexcepted opposite volume key
From: Wade Wang <wade.wang@hp.com>
To: jikos@kernel.org,
	bentiss@kernel.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	wade.wang@hp.com
Cc: stable@vger.kernel.org
Date: Mon, 16 Sep 2024 16:56:00 +0800

.
Subject: [PATCH v3 0/4] Add support for AST2700 clk driver
From: Ryan Chen <ryan_chen@aspeedtech.com>
To: <ryan_chen@aspeedtech.com>, <mturquette@baylibre.com>, <sboyd@kernel.org>,
	<robh@kernel.org>, <krzk+dt@kernel.org>, <conor+dt@kernel.org>,
	<joel@jms.id.au>, <andrew@codeconstruct.com.au>, <p.zabel@pengutronix.de>,
	<linux-kernel@vger.kernel.org>, <linux-clk@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>,
	<linux-aspeed@lists.ozlabs.org>
Date: Mon, 16 Sep 2024 17:10:35 +0800

.
Subject: [PATCH 0/2] Updates for mchp-spdif(tx/rx)
From: Andrei Simion <andrei.simion@microchip.com>
To: <claudiu.beznea@tuxon.dev>, <lgirdwood@gmail.com>, <broonie@kernel.org>,
	<perex@perex.cz>, <tiwai@suse.com>, <nicolas.ferre@microchip.com>,
	<alexandre.belloni@bootlin.com>
Date: Mon, 16 Sep 2024 12:10:55 +0300

.
Subject: [PATCH] arm64: dts: qcom: sa8775p: add DisplayPort device node
From: Soutrik Mukhopadhyay <quic_mukhopad@quicinc.com>
To: andersson@kernel.org, konradybcio@kernel.org, robh@kernel.org,
        krzk+dt@kernel.org, conor+dt@kernel.org
Cc: Soutrik Mukhopadhyay <quic_mukhopad@quicinc.com>,
        linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
        linux-kernel@vger.kernel.org, quic_riteshk@quicinc.com,
        quic_vproddut@quicinc.com, quic_abhinavk@quicinc.com
Date: Mon, 16 Sep 2024 14:43:44 +0530

.
Subject: linux-next: Tree for Sep 16
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Linux Next Mailing List <linux-next@vger.kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Date: Mon, 16 Sep 2024 19:30:34 +1000

.
Subject: [GIT PULL] hardening updates for v6.12-rc1
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>
Date: Mon, 16 Sep 2024 02:39:12 -0700

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

.
Subject: [PATCH v4 0/2] Do not shatter hugezeropage on wp-fault
From: Dev Jain <dev.jain@arm.com>
To: akpm@linux-foundation.org,
	david@redhat.com,
	willy@infradead.org,
	kirill.shutemov@linux.intel.com
Cc: ryan.roberts@arm.com,
	anshuman.khandual@arm.com,
	catalin.marinas@arm.com,
	cl@gentwo.org,
	vbabka@suse.cz,
	mhocko@suse.com,
	apopple@nvidia.com,
	dave.hansen@linux.intel.com,
	will@kernel.org,
	baohua@kernel.org,
	jack@suse.cz,
	mark.rutland@arm.com,
	hughd@google.com,
	aneesh.kumar@kernel.org,
	yang@os.amperecomputing.com,
	peterx@redhat.com,
	ioworker0@gmail.com,
	jglisse@google.com,
	wangkefeng.wang@huawei.com,
	ziy@nvidia.com,
	linux-kernel@vger.kernel.org,
	linux-mm@kvack.org,
	Dev Jain <dev.jain@arm.com>
Date: Mon, 16 Sep 2024 15:13:07 +0530

.
Subject: [GIT PULL] slab updates for 6.11
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>
Date: Mon, 16 Sep 2024 11:45:42 +0200

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(-)

.
Subject: [PATCH 0/4] clk: lan966x: add support for lan969x SoC clock driver
From: Daniel Machon <daniel.machon@microchip.com>
To: Michael Turquette <mturquette@baylibre.com>, Stephen Boyd
	<sboyd@kernel.org>, Rob Herring <robh@kernel.org>, Krzysztof Kozlowski
	<krzk+dt@kernel.org>, Conor Dooley <conor+dt@kernel.org>, Kavyasree Kotagiri
	<kavyasree.kotagiri@microchip.com>, Steen Hegelund
	<Steen.Hegelund@microchip.com>, Horatiu Vultur <horatiu.vultur@microchip.com>
Date: Mon, 16 Sep 2024 11:49:18 +0200

.
Subject: [PATCH v3 1/2] rust: kernel: clean up empty `///` lines
From: Hridesh MG <hridesh699@gmail.com>
To: rust-for-linux@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Hridesh MG <hridesh699@gmail.com>,
	Andreas Hindborg <a.hindborg@samsung.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	Miguel Ojeda <ojeda@kernel.org>,
	Alex Gaynor <alex.gaynor@gmail.com>,
	Wedson Almeida Filho <wedsonaf@gmail.com>,
	Gary Guo <gary@garyguo.net>,
	=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= <bjorn3_gh@protonmail.com>,
	Benno Lossin <benno.lossin@proton.me>,
	Alice Ryhl <aliceryhl@google.com>,
	Trevor Gross <tmgross@umich.edu>,
	Jens Axboe <axboe@kernel.dk>,
	Matt Gilbride <mattgilbride@google.com>,
	Shuah Khan <skhan@linuxfoundation.org>
Date: Mon, 16 Sep 2024 15:23:39 +0530

.
Subject: [PATCH v3] dt-bindings: serial: rs485: Fix rs485-rts-delay property
From: Michal Simek <michal.simek@amd.com>
To: <linux-kernel@vger.kernel.org>, <monstr@monstr.eu>,
	<michal.simek@xilinx.com>, <git@xilinx.com>
Date: Mon, 16 Sep 2024 11:53:06 +0200

.
Subject: [REGRESSION] Update of linux-firmware breaks wifi on Thinkpad T14
From: Christian Heusel <christian@heusel.eu>
To: linux-firmware@kernel.org, Kalle Valo <kvalo@qca.qualcomm.com>
Cc: regressions@lists.linux.dev, linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 12:49:33 +0200

.
Subject: [PATCH 1/1] io_uring/sqpoll: do not put cpumask on stack
From: Felix Moessbauer <felix.moessbauer@siemens.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring <io-uring@vger.kernel.org>,
	linux-kernel@vger.kernel.org,
	Felix Moessbauer <felix.moessbauer@siemens.com>
Date: Mon, 16 Sep 2024 12:20:29 +0200

.
Subject: [PATCH v2 1/1] io_uring/sqpoll: do not put cpumasks on stack
From: Felix Moessbauer <felix.moessbauer@siemens.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring <io-uring@vger.kernel.org>,
	linux-kernel@vger.kernel.org,
	Felix Moessbauer <felix.moessbauer@siemens.com>
Date: Mon, 16 Sep 2024 12:55:14 +0200

.
Subject: [PATCH v4 0/3] btrfs: Don't block system suspend during fstrim
From: Luca Stefani <luca.stefani.ge1@gmail.com>
To: 
Cc: Luca Stefani <luca.stefani.ge1@gmail.com>,
	Chris Mason <clm@fb.com>,
	Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>,
	linux-btrfs@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 12:16:06 +0200

.
Subject: [PATCH v10 0/8] Coresight for Kernel panic and watchdog reset
From: Linu Cherian <lcherian@marvell.com>
To: <suzuki.poulose@arm.com>, <mike.leach@linaro.org>, <james.clark@arm.com>
Date: Mon, 16 Sep 2024 16:04:29 +0530

.
Subject: [git pull] IOMMU Updates for Linux v6.12
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
Date: Mon, 16 Sep 2024 12:07:47 +0200

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

.
Subject: [PATCH RT 0/1] Linux v4.19.322-rt138-rc1
From: Daniel Wagner <wagi@monom.org>
To: LKML <linux-kernel@vger.kernel.org>,
	 <linux-rt-users@vger.kernel.org>,
	 <stable-rt@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Tom Zanussi <tom.zanussi@linux.intel.com>,
	Clark Williams <williams@redhat.com>
Cc: Daniel Wagner <wagi@monom.org>
Date: Mon, 16 Sep 2024 12:18:43 +0200

.
Subject: arm64: stacktrace: WARN_ON(state->common.pc == orig_pc) in
 kunwind_recover_return_address()
From: Oleg Nesterov <oleg@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Puranjay Mohan <puranjay@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Mark Brown <broonie@kernel.org>,
	Kalesh Singh <kaleshsingh@google.com>,
	chenqiwu <qiwuchen55@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 12:27:41 +0200

.
Subject: [PATCH] x86/resctrl: Avoid overflow in MB settings in bw_validate()
From: Martin Kletzander <nert.pinx@gmail.com>
To: Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 12:37:13 +0200

.
Subject: [PATCH 6.1] drm/amd/display: Fix subvp+drr logic errors
From: Murad Masimov <m.masimov@maxima.ru>
To: <stable@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Mon, 16 Sep 2024 13:43:23 +0300

.
Subject: [PATCH 6.6] drm/amd/display: Fix subvp+drr logic errors
From: Murad Masimov <m.masimov@maxima.ru>
To: <stable@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Mon, 16 Sep 2024 13:53:15 +0300

.
Subject: [PATCH v3 1/1] io_uring/sqpoll: do not put cpumask on stack
From: Felix Moessbauer <felix.moessbauer@siemens.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring <io-uring@vger.kernel.org>,
	linux-kernel@vger.kernel.org,
	Felix Moessbauer <felix.moessbauer@siemens.com>
Date: Mon, 16 Sep 2024 13:11:50 +0200

.
Subject: [RFC PATCH 00/13] Support iommu(fd) persistence for live update
From: James Gowans <jgowans@amazon.com>
To: <linux-kernel@vger.kernel.org>
Date: Mon, 16 Sep 2024 13:30:49 +0200

.
Subject: Re: [PATCH 2/7] sched: change wake_up_bit() and related function to
 expect unsigned long *
From: "NeilBrown" <neilb@suse.de>
To: "Peter Zijlstra" <peterz@infradead.org>
Cc: "Ingo Molnar" <mingo@redhat.com>,
 "Linus Torvalds" <torvalds@linux-foundation.org>,
 "Jens Axboe" <axboe@kernel.dk>, linux-kernel@vger.kernel.org,
 linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org
Date: Mon, 16 Sep 2024 21:48:11 +1000

.
Subject: [PATCH v4 0/2] firmware: Avoid coreboot and sysfb to register a pdev for same framebuffer
From: Javier Martinez Canillas <javierm@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Brian Norris <briannorris@chromium.org>,
	dri-devel@lists.freedesktop.org,
	Borislav Petkov <bp@alien8.de>,
	Julius Werner <jwerner@chromium.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	chrome-platform@lists.linux.dev,
	intel-gfx@lists.freedesktop.org,
	Hugues Bruant <hugues.bruant@gmail.com>,
	Javier Martinez Canillas <javierm@redhat.com>,
	Alex Deucher <alexander.deucher@amd.com>,
	Dan Carpenter <dan.carpenter@linaro.org>,
	Helge Deller <deller@gmx.de>,
	Jani Nikula <jani.nikula@intel.com>,
	Tzung-Bi Shih <tzungbi@kernel.org>
Date: Mon, 16 Sep 2024 13:00:24 +0200

.
Subject: [PATCH v2 0/6] lazy flush for the auth session
From: Jarkko Sakkinen <jarkko@kernel.org>
To: linux-integrity@vger.kernel.org
Cc: James.Bottomley@HansenPartnership.com,
	roberto.sassu@huawei.com,
	mapengyu@gmail.com,
	Jarkko Sakkinen <jarkko@kernel.org>,
	Mimi Zohar <zohar@linux.ibm.com>,
	David Howells <dhowells@redhat.com>,
	Paul Moore <paul@paul-moore.com>,
	James Morris <jmorris@namei.org>,
	"Serge E. Hallyn" <serge@hallyn.com>,
	keyrings@vger.kernel.org (open list:KEYS-TRUSTED),
	linux-security-module@vger.kernel.org (open list:SECURITY SUBSYSTEM),
	linux-kernel@vger.kernel.org (open list)
Date: Mon, 16 Sep 2024 14:07:05 +0300

.
Subject: [PATCH v2 0/2] Compute contiguous empty PTEs for mTHP efficiently
From: Dev Jain <dev.jain@arm.com>
To: akpm@linux-foundation.org,
	david@redhat.com,
	willy@infradead.org
Cc: ryan.roberts@arm.com,
	anshuman.khandual@arm.com,
	baohua@kernel.org,
	hughd@google.com,
	ioworker0@gmail.com,
	wangkefeng.wang@huawei.com,
	baolin.wang@linux.alibaba.com,
	gshan@redhat.com,
	linux-kernel@vger.kernel.org,
	linux-mm@kvack.org,
	Dev Jain <dev.jain@arm.com>
Date: Mon, 16 Sep 2024 16:37:52 +0530

.
Subject: [GIT PULL] chrome-platform changes for v6.12
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
Date: Mon, 16 Sep 2024 11:50:34 +0000


--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--

.
Subject: fw_devlinks preventing a panel driver from probing
From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 "Rafael J. Wysocki" <rafael@kernel.org>,
 Linux Kernel List <linux-kernel@vger.kernel.org>,
 Saravana Kannan <saravanak@google.com>
Cc: Aradhya Bhatia <aradhya.bhatia@linux.dev>,
 "dri-devel@lists.freedesktop.org" <dri-devel@lists.freedesktop.org>,
 Devarsh Thakkar <devarsht@ti.com>
Date: Mon, 16 Sep 2024 14:51:57 +0300

.
Subject: [PATCH 0/4] Bluetooth: btusb: Mediatek ISO interface cliam/release adjustment
From: Chris Lu <chris.lu@mediatek.com>
To: Marcel Holtmann <marcel@holtmann.org>, Johan Hedberg
	<johan.hedberg@gmail.com>, Luiz Von Dentz <luiz.dentz@gmail.com>
Date: Mon, 16 Sep 2024 19:39:34 +0800

.
Subject: [PATCH] HID: logitech-hidpp: Remove feature_type from hidpp_root_get_feature()
From: Bastien Nocera <hadess@hadess.net>
To: linux-input@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	"Peter F . Patel-Schneider" <pfpschneider@gmail.com>,
	=?UTF-8?q?Filipe=20La=C3=ADns?= <lains@riseup.net>,
	Nestor Lopez Casado <nlopezcasad@logitech.com>,
	Bastien Nocera <hadess@hadess.net>
Date: Mon, 16 Sep 2024 13:55:27 +0200

.
Subject: [syzbot] Monthly btrfs report (Sep 2024)
From: syzbot <syzbot+list821e17d585b76373ba27@syzkaller.appspotmail.com>
To: clm@fb.com, dsterba@suse.com, josef@toxicpanda.com, 
	linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:27:26 -0700

.
Subject: [PATCH v5 0/2] btrfs: Don't block system suspend during fstrim
From: Luca Stefani <luca.stefani.ge1@gmail.com>
To: 
Cc: Luca Stefani <luca.stefani.ge1@gmail.com>,
	Chris Mason <clm@fb.com>,
	Josef Bacik <josef@toxicpanda.com>,
	David Sterba <dsterba@suse.com>,
	linux-btrfs@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 14:56:13 +0200

.
Subject: [PATCH v2 00/11] i2c: isch: Put the driver into shape
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Andi Shyti <andi.shyti@kernel.org>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>,
	linux-i2c@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Jean Delvare <jdelvare@suse.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: Mon, 16 Sep 2024 15:01:27 +0300

.
Subject: [PATCH 6.1 00/63] 6.1.111-rc1 review
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Date: Mon, 16 Sep 2024 13:43:39 +0200

.
Subject: [PATCH v3] s390/vfio-ap: Driver feature advertisement
From: "Jason J. Herne" <jjherne@linux.ibm.com>
To: linux-s390@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, akrowiak@linux.ibm.com,
        borntraeger@de.ibm.com, agordeev@linux.ibm.com, gor@linux.ibm.com,
        hca@linux.ibm.com, "Jason J. Herne" <jjherne@linux.ibm.com>,
        Boris Fiuczynski <fiuczy@linux.ibm.com>
Date: Mon, 16 Sep 2024 08:01:22 -0400

.
Subject: [PATCH v3] s390/vfio-ap: Driver feature advertisement
From: "Jason J. Herne" <jjherne@linux.ibm.com>
To: linux-s390@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, fiuczy@linux.ibm.com, akrowiak@linux.ibm.com,
        borntraeger@de.ibm.com, agordeev@linux.ibm.com, gor@linux.ibm.com,
        hca@linux.ibm.com, "Jason J. Herne" <jjherne@linux.ibm.com>
Date: Mon, 16 Sep 2024 08:01:23 -0400

.
Subject: [PATCH 6.10 000/121] 6.10.11-rc1 review
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Date: Mon, 16 Sep 2024 13:42:54 +0200

.
Subject: [PATCH] iio: pac1921: remove unnecessary explicit casts
From: Matteo Martelli <matteomartelli3@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>, 
 Lars-Peter Clausen <lars@metafoo.de>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>, 
 linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, 
 Matteo Martelli <matteomartelli3@gmail.com>
Date: Mon, 16 Sep 2024 14:00:05 +0200

.
Subject: [PATCH 6.6 00/91] 6.6.52-rc1 review
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org,
	akpm@linux-foundation.org,
	linux@roeck-us.net,
	shuah@kernel.org,
	patches@kernelci.org,
	lkft-triage@lists.linaro.org,
	pavel@denx.de,
	jonathanh@nvidia.com,
	f.fainelli@gmail.com,
	sudipm.mukherjee@gmail.com,
	srw@sladewatkins.net,
	rwarsow@gmx.de,
	conor@kernel.org,
	allen.lkml@gmail.com,
	broonie@kernel.org
Date: Mon, 16 Sep 2024 13:43:36 +0200

.
Subject: [GIT PULL] random number generator updates for 6.12-rc1
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 14:13:58 +0200

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

.
Subject: [RFC PATCH v3 0/3] genirq/cpuhotplug: Adjust managed interrupts according to change of housekeeping cpumask
From: Costa Shulyupin <costa.shul@redhat.com>
To: longman@redhat.com,
	ming.lei@redhat.com,
	pauld@redhat.com,
	juri.lelli@redhat.com,
	vschneid@redhat.com,
	Michael Ellerman <mpe@ellerman.id.au>,
	Nicholas Piggin <npiggin@gmail.com>,
	Christophe Leroy <christophe.leroy@csgroup.eu>,
	Naveen N Rao <naveen@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Zefan Li <lizefan.x@bytedance.com>,
	Tejun Heo <tj@kernel.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	=?UTF-8?q?Michal=20Koutn=C3=BD?= <mkoutny@suse.com>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>,
	Mel Gorman <mgorman@suse.de>,
	Costa Shulyupin <costa.shul@redhat.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	cgroups@vger.kernel.org
Date: Mon, 16 Sep 2024 15:20:41 +0300

.
Subject: [RFC PATCH v1 0/7] landlock: Add UDP access control support
From: Matthieu Buffet <matthieu@buffet.re>
To: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= <mic@digikod.net>
Cc: =?UTF-8?q?G=C3=BCnther=20Noack?= <gnoack@google.com>,
	Paul Moore <paul@paul-moore.com>,
	James Morris <jmorris@namei.org>,
	"Serge E . Hallyn" <serge@hallyn.com>,
	linux-security-module@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org,
	Matthieu Buffet <matthieu@buffet.re>
Date: Mon, 16 Sep 2024 14:22:23 +0200

.
Subject: [syzbot] Monthly ext4 report (Sep 2024)
From: syzbot <syzbot+list9332a94148ef9d3caccb@syzkaller.appspotmail.com>
To: linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:27:27 -0700

.
Subject: [syzbot] Monthly hfs report (Sep 2024)
From: syzbot <syzbot+listf98106da71c1298aedf7@syzkaller.appspotmail.com>
To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:27:27 -0700

.
Subject: [syzbot] Monthly media report (Sep 2024)
From: syzbot <syzbot+list30593f6a47f0ceae7cd4@syzkaller.appspotmail.com>
To: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:28:29 -0700

.
Subject: [syzbot] Monthly udf report (Sep 2024)
From: syzbot <syzbot+listf4f31286193af881ad4e@syzkaller.appspotmail.com>
To: jack@suse.com, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:28:29 -0700

.
Subject: Dead code by symbols
From: "Dr. David Alan Gilbert" <linux@treblig.org>
To: david@redhat.com
Cc: linux-kernel@vger.kernel.org, kees@kernel.org
Date: Mon, 16 Sep 2024 12:33:12 +0000

.
Subject: [syzbot] Monthly f2fs report (Sep 2024)
From: syzbot <syzbot+list1835a579772406839600@syzkaller.appspotmail.com>
To: chao@kernel.org, jaegeuk@kernel.org, 
	linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 05:35:25 -0700

.
Subject: Re: [PATCH 6.10 000/121] 6.10.11-rc1 review
From: Ronald Warsow <rwarsow@gmx.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, stable@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 14:37:17 +0200

.
Subject: [PATCH 0/1] drm/amd: more VRR race fixes during IRQ handling
From: tjakobi@math.uni-bielefeld.de
To: amd-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Cc: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Date: Mon, 16 Sep 2024 14:54:04 +0200

.
Subject: [PATCH] perf/test: perf test 86 fails on s390 repo linux-next
From: Thomas Richter <tmricht@linux.ibm.com>
To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
        acme@kernel.org
Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, sumanthk@linux.ibm.com,
        hca@linux.ibm.com, Thomas Richter <tmricht@linux.ibm.com>
Date: Mon, 16 Sep 2024 14:57:18 +0200

.
Subject: [GIT PULL] Documentation for 6.12
From: Jonathan Corbet <corbet@lwn.net>
To: Linus Torvalds <torvalds@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org
Date: Mon, 16 Sep 2024 07:35:05 -0600

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

.
Subject: [PATCH v2] x86/resctrl: Avoid overflow in MB settings in bw_validate()
From: Martin Kletzander <nert.pinx@gmail.com>
To: Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 15:07:39 +0200

.
Subject: [ANNOUNCE] v6.11-rt7
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>, linux-rt-users@vger.kernel.org,
	Steven Rostedt <rostedt@goodmis.org>
Date: Mon, 16 Sep 2024 15:13:51 +0200

.
Subject: [PATCH 0/3] Panel orientation quirks for AYA NEO handhelds
From: tjakobi@math.uni-bielefeld.de
To: dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Cc: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Date: Mon, 16 Sep 2024 15:18:49 +0200

.
Subject: [PATCH v2 0/2] Updates for Atmel SSC DAI
From: Andrei Simion <andrei.simion@microchip.com>
To: <claudiu.beznea@tuxon.dev>, <lgirdwood@gmail.com>, <broonie@kernel.org>,
	<perex@perex.cz>, <tiwai@suse.com>, <nicolas.ferre@microchip.com>,
	<alexandre.belloni@bootlin.com>
Date: Mon, 16 Sep 2024 16:19:08 +0300

.
Subject: misc_deregister() throwing warning in ida_free()
From: Vimal Agrawal <avimalin@gmail.com>
To: linux-kernel@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>, 
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>, 
	D Scott Phillips <scott@os.amperecomputing.com>, Vimal Agrawal <vimal.agrawal@sophos.com>
Date: Mon, 16 Sep 2024 18:56:18 +0530

.
Subject: [GIT PULL] pwm: Changes for 6.12-rc1
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>
Date: Mon, 16 Sep 2024 15:54:44 +0200


--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--

.
Subject: [RFC PATCH 00/24] erofs: introduce Rust implementation
From: Yiyang Wu <toolmanp@tlmp.cc>
To: linux-erofs@lists.ozlabs.org
Cc: rust-for-linux@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>
Date: Mon, 16 Sep 2024 21:56:10 +0800

.
Subject: [PATCH] function_graph: remove unnecessary initialization in
 ftrace_graph_ret_addr()
From: Oleg Nesterov <oleg@redhat.com>
To: Masami Hiramatsu <mhiramat@kernel.org>,
	Puranjay Mohan <puranjay@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 15:56:43 +0200

.
Subject: [PATCH v3 0/7] perf: cs-etm: Coresight decode and disassembly improvements
From: James Clark <james.clark@linaro.org>
To: linux-perf-users@vger.kernel.org,
	gankulkarni@os.amperecomputing.com,
	coresight@lists.linaro.org,
	leo.yan@arm.com,
	scclevenger@os.amperecomputing.com
Cc: James Clark <james.clark@linaro.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	"Liang, Kan" <kan.liang@linux.intel.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Mike Leach <mike.leach@linaro.org>,
	John Garry <john.g.garry@oracle.com>,
	Will Deacon <will@kernel.org>,
	Leo Yan <leo.yan@linux.dev>,
	Ben Gainey <ben.gainey@arm.com>,
	Ruidong Tian <tianruidong@linux.alibaba.com>,
	Benjamin Gray <bgray@linux.ibm.com>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Date: Mon, 16 Sep 2024 14:57:31 +0100

.
Subject: [PATCH] io_uring: clean up a type in io_uring_register_get_file()
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Jens Axboe <axboe@kernel.dk>
Cc: Pavel Begunkov <asml.silence@gmail.com>, io-uring@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org
Date: Mon, 16 Sep 2024 17:07:10 +0300

.
Subject: [syzbot] [btrfs?] KASAN: slab-use-after-free Read in btrfs_cleanup_defrag_inodes
From: syzbot <syzbot+ad7966ca1f5dd8b001b3@syzkaller.appspotmail.com>
To: clm@fb.com, dsterba@suse.com, josef@toxicpanda.com, 
	linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 07:44:29 -0700

.
Subject: [syzbot] [bcachefs?] INFO: task hung in vfs_rename
From: syzbot <syzbot+6165bc9800cd6e1fe958@syzkaller.appspotmail.com>
To: chao@kernel.org, jaegeuk@kernel.org, kent.overstreet@linux.dev, 
	linux-bcachefs@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, 
	linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 07:01:27 -0700

.
Subject: [PATCH] OPP: fix error code in dev_pm_opp_set_config()
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Viresh Kumar <vireshk@kernel.org>, Nishanth Menon <nm@ti.com>,
	Stephen Boyd <sboyd@kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org
Date: Mon, 16 Sep 2024 17:07:26 +0300

.
Subject: [PATCH v2 0/2] iio: bmi323: Fix some bugs in suspend resume
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Denis Benato <benato.denis96@gmail.com>
Cc: Jagath Jog J <jagathjog1996@gmail.com>,
	Jonathan Cameron <jic23@kernel.org>,
	Lars-Peter Clausen <lars@metafoo.de>, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 17:09:03 +0300

.
Subject: [PATCH v2 0/7] linux-kbuild: fix: process configs set to "y"
From: David Hunter <david.hunter.linux@gmail.com>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: David Hunter <david.hunter.linux@gmail.com>,
	linux-kbuild@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	shuah@kernel.org,
	javier.carrasco.cruz@gmail.com
Date: Mon, 16 Sep 2024 10:29:37 -0400

.
Subject: [GIT PULL] m68k updates for v6.12
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>
Date: Mon, 16 Sep 2024 16:32:07 +0200

	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

.
Subject: [GIT PULL] livepatching for 6.12
From: Petr Mladek <pmladek@suse.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, live-patching@vger.kernel.org
Date: Mon, 16 Sep 2024 16:43:55 +0200

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(-)

.
Subject: [PATCH 1/2] net: fec: Restart PPS after link state change
From: =?UTF-8?q?Cs=C3=B3k=C3=A1s=2C=20Bence?= <csokas.bence@prolan.hu>
To: <imx@lists.linux.dev>, <netdev@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Date: Mon, 16 Sep 2024 16:19:30 +0200

.
Subject: [GIT PULL] MMC updates for v6.12
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>
Date: Mon, 16 Sep 2024 16:53:52 +0200

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

.
Subject: [syzbot] [bcachefs?] general protection fault in prt_str
From: syzbot <syzbot+37186860aa7812b331d5@syzkaller.appspotmail.com>
To: bfoster@redhat.com, kent.overstreet@linux.dev, 
	linux-bcachefs@vger.kernel.org, linux-kernel@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 07:55:32 -0700

.
Subject: [PATCH v3 0/3] iio: light: opt3001: add support for TI's opt3002
 light sensor
From: Emil Gedenryd <emil.gedenryd@axis.com>
To: Jonathan Cameron <jic23@kernel.org>, Lars-Peter Clausen <lars@metafoo.de>,
	Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>, Andreas Dannenberg <dannenberg@ti.com>
Date: Mon, 16 Sep 2024 16:56:36 +0200

.
Subject: [PATCH v5 1/3] regulator: dt-bindings: mt6323: Convert to DT schema
From: Macpaul Lin <macpaul.lin@mediatek.com>
To: Andrew Lunn <andrew@lunn.ch>, Florian Fainelli <f.fainelli@gmail.com>,
	Vladimir Oltean <olteanv@gmail.com>, "David S . Miller"
	<davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski
	<kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Rob Herring
	<robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, Conor Dooley
	<conor+dt@kernel.org>, Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>, Liam
 Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>, Sean Wang
	<sean.wang@mediatek.com>, Sen Chu <sen.chu@mediatek.com>, Macpaul Lin
	<macpaul.lin@mediatek.com>, <netdev@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>, Pavel Machek <pavel@ucw.cz>, Lee
 Jones <lee@kernel.org>, Sebastian Reichel <sre@kernel.org>, Alexandre Belloni
	<alexandre.belloni@bootlin.com>, Chen Zhong <chen.zhong@mediatek.com>,
	<linux-input@vger.kernel.org>, <linux-leds@vger.kernel.org>,
	<linux-pm@vger.kernel.org>, <linux-rtc@vger.kernel.org>,
	<linux-sound@vger.kernel.org>, Alexandre Mergnat <amergnat@baylibre.com>
Date: Mon, 16 Sep 2024 23:11:30 +0800

.
Subject: [PATCH] nfsd: prevent integer overflow in decode_cb_compound4res()
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Jeff Layton <jlayton@kernel.org>, Neil Brown <neilb@suse.de>,
	Olga Kornievskaia <okorniev@redhat.com>,
	Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
	linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org
Date: Mon, 16 Sep 2024 18:14:15 +0300

.
Subject: Intend to work on the DRM_* logging macro conversion
From: YJ Lin <0xff07@gmail.com>
To: sean@poorly.run, rodrigosiqueiramelo@gmail.com, mairacanal@riseup.net, 
	hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, 
	maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, 
	airlied@gmail.com, dri-devel@lists.freedesktop.org, 
	linux-kernel@vger.kernel.org, YJ Lin <0xff07@gmail.com>
Cc: ricardo@marliere.net, skhan@linuxfoundation.org, 
	Shuah Khan <shuah@kernel.org>
Date: Mon, 16 Sep 2024 23:46:07 +0800

.
Subject: [PATCH RFC 0/3] Add NUMA mempolicy support for KVM guest_memfd
From: Shivank Garg <shivankg@amd.com>
To: <pbonzini@redhat.com>, <corbet@lwn.net>, <akpm@linux-foundation.org>,
	<willy@infradead.org>
Date: Mon, 16 Sep 2024 16:57:40 +0000

.
Subject: [tip:master] BUILD SUCCESS
 e26a543cdd84f21d29ed25a25a0e0642dfd81cfb
From: kernel test robot <lkp@intel.com>
To: "x86-ml" <x86@kernel.org>
Cc: linux-kernel@vger.kernel.org
Date: Tue, 17 Sep 2024 00:06:34 +0800

.
Subject: [PATCH] arm64: dts: mediatek: mt8183-kukui: Disable DPI display interface
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
To: linux-mediatek@lists.infradead.org,
	devicetree@vger.kernel.org
Cc: Pi-Hsun Shih <pihsun@chromium.org>,
	linux-arm-kernel@lists.infradead.org,
	Chen-Yu Tsai <wenst@chromium.org>,
	Fabien Parent <fparent@baylibre.com>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Jitao Shi <jitao.shi@mediatek.com>,
	AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Pin-yen Lin <treapking@chromium.org>,
	linux-kernel@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Alper Nebi Yasak <alpernebiyasak@gmail.com>
Date: Mon, 16 Sep 2024 19:29:32 +0300

.
Subject: [GIT PULL 0/4] 
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
Date: Mon, 16 Sep 2024 16:29:47 +0000

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/

.
Subject: [PATCH v2 0/2] Add support for CPM5 controller 1
From: Thippeswamy Havalige <thippesw@amd.com>
To: <manivannan.sadhasivam@linaro.org>, <robh@kernel.org>,
	<linux-pci@vger.kernel.org>, <bhelgaas@google.com>,
	<linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>,
	<krzk+dt@kernel.org>, <conor+dt@kernel.org>, <devicetree@vger.kernel.org>
Date: Mon, 16 Sep 2024 22:01:22 +0530

.
Subject: powerpc-linux-ld: arch/powerpc/sysdev/cpm_gpio.o:undefined reference
 to `cpm1_gpiochip_add16'
From: kernel test robot <lkp@intel.com>
To: Christophe Leroy <christophe.leroy@c-s.fr>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	Scott Wood <oss@buserror.net>
Date: Tue, 17 Sep 2024 00:32:20 +0800

.
Subject: [PATCH v2 2/2] PCI: xilinx-cpm: Add support for Versal CPM5 Root Port controller 1
From: Thippeswamy Havalige <thippesw@amd.com>
To: <manivannan.sadhasivam@linaro.org>, <robh@kernel.org>,
	<linux-pci@vger.kernel.org>, <bhelgaas@google.com>,
	<linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>,
	<krzk+dt@kernel.org>, <conor+dt@kernel.org>, <devicetree@vger.kernel.org>
Date: Mon, 16 Sep 2024 22:07:48 +0530

.
Subject: [GIT PULL] hwmon updates for v6.12
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
Date: Mon, 16 Sep 2024 09:45:26 -0700

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

.
Subject: [PATCH 0/2] Maxim MAX20339 regulator driver
From: =?utf-8?q?Andr=C3=A9_Draszik?= <andre.draszik@linaro.org>
To: Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>, 
 Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, Michael Walle <mwalle@kernel.org>
Cc: Peter Griffin <peter.griffin@linaro.org>, 
 Tudor Ambarus <tudor.ambarus@linaro.org>, 
 Will McVicker <willmcvicker@google.com>, kernel-team@android.com, 
 linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, 
 =?utf-8?q?Andr=C3=A9_Draszik?= <andre.draszik@linaro.org>
Date: Mon, 16 Sep 2024 17:48:51 +0100

.
Subject: [PATCH 0/5] perf sched: Introduce stats tool
From: Ravi Bangoria <ravi.bangoria@amd.com>
To: <peterz@infradead.org>, <mingo@redhat.com>, <acme@kernel.org>,
	<namhyung@kernel.org>, <irogers@google.com>
Date: Mon, 16 Sep 2024 16:47:17 +0000

.
Subject: [PATCH 0/3] Google Pixel 6 (oriole): max20339 enabling
From: =?utf-8?q?Andr=C3=A9_Draszik?= <andre.draszik@linaro.org>
To: Catalin Marinas <catalin.marinas@arm.com>, 
 Will Deacon <will@kernel.org>, Peter Griffin <peter.griffin@linaro.org>, 
 Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>, Alim Akhtar <alim.akhtar@samsung.com>
Cc: Tudor Ambarus <tudor.ambarus@linaro.org>, 
 Will McVicker <willmcvicker@google.com>, kernel-team@android.com, 
 linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, 
 linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org, 
 =?utf-8?q?Andr=C3=A9_Draszik?= <andre.draszik@linaro.org>
Date: Mon, 16 Sep 2024 17:58:25 +0100

.
Subject: [PATCH] nvmet-auth: assign dh_key to NULL after kfree_sensitive
From: Vitaliy Shevtsov <v.shevtsov@maxima.ru>
To: <stable@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Mon, 16 Sep 2024 22:41:37 +0500

.
Subject: [PATCH] RDMA/irdma: fix error message in irdma_modify_qp_roce()
From: Vitaliy Shevtsov <v.shevtsov@maxima.ru>
To: <stable@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Mon, 16 Sep 2024 21:58:05 +0500

.
Subject: [REGRESSION][BISECTED] Audio volume issues since 4178d78cd7a8
From: Christian Heusel <christian@heusel.eu>
To: Christoffer Sandberg <cs@tuxedo.de>, 
	Werner Sembach <wse@tuxedocomputers.com>, Takashi Iwai <tiwai@suse.de>
Cc: regressions@lists.linux.dev, linux-kernel@vger.kernel.org, 
	Jerry <jerryluo225@gmail.com>, Jaroslav Kysela <perex@perex.cz>, linux-sound@vger.kernel.org
Date: Mon, 16 Sep 2024 18:39:40 +0200

.
Subject: [PATCH v3 0/2] arm64: dts: ti: k3-j784s4: Mark tps659413
 regulators as bootph-all
From: Andrew Halaney <ahalaney@redhat.com>
To: Nishanth Menon <nm@ti.com>, Vignesh Raghavendra <vigneshr@ti.com>, 
 Tero Kristo <kristo@kernel.org>, Rob Herring <robh@kernel.org>, 
 Krzysztof Kozlowski <krzk+dt@kernel.org>, 
 Conor Dooley <conor+dt@kernel.org>
Cc: Keerthy <j-keerthy@ti.com>, Neha Malcom Francis <n-francis@ti.com>, 
 Eric Chanudet <echanude@redhat.com>, Enric Balletbo <eballetb@redhat.com>, 
 Udit Kumar <u-kumar1@ti.com>, Beleswar Prasad Padhi <b-padhi@ti.com>, 
 linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, 
 linux-kernel@vger.kernel.org, Andrew Halaney <ahalaney@redhat.com>
Date: Mon, 16 Sep 2024 12:14:50 -0500

.
Subject: [PATCH v4 0/6] iommu/amd: Use 128-bit cmpxchg operation to update DTE
From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
To: <linux-kernel@vger.kernel.org>, <iommu@lists.linux.dev>
Date: Mon, 16 Sep 2024 17:17:59 +0000

.
Subject: [PATCH 0/3] serial: qcom-geni: fix receiver enable
From: Johan Hovold <johan+linaro@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jirislaby@kernel.org>,
	Douglas Anderson <dianders@chromium.org>,
	linux-arm-msm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org,
	Johan Hovold <johan+linaro@kernel.org>
Date: Mon, 16 Sep 2024 19:26:39 +0200

.
Subject: [PATCH] powerpc/perf: Use guard(irqsave)() in eight functions
From: Markus Elfring <Markus.Elfring@web.de>
To: linuxppc-dev@lists.ozlabs.org, Anjali K <anjalik@linux.ibm.com>,
 Christophe Leroy <christophe.leroy@csgroup.eu>,
 Kan Liang <kan.liang@linux.intel.com>,
 Madhavan Srinivasan <maddy@linux.ibm.com>,
 Michael Ellerman <mpe@ellerman.id.au>, Naveen N Rao <naveen@kernel.org>,
 Nicholas Piggin <npiggin@gmail.com>, Peter Zijlstra <peterz@infradead.org>
Cc: LKML <linux-kernel@vger.kernel.org>, Julia Lawall <julia.lawall@inria.fr>
Date: Mon, 16 Sep 2024 19:40:19 +0200

.
Subject: [PATCH] usb host: Fix double locking of mutex 'oxu->mem_lock' in 'oxu_qh_alloc()'
From: Mikhail Lobanov <m.lobanov@rosalinux.ru>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Mikhail Lobanov <m.lobanov@rosalinux.ru>,
	"Dr. David Alan Gilbert" <linux@treblig.org>,
	Rodolfo Giometti <giometti@linux.it>,
	linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	lvc-project@linuxtesting.org
Date: Mon, 16 Sep 2024 13:43:25 -0400

.
Subject: [RFC PATCH 0/5] Extend SEV-SNP SVSM support with a kvm_vcpu per VMPL
From: Roy Hopkins <roy.hopkins@suse.com>
To: kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	x86@kernel.org,
	linux-coco@lists.linux.dev
Cc: Roy Hopkins <roy.hopkins@suse.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Michael Roth <michael.roth@amd.com>,
	Ashish Kalra <ashish.kalra@amd.com>,
	Joerg Roedel <jroedel@suse.de>,
	Tom Lendacky <thomas.lendacky@amd.com>
Date: Mon, 16 Sep 2024 19:17:52 +0100

.
Subject: [PATCH v2] drm/i915/cx0: Set power state to ready only on owned PHY lanes
From: Vamsi Krishna Brahmajosyula <vamsikrishna.brahmajosyula@gmail.com>
To: gustavo.sousa@intel.com,
	jani.nikula@linux.intel.com,
	rodrigo.vivi@intel.com,
	joonas.lahtinen@linux.intel.com,
	tursulin@ursulin.net,
	airlied@gmail.com,
	daniel@ffwll.ch
Cc: skhan@linuxfoundation.org,
	intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 23:31:37 +0530

.
Subject: [PATCH v2 1/1] x86/fred: Clear WFE in missing-ENDBRANCH #CPs
From: "Xin Li (Intel)" <xin@zytor.com>
To: linux-kernel@vger.kernel.org
Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
        dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
        peterz@infradead.org, andrew.cooper3@citrix.com
Date: Mon, 16 Sep 2024 11:10:00 -0700

.
Subject: [PATCH RESEND] ntfs3: change to non-blocking allocation in ntfs_d_hash
From: Diogo Jahchan Koike <djahchankoike@gmail.com>
To: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Cc: Diogo Jahchan Koike <djahchankoike@gmail.com>,
	syzbot+7f71f79bbfb4427b00e1@syzkaller.appspotmail.com,
	ntfs3@lists.linux.dev,
	linux-kernel@vger.kernel.org
Date: Mon, 16 Sep 2024 15:15:31 -0300

.
Subject: [PATCH] dmaengine: ep93xx: Fix NULL vs IS_ERR() check in ep93xx_dma_probe()
From: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
To: Vinod Koul <vkoul@kernel.org>, Nikita Shubin <nikita.shubin@maquefel.me>,
        Alexander Sverdlin <alexander.sverdlin@gmail.com>,
        Arnd Bergmann <arnd@arndb.de>, dmaengine@vger.kernel.org,
        linux-kernel@vger.kernel.org
Cc: dan.carpenter@linaro.org, kernel-janitors@vger.kernel.org,
        error27@gmail.com, harshit.m.mogalapalli@oracle.com
Date: Mon, 16 Sep 2024 11:23:37 -0700

.
Subject: [GIT PULL] overlayfs updates for 6.12
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
Date: Mon, 16 Sep 2024 20:26:08 +0200

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(-)

.
Subject: [PATCH] virtio_console: fix misc probe bugs
From: "Michael S. Tsirkin" <mst@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Amit Shah <amit@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	virtualization@lists.linux.dev
Date: Mon, 16 Sep 2024 14:32:56 -0400

.
Subject: [syzbot] [ocfs2?] kernel BUG in ocfs2_write_cluster_by_desc
From: syzbot <syzbot+18a87160c7d64ba2e2f6@syzkaller.appspotmail.com>
To: jlbec@evilplan.org, joseph.qi@linux.alibaba.com, 
	linux-kernel@vger.kernel.org, mark@fasheh.com, ocfs2-devel@lists.linux.dev, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 11:35:29 -0700

.
Subject: [PATCH] MAINTAINERS: drm/sched: Add new maintainers
From: Philipp Stanner <pstanner@redhat.com>
To: linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org
Cc: Philipp Stanner <pstanner@redhat.com>,
	=?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>,
	Luben Tuikov <ltuikov89@gmail.com>,
	Matthew Brost <matthew.brost@intel.com>,
	Danilo Krummrich <dakr@kernel.org>,
	Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date: Mon, 16 Sep 2024 20:52:00 +0200

.
Subject: rustgcc-kselftest: error: unknown unstable option: `patchable-function-entry`
From: Naresh Kamboju <naresh.kamboju@linaro.org>
To: rust-for-linux@vger.kernel.org, open list <linux-kernel@vger.kernel.org>, 
	"open list:KERNEL SELFTEST FRAMEWORK" <linux-kselftest@vger.kernel.org>, lkft-triage@lists.linaro.org, 
	Linux Regressions <regressions@lists.linux.dev>
Cc: Miguel Ojeda <ojeda@kernel.org>, aliceryhl@google.com, Shuah Khan <shuah@kernel.org>, 
	Arnd Bergmann <arnd@arndb.de>, Dan Carpenter <dan.carpenter@linaro.org>, 
	Anders Roxell <anders.roxell@linaro.org>
Date: Tue, 17 Sep 2024 00:47:17 +0530

.
Subject: [PATCH v2 1/2] mkfs.f2fs: change -c option description
From: Daeho Jeong <daeho43@gmail.com>
To: linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net,
	kernel-team@android.com
Cc: Daeho Jeong <daehojeong@google.com>
Date: Mon, 16 Sep 2024 12:20:13 -0700

.
Subject: BUG and WARNINGs from mt7921s on next-20240916
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
To: linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org
Cc: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi <lorenzo@kernel.org>,
 Ryder Lee <ryder.lee@mediatek.com>, Shayne Chen <shayne.chen@mediatek.com>,
 Sean Wang <sean.wang@mediatek.com>, Matthias Brugger
 <matthias.bgg@gmail.com>,
 AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>,
 Ming Yen Hsieh <mingyen.hsieh@mediatek.com>, Deren Wu
 <deren.wu@mediatek.com>, linux-kernel@vger.kernel.org,
 linux-arm-kernel@lists.infradead.org, Kalle Valo <kvalo@kernel.org>,
 Ma Ke <make24@iscas.ac.cn>
Date: Mon, 16 Sep 2024 22:33:08 +0300

.
Subject: [GIT PULL] jfs updates for v6.12
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>
Date: Mon, 16 Sep 2024 14:45:35 -0500

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(-)

.
Subject: [PATCH] ALSA: hda/realtek: fix mute/micmute LED for HP mt645 G8
From: nikolai.afanasenkov@hp.com
To: tiwai@suse.com
Cc: perex@perex.cz,
	kailang@realtek.com,
	sbinding@opensource.cirrus.com,
	simont@opensource.cirrus.com,
	foss@athaariq.my.id,
	rf@opensource.cirrus.com,
	linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Nikolai Afanasenkov <nikolai.afanasenkov@hp.com>,
	stable@vger.kernel.org
Date: Mon, 16 Sep 2024 13:50:42 -0600

.
Subject: Re: [PATCH 2/7] sched: change wake_up_bit() and related function to
 expect unsigned long *
From: "NeilBrown" <neilb@suse.de>
To: "Peter Zijlstra" <peterz@infradead.org>
Cc: "Ingo Molnar" <mingo@redhat.com>,
 "Linus Torvalds" <torvalds@linux-foundation.org>,
 "Jens Axboe" <axboe@kernel.dk>, linux-kernel@vger.kernel.org,
 linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org
Date: Tue, 17 Sep 2024 06:37:33 +1000

.
Subject: [PATCH V5 0/5] PCIe TPH and cache direct injection support
From: Wei Huang <wei.huang2@amd.com>
To: <linux-pci@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-doc@vger.kernel.org>, <netdev@vger.kernel.org>
Date: Mon, 16 Sep 2024 15:50:58 -0500

.
Subject: [PATCH] arm64: dts: imx8: Fix lvds0 device tree
From: Diogo Silva <diogompaissilva@gmail.com>
To: robh@kernel.org,
	krzk+dt@kernel.org,
	conor+dt@kernel.org,
	shawnguo@kernel.org,
	s.hauer@pengutronix.de,
	kernel@pengutronix.de,
	festevam@gmail.com,
	aisheng.dong@nxp.com,
	Frank.Li@nxp.com
Cc: devicetree@vger.kernel.org,
	imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	diogompaissilva@gmail.com
Date: Mon, 16 Sep 2024 22:02:56 +0200

.
Subject: [PATCH] arm64: dts: sun50i-a64-pinephone: Add mount matrix for accelerometer
From: Andrey Skvortsov <andrej.skvortzov@gmail.com>
To: Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-sunxi@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Cc: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>,
	Andrey Skvortsov <andrej.skvortzov@gmail.com>
Date: Mon, 16 Sep 2024 23:45:21 +0300

.
Subject: [PATCH v2] xen/acpi: upload power and performance related data from a PVH dom0
From: Jason Andryuk <jason.andryuk@amd.com>
To: Juergen Gross <jgross@suse.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Oleksandr Tyshchenko
	<oleksandr_tyshchenko@epam.com>
Date: Mon, 16 Sep 2024 16:50:07 -0400

.
Subject: [PATCH] bcachefs: Fix NULL pointer dereference in bch2_opt_to_text
From: Mohammed Anees <pvmohammedanees2003@gmail.com>
To: Kent Overstreet <kent.overstreet@linux.dev>
Cc: linux-bcachefs@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Mohammed Anees <pvmohammedanees2003@gmail.com>,
	syzbot+37186860aa7812b331d5@syzkaller.appspotmail.com
Date: Mon, 16 Sep 2024 21:03:10 +0000

.
Subject: [syzbot] [usb?] KASAN: slab-use-after-free Read in raw_process_ep_io
From: syzbot <syzbot+1412b4c05666882f1a0d@syzkaller.appspotmail.com>
To: andreyknvl@gmail.com, gregkh@linuxfoundation.org, 
	linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, 
	syzkaller-bugs@googlegroups.com
Date: Mon, 16 Sep 2024 14:10:32 -0700

.
Subject: [PATCH v6 0/3] rust: Add irq abstraction, SpinLockIrq
From: Lyude Paul <lyude@redhat.com>
To: rust-for-linux@vger.kernel.org
Cc: Danilo Krummrich <dakr@redhat.com>,
	airlied@redhat.com,
	Ingo Molnar <mingo@redhat.com>,
	Will Deacon <will@kernel.org>,
	Waiman Long <longman@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Miguel Ojeda <ojeda@kernel.org>,
	Alex Gaynor <alex.gaynor@gmail.com>,
	Wedson Almeida Filho <wedsonaf@gmail.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	Gary Guo <gary@garyguo.net>,
	=?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= <bjorn3_gh@protonmail.com>,
	Benno Lossin <benno.lossin@proton.me>,
	Andreas Hindborg <a.hindborg@samsung.com>,
	Alice Ryhl <aliceryhl@google.com>,
	Trevor Gross <tmgross@umich.edu>
Date: Mon, 16 Sep 2024 17:28:03 -0400

.
