Skip to contentSkip to conversation

Linux 6.18.10

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Feb 11 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.18.10 kernel.

All users of the 6.18 kernel series must upgrade.

The updated 6.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.18.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

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

 Makefile                                                       |    2 
 arch/arm/include/asm/string.h                                  |    5 
 arch/loongarch/kernel/traps.c                                  |    5 
 arch/loongarch/mm/cache.c                                      |    8 
 arch/riscv/include/asm/uaccess.h                               |   14 
 arch/riscv/kernel/Makefile                                     |   15 
 arch/riscv/kernel/traps.c                                      |    4 
 arch/x86/coco/sev/Makefile                                     |    2 
 arch/x86/include/asm/kfence.h                                  |    7 
 arch/x86/include/asm/vmware.h                                  |    4 
 arch/x86/kvm/svm/svm.c                                         |    2 
 arch/x86/kvm/vmx/vmx.c                                         |    2 
 arch/x86/kvm/x86.c                                             |   30 -
 arch/x86/kvm/x86.h                                             |    2 
 block/bfq-cgroup.c                                             |    2 
 drivers/android/binder.c                                       |   19 
 drivers/android/binder/rust_binderfs.c                         |    8 
 drivers/android/binder/thread.rs                               |  109 ++--
 drivers/android/binderfs.c                                     |    8 
 drivers/base/regmap/regcache-maple.c                           |   11 
 drivers/block/rbd.c                                            |   33 -
 drivers/bus/mhi/host/pci_generic.c                             |   13 
 drivers/crypto/intel/qat/qat_common/adf_aer.c                  |    2 
 drivers/dma/ioat/init.c                                        |    1 
 drivers/dma/mmp_pdma.c                                         |    6 
 drivers/firmware/cirrus/cs_dsp.c                               |   82 ++-
 drivers/firmware/cirrus/cs_dsp.h                               |   18 
 drivers/firmware/cirrus/test/cs_dsp_test_bin.c                 |   22 
 drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c           |   24 
 drivers/firmware/cirrus/test/cs_dsp_test_wmfw.c                |   26 -
 drivers/firmware/cirrus/test/cs_dsp_test_wmfw_error.c          |   24 
 drivers/firmware/cirrus/test/cs_dsp_tests.c                    |    1 
 drivers/gpio/gpio-loongson-64bit.c                             |    2 
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c                     |    3 
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c                        |    3 
 drivers/gpu/drm/amd/amdgpu/mes_v11_0.c                         |    2 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c         |   11 
 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c         |    7 
 drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c |  258 ++--------
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c           |    7 
 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c           |    9 
 drivers/gpu/drm/mgag200/mgag200_bmc.c                          |   31 -
 drivers/gpu/drm/mgag200/mgag200_drv.h                          |    6 
 drivers/gpu/drm/nouveau/include/nvif/client.h                  |    2 
 drivers/gpu/drm/nouveau/include/nvif/driver.h                  |    2 
 drivers/gpu/drm/nouveau/include/nvkm/core/device.h             |    3 
 drivers/gpu/drm/nouveau/include/nvkm/core/engine.h             |    2 
 drivers/gpu/drm/nouveau/include/nvkm/core/object.h             |    5 
 drivers/gpu/drm/nouveau/include/nvkm/core/oproxy.h             |    2 
 drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h             |    4 
 drivers/gpu/drm/nouveau/include/nvkm/core/suspend_state.h      |   11 
 drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h              |    6 
 drivers/gpu/drm/nouveau/nouveau_drm.c                          |    2 
 drivers/gpu/drm/nouveau/nouveau_nvif.c                         |   10 
 drivers/gpu/drm/nouveau/nvif/client.c                          |    4 
 drivers/gpu/drm/nouveau/nvkm/core/engine.c                     |    4 
 drivers/gpu/drm/nouveau/nvkm/core/ioctl.c                      |    4 
 drivers/gpu/drm/nouveau/nvkm/core/object.c                     |   20 
 drivers/gpu/drm/nouveau/nvkm/core/oproxy.c                     |    2 
 drivers/gpu/drm/nouveau/nvkm/core/subdev.c                     |   18 
 drivers/gpu/drm/nouveau/nvkm/core/uevent.c                     |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/ce/priv.h                  |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c              |   22 
 drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c               |    4 
 drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h              |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/device/user.c              |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c                |    4 
 drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/falcon.c                   |    4 
 drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c               |    6 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c                  |    4 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c                  |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c                  |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c                  |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h                  |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c                  |    4 
 drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c                   |    4 
 drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c             |    4 
 drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c               |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.c               |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gh100.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h                 |    8 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c         |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c          |    8 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c          |    6 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c         |    8 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c          |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h                |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c                |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c             |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c                 |    2 
 drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c               |    6 
 drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c               |    2 
 drivers/gpu/drm/xe/xe_guc.c                                    |    6 
 drivers/gpu/drm/xe/xe_guc.h                                    |    2 
 drivers/gpu/drm/xe/xe_pm.c                                     |   13 
 drivers/gpu/drm/xe/xe_query.c                                  |    2 
 drivers/hid/hid-elecom.c                                       |   15 
 drivers/hid/hid-ids.h                                          |    7 
 drivers/hid/hid-logitech-hidpp.c                               |    2 
 drivers/hid/hid-multitouch.c                                   |    1 
 drivers/hid/hid-playstation.c                                  |    5 
 drivers/hid/hid-quirks.c                                       |    5 
 drivers/hid/i2c-hid/i2c-hid-core.c                             |    1 
 drivers/hid/intel-ish-hid/ishtp-hid-client.c                   |    1 
 drivers/hid/intel-ish-hid/ishtp/bus.c                          |   12 
 drivers/hid/intel-thc-hid/intel-thc/intel-thc-dma.c            |    5 
 drivers/hwmon/acpi_power_meter.c                               |   17 
 drivers/hwmon/dell-smm-hwmon.c                                 |    8 
 drivers/hwmon/gpio-fan.c                                       |    6 
 drivers/hwmon/occ/common.c                                     |    1 
 drivers/i2c/busses/i2c-imx.c                                   |    3 
 drivers/md/md.c                                                |    4 
 drivers/net/ethernet/adi/adin1110.c                            |    3 
 drivers/net/ethernet/broadcom/bnx2.c                           |    2 
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c               |    1 
 drivers/net/ethernet/broadcom/tg3.c                            |    1 
 drivers/net/ethernet/cavium/liquidio/lio_main.c                |   39 -
 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c             |    4 
 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c                |    1 
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c                |    2 
 drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c            |   10 
 drivers/net/ethernet/freescale/enetc/enetc.c                   |   11 
 drivers/net/ethernet/freescale/enetc/enetc4_pf.c               |    6 
 drivers/net/ethernet/freescale/enetc/enetc_cbdr.c              |    4 
 drivers/net/ethernet/freescale/enetc/enetc_hw.h                |   17 
 drivers/net/ethernet/google/gve/gve_ethtool.c                  |   77 +-
 drivers/net/ethernet/google/gve/gve_main.c                     |    4 
 drivers/net/ethernet/hisilicon/hibmcge/hbg_err.c               |    1 
 drivers/net/ethernet/intel/e1000e/netdev.c                     |    1 
 drivers/net/ethernet/intel/fm10k/fm10k_pci.c                   |    6 
 drivers/net/ethernet/intel/i40e/i40e_main.c                    |    2 
 drivers/net/ethernet/intel/ice/ice_main.c                      |   28 -
 drivers/net/ethernet/intel/ice/ice_ptp.c                       |  179 ++++--
 drivers/net/ethernet/intel/ice/ice_ptp.h                       |   18 
 drivers/net/ethernet/intel/igb/igb_main.c                      |    2 
 drivers/net/ethernet/intel/igc/igc_main.c                      |    2 
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c                  |    1 
 drivers/net/ethernet/mellanox/mlx4/main.c                      |    1 
 drivers/net/ethernet/mellanox/mlx5/core/main.c                 |    1 
 drivers/net/ethernet/meta/fbnic/fbnic_pci.c                    |    1 
 drivers/net/ethernet/microchip/lan743x_main.c                  |    1 
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c               |    4 
 drivers/net/ethernet/neterion/s2io.c                           |    1 
 drivers/net/ethernet/spacemit/k1_emac.c                        |   21 
 drivers/net/ethernet/ti/cpsw.c                                 |   41 +
 drivers/net/ethernet/ti/cpsw_new.c                             |   34 +
 drivers/net/ethernet/ti/cpsw_priv.h                            |    1 
 drivers/net/macvlan.c                                          |    5 
 drivers/net/phy/sfp.c                                          |    2 
 drivers/net/usb/r8152.c                                        |   29 -
 drivers/net/usb/sr9700.c                                       |    5 
 drivers/net/wireless/intel/iwlwifi/mld/iface.c                 |    2 
 drivers/net/wireless/intel/iwlwifi/mld/mac80211.c              |    2 
 drivers/net/wireless/intel/iwlwifi/mld/ptp.c                   |    7 
 drivers/net/wireless/intel/iwlwifi/mvm/d3.c                    |    6 
 drivers/net/wireless/intel/iwlwifi/mvm/ptp.c                   |    7 
 drivers/net/wireless/ti/wlcore/tx.c                            |    5 
 drivers/nvme/host/fc.c                                         |    2 
 drivers/nvme/host/pci.c                                        |   45 +
 drivers/nvme/target/tcp.c                                      |   26 -
 drivers/pci/bus.c                                              |    3 
 drivers/pci/controller/dwc/pcie-qcom.c                         |    4 
 drivers/pci/pci.c                                              |    3 
 drivers/pci/pcie/portdrv.c                                     |    1 
 drivers/platform/x86/dell/dell-lis3lv02d.c                     |    1 
 drivers/platform/x86/hp/hp-bioscfg/bioscfg.c                   |    5 
 drivers/platform/x86/intel/plr_tpmi.c                          |    2 
 drivers/platform/x86/intel/telemetry/debugfs.c                 |    4 
 drivers/platform/x86/intel/telemetry/pltdrv.c                  |    2 
 drivers/platform/x86/toshiba_haps.c                            |    2 
 drivers/pmdomain/imx/gpcv2.c                                   |    8 
 drivers/pmdomain/imx/imx8m-blk-ctrl.c                          |    2 
 drivers/pmdomain/imx/imx8mp-blk-ctrl.c                         |   30 +
 drivers/pmdomain/qcom/rpmpd.c                                  |    2 
 drivers/regulator/spacemit-p1.c                                |    6 
 drivers/scsi/bfa/bfad.c                                        |    1 
 drivers/scsi/csiostor/csio_init.c                              |    1 
 drivers/scsi/ipr.c                                             |    1 
 drivers/scsi/lpfc/lpfc_init.c                                  |    6 
 drivers/scsi/qla2xxx/qla_os.c                                  |    5 
 drivers/scsi/qla4xxx/ql4_os.c                                  |    5 
 drivers/spi/spi-hisi-kunpeng.c                                 |    4 
 drivers/spi/spi-intel-pci.c                                    |    1 
 drivers/spi/spi-tegra114.c                                     |    3 
 drivers/spi/spi-tegra20-slink.c                                |    6 
 drivers/spi/spi-tegra210-quad.c                                |   56 ++
 drivers/target/iscsi/iscsi_target_util.c                       |   10 
 drivers/tty/serial/8250/8250_pci.c                             |    1 
 drivers/tty/serial/jsm/jsm_driver.c                            |    1 
 fs/btrfs/disk-io.c                                             |   13 
 fs/btrfs/fs.h                                                  |    8 
 fs/btrfs/inode.c                                               |   22 
 fs/btrfs/tree-log.c                                            |    2 
 fs/btrfs/volumes.c                                             |    2 
 fs/ceph/crypto.c                                               |    9 
 fs/ceph/mds_client.c                                           |    5 
 fs/ceph/mdsmap.c                                               |   26 -
 fs/ceph/mdsmap.h                                               |    1 
 fs/ceph/super.h                                                |   16 
 fs/proc/task_mmu.c                                             |   42 +
 fs/smb/client/smb2file.c                                       |    1 
 fs/smb/server/smb2pdu.c                                        |    8 
 include/linux/buildid.h                                        |    3 
 include/linux/ceph/ceph_fs.h                                   |    6 
 include/linux/firmware/cirrus/cs_dsp.h                         |    4 
 include/linux/skbuff.h                                         |   12 
 io_uring/io_uring.c                                            |    2 
 io_uring/rw.c                                                  |   15 
 io_uring/zcrx.c                                                |    1 
 kernel/cgroup/dmem.c                                           |   70 ++
 kernel/sched/fair.c                                            |   54 +-
 kernel/trace/ring_buffer.c                                     |    2 
 kernel/trace/trace.c                                           |    8 
 kernel/trace/trace.h                                           |    7 
 kernel/trace/trace_entries.h                                   |   32 -
 kernel/trace/trace_export.c                                    |   21 
 lib/buildid.c                                                  |   42 +
 mm/shmem.c                                                     |   23 
 mm/slub.c                                                      |    6 
 net/bridge/netfilter/ebtables.c                                |    2 
 net/core/filter.c                                              |    8 
 net/core/gro.c                                                 |    2 
 net/core/link_watch.c                                          |   20 
 net/core/net-procfs.c                                          |   50 +
 net/ethtool/common.c                                           |    3 
 net/ethtool/rss.c                                              |    9 
 net/ipv6/ip6_fib.c                                             |    3 
 net/mac80211/iface.c                                           |    8 
 net/mac80211/key.c                                             |    3 
 net/mac80211/mlme.c                                            |    5 
 net/mac80211/ocb.c                                             |    3 
 net/mac80211/sta_info.c                                        |    7 
 net/netfilter/nf_log.c                                         |    4 
 net/netfilter/nf_tables_api.c                                  |    2 
 net/netfilter/x_tables.c                                       |    2 
 net/sched/cls_u32.c                                            |   13 
 net/tipc/crypto.c                                              |    4 
 net/wireless/util.c                                            |    8 
 sound/drivers/aloop.c                                          |   62 +-
 sound/hda/codecs/realtek/alc269.c                              |   27 +
 sound/hda/codecs/side-codecs/tas2781_hda_i2c.c                 |    5 
 sound/soc/amd/renoir/acp3x-pdm-dma.c                           |    2 
 sound/soc/amd/yc/acp6x-mach.c                                  |    7 
 sound/soc/codecs/tlv320adcx140.c                               |    3 
 sound/soc/generic/simple-card-utils.c                          |    4 
 sound/soc/intel/boards/sof_sdw.c                               |    8 
 sound/soc/ti/davinci-evm.c                                     |   39 +
 sound/usb/mixer_quirks.c                                       |    9 
 sound/usb/pcm.c                                                |    3 
 sound/usb/quirks.c                                             |    2 
 tools/testing/selftests/kvm/Makefile.kvm                       |    1 
 virt/kvm/eventfd.c                                             |   44 -
 265 files changed, 1871 insertions(+), 1032 deletions(-)

Aaron Ma (1):
ice: Fix PTP NULL pointer dereference during VSI rebuild

Alan Borzeszkowski (1):
spi: intel-pci: Add support for Nova Lake SPI serial flash

Alex Deucher (1):
Revert "drm/amd/display: pause the workload setting in dm"

Alexandre Negrel (1):
io_uring: use GFP_NOWAIT for overflow CQEs on legacy rings

Alice Ryhl (2):
rust_binder: correctly handle FDA objects of length zero
rust_binder: add additional alignment checks

Andrew Cooper (1):
x86/kfence: fix booting on 32bit non-PAE systems

Andrew Fasano (1):
netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate()

Andrii Nakryiko (1):
procfs: avoid fetching build ID while holding VMA lock

Arnd Bergmann (1):
hwmon: (occ) Mark occ_init_attribute() as __printf

Arnoud Willemsen (1):
HID: Elecom: Add support for ELECOM M-XT3DRBK (018C)

Baochen Qiang (1):
wifi: mac80211: collect station statistics earlier when disconnect

Bert Karwatzki (1):
Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem"

Brendan Jackman (1):
x86/sev: Disable GCOV on noinstr object

Breno Leitao (6):
spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed transfer
spi: tegra210-quad: Move curr_xfer read inside spinlock
spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_transfer_one
spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer
spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer
spi: tegra210-quad: Protect curr_xfer check in IRQ handler

Carlos Llamas (4):
rust_binderfs: fix ida_alloc_max() upper bound
binder: fix UAF in binder_netlink_report()
binder: fix BR_FROZEN_REPLY error log
binderfs: fix ida_alloc_max() upper bound

Chaitanya Kulkarni (1):
nvme-fc: release admin tagset if init fails

Chen Ni (2):
net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_optional() in adin1110_check_spi()
gpio: loongson-64bit: Fix incorrect NULL check after devm_kcalloc()

Chen Ridong (3):
cgroup/dmem: fix NULL pointer dereference when setting max cgroup/dmem: avoid rcu warning when unregister region cgroup/dmem: avoid pool UAF

ChenXiaoSong (1):
smb/client: fix memory leak in smb2_open_file()

Chenghao Duan (1):
LoongArch: Enable exception fixup for specific ADE subcode

Chris Bainbridge (1):
ASoC: amd: fix memory leak in acp3x pdm dma ops

Chris Chiu (1):
HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list

Claudiu Manoil (4):
net: enetc: Remove SI/BDR cacheability AXI settings for ENETC v4
net: enetc: Remove CBDR cacheability AXI settings for ENETC v4
net: enetc: Convert 16-bit register writes to 32-bit for ENETC v4
net: enetc: Convert 16-bit register reads to 32-bit for ENETC v4

Daniel Gomez (1):
netfilter: replace -EEXIST with -EBUSY

Daniel Hodges (1):
tipc: use kfree_sensitive() for session key material

Daniel Vogelbacher (1):
ceph: fix oops due to invalid pointer for kfree() in parse_longname()

Daniele Ceraolo Spurio (1):
drm/xe/guc: Fix CFI violation in debugfs access.

Daniele Palmas (1):
bus: mhi: host: pci_generic: Add Telit FE990B40 modem support

Dave Airlie (3):
nouveau: add a third state to the fini handler. nouveau/gsp: use rpc sequence numbers properly. nouveau/gsp: fix suspend/resume regression on r570 firmware

DaytonCL (1):
HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL

Debarghya Kundu (1):
gve: Fix stats report corruption on queue count change

Deep Harsora (1):
ASoC: Intel: sof_sdw: Add new quirks for PTL on Dell with CS42L43

Dennis Marttinen (1):
HID: logitech: add HID++ support for Logitech MX Anywhere 3S

Devyn Liu (1):
spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization

Dimitrios Katsaros (1):
ASoC: tlv320adcx140: Propagate error codes during probe

Dmytro Bagrii (1):

      platform/x86: dell-lis3lv02d: Add Latitude 5400

Edward Adam Davis (2):
ALSA: usb-audio: Prevent excessive number of frames
btrfs: sync read disk super and set block size

Eric Dumazet (4):
net: add skb_header_pointer_careful() helper net/sched: cls_u32: use skb_header_pointer_careful()
macvlan: fix error recovery in macvlan_common_newlink()
net: add proper RCU protection to /proc/net/ptype

Ethan Nelson-Moore (1):
net: usb: sr9700: support devices with virtual driver CD

Even Xu (1):
HID: Intel-thc-hid: Intel-thc: Add safety check for reading DMA buffer

Felix Gu (1):
spi: tegra: Fix a memory leak in tegra_slink_probe()

FengWei Shih (1):
md: suspend array while updating raid_disks via sysfs

Filipe Manana (2):
btrfs: do not free data reservation in fallback from inline due to -ENOSPC
btrfs: fix reservation leak in some error paths when inserting inline extent

Gabor Juhos (3):
pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highest state
hwmon: (gpio-fan) Fix set_rpm() return value
hwmon: (gpio-fan) Allow to stop FANs when CONFIG_PM is disabled

Greg Kroah-Hartman (1):

      Linux 6.18.10

Grzegorz Nitka (1):
ice: fix missing TX timestamps interrupts on E825 devices

Guodong Xu (2):
dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue()
regulator: spacemit-p1: Fix n_voltages for BUCK and LDO regulators

Hannes Reinecke (1):
nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready()

Hao Ge (1):
mm/slab: Add alloc_tagging_slab_free_hook for memcg_alloc_abort_single

Huacai Chen (1):

      LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED

Ian Rogers (1):
tracing: Avoid possible signed 64-bit truncation

Ilya Dryomov (1):
rbd: check for EOD after exclusive lock is ensured to be held

Jacky Bai (1):
pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset

Jacob Keller (2):
ice: PTP: fix missing timestamps on E825 hardware drm/mgag200: fix mgag200_bmc_stop_scanout()

Jakub Kicinski (2):
net: don't touch dev->stats in BPF redirect paths
net: rss: fix reporting RXH_XFRM_NO_CHANGE as input_xfrm for contexts

Jens Axboe (1):
io_uring/rw: free potentially allocated iovec on cache put failure

Jiayuan Chen (1):
linkwatch: use __dev_put() in callers to prevent UAF

Johannes Berg (1):
wifi: mac80211: don't WARN for connections on invalid channels

Josh Poimboeuf (1):
x86/vmware: Fix hypercall clobbers

Junrui Luo (2):
dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero
dpaa2-switch: add bounds check for if_id in IRQ handler

Kairui Song (1):
mm, shmem: prevent infinite loop on truncate race

Karthik Poosa (1):
drm/xe/pm: Disable D3Cold for BMG only on specific platforms

Kaushlendra Kumar (3):
platform/x86: intel_telemetry: Fix swapped arrays in PSS output
regmap: maple: free entry on mas_store_gfp() failure platform/x86: intel_telemetry: Fix PSS event register mask

Keith Busch (1):
nvme-pci: handle changing device dma map requirements

Kery Qi (1):
ASoC: davinci-evm: Fix reference leak in davinci_evm_probe

Kevin Hao (2):
net: cpsw: Execute ndo_set_rx_mode callback in a work queue
net: cpsw_new: Execute ndo_set_rx_mode callback in a work queue

Kwok Kin Ming (1):
HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()

LI Qingwu (1):
i2c: imx: preserve error state in block data length handler

Lianqin Hu (1):
ALSA: usb-audio: Add delay quirk for MOONDROP Moonriver2 Ti

Lukas Gerlach (1):
riscv: Sanitize syscall table indexing under speculation

Lukas Wunner (2):
PCI/ERR: Ensure error recoverability at all times
treewide: Drop pci_save_state() after pci_restore_state()

Manivannan Sadhasivam (1):
PCI: qcom: Remove ASPM L0s support for MSM8996 SoC

Marek Behún (1):
net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module

Mario Limonciello (2):
drm/amd: Set minimum version for set_hw_resource_1 on gfx11 to 0x52 platform/x86: hp-bioscfg: Skip empty attribute names

Martin Hamilton (1):
ALSA: hda/realtek: ALC269 fixup for Lenovo Yoga Book 9i 13IRU8 audio

Martin Kaiser (1):
riscv: trace: fix snapshot deadlock with sbi ecall

Matouš Lánský (1):
ALSA: hda/realtek: Add quirk for Acer Nitro AN517-55

Maurizio Lombardi (2):
scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count()
scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count()

Max Yuan (1):
gve: Correct ethtool rx_dropped calculation

Melissa Wen (1):
drm/amd/display: fix wrong color value mapping on MCM shaper LUT

Miri Korenblit (4):
wifi: mac80211: correctly check if CSA is active
wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
wifi: iwlwifi: mld: cancel mlo_scan_start_wk
wifi: iwlwifi: mvm: pause TCM on fast resume

Mohammad Heib (2):
ice: drop udp_tunnel_get_rx_info() call from ndo_open()
i40e: drop udp_tunnel_get_rx_info() call from i40e_open()

Moon Hee Lee (1):
wifi: mac80211: ocb: skip rx_no_sta when interface is not joined

Nathan Chancellor (3):
drm/amd/display: Reduce number of arguments of dcn30's CalculatePrefetchSchedule()
riscv: Use 64-bit variable for output in __get_user_asm
riscv: Add intermediate cast to 'unsigned long' in __get_user_asm

Paolo Abeni (1):
net: gro: fix outer network offset

Pavel Begunkov (1):
io_uring/zcrx: fix page array leak

Perry Yuan (1):
drm/amd/pm: Disable MMIO access during SMU Mode 1 reset

Peter Zijlstra (1):
sched/fair: Have SD_SERIALIZE affect newidle balancing

Peter Åstrand (1):
wifi: wlcore: ensure skb headroom before skb_push

Qiang Ma (1):
btrfs: fix Wmaybe-uninitialized warning in replay_one_buffer()

Qu Wenruo (1):
btrfs: reject new transactions if the fs is fully read-only

Radhi Bajahaw (1):
ASoC: amd: yc: Fix microphone on ASUS M6500RE

Rafael J. Wysocki (2):
platform/x86: toshiba_haps: Fix memory leaks in add/remove routines
hwmon: (acpi_power_meter) Fix deadlocks related to acpi_power_meter_notify()

Ricardo Neri (1):
platform/x86/intel/tpmi/plr: Make the file domain<n>/status writeable

Richard Fitzgerald (2):
firmware: cs_dsp: Factor out common debugfs string read
firmware: cs_dsp: rate-limit log messages in KUnit builds

Rodrigo Lugathe da Conceição Alves (1):
HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101)

Ruslan Krupitsa (1):
ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk

Sean Christopherson (2):
KVM: x86: Explicitly configure supported XSS from {svm,vmx}_set_cpu_caps()
KVM: Don't clobber irqfd routing type when deassigning irqfd

Sergey Senozhatsky (1):
net: usb: r8152: fix resume reset deadlock

Sergey Shtylyov (1):
ALSA: usb-audio: fix broken logic in snd_audigy2nx_led_update()

Shenghao Ding (1):
ALSA: hda/tas2781: Add newly-released HP laptop

Shengjiu Wang (1):
ASoC: simple-card-utils: Check device node before overwrite direction

Shigeru Yoshida (1):
ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF

Shuicheng Lin (1):
drm/xe/query: Fix topology query pointer advance

Siarhei Vishniakou (1):
HID: playstation: Center initial joystick axes to prevent spurious events

Steven Rostedt (1):
tracing: Fix ftrace event field alignments

Takashi Iwai (2):
ALSA: aloop: Fix racy access at PCM trigger
ALSA: usb-audio: Use the right limit for PCM OOB check

Thomas Weissschuh (1):

      ARM: 9468/1: fix memset64() on big-endian

Tim Chen (1):
sched/fair: Skip sched_balance_running cmpxchg when balance is not due

Tim Guttzeit (1):
ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU

Tomas Hlavacek (1):
net: spacemit: k1-emac: fix jumbo frame support

Veerendranath Jakkam (1):
wifi: cfg80211: Fix bitrate calculation overflow for HE rates

Viacheslav Dubeyko (1):
ceph: fix NULL pointer dereference in ceph_mds_auth_match()

Vishwaroop A (1):
spi: tegra114: Preserve SPI mode bits in def_command1_reg

Werner Sembach (1):
ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU.

Wupeng Ma (1):
ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free

Xu Yang (3):
pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup
pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wakeup
pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains

Yao Zi (1):
wifi: iwlwifi: Implement settime64 as stub for MVM/MLD PTP

YunJe Shin (1):
nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec

Zhang Lixu (2):
HID: intel-ish-hid: Update ishtp bus match to support device ID table
HID: intel-ish-hid: Reset enum_devices_done before enumeration

ZhangGuoDong (3):
smb/server: call ksmbd_session_rpc_close() on error path in create_smb2_pipe() smb/server: fix refcount leak in smb2_open()
smb/server: fix refcount leak in parse_durable_handle_context()

Zhiquan Li (1):
KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable test failures

Zilin Guan (3):
net: liquidio: Initialize netdev pointer before queue setup
net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup
net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup

[email protected] (1):
hwmon: (dell-smm) Add Dell G15 5510 to fan control whitelist

shechenglong (1):
block,bfq: fix aux stat accumulation destination

author maintainer
#1 lore raw
Makefile +1 -1
index 64af72f16125..6d2269cbb0b2 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 18
-SUBLEVEL = 9
+SUBLEVEL = 10
 EXTRAVERSION =
 NAME = Baby Opossum Posse
 
arch/arm/include/asm/string.h +4 -1
index 6c607c68f3ad..c35250c4991b 100644
@@ -42,7 +42,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
 extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi);
 static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
 {
-	return __memset64(p, v, n * 8, v >> 32);
+	if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
+		return __memset64(p, v, n * 8, v >> 32);
+	else
+		return __memset64(p, v >> 32, n * 8, v);
 }
 
 /*
arch/loongarch/kernel/traps.c +5 -0
index da5926fead4a..8e51ce004572 100644
@@ -535,10 +535,15 @@ asmlinkage void noinstr do_fpe(struct pt_regs *regs, unsigned long fcsr)
 asmlinkage void noinstr do_ade(struct pt_regs *regs)
 {
 	irqentry_state_t state = irqentry_enter(regs);
+	unsigned int esubcode = FIELD_GET(CSR_ESTAT_ESUBCODE, regs->csr_estat);
+
+	if ((esubcode == EXSUBCODE_ADEM) && fixup_exception(regs))
+		goto out;
 
 	die_if_kernel("Kernel ade access", regs);
 	force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)regs->csr_badvaddr);
 
+out:
 	irqentry_exit(regs, state);
 }
 
arch/loongarch/mm/cache.c +4 -4
index 6be04d36ca07..496916845ff7 100644
@@ -160,8 +160,8 @@ void cpu_cache_init(void)
 
 static const pgprot_t protection_map[16] = {
 	[VM_NONE]					= __pgprot(_CACHE_CC | _PAGE_USER |
-								   _PAGE_PROTNONE | _PAGE_NO_EXEC |
-								   _PAGE_NO_READ),
+								   _PAGE_NO_EXEC | _PAGE_NO_READ |
+								   (_PAGE_PROTNONE ? : _PAGE_PRESENT)),
 	[VM_READ]					= __pgprot(_CACHE_CC | _PAGE_VALID |
 								   _PAGE_USER | _PAGE_PRESENT |
 								   _PAGE_NO_EXEC),
@@ -180,8 +180,8 @@ static const pgprot_t protection_map[16] = {
 	[VM_EXEC | VM_WRITE | VM_READ]			= __pgprot(_CACHE_CC | _PAGE_VALID |
 								   _PAGE_USER | _PAGE_PRESENT),
 	[VM_SHARED]					= __pgprot(_CACHE_CC | _PAGE_USER |
-								   _PAGE_PROTNONE | _PAGE_NO_EXEC |
-								   _PAGE_NO_READ),
+								   _PAGE_NO_EXEC | _PAGE_NO_READ |
+								   (_PAGE_PROTNONE ? : _PAGE_PRESENT)),
 	[VM_SHARED | VM_READ]				= __pgprot(_CACHE_CC | _PAGE_VALID |
 								   _PAGE_USER | _PAGE_PRESENT |
 								   _PAGE_NO_EXEC),
arch/riscv/include/asm/uaccess.h +12 -2
index f5f4f7f85543..6aef591a6bfc 100644
@@ -97,13 +97,23 @@ static inline unsigned long __untagged_addr_remote(struct mm_struct *mm, unsigne
  */
 
 #ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
+/*
+ * Use a temporary variable for the output of the asm goto to avoid a
+ * triggering an LLVM assertion due to sign extending the output when
+ * it is used in later function calls:
+ * https://github.com/llvm/llvm-project/issues/143795
+ */
 #define __get_user_asm(insn, x, ptr, label)			\
+do {								\
+	u64 __tmp;						\
 	asm_goto_output(					\
 		"1:\n"						\
 		"	" insn " %0, %1\n"			\
 		_ASM_EXTABLE_UACCESS_ERR(1b, %l2, %0)		\
-		: "=&r" (x)					\
-		: "m" (*(ptr)) : : label)
+		: "=&r" (__tmp)					\
+		: "m" (*(ptr)) : : label);			\
+	(x) = (__typeof__(x))(unsigned long)__tmp;		\
+} while (0)
 #else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
 #define __get_user_asm(insn, x, ptr, label)			\
 do {								\
arch/riscv/kernel/Makefile +8 -7
index f60fce69b725..a01f6439d62b 100644
@@ -3,12 +3,6 @@
 # Makefile for the RISC-V Linux kernel
 #
 
-ifdef CONFIG_FTRACE
-CFLAGS_REMOVE_ftrace.o	= $(CC_FLAGS_FTRACE)
-CFLAGS_REMOVE_patch.o	= $(CC_FLAGS_FTRACE)
-CFLAGS_REMOVE_sbi.o	= $(CC_FLAGS_FTRACE)
-CFLAGS_REMOVE_return_address.o	= $(CC_FLAGS_FTRACE)
-endif
 CFLAGS_syscall_table.o	+= $(call cc-disable-warning, override-init)
 CFLAGS_compat_syscall_table.o += $(call cc-disable-warning, override-init)
 
@@ -24,7 +18,6 @@ CFLAGS_sbi_ecall.o := -mcmodel=medany
 ifdef CONFIG_FTRACE
 CFLAGS_REMOVE_alternative.o = $(CC_FLAGS_FTRACE)
 CFLAGS_REMOVE_cpufeature.o = $(CC_FLAGS_FTRACE)
-CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
 endif
 ifdef CONFIG_RELOCATABLE
 CFLAGS_alternative.o += -fno-pie
@@ -43,6 +36,14 @@ CFLAGS_sbi_ecall.o += -D__NO_FORTIFY
 endif
 endif
 
+ifdef CONFIG_FTRACE
+CFLAGS_REMOVE_ftrace.o	= $(CC_FLAGS_FTRACE)
+CFLAGS_REMOVE_patch.o	= $(CC_FLAGS_FTRACE)
+CFLAGS_REMOVE_sbi.o	= $(CC_FLAGS_FTRACE)
+CFLAGS_REMOVE_return_address.o	= $(CC_FLAGS_FTRACE)
+CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
+endif
+
 always-$(KBUILD_BUILTIN) += vmlinux.lds
 
 obj-y	+= head.o
arch/riscv/kernel/traps.c +3 -1
index 80230de167de..47afea4ff1a8 100644
@@ -339,8 +339,10 @@ void do_trap_ecall_u(struct pt_regs *regs)
 
 		add_random_kstack_offset();
 
-		if (syscall >= 0 && syscall < NR_syscalls)
+		if (syscall >= 0 && syscall < NR_syscalls) {
+			syscall = array_index_nospec(syscall, NR_syscalls);
 			syscall_handler(regs, syscall);
+		}
 
 		/*
 		 * Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
arch/x86/coco/sev/Makefile +2 -0
index 3b8ae214a6a6..b2e9ec2f6901 100644
@@ -8,3 +8,5 @@ UBSAN_SANITIZE_noinstr.o	:= n
 # GCC may fail to respect __no_sanitize_address or __no_kcsan when inlining
 KASAN_SANITIZE_noinstr.o	:= n
 KCSAN_SANITIZE_noinstr.o	:= n
+
+GCOV_PROFILE_noinstr.o		:= n
arch/x86/include/asm/kfence.h +4 -3
index acf9ffa1a171..dfd5c74ba41a 100644
@@ -42,7 +42,7 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
 {
 	unsigned int level;
 	pte_t *pte = lookup_address(addr, &level);
-	pteval_t val;
+	pteval_t val, new;
 
 	if (WARN_ON(!pte || level != PG_LEVEL_4K))
 		return false;
@@ -57,11 +57,12 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
 		return true;
 
 	/*
-	 * Otherwise, invert the entire PTE.  This avoids writing out an
+	 * Otherwise, flip the Present bit, taking care to avoid writing an
 	 * L1TF-vulnerable PTE (not present, without the high address bits
 	 * set).
 	 */
-	set_pte(pte, __pte(~val));
+	new = val ^ _PAGE_PRESENT;
+	set_pte(pte, __pte(flip_protnone_guard(val, new, PTE_PFN_MASK)));
 
 	/*
 	 * If the page was protected (non-present) and we're making it
arch/x86/include/asm/vmware.h +2 -2
index c9cf43d5ef23..4220dae14a2d 100644
@@ -140,7 +140,7 @@ unsigned long vmware_hypercall3(unsigned long cmd, unsigned long in1,
 		  "b" (in1),
 		  "c" (cmd),
 		  "d" (0)
-		: "cc", "memory");
+		: "di", "si", "cc", "memory");
 	return out0;
 }
 
@@ -165,7 +165,7 @@ unsigned long vmware_hypercall4(unsigned long cmd, unsigned long in1,
 		  "b" (in1),
 		  "c" (cmd),
 		  "d" (0)
-		: "cc", "memory");
+		: "di", "si", "cc", "memory");
 	return out0;
 }
 
arch/x86/kvm/svm/svm.c +2 -0
index 3b215c5b5b01..d758bff6e068 100644
@@ -5285,6 +5285,8 @@ static __init void svm_set_cpu_caps(void)
 	 */
 	kvm_cpu_cap_clear(X86_FEATURE_BUS_LOCK_DETECT);
 	kvm_cpu_cap_clear(X86_FEATURE_MSR_IMM);
+
+	kvm_setup_xss_caps();
 }
 
 static __init int svm_hardware_setup(void)
arch/x86/kvm/vmx/vmx.c +2 -0
index 91b6f2f3edc2..c084f48e2b0b 100644
@@ -8021,6 +8021,8 @@ static __init void vmx_set_cpu_caps(void)
 		kvm_cpu_cap_clear(X86_FEATURE_SHSTK);
 		kvm_cpu_cap_clear(X86_FEATURE_IBT);
 	}
+
+	kvm_setup_xss_caps();
 }
 
 static bool vmx_is_io_intercepted(struct kvm_vcpu *vcpu,
arch/x86/kvm/x86.c +17 -13
index 43fb2a05a91c..c075ee23aead 100644
@@ -9954,6 +9954,23 @@ static struct notifier_block pvclock_gtod_notifier = {
 };
 #endif
 
+void kvm_setup_xss_caps(void)
+{
+	if (!kvm_cpu_cap_has(X86_FEATURE_XSAVES))
+		kvm_caps.supported_xss = 0;
+
+	if (!kvm_cpu_cap_has(X86_FEATURE_SHSTK) &&
+	    !kvm_cpu_cap_has(X86_FEATURE_IBT))
+		kvm_caps.supported_xss &= ~XFEATURE_MASK_CET_ALL;
+
+	if ((kvm_caps.supported_xss & XFEATURE_MASK_CET_ALL) != XFEATURE_MASK_CET_ALL) {
+		kvm_cpu_cap_clear(X86_FEATURE_SHSTK);
+		kvm_cpu_cap_clear(X86_FEATURE_IBT);
+		kvm_caps.supported_xss &= ~XFEATURE_MASK_CET_ALL;
+	}
+}
+EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_setup_xss_caps);
+
 static inline void kvm_ops_update(struct kvm_x86_init_ops *ops)
 {
 	memcpy(&kvm_x86_ops, ops->runtime_ops, sizeof(kvm_x86_ops));
@@ -10132,19 +10149,6 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
 	if (!tdp_enabled)
 		kvm_caps.supported_quirks &= ~KVM_X86_QUIRK_IGNORE_GUEST_PAT;
 
-	if (!kvm_cpu_cap_has(X86_FEATURE_XSAVES))
-		kvm_caps.supported_xss = 0;
-
-	if (!kvm_cpu_cap_has(X86_FEATURE_SHSTK) &&
-	    !kvm_cpu_cap_has(X86_FEATURE_IBT))
-		kvm_caps.supported_xss &= ~XFEATURE_MASK_CET_ALL;
-
-	if ((kvm_caps.supported_xss & XFEATURE_MASK_CET_ALL) != XFEATURE_MASK_CET_ALL) {
-		kvm_cpu_cap_clear(X86_FEATURE_SHSTK);
-		kvm_cpu_cap_clear(X86_FEATURE_IBT);
-		kvm_caps.supported_xss &= ~XFEATURE_MASK_CET_ALL;
-	}
-
 	if (kvm_caps.has_tsc_control) {
 		/*
 		 * Make sure the user can only configure tsc_khz values that
arch/x86/kvm/x86.h +2 -0
index f3dc77f006f9..c8a561c17e9a 100644
@@ -457,6 +457,8 @@ extern struct kvm_host_values kvm_host;
 
 extern bool enable_pmu;
 
+void kvm_setup_xss_caps(void);
+
 /*
  * Get a filtered version of KVM's supported XCR0 that strips out dynamic
  * features for which the current process doesn't (yet) have permission to use.
block/bfq-cgroup.c +1 -1
index 9fb9f3533150..6a75fe1c7a5c 100644
@@ -380,7 +380,7 @@ static void bfqg_stats_add_aux(struct bfqg_stats *to, struct bfqg_stats *from)
 	blkg_rwstat_add_aux(&to->merged, &from->merged);
 	blkg_rwstat_add_aux(&to->service_time, &from->service_time);
 	blkg_rwstat_add_aux(&to->wait_time, &from->wait_time);
-	bfq_stat_add_aux(&from->time, &from->time);
+	bfq_stat_add_aux(&to->time, &from->time);
 	bfq_stat_add_aux(&to->avg_queue_size_sum, &from->avg_queue_size_sum);
 	bfq_stat_add_aux(&to->avg_queue_size_samples,
 			  &from->avg_queue_size_samples);
drivers/android/binder.c +16 -3
index a3a1b5c33ba3..8e2989fb56a7 100644
@@ -2991,6 +2991,10 @@ static void binder_set_txn_from_error(struct binder_transaction *t, int id,
  * @t:		the binder transaction that failed
  * @data_size:	the user provided data size for the transaction
  * @error:	enum binder_driver_return_protocol returned to sender
+ *
+ * Note that t->buffer is not safe to access here, as it may have been
+ * released (or not yet allocated). Callers should guarantee all the
+ * transaction items used here are safe to access.
  */
 static void binder_netlink_report(struct binder_proc *proc,
 				  struct binder_transaction *t,
@@ -3780,6 +3784,14 @@ static void binder_transaction(struct binder_proc *proc,
 			goto err_dead_proc_or_thread;
 		}
 	} else {
+		/*
+		 * Make a transaction copy. It is not safe to access 't' after
+		 * binder_proc_transaction() reported a pending frozen. The
+		 * target could thaw and consume the transaction at any point.
+		 * Instead, use a safe 't_copy' for binder_netlink_report().
+		 */
+		struct binder_transaction t_copy = *t;
+
 		BUG_ON(target_node == NULL);
 		BUG_ON(t->buffer->async_transaction != 1);
 		return_error = binder_proc_transaction(t, target_proc, NULL);
@@ -3790,7 +3802,7 @@ static void binder_transaction(struct binder_proc *proc,
 		 */
 		if (return_error == BR_TRANSACTION_PENDING_FROZEN) {
 			tcomplete->type = BINDER_WORK_TRANSACTION_PENDING;
-			binder_netlink_report(proc, t, tr->data_size,
+			binder_netlink_report(proc, &t_copy, tr->data_size,
 					      return_error);
 		}
 		binder_enqueue_thread_work(thread, tcomplete);
@@ -3812,8 +3824,9 @@ static void binder_transaction(struct binder_proc *proc,
 	return;
 
 err_dead_proc_or_thread:
-	binder_txn_error("%d:%d dead process or thread\n",
-		thread->pid, proc->pid);
+	binder_txn_error("%d:%d %s process or thread\n",
+			 proc->pid, thread->pid,
+			 return_error == BR_FROZEN_REPLY ? "frozen" : "dead");
 	return_error_line = __LINE__;
 	binder_dequeue_work(proc, tcomplete);
 err_translate_failed:
drivers/android/binder/rust_binderfs.c +4 -4
index 6b497146b698..c7e26753f1df 100644
@@ -132,8 +132,8 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
 	mutex_lock(&binderfs_minors_mutex);
 	if (++info->device_count <= info->mount_opts.max)
 		minor = ida_alloc_max(&binderfs_minors,
-				      use_reserve ? BINDERFS_MAX_MINOR :
-						    BINDERFS_MAX_MINOR_CAPPED,
+				      use_reserve ? BINDERFS_MAX_MINOR - 1 :
+						    BINDERFS_MAX_MINOR_CAPPED - 1,
 				      GFP_KERNEL);
 	else
 		minor = -ENOSPC;
@@ -416,8 +416,8 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
 	/* Reserve a new minor number for the new device. */
 	mutex_lock(&binderfs_minors_mutex);
 	minor = ida_alloc_max(&binderfs_minors,
-			      use_reserve ? BINDERFS_MAX_MINOR :
-					    BINDERFS_MAX_MINOR_CAPPED,
+			      use_reserve ? BINDERFS_MAX_MINOR - 1 :
+					    BINDERFS_MAX_MINOR_CAPPED - 1,
 			      GFP_KERNEL);
 	mutex_unlock(&binderfs_minors_mutex);
 	if (minor < 0) {
drivers/android/binder/thread.rs +70 -39

213 lines not on this page · raw message

drivers/android/binderfs.c +4 -4
index be8e64eb39ec..6c6f52e1c032 100644
@@ -132,8 +132,8 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
 	mutex_lock(&binderfs_minors_mutex);
 	if (++info->device_count <= info->mount_opts.max)
 		minor = ida_alloc_max(&binderfs_minors,
-				      use_reserve ? BINDERFS_MAX_MINOR :
-						    BINDERFS_MAX_MINOR_CAPPED,
+				      use_reserve ? BINDERFS_MAX_MINOR - 1 :
+						    BINDERFS_MAX_MINOR_CAPPED - 1,
 				      GFP_KERNEL);
 	else
 		minor = -ENOSPC;
@@ -424,8 +424,8 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
 	/* Reserve a new minor number for the new device. */
 	mutex_lock(&binderfs_minors_mutex);
 	minor = ida_alloc_max(&binderfs_minors,
-			      use_reserve ? BINDERFS_MAX_MINOR :
-					    BINDERFS_MAX_MINOR_CAPPED,
+			      use_reserve ? BINDERFS_MAX_MINOR - 1 :
+					    BINDERFS_MAX_MINOR_CAPPED - 1,
 			      GFP_KERNEL);
 	mutex_unlock(&binderfs_minors_mutex);
 	if (minor < 0) {
drivers/base/regmap/regcache-maple.c +6 -5
index 2319c30283a6..9cf0384ce7b9 100644
@@ -95,12 +95,13 @@ static int regcache_maple_write(struct regmap *map, unsigned int reg,
 
 	mas_unlock(&mas);
 
-	if (ret == 0) {
-		kfree(lower);
-		kfree(upper);
+	if (ret) {
+		kfree(entry);
+		return ret;
 	}
-	
-	return ret;
+	kfree(lower);
+	kfree(upper);
+	return 0;
 }
 
 static int regcache_maple_drop(struct regmap *map, unsigned int min,
drivers/block/rbd.c +21 -12
index af0e21149dbc..8f441eb8b192 100644
@@ -3495,11 +3495,29 @@ static void rbd_img_object_requests(struct rbd_img_request *img_req)
 	rbd_assert(!need_exclusive_lock(img_req) ||
 		   __rbd_is_lock_owner(rbd_dev));
 
-	if (rbd_img_is_write(img_req)) {
-		rbd_assert(!img_req->snapc);
+	if (test_bit(IMG_REQ_CHILD, &img_req->flags)) {
+		rbd_assert(!rbd_img_is_write(img_req));
+	} else {
+		struct request *rq = blk_mq_rq_from_pdu(img_req);
+		u64 off = (u64)blk_rq_pos(rq) << SECTOR_SHIFT;
+		u64 len = blk_rq_bytes(rq);
+		u64 mapping_size;
+
 		down_read(&rbd_dev->header_rwsem);
-		img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc);
+		mapping_size = rbd_dev->mapping.size;
+		if (rbd_img_is_write(img_req)) {
+			rbd_assert(!img_req->snapc);
+			img_req->snapc =
+			    ceph_get_snap_context(rbd_dev->header.snapc);
+		}
 		up_read(&rbd_dev->header_rwsem);
+
+		if (unlikely(off + len > mapping_size)) {
+			rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)",
+				 off, len, mapping_size);
+			img_req->pending.result = -EIO;
+			return;
+		}
 	}
 
 	for_each_obj_request(img_req, obj_req) {
@@ -4725,7 +4743,6 @@ static void rbd_queue_workfn(struct work_struct *work)
 	struct request *rq = blk_mq_rq_from_pdu(img_request);
 	u64 offset = (u64)blk_rq_pos(rq) << SECTOR_SHIFT;
 	u64 length = blk_rq_bytes(rq);
-	u64 mapping_size;
 	int result;
 
 	/* Ignore/skip any zero-length requests */
@@ -4738,17 +4755,9 @@ static void rbd_queue_workfn(struct work_struct *work)
 	blk_mq_start_request(rq);
 
 	down_read(&rbd_dev->header_rwsem);
-	mapping_size = rbd_dev->mapping.size;
 	rbd_img_capture_header(img_request);
 	up_read(&rbd_dev->header_rwsem);
 
-	if (offset + length > mapping_size) {
-		rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)", offset,
-			 length, mapping_size);
-		result = -EIO;
-		goto err_img_request;
-	}
-
 	dout("%s rbd_dev %p img_req %p %s %llu~%llu\n", __func__, rbd_dev,
 	     img_request, obj_op_name(op_type), offset, length);
 
drivers/bus/mhi/host/pci_generic.c +13 -0
index b188bbf7de04..3d8c9729fcfc 100644
@@ -877,6 +877,16 @@ static const struct mhi_pci_dev_info mhi_telit_fn990b40_info = {
 	.edl_trigger = true,
 };
 
+static const struct mhi_pci_dev_info mhi_telit_fe990b40_info = {
+	.name = "telit-fe990b40",
+	.config = &modem_telit_fn920c04_config,
+	.bar_num = MHI_PCI_DEFAULT_BAR_NUM,
+	.dma_data_width = 32,
+	.sideband_wake = false,
+	.mru_default = 32768,
+	.edl_trigger = true,
+};
+
 static const struct mhi_pci_dev_info mhi_netprisma_lcur57_info = {
 	.name = "netprisma-lcur57",
 	.edl = "qcom/prog_firehose_sdx24.mbn",
@@ -933,6 +943,9 @@ static const struct pci_device_id mhi_pci_id_table[] = {
 	/* Telit FN990B40 (sdx72) */
 	{ PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0309, 0x1c5d, 0x201a),
 		.driver_data = (kernel_ulong_t) &mhi_telit_fn990b40_info },
+	/* Telit FE990B40 (sdx72) */
+	{ PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0309, 0x1c5d, 0x2025),
+		.driver_data = (kernel_ulong_t) &mhi_telit_fe990b40_info },
 	{ PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x0309),
 		.driver_data = (kernel_ulong_t) &mhi_qcom_sdx75_info },
 	/* QDU100, x100-DU */
drivers/crypto/intel/qat/qat_common/adf_aer.c +0 -2
index a098689ab5b7..f63e78724c7a 100644
@@ -103,7 +103,6 @@ void adf_dev_restore(struct adf_accel_dev *accel_dev)
 			 accel_dev->accel_id);
 		hw_device->reset_device(accel_dev);
 		pci_restore_state(pdev);
-		pci_save_state(pdev);
 	}
 }
 
@@ -202,7 +201,6 @@ static pci_ers_result_t adf_slot_reset(struct pci_dev *pdev)
 	if (!pdev->is_busmaster)
 		pci_set_master(pdev);
 	pci_restore_state(pdev);
-	pci_save_state(pdev);
 	res = adf_dev_up(accel_dev, false);
 	if (res && res != -EALREADY)
 		return PCI_ERS_RESULT_DISCONNECT;
drivers/dma/ioat/init.c +0 -1
index 02f68b328511..227398673b73 100644
@@ -1286,7 +1286,6 @@ static pci_ers_result_t ioat_pcie_error_slot_reset(struct pci_dev *pdev)
 	} else {
 		pci_set_master(pdev);
 		pci_restore_state(pdev);
-		pci_save_state(pdev);
 		pci_wake_from_d3(pdev, false);
 	}
 
drivers/dma/mmp_pdma.c +6 -0
index 86661eb3cde1..d12e729ee12c 100644
@@ -928,6 +928,7 @@ static unsigned int mmp_pdma_residue(struct mmp_pdma_chan *chan,
 {
 	struct mmp_pdma_desc_sw *sw;
 	struct mmp_pdma_device *pdev = to_mmp_pdma_dev(chan->chan.device);
+	unsigned long flags;
 	u64 curr;
 	u32 residue = 0;
 	bool passed = false;
@@ -945,6 +946,8 @@ static unsigned int mmp_pdma_residue(struct mmp_pdma_chan *chan,
 	else
 		curr = pdev->ops->read_src_addr(chan->phy);
 
+	spin_lock_irqsave(&chan->desc_lock, flags);
+
 	list_for_each_entry(sw, &chan->chain_running, node) {
 		u64 start, end;
 		u32 len;
@@ -989,6 +992,7 @@ static unsigned int mmp_pdma_residue(struct mmp_pdma_chan *chan,
 			continue;
 
 		if (sw->async_tx.cookie == cookie) {
+			spin_unlock_irqrestore(&chan->desc_lock, flags);
 			return residue;
 		} else {
 			residue = 0;
@@ -996,6 +1000,8 @@ static unsigned int mmp_pdma_residue(struct mmp_pdma_chan *chan,
 		}
 	}
 
+	spin_unlock_irqrestore(&chan->desc_lock, flags);
+
 	/* We should only get here in case of cyclic transactions */
 	return residue;
 }
drivers/firmware/cirrus/cs_dsp.c +58 -24

119 lines not on this page · raw message

drivers/firmware/cirrus/cs_dsp.h new file +18 -0
new file mode 100644
index 000000000000..adf543004aea
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * cs_dsp.h  --  Private header for cs_dsp driver.
+ *
+ * Copyright (C) 2026 Cirrus Logic, Inc. and
+ *                    Cirrus Logic International Semiconductor Ltd.
+ */
+
+#ifndef FW_CS_DSP_H
+#define FW_CS_DSP_H
+
+#if IS_ENABLED(CONFIG_KUNIT)
+extern bool cs_dsp_suppress_err_messages;
+extern bool cs_dsp_suppress_warn_messages;
+extern bool cs_dsp_suppress_info_messages;
+#endif
+
+#endif /* ifndef FW_CS_DSP_H */
drivers/firmware/cirrus/test/cs_dsp_test_bin.c +21 -1
index 163b7faecff4..2c6486fa9575 100644
@@ -17,6 +17,8 @@
 #include <linux/random.h>
 #include <linux/regmap.h>
 
+#include "../cs_dsp.h"
+
 /*
  * Test method is:
  *
@@ -2224,7 +2226,22 @@ static int cs_dsp_bin_test_common_init(struct kunit *test, struct cs_dsp *dsp)
 		return ret;
 
 	/* Automatically call cs_dsp_remove() when test case ends */
-	return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	if (ret)
+		return ret;
+
+	/*
+	 * The large number of test cases will cause an unusually large amount
+	 * of dev_info() messages from cs_dsp, so suppress these.
+	 */
+	cs_dsp_suppress_info_messages = true;
+
+	return 0;
+}
+
+static void cs_dsp_bin_test_exit(struct kunit *test)
+{
+	cs_dsp_suppress_info_messages = false;
 }
 
 static int cs_dsp_bin_test_halo_init(struct kunit *test)
@@ -2536,18 +2553,21 @@ static struct kunit_case cs_dsp_bin_test_cases_adsp2[] = {
 static struct kunit_suite cs_dsp_bin_test_halo = {
 	.name = "cs_dsp_bin_halo",
 	.init = cs_dsp_bin_test_halo_init,
+	.exit = cs_dsp_bin_test_exit,
 	.test_cases = cs_dsp_bin_test_cases_halo,
 };
 
 static struct kunit_suite cs_dsp_bin_test_adsp2_32bit = {
 	.name = "cs_dsp_bin_adsp2_32bit",
 	.init = cs_dsp_bin_test_adsp2_32bit_init,
+	.exit = cs_dsp_bin_test_exit,
 	.test_cases = cs_dsp_bin_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_bin_test_adsp2_16bit = {
 	.name = "cs_dsp_bin_adsp2_16bit",
 	.init = cs_dsp_bin_test_adsp2_16bit_init,
+	.exit = cs_dsp_bin_test_exit,
 	.test_cases = cs_dsp_bin_test_cases_adsp2,
 };
 
drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c +18 -6
index a7ec956d2724..631b9cb9eb25 100644
@@ -18,6 +18,8 @@
 #include <linux/string.h>
 #include <linux/vmalloc.h>
 
+#include "../cs_dsp.h"
+
 KUNIT_DEFINE_ACTION_WRAPPER(_put_device_wrapper, put_device, struct device *);
 KUNIT_DEFINE_ACTION_WRAPPER(_cs_dsp_remove_wrapper, cs_dsp_remove, struct cs_dsp *);
 
@@ -380,11 +382,9 @@ static void bin_block_payload_len_garbage(struct kunit *test)
 
 static void cs_dsp_bin_err_test_exit(struct kunit *test)
 {
-	/*
-	 * Testing error conditions can produce a lot of log output
-	 * from cs_dsp error messages, so rate limit the test cases.
-	 */
-	usleep_range(200, 500);
+	cs_dsp_suppress_err_messages = false;
+	cs_dsp_suppress_warn_messages = false;
+	cs_dsp_suppress_info_messages = false;
 }
 
 static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *dsp,
@@ -474,7 +474,19 @@ static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *ds
 		return ret;
 
 	/* Automatically call cs_dsp_remove() when test case ends */
-	return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	if (ret)
+		return ret;
+
+	/*
+	 * Testing error conditions can produce a lot of log output
+	 * from cs_dsp error messages, so suppress messages.
+	 */
+	cs_dsp_suppress_err_messages = true;
+	cs_dsp_suppress_warn_messages = true;
+	cs_dsp_suppress_info_messages = true;
+
+	return 0;
 }
 
 static int cs_dsp_bin_err_test_halo_init(struct kunit *test)
drivers/firmware/cirrus/test/cs_dsp_test_wmfw.c +25 -1
index 9e997c4ee2d6..f02cb6cf7638 100644
@@ -18,6 +18,8 @@
 #include <linux/string.h>
 #include <linux/vmalloc.h>
 
+#include "../cs_dsp.h"
+
 /*
  * Test method is:
  *
@@ -1853,7 +1855,22 @@ static int cs_dsp_wmfw_test_common_init(struct kunit *test, struct cs_dsp *dsp,
 		return ret;
 
 	/* Automatically call cs_dsp_remove() when test case ends */
-	return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	if (ret)
+		return ret;
+
+	/*
+	 * The large number of test cases will cause an unusually large amount
+	 * of dev_info() messages from cs_dsp, so suppress these.
+	 */
+	cs_dsp_suppress_info_messages = true;
+
+	return 0;
+}
+
+static void cs_dsp_wmfw_test_exit(struct kunit *test)
+{
+	cs_dsp_suppress_info_messages = false;
 }
 
 static int cs_dsp_wmfw_test_halo_init(struct kunit *test)
@@ -2163,42 +2180,49 @@ static struct kunit_case cs_dsp_wmfw_test_cases_adsp2[] = {
 static struct kunit_suite cs_dsp_wmfw_test_halo = {
 	.name = "cs_dsp_wmfwV3_halo",
 	.init = cs_dsp_wmfw_test_halo_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_halo,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw0 = {
 	.name = "cs_dsp_wmfwV0_adsp2_32bit",
 	.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw0_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw1 = {
 	.name = "cs_dsp_wmfwV1_adsp2_32bit",
 	.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw1_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw2 = {
 	.name = "cs_dsp_wmfwV2_adsp2_32bit",
 	.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw2_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw0 = {
 	.name = "cs_dsp_wmfwV0_adsp2_16bit",
 	.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw0_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw1 = {
 	.name = "cs_dsp_wmfwV1_adsp2_16bit",
 	.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw1_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
 static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw2 = {
 	.name = "cs_dsp_wmfwV2_adsp2_16bit",
 	.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw2_init,
+	.exit = cs_dsp_wmfw_test_exit,
 	.test_cases = cs_dsp_wmfw_test_cases_adsp2,
 };
 
drivers/firmware/cirrus/test/cs_dsp_test_wmfw_error.c +18 -6
index c309843261d7..37162d12e2fa 100644
@@ -18,6 +18,8 @@
 #include <linux/string.h>
 #include <linux/vmalloc.h>
 
+#include "../cs_dsp.h"
+
 KUNIT_DEFINE_ACTION_WRAPPER(_put_device_wrapper, put_device, struct device *);
 KUNIT_DEFINE_ACTION_WRAPPER(_cs_dsp_remove_wrapper, cs_dsp_remove, struct cs_dsp *);
 
@@ -989,11 +991,9 @@ static void wmfw_v2_coeff_description_exceeds_block(struct kunit *test)
 
 static void cs_dsp_wmfw_err_test_exit(struct kunit *test)
 {
-	/*
-	 * Testing error conditions can produce a lot of log output
-	 * from cs_dsp error messages, so rate limit the test cases.
-	 */
-	usleep_range(200, 500);
+	cs_dsp_suppress_err_messages = false;
+	cs_dsp_suppress_warn_messages = false;
+	cs_dsp_suppress_info_messages = false;
 }
 
 static int cs_dsp_wmfw_err_test_common_init(struct kunit *test, struct cs_dsp *dsp,
@@ -1072,7 +1072,19 @@ static int cs_dsp_wmfw_err_test_common_init(struct kunit *test, struct cs_dsp *d
 		return ret;
 
 	/* Automatically call cs_dsp_remove() when test case ends */
-	return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
+	if (ret)
+		return ret;
+
+	/*
+	 * Testing error conditions can produce a lot of log output
+	 * from cs_dsp error messages, so suppress messages.
+	 */
+	cs_dsp_suppress_err_messages = true;
+	cs_dsp_suppress_warn_messages = true;
+	cs_dsp_suppress_info_messages = true;
+
+	return 0;
 }
 
 static int cs_dsp_wmfw_err_test_halo_init(struct kunit *test)
drivers/firmware/cirrus/test/cs_dsp_tests.c +1 -0
index 7b829a03ca52..288675fdbdc5 100644
@@ -12,3 +12,4 @@ MODULE_AUTHOR("Richard Fitzgerald <[email protected]>");
 MODULE_LICENSE("GPL");
 MODULE_IMPORT_NS("FW_CS_DSP");
 MODULE_IMPORT_NS("FW_CS_DSP_KUNIT_TEST_UTILS");
+MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
drivers/gpio/gpio-loongson-64bit.c +1 -1
index 82d4c3aa4d2f..d5573fb0616c 100644
@@ -263,7 +263,7 @@ static int loongson_gpio_init_irqchip(struct platform_device *pdev,
 	chip->irq.num_parents = data->intr_num;
 	chip->irq.parents = devm_kcalloc(&pdev->dev, data->intr_num,
 					 sizeof(*chip->irq.parents), GFP_KERNEL);
-	if (!chip->parent)
+	if (!chip->irq.parents)
 		return -ENOMEM;
 
 	for (i = 0; i < data->intr_num; i++) {
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +3 -0
index 49107475af61..53b33a636971 100644
@@ -5739,6 +5739,9 @@ int amdgpu_device_mode1_reset(struct amdgpu_device *adev)
 	if (ret)
 		goto mode1_reset_failed;
 
+	/* enable mmio access after mode 1 reset completed */
+	adev->no_hw_access = false;
+
 	amdgpu_device_load_pci_state(adev->pdev);
 	ret = amdgpu_psp_wait_for_bootloader(adev);
 	if (ret)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +0 -3
index 7333e19291cf..ec9516d6ae97 100644
@@ -2334,9 +2334,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
 			return -ENODEV;
 	}
 
-	if (amdgpu_aspm == -1 && !pcie_aspm_enabled(pdev))
-		amdgpu_aspm = 0;
-
 	if (amdgpu_virtual_display ||
 	    amdgpu_device_asic_has_dc_support(pdev, flags & AMD_ASIC_MASK))
 		supports_atomic = true;
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c +1 -1
index da575bb1377f..05546a6e80ae 100644
@@ -1667,7 +1667,7 @@ static int mes_v11_0_hw_init(struct amdgpu_ip_block *ip_block)
 	if (r)
 		goto failure;
 
-	if ((adev->mes.sched_version & AMDGPU_MES_VERSION_MASK) >= 0x50) {
+	if ((adev->mes.sched_version & AMDGPU_MES_VERSION_MASK) >= 0x52) {
 		r = mes_v11_0_set_hw_resources_1(&adev->mes);
 		if (r) {
 			DRM_ERROR("failed mes_v11_0_set_hw_resources_1, r=%d\n", r);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +0 -11
index 38f9ea313dcb..2e7ee77c010e 100644
@@ -248,8 +248,6 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
 	struct vblank_control_work *vblank_work =
 		container_of(work, struct vblank_control_work, work);
 	struct amdgpu_display_manager *dm = vblank_work->dm;
-	struct amdgpu_device *adev = drm_to_adev(dm->ddev);
-	int r;
 
 	mutex_lock(&dm->dc_lock);
 
@@ -279,16 +277,7 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
 
 	if (dm->active_vblank_irq_count == 0) {
 		dc_post_update_surfaces_to_stream(dm->dc);
-
-		r = amdgpu_dpm_pause_power_profile(adev, true);
-		if (r)
-			dev_warn(adev->dev, "failed to set default power profile mode\n");
-
 		dc_allow_idle_optimizations(dm->dc, true);
-
-		r = amdgpu_dpm_pause_power_profile(adev, false);
-		if (r)
-			dev_warn(adev->dev, "failed to restore the power profile mode\n");
 	}
 
 	mutex_unlock(&dm->dc_lock);
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c +5 -2
index 0690c346f2c5..a4f14b16564c 100644
@@ -163,6 +163,11 @@ bool cm3_helper_translate_curve_to_hw_format(
 			hw_points += (1 << seg_distr[k]);
 	}
 
+	// DCN3+ have 257 pts in lieu of no separate slope registers
+	// Prior HW had 256 base+slope pairs
+	// Shaper LUT (i.e. fixpoint == true) is still 256 bases and 256 deltas
+	hw_points = fixpoint ? (hw_points - 1) : hw_points;
+
 	j = 0;
 	for (k = 0; k < (region_end - region_start); k++) {
 		increment = NUMBER_SW_SEGMENTS / (1 << seg_distr[k]);
@@ -223,8 +228,6 @@ bool cm3_helper_translate_curve_to_hw_format(
 	corner_points[1].green.slope = dc_fixpt_zero;
 	corner_points[1].blue.slope = dc_fixpt_zero;
 
-	// DCN3+ have 257 pts in lieu of no separate slope registers
-	// Prior HW had 256 base+slope pairs
 	lut_params->hw_points_num = hw_points + 1;
 
 	k = 0;
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c +73 -185

535 lines not on this page · raw message

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +6 -1
index c1062e5f0393..8d070a9ea2c1 100644
@@ -2922,8 +2922,13 @@ static int smu_v13_0_0_mode1_reset(struct smu_context *smu)
 		break;
 	}
 
-	if (!ret)
+	if (!ret) {
+		/* disable mmio access while doing mode 1 reset*/
+		smu->adev->no_hw_access = true;
+		/* ensure no_hw_access is globally visible before any MMIO */
+		smp_mb();
 		msleep(SMU13_MODE1_RESET_WAIT_TIME_IN_MS);
+	}
 
 	return ret;
 }
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +7 -2
index e735da7ab612..bad8dd786bff 100644
@@ -2143,10 +2143,15 @@ static int smu_v14_0_2_mode1_reset(struct smu_context *smu)
 
 	ret = smu_cmn_send_debug_smc_msg(smu, DEBUGSMC_MSG_Mode1Reset);
 	if (!ret) {
-		if (amdgpu_emu_mode == 1)
+		if (amdgpu_emu_mode == 1) {
 			msleep(50000);
-		else
+		} else {
+			/* disable mmio access while doing mode 1 reset*/
+			smu->adev->no_hw_access = true;
+			/* ensure no_hw_access is globally visible before any MMIO */
+			smp_mb();
 			msleep(1000);
+		}
 	}
 
 	return ret;
drivers/gpu/drm/mgag200/mgag200_bmc.c +12 -19
index a689c71ff165..bbdeb791c5b3 100644
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 
 #include <linux/delay.h>
+#include <linux/iopoll.h>
 
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_edid.h>
@@ -12,7 +13,7 @@
 void mgag200_bmc_stop_scanout(struct mga_device *mdev)
 {
 	u8 tmp;
-	int iter_max;
+	int ret;
 
 	/*
 	 * 1 - The first step is to inform the BMC of an upcoming mode
@@ -42,30 +43,22 @@ void mgag200_bmc_stop_scanout(struct mga_device *mdev)
 
 	/*
 	 * 3a- The third step is to verify if there is an active scan.
-	 * We are waiting for a 0 on remhsyncsts <XSPAREREG<0>).
+	 * We are waiting for a 0 on remhsyncsts (<XSPAREREG<0>).
 	 */
-	iter_max = 300;
-	while (!(tmp & 0x1) && iter_max) {
-		WREG8(DAC_INDEX, MGA1064_SPAREREG);
-		tmp = RREG8(DAC_DATA);
-		udelay(1000);
-		iter_max--;
-	}
+	ret = read_poll_timeout(RREG_DAC, tmp, !(tmp & 0x1),
+				1000, 300000, false,
+				MGA1064_SPAREREG);
+	if (ret == -ETIMEDOUT)
+		return;
 
 	/*
-	 * 3b- This step occurs only if the remove is actually
+	 * 3b- This step occurs only if the remote BMC is actually
 	 * scanning. We are waiting for the end of the frame which is
 	 * a 1 on remvsyncsts (XSPAREREG<1>)
 	 */
-	if (iter_max) {
-		iter_max = 300;
-		while ((tmp & 0x2) && iter_max) {
-			WREG8(DAC_INDEX, MGA1064_SPAREREG);
-			tmp = RREG8(DAC_DATA);
-			udelay(1000);
-			iter_max--;
-		}
-	}
+	(void)read_poll_timeout(RREG_DAC, tmp, (tmp & 0x2),
+				1000, 300000, false,
+				MGA1064_SPAREREG);
 }
 
 void mgag200_bmc_start_scanout(struct mga_device *mdev)
drivers/gpu/drm/mgag200/mgag200_drv.h +6 -0
index f4bf40cd7c88..a875c4bf8cbe 100644
@@ -111,6 +111,12 @@
 #define DAC_INDEX 0x3c00
 #define DAC_DATA 0x3c0a
 
+#define RREG_DAC(reg)						\
+	({							\
+		WREG8(DAC_INDEX, reg);				\
+		RREG8(DAC_DATA);				\
+	})							\
+
 #define WREG_DAC(reg, v)					\
 	do {							\
 		WREG8(DAC_INDEX, reg);				\
drivers/gpu/drm/nouveau/include/nvif/client.h +1 -1
index 03f1d564eb12..b698c74306f8 100644
@@ -11,7 +11,7 @@ struct nvif_client {
 
 int  nvif_client_ctor(struct nvif_client *parent, const char *name, struct nvif_client *);
 void nvif_client_dtor(struct nvif_client *);
-int  nvif_client_suspend(struct nvif_client *);
+int  nvif_client_suspend(struct nvif_client *, bool);
 int  nvif_client_resume(struct nvif_client *);
 
 /*XXX*/
drivers/gpu/drm/nouveau/include/nvif/driver.h +1 -1
index 7b08ff769039..61c8a177b28f 100644
@@ -8,7 +8,7 @@ struct nvif_driver {
 	const char *name;
 	int (*init)(const char *name, u64 device, const char *cfg,
 		    const char *dbg, void **priv);
-	int (*suspend)(void *priv);
+	int (*suspend)(void *priv, bool runtime);
 	int (*resume)(void *priv);
 	int (*ioctl)(void *priv, void *data, u32 size, void **hack);
 	void __iomem *(*map)(void *priv, u64 handle, u32 size);
drivers/gpu/drm/nouveau/include/nvkm/core/device.h +2 -1
index 99579e7b9376..954a89d43bad 100644
@@ -2,6 +2,7 @@
 #ifndef __NVKM_DEVICE_H__
 #define __NVKM_DEVICE_H__
 #include <core/oclass.h>
+#include <core/suspend_state.h>
 #include <core/intr.h>
 enum nvkm_subdev_type;
 
@@ -93,7 +94,7 @@ struct nvkm_device_func {
 	void *(*dtor)(struct nvkm_device *);
 	int (*preinit)(struct nvkm_device *);
 	int (*init)(struct nvkm_device *);
-	void (*fini)(struct nvkm_device *, bool suspend);
+	void (*fini)(struct nvkm_device *, enum nvkm_suspend_state suspend);
 	int (*irq)(struct nvkm_device *);
 	resource_size_t (*resource_addr)(struct nvkm_device *, enum nvkm_bar_id);
 	resource_size_t (*resource_size)(struct nvkm_device *, enum nvkm_bar_id);
drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +1 -1
index 738899fcf30b..1e97be6c6564 100644
@@ -20,7 +20,7 @@ struct nvkm_engine_func {
 	int (*oneinit)(struct nvkm_engine *);
 	int (*info)(struct nvkm_engine *, u64 mthd, u64 *data);
 	int (*init)(struct nvkm_engine *);
-	int (*fini)(struct nvkm_engine *, bool suspend);
+	int (*fini)(struct nvkm_engine *, enum nvkm_suspend_state suspend);
 	int (*reset)(struct nvkm_engine *);
 	int (*nonstall)(struct nvkm_engine *);
 	void (*intr)(struct nvkm_engine *);
drivers/gpu/drm/nouveau/include/nvkm/core/object.h +3 -2
index 10107ef3ca49..54d356154274 100644
@@ -2,6 +2,7 @@
 #ifndef __NVKM_OBJECT_H__
 #define __NVKM_OBJECT_H__
 #include <core/oclass.h>
+#include <core/suspend_state.h>
 struct nvkm_event;
 struct nvkm_gpuobj;
 struct nvkm_uevent;
@@ -27,7 +28,7 @@ enum nvkm_object_map {
 struct nvkm_object_func {
 	void *(*dtor)(struct nvkm_object *);
 	int (*init)(struct nvkm_object *);
-	int (*fini)(struct nvkm_object *, bool suspend);
+	int (*fini)(struct nvkm_object *, enum nvkm_suspend_state suspend);
 	int (*mthd)(struct nvkm_object *, u32 mthd, void *data, u32 size);
 	int (*ntfy)(struct nvkm_object *, u32 mthd, struct nvkm_event **);
 	int (*map)(struct nvkm_object *, void *argv, u32 argc,
@@ -49,7 +50,7 @@ int nvkm_object_new(const struct nvkm_oclass *, void *data, u32 size,
 void nvkm_object_del(struct nvkm_object **);
 void *nvkm_object_dtor(struct nvkm_object *);
 int nvkm_object_init(struct nvkm_object *);
-int nvkm_object_fini(struct nvkm_object *, bool suspend);
+int nvkm_object_fini(struct nvkm_object *, enum nvkm_suspend_state);
 int nvkm_object_mthd(struct nvkm_object *, u32 mthd, void *data, u32 size);
 int nvkm_object_ntfy(struct nvkm_object *, u32 mthd, struct nvkm_event **);
 int nvkm_object_map(struct nvkm_object *, void *argv, u32 argc,
drivers/gpu/drm/nouveau/include/nvkm/core/oproxy.h +1 -1
index 0e70a9afba33..cf66aee4d111 100644
@@ -13,7 +13,7 @@ struct nvkm_oproxy {
 struct nvkm_oproxy_func {
 	void (*dtor[2])(struct nvkm_oproxy *);
 	int  (*init[2])(struct nvkm_oproxy *);
-	int  (*fini[2])(struct nvkm_oproxy *, bool suspend);
+	int  (*fini[2])(struct nvkm_oproxy *, enum nvkm_suspend_state suspend);
 };
 
 void nvkm_oproxy_ctor(const struct nvkm_oproxy_func *,
drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +2 -2
index bce6e1ba09ea..bd6b1b658e40 100644
@@ -40,7 +40,7 @@ struct nvkm_subdev_func {
 	int (*oneinit)(struct nvkm_subdev *);
 	int (*info)(struct nvkm_subdev *, u64 mthd, u64 *data);
 	int (*init)(struct nvkm_subdev *);
-	int (*fini)(struct nvkm_subdev *, bool suspend);
+	int (*fini)(struct nvkm_subdev *, enum nvkm_suspend_state suspend);
 	void (*intr)(struct nvkm_subdev *);
 };
 
@@ -65,7 +65,7 @@ void nvkm_subdev_unref(struct nvkm_subdev *);
 int  nvkm_subdev_preinit(struct nvkm_subdev *);
 int  nvkm_subdev_oneinit(struct nvkm_subdev *);
 int  nvkm_subdev_init(struct nvkm_subdev *);
-int  nvkm_subdev_fini(struct nvkm_subdev *, bool suspend);
+int  nvkm_subdev_fini(struct nvkm_subdev *, enum nvkm_suspend_state suspend);
 int  nvkm_subdev_info(struct nvkm_subdev *, u64, u64 *);
 void nvkm_subdev_intr(struct nvkm_subdev *);
 
drivers/gpu/drm/nouveau/include/nvkm/core/suspend_state.h new file +11 -0
new file mode 100644
index 000000000000..134120fb71f4
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: MIT */
+#ifndef __NVKM_SUSPEND_STATE_H__
+#define __NVKM_SUSPEND_STATE_H__
+
+enum nvkm_suspend_state {
+	NVKM_POWEROFF,
+	NVKM_SUSPEND,
+	NVKM_RUNTIME_SUSPEND,
+};
+
+#endif
drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h +6 -0
index b8b97e10ae83..64fed208e4cf 100644
@@ -44,6 +44,9 @@ typedef void (*nvkm_gsp_event_func)(struct nvkm_gsp_event *, void *repv, u32 rep
  * NVKM_GSP_RPC_REPLY_NOWAIT - If specified, immediately return to the
  * caller after the GSP RPC command is issued.
  *
+ * NVKM_GSP_RPC_REPLY_NOSEQ - If specified, exactly like NOWAIT
+ * but don't emit RPC sequence number.
+ *
  * NVKM_GSP_RPC_REPLY_RECV - If specified, wait and receive the entire GSP
  * RPC message after the GSP RPC command is issued.
  *
@@ -53,6 +56,7 @@ typedef void (*nvkm_gsp_event_func)(struct nvkm_gsp_event *, void *repv, u32 rep
  */
 enum nvkm_gsp_rpc_reply_policy {
 	NVKM_GSP_RPC_REPLY_NOWAIT = 0,
+	NVKM_GSP_RPC_REPLY_NOSEQ,
 	NVKM_GSP_RPC_REPLY_RECV,
 	NVKM_GSP_RPC_REPLY_POLL,
 };
@@ -242,6 +246,8 @@ struct nvkm_gsp {
 	/* The size of the registry RPC */
 	size_t registry_rpc_size;
 
+	u32 rpc_seq;
+
 #ifdef CONFIG_DEBUG_FS
 	/*
 	 * Logging buffers in debugfs. The wrapper objects need to remain
drivers/gpu/drm/nouveau/nouveau_drm.c +1 -1
index 1527b801f013..dc469e571c0a 100644
@@ -983,7 +983,7 @@ nouveau_do_suspend(struct nouveau_drm *drm, bool runtime)
 	}
 
 	NV_DEBUG(drm, "suspending object tree...\n");
-	ret = nvif_client_suspend(&drm->_client);
+	ret = nvif_client_suspend(&drm->_client, runtime);
 	if (ret)
 		goto fail_client;
 
drivers/gpu/drm/nouveau/nouveau_nvif.c +8 -2
index adb802421fda..eeb4ebbc16bf 100644
@@ -62,10 +62,16 @@ nvkm_client_resume(void *priv)
 }
 
 static int
-nvkm_client_suspend(void *priv)
+nvkm_client_suspend(void *priv, bool runtime)
 {
 	struct nvkm_client *client = priv;
-	return nvkm_object_fini(&client->object, true);
+	enum nvkm_suspend_state state;
+
+	if (runtime)
+		state = NVKM_RUNTIME_SUSPEND;
+	else
+		state = NVKM_SUSPEND;
+	return nvkm_object_fini(&client->object, state);
 }
 
 static int
drivers/gpu/drm/nouveau/nvif/client.c +2 -2
index fdf5054ed7d8..36d3c99786bd 100644
@@ -30,9 +30,9 @@
 #include <nvif/if0000.h>
 
 int
-nvif_client_suspend(struct nvif_client *client)
+nvif_client_suspend(struct nvif_client *client, bool runtime)
 {
-	return client->driver->suspend(client->object.priv);
+	return client->driver->suspend(client->object.priv, runtime);
 }
 
 int
drivers/gpu/drm/nouveau/nvkm/core/engine.c +2 -2
index 36a31e9eea22..5bf62940d7be 100644
@@ -41,7 +41,7 @@ nvkm_engine_reset(struct nvkm_engine *engine)
 	if (engine->func->reset)
 		return engine->func->reset(engine);
 
-	nvkm_subdev_fini(&engine->subdev, false);
+	nvkm_subdev_fini(&engine->subdev, NVKM_POWEROFF);
 	return nvkm_subdev_init(&engine->subdev);
 }
 
@@ -98,7 +98,7 @@ nvkm_engine_info(struct nvkm_subdev *subdev, u64 mthd, u64 *data)
 }
 
 static int
-nvkm_engine_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_engine_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_engine *engine = nvkm_engine(subdev);
 	if (engine->func->fini)
drivers/gpu/drm/nouveau/nvkm/core/ioctl.c +2 -2
index 45051a1249da..b8fc9be67851 100644
@@ -141,7 +141,7 @@ nvkm_ioctl_new(struct nvkm_client *client,
 			}
 			ret = -EEXIST;
 		}
-		nvkm_object_fini(object, false);
+		nvkm_object_fini(object, NVKM_POWEROFF);
 	}
 
 	nvkm_object_del(&object);
@@ -160,7 +160,7 @@ nvkm_ioctl_del(struct nvkm_client *client,
 	nvif_ioctl(object, "delete size %d\n", size);
 	if (!(ret = nvif_unvers(ret, &data, &size, args->none))) {
 		nvif_ioctl(object, "delete\n");
-		nvkm_object_fini(object, false);
+		nvkm_object_fini(object, NVKM_POWEROFF);
 		nvkm_object_del(&object);
 	}
 
drivers/gpu/drm/nouveau/nvkm/core/object.c +16 -4
index 390c265cf8af..af9f00f74c28 100644
@@ -142,13 +142,25 @@ nvkm_object_bind(struct nvkm_object *object, struct nvkm_gpuobj *gpuobj,
 }
 
 int
-nvkm_object_fini(struct nvkm_object *object, bool suspend)
+nvkm_object_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
-	const char *action = suspend ? "suspend" : "fini";
+	const char *action;
 	struct nvkm_object *child;
 	s64 time;
 	int ret;
 
+	switch (suspend) {
+	case NVKM_POWEROFF:
+	default:
+		action = "fini";
+		break;
+	case NVKM_SUSPEND:
+		action = "suspend";
+		break;
+	case NVKM_RUNTIME_SUSPEND:
+		action = "runtime";
+		break;
+	}
 	nvif_debug(object, "%s children...\n", action);
 	time = ktime_to_us(ktime_get());
 	list_for_each_entry_reverse(child, &object->tree, head) {
@@ -212,11 +224,11 @@ nvkm_object_init(struct nvkm_object *object)
 
 fail_child:
 	list_for_each_entry_continue_reverse(child, &object->tree, head)
-		nvkm_object_fini(child, false);
+		nvkm_object_fini(child, NVKM_POWEROFF);
 fail:
 	nvif_error(object, "init failed with %d\n", ret);
 	if (object->func->fini)
-		object->func->fini(object, false);
+		object->func->fini(object, NVKM_POWEROFF);
 	return ret;
 }
 
drivers/gpu/drm/nouveau/nvkm/core/oproxy.c +1 -1
index 5db80d1780f0..7c9edf752768 100644
@@ -87,7 +87,7 @@ nvkm_oproxy_uevent(struct nvkm_object *object, void *argv, u32 argc,
 }
 
 static int
-nvkm_oproxy_fini(struct nvkm_object *object, bool suspend)
+nvkm_oproxy_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_oproxy *oproxy = nvkm_oproxy(object);
 	int ret;
drivers/gpu/drm/nouveau/nvkm/core/subdev.c +15 -3
index 6c20e827a069..b7045d1c8415 100644
@@ -51,12 +51,24 @@ nvkm_subdev_info(struct nvkm_subdev *subdev, u64 mthd, u64 *data)
 }
 
 int
-nvkm_subdev_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_subdev_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_device *device = subdev->device;
-	const char *action = suspend ? "suspend" : subdev->use.enabled ? "fini" : "reset";
+	const char *action;
 	s64 time;
 
+	switch (suspend) {
+	case NVKM_POWEROFF:
+	default:
+		action = subdev->use.enabled ? "fini" : "reset";
+		break;
+	case NVKM_SUSPEND:
+		action = "suspend";
+		break;
+	case NVKM_RUNTIME_SUSPEND:
+		action = "runtime";
+		break;
+	}
 	nvkm_trace(subdev, "%s running...\n", action);
 	time = ktime_to_us(ktime_get());
 
@@ -186,7 +198,7 @@ void
 nvkm_subdev_unref(struct nvkm_subdev *subdev)
 {
 	if (refcount_dec_and_mutex_lock(&subdev->use.refcount, &subdev->use.mutex)) {
-		nvkm_subdev_fini(subdev, false);
+		nvkm_subdev_fini(subdev, NVKM_POWEROFF);
 		mutex_unlock(&subdev->use.mutex);
 	}
 }
drivers/gpu/drm/nouveau/nvkm/core/uevent.c +1 -1
index cc254c390a57..46beb6e470ee 100644
@@ -73,7 +73,7 @@ nvkm_uevent_mthd(struct nvkm_object *object, u32 mthd, void *argv, u32 argc)
 }
 
 static int
-nvkm_uevent_fini(struct nvkm_object *object, bool suspend)
+nvkm_uevent_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_uevent *uevent = nvkm_uevent(object);
 
drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.c +1 -1
index 1c0c60138706..1a3caf697608 100644
@@ -46,7 +46,7 @@ ga100_ce_nonstall(struct nvkm_engine *engine)
 }
 
 int
-ga100_ce_fini(struct nvkm_engine *engine, bool suspend)
+ga100_ce_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	nvkm_inth_block(&engine->subdev.inth);
 	return 0;
drivers/gpu/drm/nouveau/nvkm/engine/ce/priv.h +1 -1
index 34fd2657134b..f07b45853310 100644
@@ -14,7 +14,7 @@ extern const struct nvkm_object_func gv100_ce_cclass;
 
 int ga100_ce_oneinit(struct nvkm_engine *);
 int ga100_ce_init(struct nvkm_engine *);
-int ga100_ce_fini(struct nvkm_engine *, bool);
+int ga100_ce_fini(struct nvkm_engine *, enum nvkm_suspend_state);
 int ga100_ce_nonstall(struct nvkm_engine *);
 
 u32 gb202_ce_grce_mask(struct nvkm_device *);
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +17 -5
index 3375a59ebf1a..a965914f1c2f 100644
@@ -2935,13 +2935,25 @@ nvkm_device_engine(struct nvkm_device *device, int type, int inst)
 }
 
 int
-nvkm_device_fini(struct nvkm_device *device, bool suspend)
+nvkm_device_fini(struct nvkm_device *device, enum nvkm_suspend_state suspend)
 {
-	const char *action = suspend ? "suspend" : "fini";
+	const char *action;
 	struct nvkm_subdev *subdev;
 	int ret;
 	s64 time;
 
+	switch (suspend) {
+	case NVKM_POWEROFF:
+	default:
+		action = "fini";
+		break;
+	case NVKM_SUSPEND:
+		action = "suspend";
+		break;
+	case NVKM_RUNTIME_SUSPEND:
+		action = "runtime";
+		break;
+	}
 	nvdev_trace(device, "%s running...\n", action);
 	time = ktime_to_us(ktime_get());
 
@@ -3031,7 +3043,7 @@ nvkm_device_init(struct nvkm_device *device)
 	if (ret)
 		return ret;
 
-	nvkm_device_fini(device, false);
+	nvkm_device_fini(device, NVKM_POWEROFF);
 
 	nvdev_trace(device, "init running...\n");
 	time = ktime_to_us(ktime_get());
@@ -3059,9 +3071,9 @@ nvkm_device_init(struct nvkm_device *device)
 
 fail_subdev:
 	list_for_each_entry_from(subdev, &device->subdev, head)
-		nvkm_subdev_fini(subdev, false);
+		nvkm_subdev_fini(subdev, NVKM_POWEROFF);
 fail:
-	nvkm_device_fini(device, false);
+	nvkm_device_fini(device, NVKM_POWEROFF);
 
 	nvdev_error(device, "init failed with %d\n", ret);
 	return ret;
drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c +2 -2
index 8f0261a0d618..4c29b60460d4 100644
@@ -1605,10 +1605,10 @@ nvkm_device_pci_irq(struct nvkm_device *device)
 }
 
 static void
-nvkm_device_pci_fini(struct nvkm_device *device, bool suspend)
+nvkm_device_pci_fini(struct nvkm_device *device, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_device_pci *pdev = nvkm_device_pci(device);
-	if (suspend) {
+	if (suspend != NVKM_POWEROFF) {
 		pci_disable_device(pdev->pdev);
 		pdev->suspend = true;
 	}
drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h +1 -1
index 75ee7506d443..d0c40f034244 100644
@@ -56,5 +56,5 @@ int  nvkm_device_ctor(const struct nvkm_device_func *,
 		      const char *name, const char *cfg, const char *dbg,
 		      struct nvkm_device *);
 int  nvkm_device_init(struct nvkm_device *);
-int  nvkm_device_fini(struct nvkm_device *, bool suspend);
+int  nvkm_device_fini(struct nvkm_device *, enum nvkm_suspend_state suspend);
 #endif
drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +1 -1
index 58191b7a0494..32ff3181f47b 100644
@@ -218,7 +218,7 @@ nvkm_udevice_map(struct nvkm_object *object, void *argv, u32 argc,
 }
 
 static int
-nvkm_udevice_fini(struct nvkm_object *object, bool suspend)
+nvkm_udevice_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_udevice *udev = nvkm_udevice(object);
 	struct nvkm_device *device = udev->device;
drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c +2 -2
index b24eb1e560bc..84745f60912e 100644
@@ -99,13 +99,13 @@ nvkm_disp_intr(struct nvkm_engine *engine)
 }
 
 static int
-nvkm_disp_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_disp_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_disp *disp = nvkm_disp(engine);
 	struct nvkm_outp *outp;
 
 	if (disp->func->fini)
-		disp->func->fini(disp, suspend);
+		disp->func->fini(disp, suspend != NVKM_POWEROFF);
 
 	list_for_each_entry(outp, &disp->outps, head) {
 		if (outp->func->fini)
drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c +1 -1
index 9b84e357d354..57a62a2de7c7 100644
@@ -128,7 +128,7 @@ nvkm_disp_chan_child_get(struct nvkm_object *object, int index, struct nvkm_ocla
 }
 
 static int
-nvkm_disp_chan_fini(struct nvkm_object *object, bool suspend)
+nvkm_disp_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_disp_chan *chan = nvkm_disp_chan(object);
 
drivers/gpu/drm/nouveau/nvkm/engine/falcon.c +2 -2
index fd5ee9f0af36..cf8e356867b4 100644
@@ -93,13 +93,13 @@ nvkm_falcon_intr(struct nvkm_engine *engine)
 }
 
 static int
-nvkm_falcon_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_falcon_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_falcon *falcon = nvkm_falcon(engine);
 	struct nvkm_device *device = falcon->engine.subdev.device;
 	const u32 base = falcon->addr;
 
-	if (!suspend) {
+	if (suspend == NVKM_POWEROFF) {
 		nvkm_memory_unref(&falcon->core);
 		if (falcon->external) {
 			vfree(falcon->data.data);
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +1 -1
index 6fd4e60634fb..1561287a32f2 100644
@@ -122,7 +122,7 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, const struct nvkm_dev
 }
 
 static int
-nvkm_fifo_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_fifo_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_fifo *fifo = nvkm_fifo(engine);
 	struct nvkm_runl *runl;
drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c +3 -3
index 52420a1edca5..c978b97e10c6 100644
@@ -72,7 +72,7 @@ struct nvkm_uobj {
 };
 
 static int
-nvkm_uchan_object_fini_1(struct nvkm_oproxy *oproxy, bool suspend)
+nvkm_uchan_object_fini_1(struct nvkm_oproxy *oproxy, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_uobj *uobj = container_of(oproxy, typeof(*uobj), oproxy);
 	struct nvkm_chan *chan = uobj->chan;
@@ -87,7 +87,7 @@ nvkm_uchan_object_fini_1(struct nvkm_oproxy *oproxy, bool suspend)
 		nvkm_chan_cctx_bind(chan, ectx->engn, NULL);
 
 		if (refcount_dec_and_test(&ectx->uses))
-			nvkm_object_fini(ectx->object, false);
+			nvkm_object_fini(ectx->object, NVKM_POWEROFF);
 		mutex_unlock(&chan->cgrp->mutex);
 	}
 
@@ -269,7 +269,7 @@ nvkm_uchan_map(struct nvkm_object *object, void *argv, u32 argc,
 }
 
 static int
-nvkm_uchan_fini(struct nvkm_object *object, bool suspend)
+nvkm_uchan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_chan *chan = nvkm_uchan(object)->chan;
 
drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c +2 -2
index f5e68f09df76..cd4908b1b4df 100644
@@ -168,11 +168,11 @@ nvkm_gr_init(struct nvkm_engine *engine)
 }
 
 static int
-nvkm_gr_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_gr_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_gr *gr = nvkm_gr(engine);
 	if (gr->func->fini)
-		return gr->func->fini(gr, suspend);
+		return gr->func->fini(gr, suspend != NVKM_POWEROFF);
 	return 0;
 }
 
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +1 -1
index 3ea447f6a45b..3608215f0f11 100644
@@ -2330,7 +2330,7 @@ gf100_gr_reset(struct nvkm_gr *base)
 
 	WARN_ON(gf100_gr_fecs_halt_pipeline(gr));
 
-	subdev->func->fini(subdev, false);
+	subdev->func->fini(subdev, NVKM_POWEROFF);
 	nvkm_mc_disable(device, subdev->type, subdev->inst);
 	if (gr->func->gpccs.reset)
 		gr->func->gpccs.reset(gr);
drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c +1 -1
index ca822f07b63e..82937df8b8c0 100644
@@ -1158,7 +1158,7 @@ nv04_gr_chan_dtor(struct nvkm_object *object)
 }
 
 static int
-nv04_gr_chan_fini(struct nvkm_object *object, bool suspend)
+nv04_gr_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nv04_gr_chan *chan = nv04_gr_chan(object);
 	struct nv04_gr *gr = chan->gr;
drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c +1 -1
index 92ef7c9b2910..fcb4e4fce83f 100644
@@ -951,7 +951,7 @@ nv10_gr_context_switch(struct nv10_gr *gr)
 }
 
 static int
-nv10_gr_chan_fini(struct nvkm_object *object, bool suspend)
+nv10_gr_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nv10_gr_chan *chan = nv10_gr_chan(object);
 	struct nv10_gr *gr = chan->gr;
drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c +1 -1
index 13407fafe947..ab57b3b40228 100644
@@ -27,7 +27,7 @@ nv20_gr_chan_init(struct nvkm_object *object)
 }
 
 int
-nv20_gr_chan_fini(struct nvkm_object *object, bool suspend)
+nv20_gr_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nv20_gr_chan *chan = nv20_gr_chan(object);
 	struct nv20_gr *gr = chan->gr;
drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h +1 -1
index c0d2be53413e..786c7832f7ac 100644
@@ -31,5 +31,5 @@ struct nv20_gr_chan {
 
 void *nv20_gr_chan_dtor(struct nvkm_object *);
 int nv20_gr_chan_init(struct nvkm_object *);
-int nv20_gr_chan_fini(struct nvkm_object *, bool);
+int nv20_gr_chan_fini(struct nvkm_object *, enum nvkm_suspend_state);
 #endif
drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c +2 -2
index b609b0150ba1..e3e797cf3034 100644
@@ -89,7 +89,7 @@ nv40_gr_chan_bind(struct nvkm_object *object, struct nvkm_gpuobj *parent,
 }
 
 static int
-nv40_gr_chan_fini(struct nvkm_object *object, bool suspend)
+nv40_gr_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nv40_gr_chan *chan = nv40_gr_chan(object);
 	struct nv40_gr *gr = chan->gr;
@@ -101,7 +101,7 @@ nv40_gr_chan_fini(struct nvkm_object *object, bool suspend)
 	nvkm_mask(device, 0x400720, 0x00000001, 0x00000000);
 
 	if (nvkm_rd32(device, 0x40032c) == inst) {
-		if (suspend) {
+		if (suspend != NVKM_POWEROFF) {
 			nvkm_wr32(device, 0x400720, 0x00000000);
 			nvkm_wr32(device, 0x400784, inst);
 			nvkm_mask(device, 0x400310, 0x00000020, 0x00000020);
drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c +1 -1
index 4b1374adbda3..38146f9cc81c 100644
@@ -65,7 +65,7 @@ nv44_mpeg_chan_bind(struct nvkm_object *object, struct nvkm_gpuobj *parent,
 }
 
 static int
-nv44_mpeg_chan_fini(struct nvkm_object *object, bool suspend)
+nv44_mpeg_chan_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 
 	struct nv44_mpeg_chan *chan = nv44_mpeg_chan(object);
drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c +1 -1
index f2c60da5d1e8..3e4d6a680ee9 100644
@@ -37,7 +37,7 @@ nvkm_sec2_finimsg(void *priv, struct nvfw_falcon_msg *hdr)
 }
 
 static int
-nvkm_sec2_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_sec2_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_sec2 *sec2 = nvkm_sec2(engine);
 	struct nvkm_subdev *subdev = &sec2->engine.subdev;
drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c +2 -2
index f7d3ba0afb55..910a5bb2d191 100644
@@ -76,7 +76,7 @@ nvkm_xtensa_intr(struct nvkm_engine *engine)
 }
 
 static int
-nvkm_xtensa_fini(struct nvkm_engine *engine, bool suspend)
+nvkm_xtensa_fini(struct nvkm_engine *engine, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_xtensa *xtensa = nvkm_xtensa(engine);
 	struct nvkm_device *device = xtensa->engine.subdev.device;
@@ -85,7 +85,7 @@ nvkm_xtensa_fini(struct nvkm_engine *engine, bool suspend)
 	nvkm_wr32(device, base + 0xd84, 0); /* INTR_EN */
 	nvkm_wr32(device, base + 0xd94, 0); /* FIFO_CTRL */
 
-	if (!suspend)
+	if (suspend == NVKM_POWEROFF)
 		nvkm_memory_unref(&xtensa->gpu_fw);
 	return 0;
 }
drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c +1 -1
index 9b8ca4e898f9..13d829593180 100644
@@ -182,7 +182,7 @@ nvkm_acr_managed_falcon(struct nvkm_device *device, enum nvkm_acr_lsf_id id)
 }
 
 static int
-nvkm_acr_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_acr_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	if (!subdev->use.enabled)
 		return 0;
drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c +1 -1
index 91bc53be97ff..7dee55bf9ada 100644
@@ -90,7 +90,7 @@ nvkm_bar_bar2_init(struct nvkm_device *device)
 }
 
 static int
-nvkm_bar_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_bar_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_bar *bar = nvkm_bar(subdev);
 
drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +1 -1
index 178dc56909c2..71420f81714b 100644
@@ -577,7 +577,7 @@ nvkm_clk_read(struct nvkm_clk *clk, enum nv_clk_src src)
 }
 
 static int
-nvkm_clk_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_clk_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_clk *clk = nvkm_clk(subdev);
 	flush_work(&clk->work);
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c +2 -2
index 3d9319c319c6..ad5ec9ee1294 100644
@@ -67,11 +67,11 @@ nvkm_devinit_post(struct nvkm_devinit *init)
 }
 
 static int
-nvkm_devinit_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_devinit_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_devinit *init = nvkm_devinit(subdev);
 	/* force full reinit on resume */
-	if (suspend)
+	if (suspend != NVKM_POWEROFF)
 		init->post = true;
 	return 0;
 }
drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c +1 -1
index b53ac9a2552f..d8d32bb5bcd9 100644
@@ -51,7 +51,7 @@ nvkm_fault_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_fault_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_fault_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_fault *fault = nvkm_fault(subdev);
 	if (fault->func->fini)
drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.c +1 -1
index cd2fbc0472d8..8ab052d18e5d 100644
@@ -56,7 +56,7 @@ nvkm_ufault_map(struct nvkm_object *object, void *argv, u32 argc,
 }
 
 static int
-nvkm_ufault_fini(struct nvkm_object *object, bool suspend)
+nvkm_ufault_fini(struct nvkm_object *object, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_fault_buffer *buffer = nvkm_fault_buffer(object);
 	buffer->fault->func->buffer.fini(buffer);
drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c +1 -1
index b196baa376dc..b2c34878a68f 100644
@@ -144,7 +144,7 @@ nvkm_gpio_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_gpio_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_gpio_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_gpio *gpio = nvkm_gpio(subdev);
 	u32 mask = (1ULL << gpio->func->lines) - 1;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c +1 -1
index 7ccb41761066..30cb843ba35c 100644
@@ -48,7 +48,7 @@ nvkm_gsp_intr_stall(struct nvkm_gsp *gsp, enum nvkm_subdev_type type, int inst)
 }
 
 static int
-nvkm_gsp_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_gsp_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_gsp *gsp = nvkm_gsp(subdev);
 
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gh100.c +1 -1
index b0dd5fce7bad..88436a264177 100644
@@ -17,7 +17,7 @@
 #include <nvhw/ref/gh100/dev_riscv_pri.h>
 
 int
-gh100_gsp_fini(struct nvkm_gsp *gsp, bool suspend)
+gh100_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_falcon *falcon = &gsp->falcon;
 	int ret, time = 4000;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h +4 -4
index 9dd66a2e3801..71b7203bef50 100644
@@ -59,7 +59,7 @@ struct nvkm_gsp_func {
 	void (*dtor)(struct nvkm_gsp *);
 	int (*oneinit)(struct nvkm_gsp *);
 	int (*init)(struct nvkm_gsp *);
-	int (*fini)(struct nvkm_gsp *, bool suspend);
+	int (*fini)(struct nvkm_gsp *, enum nvkm_suspend_state suspend);
 	int (*reset)(struct nvkm_gsp *);
 
 	struct {
@@ -75,7 +75,7 @@ int tu102_gsp_fwsec_sb_ctor(struct nvkm_gsp *);
 void tu102_gsp_fwsec_sb_dtor(struct nvkm_gsp *);
 int tu102_gsp_oneinit(struct nvkm_gsp *);
 int tu102_gsp_init(struct nvkm_gsp *);
-int tu102_gsp_fini(struct nvkm_gsp *, bool suspend);
+int tu102_gsp_fini(struct nvkm_gsp *, enum nvkm_suspend_state suspend);
 int tu102_gsp_reset(struct nvkm_gsp *);
 u64 tu102_gsp_wpr_heap_size(struct nvkm_gsp *);
 
@@ -87,12 +87,12 @@ int ga102_gsp_reset(struct nvkm_gsp *);
 
 int gh100_gsp_oneinit(struct nvkm_gsp *);
 int gh100_gsp_init(struct nvkm_gsp *);
-int gh100_gsp_fini(struct nvkm_gsp *, bool suspend);
+int gh100_gsp_fini(struct nvkm_gsp *, enum nvkm_suspend_state suspend);
 
 void r535_gsp_dtor(struct nvkm_gsp *);
 int r535_gsp_oneinit(struct nvkm_gsp *);
 int r535_gsp_init(struct nvkm_gsp *);
-int r535_gsp_fini(struct nvkm_gsp *, bool suspend);
+int r535_gsp_fini(struct nvkm_gsp *, enum nvkm_suspend_state suspend);
 
 int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int,
 		  struct nvkm_gsp **);
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c +1 -1
index 150e22fde2ac..e962d0e8f837 100644
@@ -208,7 +208,7 @@ r535_fbsr_resume(struct nvkm_gsp *gsp)
 }
 
 static int
-r535_fbsr_suspend(struct nvkm_gsp *gsp)
+r535_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
 {
 	struct nvkm_subdev *subdev = &gsp->subdev;
 	struct nvkm_device *device = subdev->device;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c +4 -4
index 2a7e80c6d70f..7fb13434c051 100644
@@ -704,7 +704,7 @@ r535_gsp_rpc_set_registry(struct nvkm_gsp *gsp)
 
 	build_registry(gsp, rpc);
 
-	return nvkm_gsp_rpc_wr(gsp, rpc, NVKM_GSP_RPC_REPLY_NOWAIT);
+	return nvkm_gsp_rpc_wr(gsp, rpc, NVKM_GSP_RPC_REPLY_NOSEQ);
 
 fail:
 	clean_registry(gsp);
@@ -921,7 +921,7 @@ r535_gsp_set_system_info(struct nvkm_gsp *gsp)
 	info->pciConfigMirrorSize = device->pci->func->cfg.size;
 	r535_gsp_acpi_info(gsp, &info->acpiMethodData);
 
-	return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOWAIT);
+	return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOSEQ);
 }
 
 static int
@@ -1721,7 +1721,7 @@ r535_gsp_sr_data_size(struct nvkm_gsp *gsp)
 }
 
 int
-r535_gsp_fini(struct nvkm_gsp *gsp, bool suspend)
+r535_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_rm *rm = gsp->rm;
 	int ret;
@@ -1748,7 +1748,7 @@ r535_gsp_fini(struct nvkm_gsp *gsp, bool suspend)
 		sr->sysmemAddrOfSuspendResumeData = gsp->sr.radix3.lvl0.addr;
 		sr->sizeOfSuspendResumeData = len;
 
-		ret = rm->api->fbsr->suspend(gsp);
+		ret = rm->api->fbsr->suspend(gsp, suspend == NVKM_RUNTIME_SUSPEND);
 		if (ret) {
 			nvkm_gsp_mem_dtor(&gsp->sr.meta);
 			nvkm_gsp_radix3_dtor(gsp, &gsp->sr.radix3);
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c +6 -0
index 0dc4782df8c0..3ca3de8f4340 100644
@@ -557,6 +557,7 @@ r535_gsp_rpc_handle_reply(struct nvkm_gsp *gsp, u32 fn,
 
 	switch (policy) {
 	case NVKM_GSP_RPC_REPLY_NOWAIT:
+	case NVKM_GSP_RPC_REPLY_NOSEQ:
 		break;
 	case NVKM_GSP_RPC_REPLY_RECV:
 		reply = r535_gsp_msg_recv(gsp, fn, gsp_rpc_len);
@@ -588,6 +589,11 @@ r535_gsp_rpc_send(struct nvkm_gsp *gsp, void *payload,
 			       rpc->data, rpc->length - sizeof(*rpc), true);
 	}
 
+	if (policy == NVKM_GSP_RPC_REPLY_NOSEQ)
+		rpc->sequence = 0;
+	else
+		rpc->sequence = gsp->rpc_seq++;
+
 	ret = r535_gsp_cmdq_push(gsp, rpc);
 	if (ret)
 		return ERR_PTR(ret);
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c +4 -4
index 2945d5b4e570..8ef8b4f65588 100644
@@ -62,7 +62,7 @@ r570_fbsr_resume(struct nvkm_gsp *gsp)
 }
 
 static int
-r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
+r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size, bool runtime)
 {
 	NV2080_CTRL_INTERNAL_FBSR_INIT_PARAMS *ctrl;
 	struct nvkm_gsp_object memlist;
@@ -81,7 +81,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
 	ctrl->hClient = gsp->internal.client.object.handle;
 	ctrl->hSysMem = memlist.handle;
 	ctrl->sysmemAddrOfSuspendResumeData = gsp->sr.meta.addr;
-	ctrl->bEnteringGcoffState = 1;
+	ctrl->bEnteringGcoffState = runtime ? 1 : 0;
 
 	ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl);
 	if (ret)
@@ -92,7 +92,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
 }
 
 static int
-r570_fbsr_suspend(struct nvkm_gsp *gsp)
+r570_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
 {
 	struct nvkm_subdev *subdev = &gsp->subdev;
 	struct nvkm_device *device = subdev->device;
@@ -133,7 +133,7 @@ r570_fbsr_suspend(struct nvkm_gsp *gsp)
 		return ret;
 
 	/* Initialise FBSR on RM. */
-	ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size);
+	ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size, runtime);
 	if (ret) {
 		nvkm_gsp_sg_free(device, &gsp->sr.fbsr);
 		return ret;
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c +1 -1
index 9d2fa4e66d59..996941c668ba 100644
@@ -176,7 +176,7 @@ r570_gsp_set_system_info(struct nvkm_gsp *gsp)
 	info->bIsPrimary = video_is_primary_device(device->dev);
 	info->bPreserveVideoMemoryAllocations = false;
 
-	return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOWAIT);
+	return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOSEQ);
 }
 
 static void
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h +1 -1
index 393ea775941f..4f0ae6cc085c 100644
@@ -78,7 +78,7 @@ struct nvkm_rm_api {
 	} *device;
 
 	const struct nvkm_rm_api_fbsr {
-		int (*suspend)(struct nvkm_gsp *);
+		int (*suspend)(struct nvkm_gsp *, bool runtime);
 		void (*resume)(struct nvkm_gsp *);
 	} *fbsr;
 
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c +1 -1
index 04b642a1f730..19cb269e7a26 100644
@@ -161,7 +161,7 @@ tu102_gsp_reset(struct nvkm_gsp *gsp)
 }
 
 int
-tu102_gsp_fini(struct nvkm_gsp *gsp, bool suspend)
+tu102_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend)
 {
 	u32 mbox0 = 0xff, mbox1 = 0xff;
 	int ret;
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c +1 -1
index 7ec17e8435a1..454bb21815a2 100644
@@ -135,7 +135,7 @@ nvkm_i2c_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_i2c_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_i2c_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_i2c *i2c = nvkm_i2c(subdev);
 	struct nvkm_i2c_pad *pad;
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c +1 -1
index 2f55bab8e132..6b9ed61684a0 100644
@@ -176,7 +176,7 @@ nvkm_instmem_boot(struct nvkm_instmem *imem)
 }
 
 static int
-nvkm_instmem_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_instmem_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_instmem *imem = nvkm_instmem(subdev);
 	int ret;
drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c +1 -1
index 6867934256a7..0f3e0d324a52 100644
@@ -74,7 +74,7 @@ nvkm_pci_rom_shadow(struct nvkm_pci *pci, bool shadow)
 }
 
 static int
-nvkm_pci_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_pci_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_pci *pci = nvkm_pci(subdev);
 
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c +1 -1
index 8f2f50ad4ded..9e9004ec4588 100644
@@ -77,7 +77,7 @@ nvkm_pmu_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_pmu_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_pmu_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_pmu *pmu = nvkm_pmu(subdev);
 
drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c +3 -3
index fc5ee118e910..1510aba33956 100644
@@ -341,15 +341,15 @@ nvkm_therm_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_therm_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_therm_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_therm *therm = nvkm_therm(subdev);
 
 	if (therm->func->fini)
 		therm->func->fini(therm);
 
-	nvkm_therm_fan_fini(therm, suspend);
-	nvkm_therm_sensor_fini(therm, suspend);
+	nvkm_therm_fan_fini(therm, suspend != NVKM_POWEROFF);
+	nvkm_therm_sensor_fini(therm, suspend != NVKM_POWEROFF);
 
 	if (suspend) {
 		therm->suspend = therm->mode;
drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c +1 -1
index 8b0da0c06268..a5c3c282b5d0 100644
@@ -149,7 +149,7 @@ nvkm_timer_intr(struct nvkm_subdev *subdev)
 }
 
 static int
-nvkm_timer_fini(struct nvkm_subdev *subdev, bool suspend)
+nvkm_timer_fini(struct nvkm_subdev *subdev, enum nvkm_suspend_state suspend)
 {
 	struct nvkm_timer *tmr = nvkm_timer(subdev);
 	tmr->func->alarm_fini(tmr);
drivers/gpu/drm/xe/xe_guc.c +4 -2
index 00789844ea4d..ae0c88da422b 100644
@@ -1632,7 +1632,7 @@ int xe_guc_start(struct xe_guc *guc)
 	return xe_guc_submit_start(guc);
 }
 
-void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
+int xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
 {
 	struct xe_gt *gt = guc_to_gt(guc);
 	unsigned int fw_ref;
@@ -1644,7 +1644,7 @@ void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
 	if (!IS_SRIOV_VF(gt_to_xe(gt))) {
 		fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
 		if (!fw_ref)
-			return;
+			return -EIO;
 
 		status = xe_mmio_read32(&gt->mmio, GUC_STATUS);
 
@@ -1672,6 +1672,8 @@ void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
 
 	drm_puts(p, "\n");
 	xe_guc_submit_print(guc, p);
+
+	return 0;
 }
 
 /**
drivers/gpu/drm/xe/xe_guc.h +1 -1
index 1cca05967e62..3b858933749b 100644
@@ -45,7 +45,7 @@ int xe_guc_self_cfg32(struct xe_guc *guc, u16 key, u32 val);
 int xe_guc_self_cfg64(struct xe_guc *guc, u16 key, u64 val);
 void xe_guc_irq_handler(struct xe_guc *guc, const u16 iir);
 void xe_guc_sanitize(struct xe_guc *guc);
-void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p);
+int xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p);
 int xe_guc_reset_prepare(struct xe_guc *guc);
 void xe_guc_reset_wait(struct xe_guc *guc);
 void xe_guc_stop_prepare(struct xe_guc *guc);
drivers/gpu/drm/xe/xe_pm.c +10 -3
index a58bf004aee7..a74e800846ff 100644
@@ -8,6 +8,7 @@
 #include <linux/fault-inject.h>
 #include <linux/pm_runtime.h>
 #include <linux/suspend.h>
+#include <linux/dmi.h>
 
 #include <drm/drm_managed.h>
 #include <drm/ttm/ttm_placement.h>
@@ -300,9 +301,15 @@ ALLOW_ERROR_INJECTION(xe_pm_init_early, ERRNO); /* See xe_pci_probe() */
 
 static u32 vram_threshold_value(struct xe_device *xe)
 {
-	/* FIXME: D3Cold temporarily disabled by default on BMG */
-	if (xe->info.platform == XE_BATTLEMAGE)
-		return 0;
+	if (xe->info.platform == XE_BATTLEMAGE) {
+		const char *product_name;
+
+		product_name = dmi_get_system_info(DMI_PRODUCT_NAME);
+		if (product_name && strstr(product_name, "NUC13RNG")) {
+			drm_warn(&xe->drm, "BMG + D3Cold not supported on this platform\n");
+			return 0;
+		}
+	}
 
 	return DEFAULT_VRAM_THRESHOLD;
 }
drivers/gpu/drm/xe/xe_query.c +1 -1
index 2e9ff33ed2fe..856089f64c34 100644
@@ -491,7 +491,7 @@ static int copy_mask(void __user **ptr,
 
 	if (copy_to_user(*ptr, topo, sizeof(*topo)))
 		return -EFAULT;
-	*ptr += sizeof(topo);
+	*ptr += sizeof(*topo);
 
 	if (copy_to_user(*ptr, mask, mask_size))
 		return -EFAULT;
drivers/hid/hid-elecom.c +13 -2
index 981d1b6e9658..2003d2dcda7c 100644
@@ -77,7 +77,7 @@ static const __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 		break;
 	case USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB:
 	case USB_DEVICE_ID_ELECOM_M_XT3URBK_018F:
-	case USB_DEVICE_ID_ELECOM_M_XT3DRBK:
+	case USB_DEVICE_ID_ELECOM_M_XT3DRBK_00FC:
 	case USB_DEVICE_ID_ELECOM_M_XT4DRBK:
 		/*
 		 * Report descriptor format:
@@ -102,6 +102,16 @@ static const __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 		 */
 		mouse_button_fixup(hdev, rdesc, *rsize, 12, 30, 14, 20, 8);
 		break;
+	case USB_DEVICE_ID_ELECOM_M_XT3DRBK_018C:
+		/*
+		 * Report descriptor format:
+		 * 22: button bit count
+		 * 30: padding bit count
+		 * 24: button report size
+		 * 16: button usage maximum
+		 */
+		mouse_button_fixup(hdev, rdesc, *rsize, 22, 30, 24, 16, 6);
+		break;
 	case USB_DEVICE_ID_ELECOM_M_DT2DRBK:
 	case USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C:
 		/*
@@ -122,7 +132,8 @@ static const struct hid_device_id elecom_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
-	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK_00FC) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK_018C) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT4DRBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) },
drivers/hid/hid-ids.h +6 -1
index c4589075a5ed..b75d9d2f4dc7 100644
@@ -317,6 +317,7 @@
 #define USB_DEVICE_ID_CHICONY_ACER_SWITCH12	0x1421
 #define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA	0xb824
 #define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2	0xb82c
+#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA3	0xb882
 
 #define USB_VENDOR_ID_CHUNGHWAT		0x2247
 #define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH	0x0001
@@ -438,6 +439,9 @@
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001	0xa001
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002	0xc002
 
+#define USB_VENDOR_ID_EDIFIER		0x2d99
+#define USB_DEVICE_ID_EDIFIER_QR30	0xa101	/* EDIFIER Hal0 2.0 SE */
+
 #define USB_VENDOR_ID_ELAN		0x04f3
 #define USB_DEVICE_ID_TOSHIBA_CLICK_L9W	0x0401
 #define USB_DEVICE_ID_HP_X2		0x074d
@@ -451,7 +455,8 @@
 #define USB_DEVICE_ID_ELECOM_M_XGL20DLBK	0x00e6
 #define USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB	0x00fb
 #define USB_DEVICE_ID_ELECOM_M_XT3URBK_018F	0x018f
-#define USB_DEVICE_ID_ELECOM_M_XT3DRBK	0x00fc
+#define USB_DEVICE_ID_ELECOM_M_XT3DRBK_00FC	0x00fc
+#define USB_DEVICE_ID_ELECOM_M_XT3DRBK_018C	0x018c
 #define USB_DEVICE_ID_ELECOM_M_XT4DRBK	0x00fd
 #define USB_DEVICE_ID_ELECOM_M_DT1URBK	0x00fe
 #define USB_DEVICE_ID_ELECOM_M_DT1DRBK	0x00ff
drivers/hid/hid-logitech-hidpp.c +2 -0
index a88f2e5f791c..9b612f62d0fb 100644
@@ -4661,6 +4661,8 @@ static const struct hid_device_id hidpp_devices[] = {
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb025) },
 	{ /* MX Master 3S mouse over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb034) },
+	{ /* MX Anywhere 3S mouse over Bluetooth */
+	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb037) },
 	{ /* MX Anywhere 3SB mouse over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb038) },
 	{}
drivers/hid/hid-multitouch.c +1 -0
index 179dc316b4b5..a0c1ad5acb67 100644
@@ -393,6 +393,7 @@ static const struct mt_class mt_classes[] = {
 	{ .name = MT_CLS_VTL,
 		.quirks = MT_QUIRK_ALWAYS_VALID |
 			MT_QUIRK_CONTACT_CNT_ACCURATE |
+			MT_QUIRK_STICKY_FINGERS |
 			MT_QUIRK_FORCE_GET_FEATURE,
 	},
 	{ .name = MT_CLS_GOOGLE,
drivers/hid/hid-playstation.c +5 -0
index 128aa6abd10b..e4dfcf26b04e 100644
@@ -753,11 +753,16 @@ ps_gamepad_create(struct hid_device *hdev,
 	if (IS_ERR(gamepad))
 		return ERR_CAST(gamepad);
 
+	/* Set initial resting state for joysticks to 128 (center) */
 	input_set_abs_params(gamepad, ABS_X, 0, 255, 0, 0);
+	gamepad->absinfo[ABS_X].value = 128;
 	input_set_abs_params(gamepad, ABS_Y, 0, 255, 0, 0);
+	gamepad->absinfo[ABS_Y].value = 128;
 	input_set_abs_params(gamepad, ABS_Z, 0, 255, 0, 0);
 	input_set_abs_params(gamepad, ABS_RX, 0, 255, 0, 0);
+	gamepad->absinfo[ABS_RX].value = 128;
 	input_set_abs_params(gamepad, ABS_RY, 0, 255, 0, 0);
+	gamepad->absinfo[ABS_RY].value = 128;
 	input_set_abs_params(gamepad, ABS_RZ, 0, 255, 0, 0);
 
 	input_set_abs_params(gamepad, ABS_HAT0X, -1, 1, 0, 0);
drivers/hid/hid-quirks.c +4 -1
index 6a8a7ca3d804..11438039cdb7 100644
@@ -81,6 +81,7 @@ static const struct hid_device_id hid_quirks[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_EDIFIER, USB_DEVICE_ID_EDIFIER_QR30), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700), HID_QUIRK_NOGET },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II), HID_QUIRK_MULTI_INPUT },
@@ -421,7 +422,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
-	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK_00FC) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK_018C) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT4DRBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) },
@@ -778,6 +780,7 @@ static const struct hid_device_id hid_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA3) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
drivers/hid/i2c-hid/i2c-hid-core.c +1 -0
index 63f46a2e5788..5a183af3d5c6 100644
@@ -286,6 +286,7 @@ static int i2c_hid_get_report(struct i2c_hid *ihid,
 	 * In addition to report data device will supply data length
 	 * in the first 2 bytes of the response, so adjust .
 	 */
+	recv_len = min(recv_len, ihid->bufsize - sizeof(__le16));
 	error = i2c_hid_xfer(ihid, ihid->cmdbuf, length,
 			     ihid->rawbuf, recv_len + sizeof(__le16));
 	if (error) {
drivers/hid/intel-ish-hid/ishtp-hid-client.c +1 -0
index f61add862b6b..12a43c64e815 100644
@@ -495,6 +495,7 @@ static int ishtp_enum_enum_devices(struct ishtp_cl *hid_ishtp_cl)
 	int rv;
 
 	/* Send HOSTIF_DM_ENUM_DEVICES */
+	client_data->enum_devices_done = false;
 	memset(&msg, 0, sizeof(struct hostif_msg));
 	msg.hdr.command = HOSTIF_DM_ENUM_DEVICES;
 	rv = ishtp_cl_send(hid_ishtp_cl, (unsigned char *)&msg,
drivers/hid/intel-ish-hid/ishtp/bus.c +10 -2
index c6ce37244e49..c3915f3a060e 100644
@@ -240,9 +240,17 @@ static int ishtp_cl_bus_match(struct device *dev, const struct device_driver *dr
 {
 	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
 	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(drv);
+	struct ishtp_fw_client *client = device->fw_client;
+	const struct ishtp_device_id *id;
 
-	return(device->fw_client ? guid_equal(&driver->id[0].guid,
-	       &device->fw_client->props.protocol_name) : 0);
+	if (client) {
+		for (id = driver->id; !guid_is_null(&id->guid); id++) {
+			if (guid_equal(&id->guid, &client->props.protocol_name))
+				return 1;
+		}
+	}
+
+	return 0;
 }
 
 /**
drivers/hid/intel-thc-hid/intel-thc/intel-thc-dma.c +5 -0
index a0c368aa7979..6ee675e0a738 100644
@@ -575,6 +575,11 @@ static int read_dma_buffer(struct thc_device *dev,
 		return -EINVAL;
 	}
 
+	if (!read_config->prd_tbls || !read_config->sgls[prd_table_index]) {
+		dev_err_once(dev->dev, "PRD tables are not ready yet\n");
+		return -EINVAL;
+	}
+
 	prd_tbl = &read_config->prd_tbls[prd_table_index];
 	mes_len = calc_message_len(prd_tbl, &nent);
 	if (mes_len > read_config->max_packet_size) {
drivers/hwmon/acpi_power_meter.c +14 -3
index 29ccdc2fb7ff..de408df0c4d7 100644
@@ -47,6 +47,8 @@
 static int cap_in_hardware;
 static bool force_cap_on;
 
+static DEFINE_MUTEX(acpi_notify_lock);
+
 static int can_cap_in_hardware(void)
 {
 	return force_cap_on || cap_in_hardware;
@@ -823,18 +825,26 @@ static void acpi_power_meter_notify(struct acpi_device *device, u32 event)
 
 	resource = acpi_driver_data(device);
 
+	guard(mutex)(&acpi_notify_lock);
+
 	switch (event) {
 	case METER_NOTIFY_CONFIG:
+		if (!IS_ERR(resource->hwmon_dev))
+			hwmon_device_unregister(resource->hwmon_dev);
+
 		mutex_lock(&resource->lock);
+
 		free_capabilities(resource);
 		remove_domain_devices(resource);
-		hwmon_device_unregister(resource->hwmon_dev);
 		res = read_capabilities(resource);
 		if (res)
 			dev_err_once(&device->dev, "read capabilities failed.\n");
 		res = read_domain_devices(resource);
 		if (res && res != -ENODEV)
 			dev_err_once(&device->dev, "read domain devices failed.\n");
+
+		mutex_unlock(&resource->lock);
+
 		resource->hwmon_dev =
 			hwmon_device_register_with_info(&device->dev,
 							ACPI_POWER_METER_NAME,
@@ -843,7 +853,7 @@ static void acpi_power_meter_notify(struct acpi_device *device, u32 event)
 							power_extra_groups);
 		if (IS_ERR(resource->hwmon_dev))
 			dev_err_once(&device->dev, "register hwmon device failed.\n");
-		mutex_unlock(&resource->lock);
+
 		break;
 	case METER_NOTIFY_TRIP:
 		sysfs_notify(&device->dev.kobj, NULL, POWER_AVERAGE_NAME);
@@ -953,7 +963,8 @@ static void acpi_power_meter_remove(struct acpi_device *device)
 		return;
 
 	resource = acpi_driver_data(device);
-	hwmon_device_unregister(resource->hwmon_dev);
+	if (!IS_ERR(resource->hwmon_dev))
+		hwmon_device_unregister(resource->hwmon_dev);
 
 	remove_domain_devices(resource);
 	free_capabilities(resource);
drivers/hwmon/dell-smm-hwmon.c +8 -0
index 8cf12b9bae2a..f3d484a9f708 100644
@@ -1630,6 +1630,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
 		},
 		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
 	},
+	{
+		.ident = "Dell G15 5510",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"),
+		},
+		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
+	},
 	{
 		.ident = "Dell G15 5511",
 		.matches = {
drivers/hwmon/gpio-fan.c +3 -3
index 516c34bb61c9..a8892ced1e54 100644
@@ -148,7 +148,7 @@ static int set_fan_speed(struct gpio_fan_data *fan_data, int speed_index)
 		int ret;
 
 		ret = pm_runtime_put_sync(fan_data->dev);
-		if (ret < 0)
+		if (ret < 0 && ret != -ENOSYS)
 			return ret;
 	}
 
@@ -291,7 +291,7 @@ static ssize_t set_rpm(struct device *dev, struct device_attribute *attr,
 {
 	struct gpio_fan_data *fan_data = dev_get_drvdata(dev);
 	unsigned long rpm;
-	int ret = count;
+	int ret;
 
 	if (kstrtoul(buf, 10, &rpm))
 		return -EINVAL;
@@ -308,7 +308,7 @@ static ssize_t set_rpm(struct device *dev, struct device_attribute *attr,
 exit_unlock:
 	mutex_unlock(&fan_data->lock);
 
-	return ret;
+	return ret ? ret : count;
 }
 
 static DEVICE_ATTR_RW(pwm1);
drivers/hwmon/occ/common.c +1 -0
index b3694a4209b9..89928d38831b 100644
@@ -749,6 +749,7 @@ static ssize_t occ_show_extended(struct device *dev,
  * are dynamically allocated, we cannot use the existing kernel macros which
  * stringify the name argument.
  */
+__printf(7, 8)
 static void occ_init_attribute(struct occ_attribute *attr, int mode,
 	ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf),
 	ssize_t (*store)(struct device *dev, struct device_attribute *attr,
drivers/i2c/busses/i2c-imx.c +2 -1
index dcce882f3eba..85f554044cf1 100644
@@ -1103,7 +1103,8 @@ static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx, unsigned i
 
 	case IMX_I2C_STATE_READ_BLOCK_DATA_LEN:
 		i2c_imx_isr_read_block_data_len(i2c_imx);
-		i2c_imx->state = IMX_I2C_STATE_READ_CONTINUE;
+		if (i2c_imx->state == IMX_I2C_STATE_READ_BLOCK_DATA_LEN)
+			i2c_imx->state = IMX_I2C_STATE_READ_CONTINUE;
 		break;
 
 	case IMX_I2C_STATE_WRITE:
drivers/md/md.c +2 -2
index 7b1365143f58..e04ddcb03981 100644
@@ -4396,7 +4396,7 @@ raid_disks_store(struct mddev *mddev, const char *buf, size_t len)
 	if (err < 0)
 		return err;
 
-	err = mddev_lock(mddev);
+	err = mddev_suspend_and_lock(mddev);
 	if (err)
 		return err;
 	if (mddev->pers)
@@ -4421,7 +4421,7 @@ raid_disks_store(struct mddev *mddev, const char *buf, size_t len)
 	} else
 		mddev->raid_disks = n;
 out_unlock:
-	mddev_unlock(mddev);
+	mddev_unlock_and_resume(mddev);
 	return err ? err : len;
 }
 static struct md_sysfs_entry md_raid_disks =
drivers/net/ethernet/adi/adin1110.c +3 -0
index 30f9d271e595..71a2397edf2b 100644
@@ -1089,6 +1089,9 @@ static int adin1110_check_spi(struct adin1110_priv *priv)
 
 	reset_gpio = devm_gpiod_get_optional(&priv->spidev->dev, "reset",
 					     GPIOD_OUT_LOW);
+	if (IS_ERR(reset_gpio))
+		return dev_err_probe(&priv->spidev->dev, PTR_ERR(reset_gpio),
+				     "failed to get reset gpio\n");
 	if (reset_gpio) {
 		/* MISO pin is used for internal configuration, can't have
 		 * anyone else disturbing the SDO line.
drivers/net/ethernet/broadcom/bnx2.c +0 -2
index cb1011f6fd30..805daae9dd36 100644
@@ -6444,7 +6444,6 @@ bnx2_reset_task(struct work_struct *work)
 	if (!(pcicmd & PCI_COMMAND_MEMORY)) {
 		/* in case PCI block has reset */
 		pci_restore_state(bp->pdev);
-		pci_save_state(bp->pdev);
 	}
 	rc = bnx2_init_nic(bp, 1);
 	if (rc) {
@@ -8718,7 +8717,6 @@ static pci_ers_result_t bnx2_io_slot_reset(struct pci_dev *pdev)
 	} else {
 		pci_set_master(pdev);
 		pci_restore_state(pdev);
-		pci_save_state(pdev);
 
 		if (netif_running(dev))
 			err = bnx2_init_nic(bp, 1);
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +0 -1
index f0f05d7315ac..8e6eec828d48 100644
@@ -14216,7 +14216,6 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
 
 	pci_set_master(pdev);
 	pci_restore_state(pdev);
-	pci_save_state(pdev);
 
 	if (netif_running(dev))
 		bnx2x_set_power_state(bp, PCI_D0);
drivers/net/ethernet/broadcom/tg3.c +0 -1
index d78cafdb2094..0397a6ebf20f 100644
@@ -18349,7 +18349,6 @@ static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
 
 	pci_set_master(pdev);
 	pci_restore_state(pdev);
-	pci_save_state(pdev);
 
 	if (!netdev || !netif_running(netdev)) {
 		rc = PCI_ERS_RESULT_RECOVERED;
drivers/net/ethernet/cavium/liquidio/lio_main.c +20 -19
index 8e2fcec26ea1..eb620e8544cf 100644
@@ -3515,6 +3515,23 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
 		 */
 		netdev->netdev_ops = &lionetdevops;
 
+		lio = GET_LIO(netdev);
+
+		memset(lio, 0, sizeof(struct lio));
+
+		lio->ifidx = ifidx_or_pfnum;
+
+		props = &octeon_dev->props[i];
+		props->gmxport = resp->cfg_info.linfo.gmxport;
+		props->netdev = netdev;
+
+		/* Point to the  properties for octeon device to which this
+		 * interface belongs.
+		 */
+		lio->oct_dev = octeon_dev;
+		lio->octprops = props;
+		lio->netdev = netdev;
+
 		retval = netif_set_real_num_rx_queues(netdev, num_oqueues);
 		if (retval) {
 			dev_err(&octeon_dev->pci_dev->dev,
@@ -3531,16 +3548,6 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
 			goto setup_nic_dev_free;
 		}
 
-		lio = GET_LIO(netdev);
-
-		memset(lio, 0, sizeof(struct lio));
-
-		lio->ifidx = ifidx_or_pfnum;
-
-		props = &octeon_dev->props[i];
-		props->gmxport = resp->cfg_info.linfo.gmxport;
-		props->netdev = netdev;
-
 		lio->linfo.num_rxpciq = num_oqueues;
 		lio->linfo.num_txpciq = num_iqueues;
 		for (j = 0; j < num_oqueues; j++) {
@@ -3606,13 +3613,6 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
 		netdev->min_mtu = LIO_MIN_MTU_SIZE;
 		netdev->max_mtu = LIO_MAX_MTU_SIZE;
 
-		/* Point to the  properties for octeon device to which this
-		 * interface belongs.
-		 */
-		lio->oct_dev = octeon_dev;
-		lio->octprops = props;
-		lio->netdev = netdev;
-
 		dev_dbg(&octeon_dev->pci_dev->dev,
 			"if%d gmx: %d hw_addr: 0x%llx\n", i,
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +2 -2
index 3230dff5ba05..5c177146b35b 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +0 -1
index f92a3550e480..3b1321c8ed14 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +0 -2
index 392723ef14e5..1ce2091cdc01 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c +10 -0
index b1e1ad9e4b48..66240c340492 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/enetc/enetc.c +7 -4
index f410c245ea91..b6e3fb040161 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/enetc/enetc4_pf.c +3 -3
index 82c443b28b15..7dbfbc6fbdcb 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/enetc/enetc_cbdr.c +0 -4
index 3d5f31879d5c..a635bfdc30af 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/enetc/enetc_hw.h +14 -3
index 377c96325814..d382220ef2f0 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/google/gve/gve_ethtool.c +51 -26

77 lines not on this page · raw message

drivers/net/ethernet/google/gve/gve_main.c +2 -2
index e240b7d22a35..030800776ead 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/hisilicon/hibmcge/hbg_err.c +0 -1
index e11495b7ee98..7234618e8e81 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/e1000e/netdev.c +0 -1
index 201322dac233..75896602e732 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/fm10k/fm10k_pci.c +0 -6
index ae5fe34659cf..d75b8a50413d 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/i40e/i40e_main.c +0 -2
index 07d32f2586c8..d3bc3207054f 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ice/ice_main.c +14 -14
index b5ebfcdc9d43..f2b91f7f8786 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ice/ice_ptp.c +109 -70

179 lines not on this page · raw message

drivers/net/ethernet/intel/ice/ice_ptp.h +13 -5
index 137f2070a2d9..4e02f922c1ff 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/igb/igb_main.c +0 -2
index 85f9589cc568..dbea37269d2c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/igc/igc_main.c +0 -2
index 21e67e753456..89a321a344d2 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +0 -1
index 3edebca95830..501216970e61 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx4/main.c +0 -1
index 03d2fc7d9b09..d1fbf37bdaf7 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/mellanox/mlx5/core/main.c +0 -1
index 14c57d437280..acba430a94da 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/meta/fbnic/fbnic_pci.c +0 -1
index a7a6b4db8016..0fa90baad5f8 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/microchip/lan743x_main.c +0 -1
index 9d70b51ca91d..e4c542fc6c2b 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/myricom/myri10ge/myri10ge.c +0 -4
index e611ff7fa3fa..7be30a8df268 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/neterion/s2io.c +0 -1
index 5026b0263d43..1e55ccb4822b 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/spacemit/k1_emac.c +15 -6
index 88e9424d2d51..b49c4708bf9e 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/ti/cpsw.c +35 -6

41 lines not on this page · raw message

drivers/net/ethernet/ti/cpsw_new.c +29 -5
index 8b9e2078c602..371a099ac4e6 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/ti/cpsw_priv.h +1 -0
index 91add8925e23..acb6181c5c9e 100644

Lines of this file are not shown. View the raw message.

drivers/net/macvlan.c +3 -2
index b4df7e184791..c509228be84d 100644

Lines of this file are not shown. View the raw message.

drivers/net/phy/sfp.c +2 -0
index 47f095bd91ce..3e023723887c 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/r8152.c +15 -14
index a22d4bb2cf3b..6a43054d5171 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/sr9700.c +5 -0
index 5d97e95a17b0..820c4c506979 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mld/iface.c +0 -2
index ed379825a923..240ce19996b3 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +2 -0
index 5725104a53bf..2a7e7417d7d8 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mld/ptp.c +7 -0
index ffeb37a7f830..231920425c06 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mvm/d3.c +5 -1
index 07f1a84c274e..af1a45845999 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlwifi/mvm/ptp.c +7 -0
index 06a4c9f74797..ad156b82eaa9 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/ti/wlcore/tx.c +5 -0
index 464587d16ab2..f251627c24c6 100644

Lines of this file are not shown. View the raw message.

drivers/nvme/host/fc.c +2 -0
index 8324230c5371..bf78faf1a4ff 100644

Lines of this file are not shown. View the raw message.

drivers/nvme/host/pci.c +30 -15

45 lines not on this page · raw message

drivers/nvme/target/tcp.c +21 -5
index 41b6fd05519e..5c8d17bcc49b 100644

Lines of this file are not shown. View the raw message.

drivers/pci/bus.c +3 -0
index f26aec6ff588..9daf13ed3714 100644

Lines of this file are not shown. View the raw message.

drivers/pci/controller/dwc/pcie-qcom.c +3 -1
index c48a20602d7f..6e820595ba32 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pci.c +0 -3
index b14dd064006c..2f0da5dbbba4 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pcie/portdrv.c +0 -1
index d1b68c18444f..38a41ccf79b9 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/dell/dell-lis3lv02d.c +1 -0
index 77905a9ddde9..fe52bcd896f7 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/hp/hp-bioscfg/bioscfg.c +5 -0
index dbe096eefa75..51e8977d3eb4 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/intel/plr_tpmi.c +1 -1
index 58132da47745..05727169f49c 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/intel/telemetry/debugfs.c +2 -2
index 70e5736c44c7..189c61ff7ff0 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/intel/telemetry/pltdrv.c +1 -1
index f23c170a55dc..d9aa349f81e4 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/toshiba_haps.c +1 -1
index 03dfddeee0c0..e9324bf16aea 100644

Lines of this file are not shown. View the raw message.

drivers/pmdomain/imx/gpcv2.c +2 -6
index 105fcaf13a34..cff738e4d546 100644

Lines of this file are not shown. View the raw message.

drivers/pmdomain/imx/imx8m-blk-ctrl.c +1 -1
index 74bf4936991d..19e992d2ee3b 100644

Lines of this file are not shown. View the raw message.

drivers/pmdomain/imx/imx8mp-blk-ctrl.c +30 -0
index 34576be606e3..8fc79f9723f0 100644

Lines of this file are not shown. View the raw message.

drivers/pmdomain/qcom/rpmpd.c +1 -1
index f8580ec0f737..98ab4f9ea9bf 100644

Lines of this file are not shown. View the raw message.

drivers/regulator/spacemit-p1.c +3 -3
index 2bf9137e12b1..2b585ba01a93 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/bfa/bfad.c +0 -1
index ff9adfc0b332..bdfd06516671 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/csiostor/csio_init.c +0 -1
index 79c8dafdd49e..db0c2174430a 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/ipr.c +0 -1
index d62bb7d0e416..dbd58a7e7bc1 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/lpfc/lpfc_init.c +0 -6
index f206267d9ecd..065eb91de9c0 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/qla2xxx/qla_os.c +0 -5
index 3d814262040a..8ad0c19bdf4a 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/qla4xxx/ql4_os.c +0 -5
index 83ff66f954e6..97329c97332f 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-hisi-kunpeng.c +1 -3
index dadf558dd9c0..80a1a15de0bc 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-intel-pci.c +1 -0
index b8c572394aac..bce3d149bea1 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-tegra114.c +3 -0
index 795a8482c2c7..48fb11fea55f 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-tegra20-slink.c +4 -2
index fe452d03c1ee..709669610840 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-tegra210-quad.c +52 -4

56 lines not on this page · raw message

drivers/target/iscsi/iscsi_target_util.c +8 -2
index 5e6cf34929b5..c1888c42afdd 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_pci.c +0 -1
index 93b3922bb5b6..79c3dca94b56 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/jsm/jsm_driver.c +0 -1
index 417a5b6bffc3..8d21373cae57 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/disk-io.c +13 -0
index 19d8c8fc4595..745ae698bbc8 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/fs.h +8 -0
index 814bbc9417d2..37aa8d141a83 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/inode.c +15 -7
index 1af9b05328ce..76a66c74249a 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/tree-log.c +1 -1
index 1444857de9fe..ae2e035d013e 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/volumes.c +2 -0
index 48e717c105c3..8e7dcb12af4c 100644

Lines of this file are not shown. View the raw message.

fs/ceph/crypto.c +5 -4
index 7026e794813c..de823a50af9c 100644

Lines of this file are not shown. View the raw message.

fs/ceph/mds_client.c +3 -2
index 1740047aef0f..f3d146b86943 100644

Lines of this file are not shown. View the raw message.

fs/ceph/mdsmap.c +19 -7
index 2c7b151a7c95..b228e5ecfb92 100644

Lines of this file are not shown. View the raw message.

fs/ceph/mdsmap.h +1 -0
index 1f2171dd01bf..d48d07c3516d 100644

Lines of this file are not shown. View the raw message.

fs/ceph/super.h +14 -2
index a1f781c46b41..29a980e22dc2 100644

Lines of this file are not shown. View the raw message.

fs/proc/task_mmu.c +27 -15

42 lines not on this page · raw message

fs/smb/client/smb2file.c +1 -0
index a7f629238830..03f90553d831 100644

Lines of this file are not shown. View the raw message.

fs/smb/server/smb2pdu.c +6 -2
index 2b59c282cda5..470b274f4cc9 100644

Lines of this file are not shown. View the raw message.

include/linux/buildid.h +3 -0
index 014a88c41073..5e0a14866cc1 100644

Lines of this file are not shown. View the raw message.

include/linux/ceph/ceph_fs.h +6 -0
index c7f2c63b3bc3..08e5dbe15ca4 100644

Lines of this file are not shown. View the raw message.

include/linux/firmware/cirrus/cs_dsp.h +2 -2
index a66eb7624730..69959032f8f5 100644

Lines of this file are not shown. View the raw message.

include/linux/skbuff.h +12 -0
index a7cc3d1f4fd1..50f127451dc6 100644

Lines of this file are not shown. View the raw message.

io_uring/io_uring.c +1 -1
index e97c495c1806..104192bcc8e4 100644

Lines of this file are not shown. View the raw message.

io_uring/rw.c +11 -4
index abe68ba9c9dc..d7388a4a3ea5 100644

Lines of this file are not shown. View the raw message.

io_uring/zcrx.c +1 -0
index 875ad40cf659..03396769c775 100644

Lines of this file are not shown. View the raw message.

kernel/cgroup/dmem.c +63 -7

70 lines not on this page · raw message

kernel/sched/fair.c +28 -26

54 lines not on this page · raw message

kernel/trace/ring_buffer.c +2 -0
index afcd3747264d..3ba08fc1b7d0 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace.c +4 -4
index 142e3b737f0b..907923d5f8bb 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace.h +5 -2
index 85eabb454bee..ec372e0f2e71 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_entries.h +16 -16
index de294ae2c5c5..a649dfcf9b7c 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_export.c +15 -6
index 1698fc22afa0..32a42ef31855 100644

Lines of this file are not shown. View the raw message.

lib/buildid.c +30 -12

42 lines not on this page · raw message

mm/shmem.c +14 -9
index d13114832306..94c5b0d78ac3 100644

Lines of this file are not shown. View the raw message.

mm/slub.c +5 -1
index 1e76c92fe375..e01641cea143 100644

Lines of this file are not shown. View the raw message.

net/bridge/netfilter/ebtables.c +1 -1
index 5697e3949a36..a04fc1757528 100644

Lines of this file are not shown. View the raw message.

net/core/filter.c +4 -4
index 6431ef3e9f7d..88b265f6ccf8 100644

Lines of this file are not shown. View the raw message.

net/core/gro.c +2 -0
index 76f9c3712422..482fa7d7f598 100644

Lines of this file are not shown. View the raw message.

net/core/link_watch.c +15 -5
index 212cde35affa..25c455c10a01 100644

Lines of this file are not shown. View the raw message.

net/core/net-procfs.c +34 -16

50 lines not on this page · raw message

net/ethtool/common.c +0 -3
index 55223ebc2a7e..146c7eaedc5a 100644

Lines of this file are not shown. View the raw message.

net/ethtool/rss.c +2 -7
index 4dced53be4b3..da5934cceb07 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ip6_fib.c +2 -1
index 2111af022d94..c6439e30e892 100644

Lines of this file are not shown. View the raw message.

net/mac80211/iface.c +6 -2
index 0ca55b9655a7..72c129478da0 100644

Lines of this file are not shown. View the raw message.

net/mac80211/key.c +2 -1
index d5da7ccea66e..04c8809173d7 100644

Lines of this file are not shown. View the raw message.

net/mac80211/mlme.c +4 -1
index dca47a533392..8ba199cd38c0 100644

Lines of this file are not shown. View the raw message.

net/mac80211/ocb.c +3 -0
index a5d4358f122a..ebb4f4d88c23 100644

Lines of this file are not shown. View the raw message.

net/mac80211/sta_info.c +4 -3
index f4d3b67fda06..1a995bc301b1 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_log.c +2 -2
index 74cef8bf554c..62cf6a30875e 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_tables_api.c +1 -1
index 3cbf2573b9e9..6059a299004d 100644

Lines of this file are not shown. View the raw message.

net/netfilter/x_tables.c +1 -1
index 90b7630421c4..48105ea3df15 100644

Lines of this file are not shown. View the raw message.

net/sched/cls_u32.c +6 -7
index 2a1c00048fd6..58e849c0acf4 100644

Lines of this file are not shown. View the raw message.

net/tipc/crypto.c +2 -2
index 751904f10aab..970db62bd029 100644

Lines of this file are not shown. View the raw message.

net/wireless/util.c +5 -3
index 4eb028ad1683..81d6d27d273c 100644

Lines of this file are not shown. View the raw message.

sound/drivers/aloop.c +36 -26

62 lines not on this page · raw message

sound/hda/codecs/realtek/alc269.c +26 -1
index 9097de7d2e3d..2e9efafa732f 100644

Lines of this file are not shown. View the raw message.

sound/hda/codecs/side-codecs/tas2781_hda_i2c.c +4 -1
index 0e4bda3a544e..624a822341bb 100644

Lines of this file are not shown. View the raw message.

sound/soc/amd/renoir/acp3x-pdm-dma.c +2 -0
index 95ac8c680037..a560d06097d5 100644

Lines of this file are not shown. View the raw message.

sound/soc/amd/yc/acp6x-mach.c +7 -0
index c0a8afb42e16..c4a4a06528b4 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/tlv320adcx140.c +3 -0
index 62d936c2838c..1565727ca2f3 100644

Lines of this file are not shown. View the raw message.

sound/soc/generic/simple-card-utils.c +2 -2
index 355f7ec8943c..bdc02e85b089 100644

Lines of this file are not shown. View the raw message.

sound/soc/intel/boards/sof_sdw.c +8 -0
index c013e31d098e..92fac7ed782f 100644

Lines of this file are not shown. View the raw message.

sound/soc/ti/davinci-evm.c +31 -8
index 2a2f5bc95576..a55a369ce71c 100644

Lines of this file are not shown. View the raw message.

sound/usb/mixer_quirks.c +2 -7
index 828af3095b86..4873b5e74801 100644

Lines of this file are not shown. View the raw message.

sound/usb/pcm.c +2 -1
index 54d01dfd820f..682b6c1fe76b 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks.c +2 -0
index 94a8fdc9c6d3..8a646891ebb4 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/kvm/Makefile.kvm +1 -0
index 148d427ff24b..1715efe9d5b0 100644

Lines of this file are not shown. View the raw message.

virt/kvm/eventfd.c +24 -20

44 lines not on this page · raw message

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.