Skip to contentSkip to conversation

Linux 5.18.8

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Jun 29, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.18.8 kernel.

All users of the 5.18 kernel series must upgrade.

The updated 5.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.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

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

 Documentation/ABI/testing/sysfs-bus-iio-vf610               |    2 
 Documentation/devicetree/bindings/usb/generic-ehci.yaml     |    3 
 Documentation/devicetree/bindings/usb/generic-ohci.yaml     |    3 
 Documentation/vm/hwpoison.rst                               |    3 
 MAINTAINERS                                                 |   11 
 Makefile                                                    |    4 
 arch/arm/boot/dts/bcm2711-rpi-400.dts                       |    6 
 arch/arm/boot/dts/imx6qdl.dtsi                              |    2 
 arch/arm/boot/dts/imx7s.dtsi                                |    2 
 arch/arm/kernel/crash_dump.c                                |   27 --
 arch/arm/mach-axxia/platsmp.c                               |    1 
 arch/arm/mach-cns3xxx/core.c                                |    2 
 arch/arm/mach-exynos/exynos.c                               |    1 
 arch/arm64/boot/dts/exynos/exynos7885.dtsi                  |   12 
 arch/arm64/boot/dts/ti/k3-am64-main.dtsi                    |    2 
 arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi                  |    2 
 arch/arm64/kernel/crash_dump.c                              |   29 --
 arch/arm64/kvm/arm.c                                        |    6 
 arch/ia64/kernel/crash_dump.c                               |   32 --
 arch/mips/kernel/crash_dump.c                               |   27 --
 arch/mips/vr41xx/common/icu.c                               |    2 
 arch/parisc/Kconfig                                         |    1 
 arch/parisc/include/asm/fb.h                                |    2 
 arch/parisc/kernel/cache.c                                  |    5 
 arch/powerpc/kernel/crash_dump.c                            |   35 --
 arch/powerpc/kernel/process.c                               |    2 
 arch/powerpc/kernel/rtas.c                                  |   11 
 arch/powerpc/platforms/microwatt/microwatt.h                |    7 
 arch/powerpc/platforms/microwatt/rng.c                      |   10 
 arch/powerpc/platforms/microwatt/setup.c                    |    8 
 arch/powerpc/platforms/powernv/powernv.h                    |    2 
 arch/powerpc/platforms/powernv/rng.c                        |   52 ++-
 arch/powerpc/platforms/powernv/setup.c                      |    2 
 arch/powerpc/platforms/pseries/pseries.h                    |    2 
 arch/powerpc/platforms/pseries/rng.c                        |   11 
 arch/powerpc/platforms/pseries/setup.c                      |    2 
 arch/riscv/kernel/crash_dump.c                              |   26 -
 arch/s390/kernel/crash_dump.c                               |   23 +
 arch/s390/kernel/perf_cpum_cf.c                             |   22 +
 arch/sh/kernel/crash_dump.c                                 |   29 --
 arch/x86/kernel/crash_dump_32.c                             |   29 --
 arch/x86/kernel/crash_dump_64.c                             |   41 ---
 arch/x86/kvm/svm/sev.c                                      |   68 +++--
 arch/x86/kvm/svm/svm.c                                      |   11 
 arch/x86/kvm/svm/svm.h                                      |    2 
 arch/x86/net/bpf_jit_comp.c                                 |    3 
 arch/xtensa/kernel/time.c                                   |    1 
 arch/xtensa/platforms/xtfpga/setup.c                        |    1 
 block/blk-core.c                                            |   13 
 block/blk-mq.c                                              |   11 
 block/genhd.c                                               |   39 --
 drivers/base/memory.c                                       |    2 
 drivers/base/regmap/regmap-irq.c                            |    8 
 drivers/block/xen-blkfront.c                                |   19 -
 drivers/char/random.c                                       |    6 
 drivers/dma-buf/udmabuf.c                                   |    5 
 drivers/gpio/gpio-vr41xx.c                                  |    2 
 drivers/gpio/gpio-winbond.c                                 |    7 
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c            |    2 
 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c |   24 -
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dpp.c            |    3 
 drivers/gpu/drm/amd/display/dc/dcn201/dcn201_dpp.c          |    3 
 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c            |    3 
 drivers/gpu/drm/i915/display/intel_dpll_mgr.c               |    4 
 drivers/gpu/drm/msm/adreno/adreno_gpu.c                     |    3 
 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c                    |    2 
 drivers/gpu/drm/msm/dp/dp_ctrl.c                            |   33 +-
 drivers/gpu/drm/msm/dp/dp_ctrl.h                            |    2 
 drivers/gpu/drm/msm/dp/dp_display.c                         |   16 -
 drivers/gpu/drm/msm/msm_drv.c                               |    2 
 drivers/gpu/drm/msm/msm_drv.h                               |    1 
 drivers/gpu/drm/msm/msm_gem_prime.c                         |   15 +
 drivers/gpu/drm/msm/msm_gpu.c                               |    3 
 drivers/gpu/drm/msm/msm_iommu.c                             |    2 
 drivers/gpu/drm/sun4i/sun4i_drv.c                           |    4 
 drivers/iio/accel/bma180.c                                  |    3 
 drivers/iio/accel/kxcjk-1013.c                              |    4 
 drivers/iio/accel/mma8452.c                                 |   22 +
 drivers/iio/accel/mxc4005.c                                 |    4 
 drivers/iio/adc/adi-axi-adc.c                               |    3 
 drivers/iio/adc/aspeed_adc.c                                |    1 
 drivers/iio/adc/axp288_adc.c                                |    8 
 drivers/iio/adc/rzg2l_adc.c                                 |    8 
 drivers/iio/adc/stm32-adc-core.c                            |    9 
 drivers/iio/adc/stm32-adc.c                                 |   37 +-
 drivers/iio/adc/ti-ads131e08.c                              |   10 
 drivers/iio/adc/xilinx-ams.c                                |    2 
 drivers/iio/afe/iio-rescale.c                               |    2 
 drivers/iio/chemical/ccs811.c                               |    4 
 drivers/iio/gyro/mpu3050-core.c                             |    1 
 drivers/iio/humidity/hts221_buffer.c                        |    5 
 drivers/iio/imu/inv_icm42600/inv_icm42600.h                 |    1 
 drivers/iio/imu/inv_icm42600/inv_icm42600_core.c            |    2 
 drivers/iio/magnetometer/yamaha-yas530.c                    |    2 
 drivers/iio/proximity/sx9324.c                              |    3 
 drivers/iio/test/Kconfig                                    |    2 
 drivers/iio/test/Makefile                                   |    2 
 drivers/iio/trigger/iio-trig-sysfs.c                        |    1 
 drivers/iommu/ipmmu-vmsa.c                                  |    2 
 drivers/md/dm-era-target.c                                  |    8 
 drivers/md/dm-log.c                                         |    2 
 drivers/md/dm.c                                             |    4 
 drivers/memory/mtk-smi.c                                    |    5 
 drivers/memory/samsung/exynos5422-dmc.c                     |   29 +-
 drivers/mmc/host/mtk-sd.c                                   |   20 -
 drivers/mmc/host/sdhci-pci-o2micro.c                        |    2 
 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c                  |    2 
 drivers/net/bonding/bond_main.c                             |    4 
 drivers/net/dsa/qca8k.h                                     |    2 
 drivers/net/ethernet/intel/ice/ice_ethtool.c                |   49 +++
 drivers/net/ethernet/intel/ice/ice_lib.c                    |   42 ++-
 drivers/net/ethernet/intel/ice/ice_tc_lib.c                 |    5 
 drivers/net/ethernet/intel/igb/igb_main.c                   |   19 -
 drivers/net/phy/aquantia_main.c                             |   15 +
 drivers/net/phy/at803x.c                                    |    6 
 drivers/net/veth.c                                          |    4 
 drivers/net/virtio_net.c                                    |   25 -
 drivers/nvme/host/core.c                                    |   14 +
 drivers/nvme/host/pci.c                                     |    4 
 drivers/scsi/ibmvscsi/ibmvfc.c                              |   82 ++++--
 drivers/scsi/ibmvscsi/ibmvfc.h                              |    2 
 drivers/scsi/scsi_debug.c                                   |   22 +
 drivers/scsi/scsi_transport_iscsi.c                         |    7 
 drivers/scsi/storvsc_drv.c                                  |   27 +-
 drivers/soc/bcm/brcmstb/pm/pm-arm.c                         |    1 
 drivers/usb/chipidea/udc.c                                  |    3 
 drivers/usb/gadget/function/uvc_video.c                     |    3 
 drivers/usb/gadget/legacy/raw_gadget.c                      |   63 +++-
 drivers/usb/host/xhci-hub.c                                 |    2 
 drivers/usb/host/xhci-pci.c                                 |    6 
 drivers/usb/host/xhci.c                                     |   15 -
 drivers/usb/host/xhci.h                                     |    2 
 drivers/usb/serial/option.c                                 |    6 
 drivers/usb/serial/pl2303.c                                 |   29 +-
 drivers/usb/typec/tcpm/Kconfig                              |    1 
 drivers/video/console/sticore.c                             |    2 
 drivers/xen/features.c                                      |    2 
 drivers/xen/gntdev-common.h                                 |    7 
 drivers/xen/gntdev.c                                        |  157 ++++++++----
 fs/9p/fid.c                                                 |   22 -
 fs/9p/vfs_addr.c                                            |   13 
 fs/9p/vfs_inode.c                                           |    8 
 fs/9p/vfs_inode_dotl.c                                      |    3 
 fs/afs/inode.c                                              |    3 
 fs/btrfs/disk-io.c                                          |   13 
 fs/btrfs/file.c                                             |   67 +++--
 fs/btrfs/locking.c                                          |    3 
 fs/btrfs/reflink.c                                          |   15 -
 fs/btrfs/super.c                                            |   47 +++
 fs/cifs/smb2pdu.c                                           |   21 +
 fs/f2fs/iostat.c                                            |   31 +-
 fs/f2fs/namei.c                                             |   17 -
 fs/f2fs/node.c                                              |    4 
 fs/io_uring.c                                               |   20 +
 fs/proc/vmcore.c                                            |   54 ++--
 include/linux/crash_dump.h                                  |    9 
 include/linux/mm.h                                          |    1 
 include/linux/ratelimit_types.h                             |   12 
 include/net/inet_sock.h                                     |    5 
 include/trace/events/libata.h                               |    1 
 kernel/dma/direct.c                                         |    5 
 kernel/trace/rethook.c                                      |    9 
 kernel/trace/trace_kprobe.c                                 |   11 
 mm/filemap.c                                                |    2 
 mm/hwpoison-inject.c                                        |    2 
 mm/madvise.c                                                |    2 
 mm/memory-failure.c                                         |   12 
 mm/readahead.c                                              |    2 
 mm/slub.c                                                   |    2 
 mm/swap.c                                                   |    2 
 net/core/dev.c                                              |   25 +
 net/core/filter.c                                           |   34 ++
 net/core/net-sysfs.c                                        |    1 
 net/core/skmsg.c                                            |    5 
 net/ethtool/eeprom.c                                        |    2 
 net/ipv4/ip_gre.c                                           |   15 -
 net/ipv4/ping.c                                             |   10 
 net/ipv4/tcp_bpf.c                                          |    3 
 net/ipv6/ip6_gre.c                                          |   15 -
 net/netfilter/nf_dup_netdev.c                               |   25 +
 net/netfilter/nft_meta.c                                    |   13 
 net/netfilter/nft_numgen.c                                  |   12 
 net/openvswitch/flow.c                                      |    2 
 net/sched/sch_netem.c                                       |    4 
 net/tipc/core.c                                             |    3 
 net/tls/tls_main.c                                          |    2 
 net/xdp/xsk.c                                               |   16 -
 scripts/mod/modpost.c                                       |    2 
 sound/core/memalloc.c                                       |   23 -
 sound/hda/hdac_i915.c                                       |   15 -
 sound/pci/hda/hda_auto_parser.c                             |    7 
 sound/pci/hda/hda_local.h                                   |    1 
 sound/pci/hda/patch_conexant.c                              |    4 
 sound/pci/hda/patch_realtek.c                               |   36 ++
 sound/pci/hda/patch_via.c                                   |    4 
 tools/perf/tests/shell/test_arm_callgraph_fp.sh             |    2 
 tools/perf/tests/topology.c                                 |    2 
 tools/perf/util/arm-spe.c                                   |   22 -
 tools/perf/util/build-id.c                                  |   28 ++
 tools/testing/selftests/dma/Makefile                        |    1 
 tools/testing/selftests/dma/dma_map_benchmark.c             |    2 
 tools/testing/selftests/net/fcnal-test.sh                   |   61 ++++
 tools/testing/selftests/netfilter/nft_concat_range.sh       |    2 
 203 files changed, 1557 insertions(+), 919 deletions(-)

Aashish Sharma (1):
iio:proximity:sx9324: Check ret value of device_property_read_u32_array()

Adrian Hunter (1):
perf build-id: Fix caching files with a wrong build ID

Aidan MacDonald (2):
regmap-irq: Fix a bug in regmap_irq_enable() for type_in_mask chips
regmap-irq: Fix offset/index mismatch in read_sub_irq_data()

Alan Stern (2):
usb: gadget: Fix non-unique driver names in raw-gadget driver
USB: gadget: Fix double-free bug in raw_gadget driver

Alexander Gordeev (2):
s390/crash: add missing iterator advance in copy_oldmem_page() s390/crash: make copy_oldmem_page() return number of bytes copied

Alexander Stein (1):
ARM: dts: imx7: Move hsic_phy power domain to HSIC PHY node

Alistair Popple (1):
filemap: Fix serialization adding transparent huge pages to page cache

Anatolii Gerasymenko (2):
ice: ethtool: advertise 1000M speeds properly
ice: ethtool: Prohibit improper channel config for DCB

Andrew Donnellan (1):
powerpc/rtas: Allow ibm,platform-dump RTAS call with null buffer address

Andy Shevchenko (1):
usb: typec: wcove: Drop wrong dependency to INTEL_SOC_PMIC

Aswath Govindraju (1):
arm64: dts: ti: k3-am64-main: Remove support for HS400 speed mode

Athira Rajeev (1):
perf test topology: Use !strncmp(right platform) to fix guest PPC comparision check

Baruch Siach (1):
iio: adc: vf610: fix conversion mode sysfs node name

Carlo Lobrano (1):

      USB: serial: option: add Telit LE910Cx 0x1250 composition

Chevron Li (1):
mmc: sdhci-pci-o2micro: Fix card detect by dealing with debouncing

Christian Marangi (1):
net: dsa: qca8k: reduce mgmt ethernet timeout

Christoph Hellwig (3):
block: disable the elevator int del_gendisk
nvme: move the Samsung X5 quirk entry to the core quirks
io_uring: make apoll_events a __poll_t

Ciara Loftus (1):
xsk: Fix generic transmit when completion queue reservation fails

Claudiu Manoil (1):
phy: aquantia: Fix AN when higher speeds than 1G are not advertised

Daeho Jeong (1):
f2fs: fix iostat related lock protection

Damien Le Moal (1):
scsi: scsi_debug: Fix zone transition to full condition

Dan Carpenter (1):
gpio: winbond: Fix error code in winbond_gpio_get()

Dan Vacura (1):
usb: gadget: uvc: fix list double add in uvcg_video_pump

David Howells (1):
afs: Fix dynamic root getattr

David Sterba (1):
btrfs: add error messages to all unrecognized mount options

David Virag (1):
arm64: dts: exynos: Correct UART clocks on Exynos7885

Demi Marie Obenour (1):
xen/gntdev: Avoid blocking in unmap_grant_pages()

Dexuan Cui (1):
dma-direct: use the correct size for dma_set_encrypted()

Dmitry Rokosov (5):
iio:humidity:hts221: rearrange iio trigger get and register iio:chemical:ccs811: rearrange iio trigger get and register iio:accel:kxcjk-1013: rearrange iio trigger get and register iio:accel:bma180: rearrange iio trigger get and register iio:accel:mxc4005: rearrange iio trigger get and register

Dominique Martinet (3):
9p: fix fid refcount leak in v9fs_vfs_atomic_open_dotl 9p: fix fid refcount leak in v9fs_vfs_get_link 9p: fix EBADF errors in cached mode

Edward Wu (1):

      ata: libata: add qc->flags in ata_qc_complete_template tracepoint

Eric Dumazet (2):
net: fix data-race in dev_isalive()
erspan: do not assume transport header is always set

Filipe Manana (2):
btrfs: fix hang during unmount when block group reclaim task is running
btrfs: fix race between reflinking and ordered extent completion

Florian Westphal (3):
netfilter: use get_random_u32 instead of prandom
netfilter: nf_dup_netdev: do not push mac header a second time
netfilter: nf_dup_netdev: add and use recursion counter

Geert Uytterhoeven (2):
dt-bindings: usb: ohci: Increase the number of PHYs
dt-bindings: usb: ehci: Increase the number of PHYs

George Shen (1):
drm/amd/display: Fix typo in override_lane_settings

Gerd Hoffmann (1):
udmabuf: add back sanity check

Greg Kroah-Hartman (1):

      Linux 5.18.8

Haibo Chen (2):
iio: mma8452: fix probe fail when device tree compatible is used.
iio: accel: mma8452: ignore the return value of reset operation

Hans de Goede (1):
iio: adc: axp288: Override TS pin bias current for some models

Helge Deller (2):
parisc/stifb: Fix fb_is_primary_device() only available with CONFIG_FB_STI
parisc: Enable ARCH_HAS_STRICT_MODULE_RWX

Hoang Le (1):
tipc: fix use-after-free Read in tipc_named_reinit

Ivan Vecera (1):
ethtool: Fix get module eeprom fallback

Jaegeuk Kim (2):
f2fs: attach inline_data after setting compression
f2fs: do not count ENOENT for error case

Jakub Kicinski (2):
Revert "net/tls: fix tls_sk_proto_close executed repeatedly"
sock: redo the psock vs ULP protection check

Jakub Sitnicki (1):
bpf, x86: Fix tail call count offset calculation on bpf2bpf call

Jann Horn (1):
mm/slub: add missing TID updates on slab deactivation

Jason A. Donenfeld (6):
random: schedule mix_interrupt_randomness() less often
random: quiet urandom warning ratelimit suppression message powerpc/microwatt: wire up rng during setup_arch() powerpc/powernv: wire up rng during setup_arch
random: update comment from copy_to_user() -> copy_to_iter() powerpc/pseries: wire up rng during setup_arch()

Jason Andryuk (1):
xen-blkfront: Handle NULL gendisk

Jay Vosburgh (2):
veth: Add updating of trans_start
bonding: ARP monitor spams NETDEV_NOTIFY_PEERS notifiers

Jean-Baptiste Maneyrol (1):

      iio: imu: inv_icm42600: Fix broken icm42600 (chip id 0 value)

Jens Axboe (1):
block: pop cached rq before potentially blocking rq_qos_throttle()

Jialin Zhang (2):
iio: adc: rzg2l_adc: add missing fwnode_handle_put() in rzg2l_adc_parse_properties()
iio: adc: ti-ads131e08: add missing fwnode_handle_put() in ads131e08_alloc_channels()

Jie2x Zhou (1):
selftests: netfilter: correct PKTGEN_SCRIPT_PATHS in nft_concat_range.sh

Joerg Roedel (1):
MAINTAINERS: Add new IOMMU development mailing list

Johan Hovold (1):
USB: serial: pl2303: add support for more HXN (G) types

John David Anglin (1):

      parisc: Fix flush_anon_page on PA8800/PA8900

Jon Maxwell (1):
bpf: Fix request_sock leak in sk lookup helpers

Jonathan Marek (1):
drm/msm: use for_each_sgtable_sg to iterate over scatterlist

Josef Bacik (1):
btrfs: fix deadlock with fsync+fiemap+transaction commit

Joshua Ashton (1):
amd/display/dc: Fix COLOR_ENCODING and COLOR_RANGE doing nothing for DCN20+

Julien Grall (1):
x86/xen: Remove undefined behavior in setup_features()

Kai-Heng Feng (1):
igb: Make DMA faster when CPU is active on the PCIe link

Kailang Yang (1):
ALSA: hda/realtek - ALC897 headset MIC no sound

Kuogee Hsieh (2):
drm/msm/dp: check core_initialized before disable interrupts at dp_display_unbind() drm/msm/dp: force link training for display resolution change

Leo Yan (1):
perf arm-spe: Don't set data source if it's not a memory operation

Liam Beguin (1):
iio: test: fix missing MODULE_LICENSE for IIO_RESCALE=m

Liang He (2):
xtensa: xtfpga: Fix refcount leak bug in setup
xtensa: Fix refcount leak bug in time.c

Linus Walleij (2):
iio: magnetometer: yas530: Fix memchr_inv() misuse
iio: afe: rescale: Fix boolean logic bug

Lorenzo Bianconi (1):
igb: fix a use-after-free issue in igb_clean_tx_ring

Lucas Stach (1):
ARM: dts: imx6qdl: correct PU regulator ramp delay

Lv Ruyi (1):
iio: adc: xilinx-ams: fix return error variable

Macpaul Lin (1):
USB: serial: option: add Quectel RM500K module support

Marcelo Tosatti (1):
mm: lru_cache_disable: use synchronize_rcu_expedited

Marcin Szycik (1):
ice: ignore protocol field in GTP offload

Mario Limonciello (1):
drm/amd: Revert "drm/amd/display: keep eDP Vdd on when eDP stream is already enabled"

Masahiro Yamada (2):
modpost: fix section mismatch check for exported init/exit sections
kbuild: link vmlinux only once for CONFIG_TRIM_UNUSED_KSYMS (2nd attempt)

Masami Hiramatsu (Google) (2):
tracing/kprobes: Check whether get_kretprobe() returns NULL in kretprobe_dispatcher()
rethook: Reject getting a rethook if RCU is not watching

Mathias Nyman (1):
xhci: turn off port power in shutdown

Matt Ranostay (1):
arm64: dts: ti: k3-j721s2: Fix overlapping GICD memory region

Matthew Wilcox (Oracle) (2):
filemap: Handle sibling entries in filemap_get_read_batch()
vmcore: convert copy_oldmem_page() to take an iov_iter

Maximilian Luz (1):
drm/msm: Fix double pm_runtime_disable() call

Mengqi Zhang (1):
mmc: mediatek: wait dma stop bit reset to 0

Miaoqian Lin (9):
drm/msm/mdp4: Fix refcount leak in mdp4_modeset_init_intf
iio: adc: aspeed: Fix refcount leak in aspeed_adc_set_trim_data
iio: adc: adi-axi-adc: Fix refcount leak in adi_axi_adc_attach_client
ARM: exynos: Fix refcount leak in exynos_map_pmu
soc: bcm: brcmstb: pm: pm-arm: Fix refcount leak in brcmstb_pm_probe
ARM: Fix refcount leak in axxia_boot_secondary
memory: mtk-smi: add missing put_device() call in mtk_smi_device_link_common
memory: samsung: exynos5422-dmc: Fix refcount leak in of_get_dram_timings
ARM: cns3xxx: Fix refcount leak in cns3xxx_init

Michael Petlan (1):
perf test: Record only user callchains on the "Check Arm64 callgraphs are complete in fp mode" test

Mike Snitzer (1):
dm: do not return early from dm_io_complete if BLK_STS_AGAIN without polling

Mikulas Patocka (1):
dm mirror log: clear log bits up to BITS_PER_LONG boundary

Naveen N. Rao (1):
powerpc: Enable execve syscall exit tracepoint

Nikos Tsironis (1):
dm era: commit metadata in postsuspend after worker stops

Oleksij Rempel (1):
net: phy: at803x: fix NULL pointer dereference on AR9331 PHY

Olivier Moysan (2):
iio: adc: stm32: fix maximum clock rate for stm32mp15x
iio: adc: stm32: fix vrefint wrong calibration value handling

Pavel Begunkov (3):
io_uring: fail links when poll fails
io_uring: fix req->apoll_events
io_uring: fix wrong arm_poll error handling

Peilin Ye (1):
net/sched: sch_netem: Fix arithmetic in netem_dump() for 32-bit platforms

Peter Gonda (1):
KVM: SEV: Init target VMCBs in sev_migrate_from

Qu Wenruo (1):
btrfs: prevent remounting to v1 space cache for subpage mount

Quentin Perret (1):
KVM: arm64: Prevent kmemleak from accessing pKVM memory

Riccardo Paolo Bestetti (2):
ipv4: ping: fix bind address validity check
ipv4: fix bind address validity regression tests

Rob Clark (2):
drm/msm: Ensure mmap offset is initialized drm/msm: Switch ordering of runpm put vs devfreq_idle

Rosemarie O'Riorden (1):
net: openvswitch: fix parsing of nw_proto for IPv6 fragments

Samuel Holland (1):
drm/sun4i: Fix crash during suspend after component bind failure

Sascha Hauer (1):
mtd: rawnand: gpmi: Fix setting busy timeout setting

Saurabh Sengar (1):
scsi: storvsc: Correct reporting of Hyper-V I/O size limits

Sergey Gorenko (1):
scsi: iscsi: Exclude zero from the endpoint ID range

Shyam Prasad N (1):
smb3: use netname when available on secondary channels

Soham Sen (1):
ALSA: hda/realtek: Add mute LED quirk for HP Omen laptop

Stefan Wahren (1):

      ARM: dts: bcm2711-rpi-400: Fix GPIO line names

Stephan Gerhold (1):
virtio_net: fix xdp_rxq_info bug after suspend/resume

Steve French (1):
smb3: fix empty netname context on secondary channels

Takashi Iwai (5):
ALSA: memalloc: Drop x86-specific hack for WC allocations
ALSA: hda/via: Fix missing beep setup
ALSA: hda: Fix discovery of i915 graphics PCI device
ALSA: hda/conexant: Fix missing beep setup
ALSA: hda/realtek: Apply fixup for Lenovo Yoga Duet 7 properly

Tanveer Alam (1):
xhci-pci: Allow host runtime PM as default for Intel Raptor Lake xHCI

Thomas Richter (1):
s390/cpumf: Handle events cycles and instructions identical

Tim Crawford (2):
ALSA: hda/realtek: Add quirk for Clevo PD70PNT
ALSA: hda/realtek: Add quirk for Clevo NS50PU

Tyler Hicks (1):
9p: Fix refcounting during full path walks for fid lookups

Tyrel Datwyler (2):
scsi: ibmvfc: Store vhost pointer during subcrq allocation
scsi: ibmvfc: Allocate/free queue resource only during probe/remove

Utkarsh Patel (1):
xhci-pci: Allow host runtime PM as default for Intel Meteor Lake xHCI

Ville Syrjälä (1):

      drm/i915: Implement w/a 22010492432 for adl-s

Vincent Whitchurch (1):
iio: trigger: sysfs: fix use-after-free on remove

Wojciech Drewek (1):
ice: Fix switchdev rules book keeping

Xu Yang (1):
usb: chipidea: udc: check request status before setting device address

Yannick Brosseau (2):
iio: adc: stm32: Fix ADCs iteration in irq handler
iio: adc: stm32: Fix IRQs on STM32F4 by removing custom spurious IRQs message

Yonglin Tan (1):
USB: serial: option: add Quectel EM05-G modem

Yoshihiro Shimoda (1):
iommu/ipmmu-vmsa: Fix compatible for rcar-gen4

Yu Liao (1):
selftests dma: fix compile error for dma_map_benchmark

Zheyu Ma (1):
iio: gyro: mpu3050: Fix the error handling in mpu3050_power_up()

Ziyang Xuan (1):
net/tls: fix tls_sk_proto_close executed repeatedly

Zygo Blaxell (1):
btrfs: don't set lock_owner when locking extent buffer for reading

huhai (1):
MIPS: Remove repetitive increase irq_err_count

zhenwei pi (1):
mm/memory-failure: disable unpoison once hw error happens

author maintainer
#1 lore raw
Documentation/ABI/testing/sysfs-bus-iio-vf610 +1 -1
index 308a6756d3bf..491ead804488 100644
@@ -1,4 +1,4 @@
-What:		/sys/bus/iio/devices/iio:deviceX/conversion_mode
+What:		/sys/bus/iio/devices/iio:deviceX/in_conversion_mode
 KernelVersion:	4.2
 Contact:	[email protected]
 Description:
Documentation/devicetree/bindings/usb/generic-ehci.yaml +2 -1
index 8913497624de..cb5da1df8d40 100644
@@ -135,7 +135,8 @@ properties:
       Phandle of a companion.
 
   phys:
-    maxItems: 1
+    minItems: 1
+    maxItems: 3
 
   phy-names:
     const: usb
Documentation/devicetree/bindings/usb/generic-ohci.yaml +2 -1
index acbf94fa5f74..d5fd3aa53ed2 100644
@@ -102,7 +102,8 @@ properties:
       Overrides the detected port count
 
   phys:
-    maxItems: 1
+    minItems: 1
+    maxItems: 3
 
   phy-names:
     const: usb
Documentation/vm/hwpoison.rst +2 -1
index c742de1769d1..b9d5253c1305 100644
@@ -120,7 +120,8 @@ Testing
   unpoison-pfn
 	Software-unpoison page at PFN echoed into this file. This way
 	a page can be reused again.  This only works for Linux
-	injected failures, not for real memory failures.
+	injected failures, not for real memory failures. Once any hardware
+	memory failure happens, this feature is disabled.
 
   Note these injection interfaces are not stable and might change between
   kernel versions
MAINTAINERS +11 -0
index f468864fd268..8e6622ed6de6 100644
@@ -427,6 +427,7 @@ ACPI VIOT DRIVER
 M:	Jean-Philippe Brucker <[email protected]>
 L:	[email protected]
 L:	[email protected]
+L:	[email protected]
 S:	Maintained
 F:	drivers/acpi/viot.c
 F:	include/linux/acpi_viot.h
@@ -960,6 +961,7 @@ AMD IOMMU (AMD-VI)
 M:	Joerg Roedel <[email protected]>
 R:	Suravee Suthikulpanit <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
 F:	drivers/iommu/amd/
@@ -5898,6 +5900,7 @@ M:	Christoph Hellwig <[email protected]>
 M:	Marek Szyprowski <[email protected]>
 R:	Robin Murphy <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Supported
 W:	http://git.infradead.org/users/hch/dma-mapping.git
 T:	git git://git.infradead.org/users/hch/dma-mapping.git
@@ -5910,6 +5913,7 @@ F:	kernel/dma/
 DMA MAPPING BENCHMARK
 M:	Xiang Chen <[email protected]>
 L:	[email protected]
+L:	[email protected]
 F:	kernel/dma/map_benchmark.c
 F:	tools/testing/selftests/dma/
 
@@ -7476,6 +7480,7 @@ F:	drivers/gpu/drm/exynos/exynos_dp*
 EXYNOS SYSMMU (IOMMU) driver
 M:	Marek Szyprowski <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Maintained
 F:	drivers/iommu/exynos-iommu.c
 
@@ -9875,6 +9880,7 @@ INTEL IOMMU (VT-d)
 M:	David Woodhouse <[email protected]>
 M:	Lu Baolu <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Supported
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
 F:	drivers/iommu/intel/
@@ -10253,6 +10259,7 @@ IOMMU DRIVERS
 M:	Joerg Roedel <[email protected]>
 M:	Will Deacon <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
 F:	Documentation/devicetree/bindings/iommu/
@@ -12369,6 +12376,7 @@ F:	drivers/i2c/busses/i2c-mt65xx.c
 MEDIATEK IOMMU DRIVER
 M:	Yong Wu <[email protected]>
 L:	[email protected]
+L:	[email protected]
 L:	[email protected] (moderated for non-subscribers)
 S:	Supported
 F:	Documentation/devicetree/bindings/iommu/mediatek*
@@ -16354,6 +16362,7 @@ F:	drivers/i2c/busses/i2c-qcom-cci.c
 QUALCOMM IOMMU
 M:	Rob Clark <[email protected]>
 L:	[email protected]
+L:	[email protected]
 L:	[email protected]
 S:	Maintained
 F:	drivers/iommu/arm/arm-smmu/qcom_iommu.c
@@ -18939,6 +18948,7 @@ F:	arch/x86/boot/video*
 SWIOTLB SUBSYSTEM
 M:	Christoph Hellwig <[email protected]>
 L:	[email protected]
+L:	[email protected]
 S:	Supported
 W:	http://git.infradead.org/users/hch/dma-mapping.git
 T:	git git://git.infradead.org/users/hch/dma-mapping.git
@@ -21609,6 +21619,7 @@ M:	Juergen Gross <[email protected]>
 M:	Stefano Stabellini <[email protected]>
 L:	[email protected] (moderated for non-subscribers)
 L:	[email protected]
+L:	[email protected]
 S:	Supported
 F:	arch/x86/xen/*swiotlb*
 F:	drivers/xen/*swiotlb*
Makefile +2 -2
index 61d63068553c..6ac3335f65af 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 18
-SUBLEVEL = 7
+SUBLEVEL = 8
 EXTRAVERSION =
 NAME = Superb Owl
 
@@ -1139,7 +1139,7 @@ KBUILD_MODULES := 1
 
 autoksyms_recursive: descend modules.order
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
-	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
+	  "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
 endif
 
 autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
arch/arm/boot/dts/bcm2711-rpi-400.dts +3 -3
index f4d2fc20397c..c53d9eb0b802 100644
@@ -28,12 +28,12 @@ gpio-poweroff {
 &expgpio {
 	gpio-line-names = "BT_ON",
 			  "WL_ON",
-			  "",
+			  "PWR_LED_OFF",
 			  "GLOBAL_RESET",
 			  "VDD_SD_IO_SEL",
-			  "CAM_GPIO",
+			  "GLOBAL_SHUTDOWN",
 			  "SD_PWR_ON",
-			  "SD_OC_N";
+			  "SHUTDOWN_REQUEST";
 };
 
 &genet_mdio {
arch/arm/boot/dts/imx6qdl.dtsi +1 -1
index d27beb47f9a3..652feff33496 100644
@@ -762,7 +762,7 @@ reg_pu: regulator-vddpu {
 					regulator-name = "vddpu";
 					regulator-min-microvolt = <725000>;
 					regulator-max-microvolt = <1450000>;
-					regulator-enable-ramp-delay = <150>;
+					regulator-enable-ramp-delay = <380>;
 					anatop-reg-offset = <0x140>;
 					anatop-vol-bit-shift = <9>;
 					anatop-vol-bit-width = <5>;
arch/arm/boot/dts/imx7s.dtsi +1 -1
index 5af6d58666f4..9dd525871adf 100644
@@ -120,6 +120,7 @@ usbphynop3: usbphynop3 {
 		compatible = "usb-nop-xceiv";
 		clocks = <&clks IMX7D_USB_HSIC_ROOT_CLK>;
 		clock-names = "main_clk";
+		power-domains = <&pgc_hsic_phy>;
 		#phy-cells = <0>;
 	};
 
@@ -1153,7 +1154,6 @@ usbh: usb@30b30000 {
 				compatible = "fsl,imx7d-usb", "fsl,imx27-usb";
 				reg = <0x30b30000 0x200>;
 				interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
-				power-domains = <&pgc_hsic_phy>;
 				clocks = <&clks IMX7D_USB_CTRL_CLK>;
 				fsl,usbphy = <&usbphynop3>;
 				fsl,usbmisc = <&usbmisc3 0>;
arch/arm/kernel/crash_dump.c +4 -23
index 53cb92435392..938bd932df9a 100644
@@ -14,22 +14,10 @@
 #include <linux/crash_dump.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is int he user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -40,14 +28,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user(buf, vaddr + offset, csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	iounmap(vaddr);
 	return csize;
arch/arm/mach-axxia/platsmp.c +1 -0
index 512943eae30a..2e203626eda5 100644
@@ -39,6 +39,7 @@ static int axxia_boot_secondary(unsigned int cpu, struct task_struct *idle)
 		return -ENOENT;
 
 	syscon = of_iomap(syscon_np, 0);
+	of_node_put(syscon_np);
 	if (!syscon)
 		return -ENOMEM;
 
arch/arm/mach-cns3xxx/core.c +2 -0
index e4f4b20b83a2..3fc4ec830e3a 100644
@@ -372,6 +372,7 @@ static void __init cns3xxx_init(void)
 		/* De-Asscer SATA Reset */
 		cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SATA));
 	}
+	of_node_put(dn);
 
 	dn = of_find_compatible_node(NULL, NULL, "cavium,cns3420-sdhci");
 	if (of_device_is_available(dn)) {
@@ -385,6 +386,7 @@ static void __init cns3xxx_init(void)
 		cns3xxx_pwr_clk_en(CNS3XXX_PWR_CLK_EN(SDIO));
 		cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SDIO));
 	}
+	of_node_put(dn);
 
 	pm_power_off = cns3xxx_power_off;
 
arch/arm/mach-exynos/exynos.c +1 -0
index 8b48326be9fd..51a247ca4da8 100644
@@ -149,6 +149,7 @@ static void exynos_map_pmu(void)
 	np = of_find_matching_node(NULL, exynos_dt_pmu_match);
 	if (np)
 		pmu_base_addr = of_iomap(np, 0);
+	of_node_put(np);
 }
 
 static void __init exynos_init_irq(void)
arch/arm64/boot/dts/exynos/exynos7885.dtsi +6 -6
index 3170661f5b67..9c233c56558c 100644
@@ -280,8 +280,8 @@ serial_0: serial@13800000 {
 			interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
 			pinctrl-names = "default";
 			pinctrl-0 = <&uart0_bus>;
-			clocks = <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>,
-				 <&cmu_peri CLK_GOUT_UART0_PCLK>;
+			clocks = <&cmu_peri CLK_GOUT_UART0_PCLK>,
+				 <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>;
 			clock-names = "uart", "clk_uart_baud0";
 			samsung,uart-fifosize = <64>;
 			status = "disabled";
@@ -293,8 +293,8 @@ serial_1: serial@13810000 {
 			interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
 			pinctrl-names = "default";
 			pinctrl-0 = <&uart1_bus>;
-			clocks = <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>,
-				 <&cmu_peri CLK_GOUT_UART1_PCLK>;
+			clocks = <&cmu_peri CLK_GOUT_UART1_PCLK>,
+				 <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>;
 			clock-names = "uart", "clk_uart_baud0";
 			samsung,uart-fifosize = <256>;
 			status = "disabled";
@@ -306,8 +306,8 @@ serial_2: serial@13820000 {
 			interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>;
 			pinctrl-names = "default";
 			pinctrl-0 = <&uart2_bus>;
-			clocks = <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>,
-				 <&cmu_peri CLK_GOUT_UART2_PCLK>;
+			clocks = <&cmu_peri CLK_GOUT_UART2_PCLK>,
+				 <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>;
 			clock-names = "uart", "clk_uart_baud0";
 			samsung,uart-fifosize = <256>;
 			status = "disabled";
arch/arm64/boot/dts/ti/k3-am64-main.dtsi +0 -2
index f64b368c6c37..cdb530597c5e 100644
@@ -456,13 +456,11 @@ sdhci0: mmc@fa10000 {
 		clock-names = "clk_ahb", "clk_xin";
 		mmc-ddr-1_8v;
 		mmc-hs200-1_8v;
-		mmc-hs400-1_8v;
 		ti,trm-icp = <0x2>;
 		ti,otap-del-sel-legacy = <0x0>;
 		ti,otap-del-sel-mmc-hs = <0x0>;
 		ti,otap-del-sel-ddr52 = <0x6>;
 		ti,otap-del-sel-hs200 = <0x7>;
-		ti,otap-del-sel-hs400 = <0x4>;
 	};
 
 	sdhci1: mmc@fa00000 {
arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi +1 -1
index be7f39299894..19966f72c5b3 100644
@@ -33,7 +33,7 @@ gic500: interrupt-controller@1800000 {
 		ranges;
 		#interrupt-cells = <3>;
 		interrupt-controller;
-		reg = <0x00 0x01800000 0x00 0x200000>, /* GICD */
+		reg = <0x00 0x01800000 0x00 0x100000>, /* GICD */
 		      <0x00 0x01900000 0x00 0x100000>, /* GICR */
 		      <0x00 0x6f000000 0x00 0x2000>,   /* GICC */
 		      <0x00 0x6f010000 0x00 0x1000>,   /* GICH */
arch/arm64/kernel/crash_dump.c +4 -25
index 58303a9ec32c..670e4ce81822 100644
@@ -9,25 +9,11 @@
 #include <linux/crash_dump.h>
 #include <linux/errno.h>
 #include <linux/io.h>
-#include <linux/memblock.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/memory.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -38,14 +24,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 
arch/arm64/kvm/arm.c +3 -3
index a66d83540c15..f88919a793ad 100644
@@ -2011,11 +2011,11 @@ static int finalize_hyp_mode(void)
 		return 0;
 
 	/*
-	 * Exclude HYP BSS from kmemleak so that it doesn't get peeked
-	 * at, which would end badly once the section is inaccessible.
-	 * None of other sections should ever be introspected.
+	 * Exclude HYP sections from kmemleak so that they don't get peeked
+	 * at, which would end badly once inaccessible.
 	 */
 	kmemleak_free_part(__hyp_bss_start, __hyp_bss_end - __hyp_bss_start);
+	kmemleak_free_part(__va(hyp_mem_base), hyp_mem_size);
 	return pkvm_drop_host_privileges();
 }
 
arch/ia64/kernel/crash_dump.c +4 -28
index 0ed3c3dee4cd..4ef68e2aa757 100644
@@ -10,42 +10,18 @@
 #include <linux/errno.h>
 #include <linux/types.h>
 #include <linux/crash_dump.h>
-
+#include <linux/uio.h>
 #include <asm/page.h>
-#include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- *
- * Calling copy_to_user() in atomic context is not desirable. Hence first
- * copying the data to a pre-allocated kernel page and then copying to user
- * space in non-atomic context.
- */
-ssize_t
-copy_oldmem_page(unsigned long pfn, char *buf,
-		size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+		size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
 	if (!csize)
 		return 0;
 	vaddr = __va(pfn<<PAGE_SHIFT);
-	if (userbuf) {
-		if (copy_to_user(buf, (vaddr + offset), csize)) {
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, (vaddr + offset), csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	return csize;
 }
 
arch/mips/kernel/crash_dump.c +4 -23
index 2e50f55185a6..6e50f4902409 100644
@@ -1,22 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
@@ -24,14 +12,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
arch/mips/vr41xx/common/icu.c +0 -2
index 7b7f25b4b057..9240bcdbe74e 100644
@@ -640,8 +640,6 @@ static int icu_get_irq(unsigned int irq)
 
 	printk(KERN_ERR "spurious ICU interrupt: %04x,%04x\n", pend1, pend2);
 
-	atomic_inc(&irq_err_count);
-
 	return -1;
 }
 
arch/parisc/Kconfig +1 -0
index bd22578859d0..f3a2044ee402 100644
@@ -10,6 +10,7 @@ config PARISC
 	select ARCH_WANT_FRAME_POINTERS
 	select ARCH_HAS_ELF_RANDOMIZE
 	select ARCH_HAS_STRICT_KERNEL_RWX
+	select ARCH_HAS_STRICT_MODULE_RWX
 	select ARCH_HAS_UBSAN_SANITIZE_ALL
 	select ARCH_HAS_PTE_SPECIAL
 	select ARCH_NO_SG_CHAIN
arch/parisc/include/asm/fb.h +1 -1
index d63a2acb91f2..55d29c4f716e 100644
@@ -12,7 +12,7 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
 	pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
 }
 
-#if defined(CONFIG_STI_CONSOLE) || defined(CONFIG_FB_STI)
+#if defined(CONFIG_FB_STI)
 int fb_is_primary_device(struct fb_info *info);
 #else
 static inline int fb_is_primary_device(struct fb_info *info)
arch/parisc/kernel/cache.c +4 -1
index 0fd04073d4b6..a20c1c47b780 100644
@@ -722,7 +722,10 @@ void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned lon
 		return;
 
 	if (parisc_requires_coherency()) {
-		flush_user_cache_page(vma, vmaddr);
+		if (vma->vm_flags & VM_SHARED)
+			flush_data_cache();
+		else
+			flush_user_cache_page(vma, vmaddr);
 		return;
 	}
 
arch/powerpc/kernel/crash_dump.c +5 -30
index 5693e1c67c2b..32b4a97f1b79 100644
@@ -16,7 +16,7 @@
 #include <asm/kdump.h>
 #include <asm/prom.h>
 #include <asm/firmware.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/rtas.h>
 #include <asm/inst.h>
 
@@ -68,33 +68,8 @@ void __init setup_kdump_trampoline(void)
 }
 #endif /* CONFIG_NONSTATIC_KERNEL */
 
-static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize,
-                               unsigned long offset, int userbuf)
-{
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, (vaddr + offset), csize))
-			return -EFAULT;
-	} else
-		memcpy(buf, (vaddr + offset), csize);
-
-	return csize;
-}
-
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *      space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *      otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 	phys_addr_t paddr;
@@ -107,10 +82,10 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 
 	if (memblock_is_region_memory(paddr, csize)) {
 		vaddr = __va(paddr);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 	} else {
 		vaddr = ioremap_cache(paddr, PAGE_SIZE);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 		iounmap(vaddr);
 	}
 
arch/powerpc/kernel/process.c +1 -1
index a75d20f23dac..9be279469a85 100644
@@ -1857,7 +1857,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
 		tm_reclaim_current(0);
 #endif
 
-	memset(regs->gpr, 0, sizeof(regs->gpr));
+	memset(&regs->gpr[1], 0, sizeof(regs->gpr) - sizeof(regs->gpr[0]));
 	regs->ctr = 0;
 	regs->link = 0;
 	regs->xer = 0;
arch/powerpc/kernel/rtas.c +10 -1
index 6bc89d9ccf63..276b4eb1435b 100644
@@ -1061,7 +1061,7 @@ static struct rtas_filter rtas_filters[] __ro_after_init = {
 	{ "get-time-of-day", -1, -1, -1, -1, -1 },
 	{ "ibm,get-vpd", -1, 0, -1, 1, 2 },
 	{ "ibm,lpar-perftools", -1, 2, 3, -1, -1 },
-	{ "ibm,platform-dump", -1, 4, 5, -1, -1 },
+	{ "ibm,platform-dump", -1, 4, 5, -1, -1 },		/* Special cased */
 	{ "ibm,read-slot-reset-state", -1, -1, -1, -1, -1 },
 	{ "ibm,scan-log-dump", -1, 0, 1, -1, -1 },
 	{ "ibm,set-dynamic-indicator", -1, 2, -1, -1, -1 },
@@ -1110,6 +1110,15 @@ static bool block_rtas_call(int token, int nargs,
 				size = 1;
 
 			end = base + size - 1;
+
+			/*
+			 * Special case for ibm,platform-dump - NULL buffer
+			 * address is used to indicate end of dump processing
+			 */
+			if (!strcmp(f->name, "ibm,platform-dump") &&
+			    base == 0)
+				return false;
+
 			if (!in_rmo_buf(base, end))
 				goto err;
 		}
arch/powerpc/platforms/microwatt/microwatt.h new file +7 -0
new file mode 100644
index 000000000000..335417e95e66
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _MICROWATT_H
+#define _MICROWATT_H
+
+void microwatt_rng_init(void);
+
+#endif /* _MICROWATT_H */
arch/powerpc/platforms/microwatt/rng.c +3 -7
index 7bc4d1cbfaf0..8ece87d005c8 100644
@@ -11,6 +11,7 @@
 #include <asm/archrandom.h>
 #include <asm/cputable.h>
 #include <asm/machdep.h>
+#include "microwatt.h"
 
 #define DARN_ERR 0xFFFFFFFFFFFFFFFFul
 
@@ -29,7 +30,7 @@ static int microwatt_get_random_darn(unsigned long *v)
 	return 1;
 }
 
-static __init int rng_init(void)
+void __init microwatt_rng_init(void)
 {
 	unsigned long val;
 	int i;
@@ -37,12 +38,7 @@ static __init int rng_init(void)
 	for (i = 0; i < 10; i++) {
 		if (microwatt_get_random_darn(&val)) {
 			ppc_md.get_random_seed = microwatt_get_random_darn;
-			return 0;
+			return;
 		}
 	}
-
-	pr_warn("Unable to use DARN for get_random_seed()\n");
-
-	return -EIO;
 }
-machine_subsys_initcall(, rng_init);
arch/powerpc/platforms/microwatt/setup.c +8 -0
index 0b02603bdb74..6b32539395a4 100644
@@ -16,6 +16,8 @@
 #include <asm/xics.h>
 #include <asm/udbg.h>
 
+#include "microwatt.h"
+
 static void __init microwatt_init_IRQ(void)
 {
 	xics_init();
@@ -32,10 +34,16 @@ static int __init microwatt_populate(void)
 }
 machine_arch_initcall(microwatt, microwatt_populate);
 
+static void __init microwatt_setup_arch(void)
+{
+	microwatt_rng_init();
+}
+
 define_machine(microwatt) {
 	.name			= "microwatt",
 	.probe			= microwatt_probe,
 	.init_IRQ		= microwatt_init_IRQ,
+	.setup_arch		= microwatt_setup_arch,
 	.progress		= udbg_progress,
 	.calibrate_decr		= generic_calibrate_decr,
 };
arch/powerpc/platforms/powernv/powernv.h +2 -0
index e297bf4abfcb..866efdc103fd 100644
@@ -42,4 +42,6 @@ ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count);
 u32 __init memcons_get_size(struct memcons *mc);
 struct memcons *__init memcons_init(struct device_node *node, const char *mc_prop_name);
 
+void pnv_rng_init(void);
+
 #endif /* _POWERNV_H */
arch/powerpc/platforms/powernv/rng.c +36 -16

90 lines not on this page · raw message

arch/powerpc/platforms/powernv/setup.c +2 -0
index 824c3ad7a0fa..dac545aa0308 100644
@@ -203,6 +203,8 @@ static void __init pnv_setup_arch(void)
 	pnv_check_guarded_cores();
 
 	/* XXX PMCS */
+
+	pnv_rng_init();
 }
 
 static void __init pnv_init(void)
arch/powerpc/platforms/pseries/pseries.h +2 -0
index af162aeeae86..3f9b51298aa3 100644
@@ -121,4 +121,6 @@ void pseries_lpar_read_hblkrm_characteristics(void);
 static inline void pseries_lpar_read_hblkrm_characteristics(void) { }
 #endif
 
+void pseries_rng_init(void);
+
 #endif /* _PSERIES_PSERIES_H */
arch/powerpc/platforms/pseries/rng.c +3 -8
index 6268545947b8..6ddfdeaace9e 100644
@@ -10,6 +10,7 @@
 #include <asm/archrandom.h>
 #include <asm/machdep.h>
 #include <asm/plpar_wrappers.h>
+#include "pseries.h"
 
 
 static int pseries_get_random_long(unsigned long *v)
@@ -24,19 +25,13 @@ static int pseries_get_random_long(unsigned long *v)
 	return 0;
 }
 
-static __init int rng_init(void)
+void __init pseries_rng_init(void)
 {
 	struct device_node *dn;
 
 	dn = of_find_compatible_node(NULL, NULL, "ibm,random");
 	if (!dn)
-		return -ENODEV;
-
-	pr_info("Registering arch random hook.\n");
-
+		return;
 	ppc_md.get_random_seed = pseries_get_random_long;
-
 	of_node_put(dn);
-	return 0;
 }
-machine_subsys_initcall(pseries, rng_init);
arch/powerpc/platforms/pseries/setup.c +2 -0
index 955ff8aa1644..f27735f623ba 100644
@@ -852,6 +852,8 @@ static void __init pSeries_setup_arch(void)
 
 	if (swiotlb_force == SWIOTLB_FORCE)
 		ppc_swiotlb_enable = 1;
+
+	pseries_rng_init();
 }
 
 static void pseries_panic(char *str)
arch/riscv/kernel/crash_dump.c +4 -22
index 86cc0ada5752..ea2158cee97b 100644
@@ -7,22 +7,10 @@
 
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -33,13 +21,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, vaddr + offset, csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 	return csize;
arch/s390/kernel/crash_dump.c +17 -6
index 69819b765250..28124d0fa1d5 100644
@@ -15,6 +15,7 @@
 #include <linux/slab.h>
 #include <linux/memblock.h>
 #include <linux/elf.h>
+#include <linux/uio.h>
 #include <asm/asm-offsets.h>
 #include <asm/os_info.h>
 #include <asm/elf.h>
@@ -212,20 +213,30 @@ static int copy_oldmem_user(void __user *dst, unsigned long src, size_t count)
 /*
  * Copy one page from "oldmem"
  */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	unsigned long src;
 	int rc;
 
+	if (!(iter_is_iovec(iter) || iov_iter_is_kvec(iter)))
+		return -EINVAL;
+	/* Multi-segment iterators are not supported */
+	if (iter->nr_segs > 1)
+		return -EINVAL;
 	if (!csize)
 		return 0;
 	src = pfn_to_phys(pfn) + offset;
-	if (userbuf)
-		rc = copy_oldmem_user((void __force __user *) buf, src, csize);
+
+	/* XXX: pass the iov_iter down to a common function */
+	if (iter_is_iovec(iter))
+		rc = copy_oldmem_user(iter->iov->iov_base, src, csize);
 	else
-		rc = copy_oldmem_kernel((void *) buf, src, csize);
-	return rc;
+		rc = copy_oldmem_kernel(iter->kvec->iov_base, src, csize);
+	if (rc < 0)
+		return rc;
+	iov_iter_advance(iter, csize);
+	return csize;
 }
 
 /*
arch/s390/kernel/perf_cpum_cf.c +21 -1
index 483ab5e10164..f7dd3c849e68 100644
@@ -516,6 +516,26 @@ static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
 	return err;
 }
 
+/* Events CPU_CYLCES and INSTRUCTIONS can be submitted with two different
+ * attribute::type values:
+ * - PERF_TYPE_HARDWARE:
+ * - pmu->type:
+ * Handle both type of invocations identical. They address the same hardware.
+ * The result is different when event modifiers exclude_kernel and/or
+ * exclude_user are also set.
+ */
+static int cpumf_pmu_event_type(struct perf_event *event)
+{
+	u64 ev = event->attr.config;
+
+	if (cpumf_generic_events_basic[PERF_COUNT_HW_CPU_CYCLES] == ev ||
+	    cpumf_generic_events_basic[PERF_COUNT_HW_INSTRUCTIONS] == ev ||
+	    cpumf_generic_events_user[PERF_COUNT_HW_CPU_CYCLES] == ev ||
+	    cpumf_generic_events_user[PERF_COUNT_HW_INSTRUCTIONS] == ev)
+		return PERF_TYPE_HARDWARE;
+	return PERF_TYPE_RAW;
+}
+
 static int cpumf_pmu_event_init(struct perf_event *event)
 {
 	unsigned int type = event->attr.type;
@@ -525,7 +545,7 @@ static int cpumf_pmu_event_init(struct perf_event *event)
 		err = __hw_perf_event_init(event, type);
 	else if (event->pmu->type == type)
 		/* Registered as unknown PMU */
-		err = __hw_perf_event_init(event, PERF_TYPE_RAW);
+		err = __hw_perf_event_init(event, cpumf_pmu_event_type(event));
 	else
 		return -ENOENT;
 
arch/sh/kernel/crash_dump.c +5 -24
index 5b41b59698c1..19ce6a950aac 100644
@@ -8,23 +8,11 @@
 #include <linux/errno.h>
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 #include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-                               size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  __iomem *vaddr;
 
@@ -32,15 +20,8 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-
-	if (userbuf) {
-		if (copy_to_user((void __user *)buf, (vaddr + offset), csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-	memcpy(buf, (vaddr + offset), csize);
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	iounmap(vaddr);
+
 	return csize;
 }
arch/x86/kernel/crash_dump_32.c +4 -25
index 5fcac46aaf6b..5f4ae5476e19 100644
@@ -10,8 +10,7 @@
 #include <linux/errno.h>
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
-
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 
 static inline bool is_crashed_pfn_valid(unsigned long pfn)
 {
@@ -29,21 +28,8 @@ static inline bool is_crashed_pfn_valid(unsigned long pfn)
 #endif
 }
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there might be no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	void  *vaddr;
 
@@ -54,14 +40,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 		return -EFAULT;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
arch/x86/kernel/crash_dump_64.c +11 -30

69 lines not on this page · raw message

arch/x86/kvm/svm/sev.c +45 -23

122 lines not on this page · raw message

arch/x86/kvm/svm/svm.c +2 -9
index 0c0a09b43b10..6bfb0b0e66bd 100644
@@ -1125,15 +1125,8 @@ static void init_vmcb(struct kvm_vcpu *vcpu)
 		svm->vmcb->control.int_ctl |= V_GIF_ENABLE_MASK;
 	}
 
-	if (sev_guest(vcpu->kvm)) {
-		svm->vmcb->control.nested_ctl |= SVM_NESTED_CTL_SEV_ENABLE;
-		clr_exception_intercept(svm, UD_VECTOR);
-
-		if (sev_es_guest(vcpu->kvm)) {
-			/* Perform SEV-ES specific VMCB updates */
-			sev_es_init_vmcb(svm);
-		}
-	}
+	if (sev_guest(vcpu->kvm))
+		sev_init_vmcb(svm);
 
 	svm_hv_init_vmcb(svm->vmcb);
 	init_vmcb_after_set_cpuid(vcpu);
arch/x86/kvm/svm/svm.h +1 -1
index 34babf9185fe..8ec8fb58b924 100644
@@ -616,10 +616,10 @@ void __init sev_set_cpu_caps(void);
 void __init sev_hardware_setup(void);
 void sev_hardware_unsetup(void);
 int sev_cpu_init(struct svm_cpu_data *sd);
+void sev_init_vmcb(struct vcpu_svm *svm);
 void sev_free_vcpu(struct kvm_vcpu *vcpu);
 int sev_handle_vmgexit(struct kvm_vcpu *vcpu);
 int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in);
-void sev_es_init_vmcb(struct vcpu_svm *svm);
 void sev_es_vcpu_reset(struct vcpu_svm *svm);
 void sev_vcpu_deliver_sipi_vector(struct kvm_vcpu *vcpu, u8 vector);
 void sev_es_prepare_switch_to_guest(struct vmcb_save_area *hostsa);
arch/x86/net/bpf_jit_comp.c +2 -1
index 16b6efacf7c6..4c71fa04e784 100644
@@ -1415,8 +1415,9 @@ st:			if (is_imm8(insn->off))
 		case BPF_JMP | BPF_CALL:
 			func = (u8 *) __bpf_call_base + imm32;
 			if (tail_call_reachable) {
+				/* mov rax, qword ptr [rbp - rounded_stack_depth - 8] */
 				EMIT3_off32(0x48, 0x8B, 0x85,
-					    -(bpf_prog->aux->stack_depth + 8));
+					    -round_up(bpf_prog->aux->stack_depth, 8) - 8);
 				if (!imm32 || emit_call(&prog, func, image + addrs[i - 1] + 7))
 					return -EINVAL;
 			} else {
arch/xtensa/kernel/time.c +1 -0
index e8ceb1528608..16b8a6273772 100644
@@ -154,6 +154,7 @@ static void __init calibrate_ccount(void)
 	cpu = of_find_compatible_node(NULL, NULL, "cdns,xtensa-cpu");
 	if (cpu) {
 		clk = of_clk_get(cpu, 0);
+		of_node_put(cpu);
 		if (!IS_ERR(clk)) {
 			ccount_freq = clk_get_rate(clk);
 			return;
arch/xtensa/platforms/xtfpga/setup.c +1 -0
index 538e6748e85a..c79c1d09ea86 100644
@@ -133,6 +133,7 @@ static int __init machine_setup(void)
 
 	if ((eth = of_find_compatible_node(eth, NULL, "opencores,ethoc")))
 		update_local_mac(eth);
+	of_node_put(eth);
 	return 0;
 }
 arch_initcall(machine_setup);
block/blk-core.c +0 -13
index 84f7b7884d07..a7329475aba2 100644
@@ -322,19 +322,6 @@ void blk_cleanup_queue(struct request_queue *q)
 		blk_mq_exit_queue(q);
 	}
 
-	/*
-	 * In theory, request pool of sched_tags belongs to request queue.
-	 * However, the current implementation requires tag_set for freeing
-	 * requests, so free the pool now.
-	 *
-	 * Queue has become frozen, there can't be any in-queue requests, so
-	 * it is safe to free requests now.
-	 */
-	mutex_lock(&q->sysfs_lock);
-	if (q->elevator)
-		blk_mq_sched_free_rqs(q);
-	mutex_unlock(&q->sysfs_lock);
-
 	/* @q is and will stay empty, shutdown and put */
 	blk_put_queue(q);
 }
block/blk-mq.c +8 -3
index 631fb87b4976..37caa73bff89 100644
@@ -2777,15 +2777,20 @@ static inline struct request *blk_mq_get_cached_request(struct request_queue *q,
 		return NULL;
 	}
 
-	rq_qos_throttle(q, *bio);
-
 	if (blk_mq_get_hctx_type((*bio)->bi_opf) != rq->mq_hctx->type)
 		return NULL;
 	if (op_is_flush(rq->cmd_flags) != op_is_flush((*bio)->bi_opf))
 		return NULL;
 
-	rq->cmd_flags = (*bio)->bi_opf;
+	/*
+	 * If any qos ->throttle() end up blocking, we will have flushed the
+	 * plug and hence killed the cached_rq list as well. Pop this entry
+	 * before we throttle.
+	 */
 	plug->cached_rq = rq_list_next(rq);
+	rq_qos_throttle(q, *bio);
+
+	rq->cmd_flags = (*bio)->bi_opf;
 	INIT_LIST_HEAD(&rq->queuelist);
 	return rq;
 }
block/genhd.c +11 -28
index 3008ec213654..13daac1a9aef 100644
@@ -652,6 +652,17 @@ void del_gendisk(struct gendisk *disk)
 
 	blk_sync_queue(q);
 	blk_flush_integrity();
+	blk_mq_cancel_work_sync(q);
+
+	blk_mq_quiesce_queue(q);
+	if (q->elevator) {
+		mutex_lock(&q->sysfs_lock);
+		elevator_exit(q);
+		mutex_unlock(&q->sysfs_lock);
+	}
+	rq_qos_exit(q);
+	blk_mq_unquiesce_queue(q);
+
 	/*
 	 * Allow using passthrough request again after the queue is torn down.
 	 */
@@ -1120,31 +1131,6 @@ static const struct attribute_group *disk_attr_groups[] = {
 	NULL
 };
 
-static void disk_release_mq(struct request_queue *q)
-{
-	blk_mq_cancel_work_sync(q);
-
-	/*
-	 * There can't be any non non-passthrough bios in flight here, but
-	 * requests stay around longer, including passthrough ones so we
-	 * still need to freeze the queue here.
-	 */
-	blk_mq_freeze_queue(q);
-
-	/*
-	 * Since the I/O scheduler exit code may access cgroup information,
-	 * perform I/O scheduler exit before disassociating from the block
-	 * cgroup controller.
-	 */
-	if (q->elevator) {
-		mutex_lock(&q->sysfs_lock);
-		elevator_exit(q);
-		mutex_unlock(&q->sysfs_lock);
-	}
-	rq_qos_exit(q);
-	__blk_mq_unfreeze_queue(q, true);
-}
-
 /**
  * disk_release - releases all allocated resources of the gendisk
  * @dev: the device representing this disk
@@ -1166,9 +1152,6 @@ static void disk_release(struct device *dev)
 	might_sleep();
 	WARN_ON_ONCE(disk_live(disk));
 
-	if (queue_is_mq(disk->queue))
-		disk_release_mq(disk->queue);
-
 	blkcg_exit_queue(disk->queue);
 
 	disk_release_events(disk);
drivers/base/memory.c +1 -1
index 084d67fd55cc..bc60c9cd3230 100644
@@ -558,7 +558,7 @@ static ssize_t hard_offline_page_store(struct device *dev,
 	if (kstrtoull(buf, 0, &pfn) < 0)
 		return -EINVAL;
 	pfn >>= PAGE_SHIFT;
-	ret = memory_failure(pfn, 0);
+	ret = memory_failure(pfn, MF_SW_SIMULATED);
 	if (ret == -EOPNOTSUPP)
 		ret = 0;
 	return ret ? ret : count;
drivers/base/regmap/regmap-irq.c +5 -3
index 400c7412a7dc..a6db605707b0 100644
@@ -252,6 +252,7 @@ static void regmap_irq_enable(struct irq_data *data)
 	struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
 	struct regmap *map = d->map;
 	const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
+	unsigned int reg = irq_data->reg_offset / map->reg_stride;
 	unsigned int mask, type;
 
 	type = irq_data->type.type_falling_val | irq_data->type.type_rising_val;
@@ -268,14 +269,14 @@ static void regmap_irq_enable(struct irq_data *data)
 	 * at the corresponding offset in regmap_irq_set_type().
 	 */
 	if (d->chip->type_in_mask && type)
-		mask = d->type_buf[irq_data->reg_offset / map->reg_stride];
+		mask = d->type_buf[reg] & irq_data->mask;
 	else
 		mask = irq_data->mask;
 
 	if (d->chip->clear_on_unmask)
 		d->clear_status = true;
 
-	d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~mask;
+	d->mask_buf[reg] &= ~mask;
 }
 
 static void regmap_irq_disable(struct irq_data *data)
@@ -386,6 +387,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
 		subreg = &chip->sub_reg_offsets[b];
 		for (i = 0; i < subreg->num_regs; i++) {
 			unsigned int offset = subreg->offset[i];
+			unsigned int index = offset / map->reg_stride;
 
 			if (chip->not_fixed_stride)
 				ret = regmap_read(map,
@@ -394,7 +396,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
 			else
 				ret = regmap_read(map,
 						chip->status_base + offset,
-						&data->status_buf[offset]);
+						&data->status_buf[index]);
 
 			if (ret)
 				break;
drivers/block/xen-blkfront.c +12 -7
index 003056d4f7f5..966a6bf4c162 100644
@@ -2137,9 +2137,11 @@ static void blkfront_closing(struct blkfront_info *info)
 		return;
 
 	/* No more blkif_request(). */
-	blk_mq_stop_hw_queues(info->rq);
-	blk_mark_disk_dead(info->gd);
-	set_capacity(info->gd, 0);
+	if (info->rq && info->gd) {
+		blk_mq_stop_hw_queues(info->rq);
+		blk_mark_disk_dead(info->gd);
+		set_capacity(info->gd, 0);
+	}
 
 	for_each_rinfo(info, rinfo, i) {
 		/* No more gnttab callback work. */
@@ -2480,16 +2482,19 @@ static int blkfront_remove(struct xenbus_device *xbdev)
 
 	dev_dbg(&xbdev->dev, "%s removed", xbdev->nodename);
 
-	del_gendisk(info->gd);
+	if (info->gd)
+		del_gendisk(info->gd);
 
 	mutex_lock(&blkfront_mutex);
 	list_del(&info->info_list);
 	mutex_unlock(&blkfront_mutex);
 
 	blkif_free(info, 0);
-	xlbd_release_minors(info->gd->first_minor, info->gd->minors);
-	blk_cleanup_disk(info->gd);
-	blk_mq_free_tag_set(&info->tag_set);
+	if (info->gd) {
+		xlbd_release_minors(info->gd->first_minor, info->gd->minors);
+		blk_cleanup_disk(info->gd);
+		blk_mq_free_tag_set(&info->tag_set);
+	}
 
 	kfree(info);
 	return 0;
drivers/char/random.c +3 -3
index 1f3072ee6b7c..dd52e948a9a4 100644
@@ -87,7 +87,7 @@ static RAW_NOTIFIER_HEAD(random_ready_chain);
 
 /* Control how we warn userspace. */
 static struct ratelimit_state urandom_warning =
-	RATELIMIT_STATE_INIT("warn_urandom_randomness", HZ, 3);
+	RATELIMIT_STATE_INIT_FLAGS("urandom_warning", HZ, 3, RATELIMIT_MSG_ON_RELEASE);
 static int ratelimit_disable __read_mostly =
 	IS_ENABLED(CONFIG_WARN_ALL_UNSEEDED_RANDOM);
 module_param_named(ratelimit_disable, ratelimit_disable, int, 0644);
@@ -451,7 +451,7 @@ static ssize_t get_random_bytes_user(struct iov_iter *iter)
 
 	/*
 	 * Immediately overwrite the ChaCha key at index 4 with random
-	 * bytes, in case userspace causes copy_to_user() below to sleep
+	 * bytes, in case userspace causes copy_to_iter() below to sleep
 	 * forever, so that we still retain forward secrecy in that case.
 	 */
 	crng_make_state(chacha_state, (u8 *)&chacha_state[4], CHACHA_KEY_SIZE);
@@ -1038,7 +1038,7 @@ void add_interrupt_randomness(int irq)
 	if (new_count & MIX_INFLIGHT)
 		return;
 
-	if (new_count < 64 && !time_is_before_jiffies(fast_pool->last + HZ))
+	if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
 		return;
 
 	if (unlikely(!fast_pool->mix.func))
drivers/dma-buf/udmabuf.c +4 -1
index e7330684d3b8..9631f2fd2faf 100644
@@ -32,8 +32,11 @@ static vm_fault_t udmabuf_vm_fault(struct vm_fault *vmf)
 {
 	struct vm_area_struct *vma = vmf->vma;
 	struct udmabuf *ubuf = vma->vm_private_data;
+	pgoff_t pgoff = vmf->pgoff;
 
-	vmf->page = ubuf->pages[vmf->pgoff];
+	if (pgoff >= ubuf->pagecount)
+		return VM_FAULT_SIGBUS;
+	vmf->page = ubuf->pages[pgoff];
 	get_page(vmf->page);
 	return 0;
 }
drivers/gpio/gpio-vr41xx.c +0 -2
index 98cd715ccc33..8d09b619c166 100644
@@ -217,8 +217,6 @@ static int giu_get_irq(unsigned int irq)
 	printk(KERN_ERR "spurious GIU interrupt: %04x(%04x),%04x(%04x)\n",
 	       maskl, pendl, maskh, pendh);
 
-	atomic_inc(&irq_err_count);
-
 	return -EINVAL;
 }
 
drivers/gpio/gpio-winbond.c +4 -3
index 7f8f5b02e31d..4b61d975cc0e 100644
@@ -385,12 +385,13 @@ static int winbond_gpio_get(struct gpio_chip *gc, unsigned int offset)
 	unsigned long *base = gpiochip_get_data(gc);
 	const struct winbond_gpio_info *info;
 	bool val;
+	int ret;
 
 	winbond_gpio_get_info(&offset, &info);
 
-	val = winbond_sio_enter(*base);
-	if (val)
-		return val;
+	ret = winbond_sio_enter(*base);
+	if (ret)
+		return ret;
 
 	winbond_sio_select_logical(*base, info->dev);
 
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +1 -1
index 95b5b5bfa1ff..71b15e2df235 100644
@@ -944,7 +944,7 @@ static void override_lane_settings(const struct link_training_settings *lt_setti
 
 		return;
 
-	for (lane = 1; lane < LANE_COUNT_DP_MAX; lane++) {
+	for (lane = 0; lane < LANE_COUNT_DP_MAX; lane++) {
 		if (lt_settings->voltage_swing)
 			lane_settings[lane].VOLTAGE_SWING = *lt_settings->voltage_swing;
 		if (lt_settings->pre_emphasis)
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +2 -22
index 248602c15f3a..6007b847b54f 100644
@@ -1771,29 +1771,9 @@ void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)
 				break;
 			}
 		}
-
-		/*
-		 * TO-DO: So far the code logic below only addresses single eDP case.
-		 * For dual eDP case, there are a few things that need to be
-		 * implemented first:
-		 *
-		 * 1. Change the fastboot logic above, so eDP link[0 or 1]'s
-		 * stream[0 or 1] will all be checked.
-		 *
-		 * 2. Change keep_edp_vdd_on to an array, and maintain keep_edp_vdd_on
-		 * for each eDP.
-		 *
-		 * Once above 2 things are completed, we can then change the logic below
-		 * correspondingly, so dual eDP case will be fully covered.
-		 */
-
-		// We are trying to enable eDP, don't power down VDD if eDP stream is existing
-		if ((edp_stream_num == 1 && edp_streams[0] != NULL) || can_apply_edp_fast_boot) {
+		// We are trying to enable eDP, don't power down VDD
+		if (can_apply_edp_fast_boot)
 			keep_edp_vdd_on = true;
-			DC_LOG_EVENT_LINK_TRAINING("Keep eDP Vdd on\n");
-		} else {
-			DC_LOG_EVENT_LINK_TRAINING("No eDP stream enabled, turn eDP Vdd off\n");
-		}
 	}
 
 	// Check seamless boot support
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dpp.c +3 -0
index 970b65efeac1..eaa7032f0f1a 100644
@@ -212,6 +212,9 @@ static void dpp2_cnv_setup (
 		break;
 	}
 
+	/* Set default color space based on format if none is given. */
+	color_space = input_color_space ? input_color_space : color_space;
+
 	if (is_2bit == 1 && alpha_2bit_lut != NULL) {
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT0, alpha_2bit_lut->lut0);
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT1, alpha_2bit_lut->lut1);
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_dpp.c +3 -0
index 8b6505b7dca8..f50ab961bc17 100644
@@ -153,6 +153,9 @@ static void dpp201_cnv_setup(
 		break;
 	}
 
+	/* Set default color space based on format if none is given. */
+	color_space = input_color_space ? input_color_space : color_space;
+
 	if (is_2bit == 1 && alpha_2bit_lut != NULL) {
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT0, alpha_2bit_lut->lut0);
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT1, alpha_2bit_lut->lut1);
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c +3 -0
index ab3918c0a15b..0dcc07531643 100644
@@ -294,6 +294,9 @@ static void dpp3_cnv_setup (
 		break;
 	}
 
+	/* Set default color space based on format if none is given. */
+	color_space = input_color_space ? input_color_space : color_space;
+
 	if (is_2bit == 1 && alpha_2bit_lut != NULL) {
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT0, alpha_2bit_lut->lut0);
 		REG_UPDATE(ALPHA_2BIT_LUT, ALPHA_2BIT_LUT1, alpha_2bit_lut->lut1);
drivers/gpu/drm/i915/display/intel_dpll_mgr.c +2 -2
index 569903d47aea..a76f037001ae 100644
@@ -2437,7 +2437,7 @@ static void icl_wrpll_params_populate(struct skl_wrpll_params *params,
 }
 
 /*
- * Display WA #22010492432: ehl, tgl, adl-p
+ * Display WA #22010492432: ehl, tgl, adl-s, adl-p
  * Program half of the nominal DCO divider fraction value.
  */
 static bool
@@ -2445,7 +2445,7 @@ ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915)
 {
 	return ((IS_PLATFORM(i915, INTEL_ELKHARTLAKE) &&
 		 IS_JSL_EHL_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) ||
-		 IS_TIGERLAKE(i915) || IS_ALDERLAKE_P(i915)) &&
+		 IS_TIGERLAKE(i915) || IS_ALDERLAKE_S(i915) || IS_ALDERLAKE_P(i915)) &&
 		 i915->dpll.ref_clks.nssc == 38400;
 }
 
drivers/gpu/drm/msm/adreno/adreno_gpu.c +2 -1
index 1219f71629a5..1ced7b108f2c 100644
@@ -1002,7 +1002,8 @@ void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu)
 	for (i = 0; i < ARRAY_SIZE(adreno_gpu->info->fw); i++)
 		release_firmware(adreno_gpu->fw[i]);
 
-	pm_runtime_disable(&priv->gpu_pdev->dev);
+	if (pm_runtime_enabled(&priv->gpu_pdev->dev))
+		pm_runtime_disable(&priv->gpu_pdev->dev);
 
 	msm_gpu_cleanup(&adreno_gpu->base);
 }
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +2 -0
index 3cf476c55158..d92193db7eb2 100644
@@ -217,6 +217,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
 		encoder = mdp4_lcdc_encoder_init(dev, panel_node);
 		if (IS_ERR(encoder)) {
 			DRM_DEV_ERROR(dev->dev, "failed to construct LCDC encoder\n");
+			of_node_put(panel_node);
 			return PTR_ERR(encoder);
 		}
 
@@ -226,6 +227,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
 		connector = mdp4_lvds_connector_init(dev, panel_node, encoder);
 		if (IS_ERR(connector)) {
 			DRM_DEV_ERROR(dev->dev, "failed to initialize LVDS connector\n");
+			of_node_put(panel_node);
 			return PTR_ERR(connector);
 		}
 
drivers/gpu/drm/msm/dp/dp_ctrl.c +25 -8
index de1974916ad2..499d0bbc442c 100644
@@ -1523,6 +1523,8 @@ static int dp_ctrl_link_maintenance(struct dp_ctrl_private *ctrl)
 	return ret;
 }
 
+static int dp_ctrl_on_stream_phy_test_report(struct dp_ctrl *dp_ctrl);
+
 static int dp_ctrl_process_phy_test_request(struct dp_ctrl_private *ctrl)
 {
 	int ret = 0;
@@ -1545,7 +1547,7 @@ static int dp_ctrl_process_phy_test_request(struct dp_ctrl_private *ctrl)
 
 	ret = dp_ctrl_on_link(&ctrl->dp_ctrl);
 	if (!ret)
-		ret = dp_ctrl_on_stream(&ctrl->dp_ctrl);
+		ret = dp_ctrl_on_stream_phy_test_report(&ctrl->dp_ctrl);
 	else
 		DRM_ERROR("failed to enable DP link controller\n");
 
@@ -1800,7 +1802,27 @@ static int dp_ctrl_link_retrain(struct dp_ctrl_private *ctrl)
 	return dp_ctrl_setup_main_link(ctrl, &training_step);
 }
 
-int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl)
+static int dp_ctrl_on_stream_phy_test_report(struct dp_ctrl *dp_ctrl)
+{
+	int ret;
+	struct dp_ctrl_private *ctrl;
+
+	ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
+
+	ctrl->dp_ctrl.pixel_rate = ctrl->panel->dp_mode.drm_mode.clock;
+
+	ret = dp_ctrl_enable_stream_clocks(ctrl);
+	if (ret) {
+		DRM_ERROR("Failed to start pixel clocks. ret=%d\n", ret);
+		return ret;
+	}
+
+	dp_ctrl_send_phy_test_pattern(ctrl);
+
+	return 0;
+}
+
+int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl, bool force_link_train)
 {
 	int ret = 0;
 	bool mainlink_ready = false;
@@ -1831,12 +1853,7 @@ int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl)
 		goto end;
 	}
 
-	if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) {
-		dp_ctrl_send_phy_test_pattern(ctrl);
-		return 0;
-	}
-
-	if (!dp_ctrl_channel_eq_ok(ctrl))
+	if (force_link_train || !dp_ctrl_channel_eq_ok(ctrl))
 		dp_ctrl_link_retrain(ctrl);
 
 	/* stop txing train pattern to end link training */
drivers/gpu/drm/msm/dp/dp_ctrl.h +1 -1
index 2433edbc70a6..dcc7af21a5f0 100644
@@ -20,7 +20,7 @@ struct dp_ctrl {
 };
 
 int dp_ctrl_on_link(struct dp_ctrl *dp_ctrl);
-int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl);
+int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl, bool force_link_train);
 int dp_ctrl_off_link_stream(struct dp_ctrl *dp_ctrl);
 int dp_ctrl_off(struct dp_ctrl *dp_ctrl);
 void dp_ctrl_push_idle(struct dp_ctrl *dp_ctrl);
drivers/gpu/drm/msm/dp/dp_display.c +8 -8
index 8deb92bddfde..12270bd3cff9 100644
@@ -308,7 +308,8 @@ static void dp_display_unbind(struct device *dev, struct device *master,
 	struct msm_drm_private *priv = dev_get_drvdata(master);
 
 	/* disable all HPD interrupts */
-	dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_INT_MASK, false);
+	if (dp->core_initialized)
+		dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_INT_MASK, false);
 
 	kthread_stop(dp->ev_tsk);
 
@@ -902,7 +903,7 @@ static int dp_display_enable(struct dp_display_private *dp, u32 data)
 		return 0;
 	}
 
-	rc = dp_ctrl_on_stream(dp->ctrl);
+	rc = dp_ctrl_on_stream(dp->ctrl, data);
 	if (!rc)
 		dp_display->power_on = true;
 
@@ -1589,6 +1590,7 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder)
 	int rc = 0;
 	struct dp_display_private *dp_display;
 	u32 state;
+	bool force_link_train = false;
 
 	dp_display = container_of(dp, struct dp_display_private, dp_display);
 	if (!dp_display->dp_mode.drm_mode.clock) {
@@ -1617,10 +1619,12 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder)
 
 	state =  dp_display->hpd_state;
 
-	if (state == ST_DISPLAY_OFF)
+	if (state == ST_DISPLAY_OFF) {
 		dp_display_host_phy_init(dp_display);
+		force_link_train = true;
+	}
 
-	dp_display_enable(dp_display, 0);
+	dp_display_enable(dp_display, force_link_train);
 
 	rc = dp_display_post_enable(dp);
 	if (rc) {
@@ -1629,10 +1633,6 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder)
 		dp_display_unprepare(dp);
 	}
 
-	/* manual kick off plug event to train link */
-	if (state == ST_DISPLAY_OFF)
-		dp_add_event(dp_display, EV_IRQ_HPD_INT, 0, 0);
-
 	/* completed connection */
 	dp_display->hpd_state = ST_CONNECTED;
 
drivers/gpu/drm/msm/msm_drv.c +1 -1
index f2c46116df55..b5f6acfe7c6e 100644
@@ -967,7 +967,7 @@ static const struct drm_driver msm_driver = {
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
-	.gem_prime_mmap     = drm_gem_prime_mmap,
+	.gem_prime_mmap     = msm_gem_prime_mmap,
 #ifdef CONFIG_DEBUG_FS
 	.debugfs_init       = msm_debugfs_init,
 #endif
drivers/gpu/drm/msm/msm_drv.h +1 -0
index d661debb50f1..9b985b641319 100644
@@ -288,6 +288,7 @@ unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_t
 void msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
+int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
 struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
 int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map);
 void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map);
drivers/gpu/drm/msm/msm_gem_prime.c +15 -0
index 94ab705e9b8a..dcc8a573bc76 100644
@@ -11,6 +11,21 @@
 #include "msm_drv.h"
 #include "msm_gem.h"
 
+int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+{
+	int ret;
+
+	/* Ensure the mmap offset is initialized.  We lazily initialize it,
+	 * so if it has not been first mmap'd directly as a GEM object, the
+	 * mmap offset will not be already initialized.
+	 */
+	ret = drm_gem_create_mmap_offset(obj);
+	if (ret)
+		return ret;
+
+	return drm_gem_prime_mmap(obj, vma);
+}
+
 struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
 {
 	struct msm_gem_object *msm_obj = to_msm_bo(obj);
drivers/gpu/drm/msm/msm_gpu.c +2 -1
index 58eb3e1662cb..7d27d7cee688 100644
@@ -664,7 +664,6 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
 	msm_submit_retire(submit);
 
 	pm_runtime_mark_last_busy(&gpu->pdev->dev);
-	pm_runtime_put_autosuspend(&gpu->pdev->dev);
 
 	spin_lock_irqsave(&ring->submit_lock, flags);
 	list_del(&submit->node);
@@ -678,6 +677,8 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
 		msm_devfreq_idle(gpu);
 	mutex_unlock(&gpu->active_lock);
 
+	pm_runtime_put_autosuspend(&gpu->pdev->dev);
+
 	msm_gem_submit_put(submit);
 }
 
drivers/gpu/drm/msm/msm_iommu.c +1 -1
index bcaddbba564d..a54ed354578b 100644
@@ -58,7 +58,7 @@ static int msm_iommu_pagetable_map(struct msm_mmu *mmu, u64 iova,
 	u64 addr = iova;
 	unsigned int i;
 
-	for_each_sg(sgt->sgl, sg, sgt->nents, i) {
+	for_each_sgtable_sg(sgt, sg, i) {
 		size_t size = sg->length;
 		phys_addr_t phys = sg_phys(sg);
 
drivers/gpu/drm/sun4i/sun4i_drv.c +3 -1
index 6a9ba8a77c77..4b29de65a563 100644
@@ -73,7 +73,6 @@ static int sun4i_drv_bind(struct device *dev)
 		goto free_drm;
 	}
 
-	dev_set_drvdata(dev, drm);
 	drm->dev_private = drv;
 	INIT_LIST_HEAD(&drv->frontend_list);
 	INIT_LIST_HEAD(&drv->engine_list);
@@ -114,6 +113,8 @@ static int sun4i_drv_bind(struct device *dev)
 
 	drm_fbdev_generic_setup(drm, 32);
 
+	dev_set_drvdata(dev, drm);
+
 	return 0;
 
 finish_poll:
@@ -130,6 +131,7 @@ static void sun4i_drv_unbind(struct device *dev)
 {
 	struct drm_device *drm = dev_get_drvdata(dev);
 
+	dev_set_drvdata(dev, NULL);
 	drm_dev_unregister(drm);
 	drm_kms_helper_poll_fini(drm);
 	drm_atomic_helper_shutdown(drm);
drivers/iio/accel/bma180.c +2 -1
index 4f73bc827eec..9c9e98578667 100644
@@ -1006,11 +1006,12 @@ static int bma180_probe(struct i2c_client *client,
 
 		data->trig->ops = &bma180_trigger_ops;
 		iio_trigger_set_drvdata(data->trig, indio_dev);
-		indio_dev->trig = iio_trigger_get(data->trig);
 
 		ret = iio_trigger_register(data->trig);
 		if (ret)
 			goto err_trigger_free;
+
+		indio_dev->trig = iio_trigger_get(data->trig);
 	}
 
 	ret = iio_triggered_buffer_setup(indio_dev, NULL,
drivers/iio/accel/kxcjk-1013.c +2 -2
index ac74cdcd2bc8..748b35c2f0c3 100644
@@ -1554,12 +1554,12 @@ static int kxcjk1013_probe(struct i2c_client *client,
 
 		data->dready_trig->ops = &kxcjk1013_trigger_ops;
 		iio_trigger_set_drvdata(data->dready_trig, indio_dev);
-		indio_dev->trig = data->dready_trig;
-		iio_trigger_get(indio_dev->trig);
 		ret = iio_trigger_register(data->dready_trig);
 		if (ret)
 			goto err_poweroff;
 
+		indio_dev->trig = iio_trigger_get(data->dready_trig);
+
 		data->motion_trig->ops = &kxcjk1013_trigger_ops;
 		iio_trigger_set_drvdata(data->motion_trig, indio_dev);
 		ret = iio_trigger_register(data->motion_trig);
drivers/iio/accel/mma8452.c +14 -8
index 9c02c681c84c..f4f835274d75 100644
@@ -1510,10 +1510,14 @@ static int mma8452_reset(struct i2c_client *client)
 	int i;
 	int ret;
 
-	ret = i2c_smbus_write_byte_data(client,	MMA8452_CTRL_REG2,
+	/*
+	 * Find on fxls8471, after config reset bit, it reset immediately,
+	 * and will not give ACK, so here do not check the return value.
+	 * The following code will read the reset register, and check whether
+	 * this reset works.
+	 */
+	i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG2,
 					MMA8452_CTRL_REG2_RST);
-	if (ret < 0)
-		return ret;
 
 	for (i = 0; i < 10; i++) {
 		usleep_range(100, 200);
@@ -1556,11 +1560,13 @@ static int mma8452_probe(struct i2c_client *client,
 	mutex_init(&data->lock);
 
 	data->chip_info = device_get_match_data(&client->dev);
-	if (!data->chip_info && id) {
-		data->chip_info = &mma_chip_info_table[id->driver_data];
-	} else {
-		dev_err(&client->dev, "unknown device model\n");
-		return -ENODEV;
+	if (!data->chip_info) {
+		if (id) {
+			data->chip_info = &mma_chip_info_table[id->driver_data];
+		} else {
+			dev_err(&client->dev, "unknown device model\n");
+			return -ENODEV;
+		}
 	}
 
 	ret = iio_read_mount_matrix(&client->dev, &data->orientation);
drivers/iio/accel/mxc4005.c +2 -2
index b3afbf064915..df600d2917c0 100644
@@ -456,8 +456,6 @@ static int mxc4005_probe(struct i2c_client *client,
 
 		data->dready_trig->ops = &mxc4005_trigger_ops;
 		iio_trigger_set_drvdata(data->dready_trig, indio_dev);
-		indio_dev->trig = data->dready_trig;
-		iio_trigger_get(indio_dev->trig);
 		ret = devm_iio_trigger_register(&client->dev,
 						data->dready_trig);
 		if (ret) {
@@ -465,6 +463,8 @@ static int mxc4005_probe(struct i2c_client *client,
 				"failed to register trigger\n");
 			return ret;
 		}
+
+		indio_dev->trig = iio_trigger_get(data->dready_trig);
 	}
 
 	return devm_iio_device_register(&client->dev, indio_dev);
drivers/iio/adc/adi-axi-adc.c +3 -0
index a73e3c2d212f..a9e655e69eaa 100644
@@ -322,16 +322,19 @@ static struct adi_axi_adc_client *adi_axi_adc_attach_client(struct device *dev)
 
 		if (!try_module_get(cl->dev->driver->owner)) {
 			mutex_unlock(&registered_clients_lock);
+			of_node_put(cln);
 			return ERR_PTR(-ENODEV);
 		}
 
 		get_device(cl->dev);
 		cl->info = info;
 		mutex_unlock(&registered_clients_lock);
+		of_node_put(cln);
 		return cl;
 	}
 
 	mutex_unlock(&registered_clients_lock);
+	of_node_put(cln);
 
 	return ERR_PTR(-EPROBE_DEFER);
 }
drivers/iio/adc/aspeed_adc.c +1 -0
index 0793d2474cdc..9341e0e0eb55 100644
@@ -186,6 +186,7 @@ static int aspeed_adc_set_trim_data(struct iio_dev *indio_dev)
 		return -EOPNOTSUPP;
 	}
 	scu = syscon_node_to_regmap(syscon);
+	of_node_put(syscon);
 	if (IS_ERR(scu)) {
 		dev_warn(data->dev, "Failed to get syscon regmap\n");
 		return -EOPNOTSUPP;
drivers/iio/adc/axp288_adc.c +8 -0
index a4b8be5b8f88..580361bd9849 100644
@@ -196,6 +196,14 @@ static const struct dmi_system_id axp288_adc_ts_bias_override[] = {
 		},
 		.driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA,
 	},
+	{
+		/* Nuvision Solo 10 Draw */
+		.matches = {
+		  DMI_MATCH(DMI_SYS_VENDOR, "TMAX"),
+		  DMI_MATCH(DMI_PRODUCT_NAME, "TM101W610L"),
+		},
+		.driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA,
+	},
 	{}
 };
 
drivers/iio/adc/rzg2l_adc.c +6 -2
index 7585144b9715..5b09a93fdf34 100644
@@ -334,11 +334,15 @@ static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l
 	i = 0;
 	device_for_each_child_node(&pdev->dev, fwnode) {
 		ret = fwnode_property_read_u32(fwnode, "reg", &channel);
-		if (ret)
+		if (ret) {
+			fwnode_handle_put(fwnode);
 			return ret;
+		}
 
-		if (channel >= RZG2L_ADC_MAX_CHANNELS)
+		if (channel >= RZG2L_ADC_MAX_CHANNELS) {
+			fwnode_handle_put(fwnode);
 			return -EINVAL;
+		}
 
 		chan_array[i].type = IIO_VOLTAGE;
 		chan_array[i].indexed = 1;
drivers/iio/adc/stm32-adc-core.c +7 -2
index 142656232157..3efb8c404ccc 100644
@@ -64,6 +64,7 @@ struct stm32_adc_priv;
  * @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet)
  * @has_syscfg: SYSCFG capability flags
  * @num_irqs:	number of interrupt lines
+ * @num_adcs:   maximum number of ADC instances in the common registers
  */
 struct stm32_adc_priv_cfg {
 	const struct stm32_adc_common_regs *regs;
@@ -71,6 +72,7 @@ struct stm32_adc_priv_cfg {
 	u32 max_clk_rate_hz;
 	unsigned int has_syscfg;
 	unsigned int num_irqs;
+	unsigned int num_adcs;
 };
 
 /**
@@ -352,7 +354,7 @@ static void stm32_adc_irq_handler(struct irq_desc *desc)
 	 * before invoking the interrupt handler (e.g. call ISR only for
 	 * IRQ-enabled ADCs).
 	 */
-	for (i = 0; i < priv->cfg->num_irqs; i++) {
+	for (i = 0; i < priv->cfg->num_adcs; i++) {
 		if ((status & priv->cfg->regs->eoc_msk[i] &&
 		     stm32_adc_eoc_enabled(priv, i)) ||
 		     (status & priv->cfg->regs->ovr_msk[i]))
@@ -792,6 +794,7 @@ static const struct stm32_adc_priv_cfg stm32f4_adc_priv_cfg = {
 	.clk_sel = stm32f4_adc_clk_sel,
 	.max_clk_rate_hz = 36000000,
 	.num_irqs = 1,
+	.num_adcs = 3,
 };
 
 static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
@@ -800,14 +803,16 @@ static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
 	.max_clk_rate_hz = 36000000,
 	.has_syscfg = HAS_VBOOSTER,
 	.num_irqs = 1,
+	.num_adcs = 2,
 };
 
 static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
 	.regs = &stm32h7_adc_common_regs,
 	.clk_sel = stm32h7_adc_clk_sel,
-	.max_clk_rate_hz = 40000000,
+	.max_clk_rate_hz = 36000000,
 	.has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD,
 	.num_irqs = 2,
+	.num_adcs = 2,
 };
 
 static const struct of_device_id stm32_adc_of_match[] = {
drivers/iio/adc/stm32-adc.c +17 -20
index a68ecbda6480..11ef873d6453 100644
@@ -1365,7 +1365,7 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,
 		else
 			ret = -EINVAL;
 
-		if (mask == IIO_CHAN_INFO_PROCESSED && adc->vrefint.vrefint_cal)
+		if (mask == IIO_CHAN_INFO_PROCESSED)
 			*val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;
 
 		iio_device_release_direct_mode(indio_dev);
@@ -1407,7 +1407,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
 	struct stm32_adc *adc = iio_priv(indio_dev);
 	const struct stm32_adc_regspec *regs = adc->cfg->regs;
 	u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
-	u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg);
 
 	/* Check ovr status right now, as ovr mask should be already disabled */
 	if (status & regs->isr_ovr.mask) {
@@ -1422,11 +1421,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
 		return IRQ_HANDLED;
 	}
 
-	if (!(status & mask))
-		dev_err_ratelimited(&indio_dev->dev,
-				    "Unexpected IRQ: IER=0x%08x, ISR=0x%08x\n",
-				    mask, status);
-
 	return IRQ_NONE;
 }
 
@@ -1436,10 +1430,6 @@ static irqreturn_t stm32_adc_isr(int irq, void *data)
 	struct stm32_adc *adc = iio_priv(indio_dev);
 	const struct stm32_adc_regspec *regs = adc->cfg->regs;
 	u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
-	u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg);
-
-	if (!(status & mask))
-		return IRQ_WAKE_THREAD;
 
 	if (status & regs->isr_ovr.mask) {
 		/*
@@ -1979,10 +1969,10 @@ static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_n
 
 	for (i = 0; i < STM32_ADC_INT_CH_NB; i++) {
 		if (!strncmp(stm32_adc_ic[i].name, ch_name, STM32_ADC_CH_SZ)) {
-			adc->int_ch[i] = chan;
-
-			if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT)
-				continue;
+			if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT) {
+				adc->int_ch[i] = chan;
+				break;
+			}
 
 			/* Get calibration data for vrefint channel */
 			ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint);
@@ -1990,10 +1980,15 @@ static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_n
 				return dev_err_probe(indio_dev->dev.parent, ret,
 						     "nvmem access error\n");
 			}
-			if (ret == -ENOENT)
-				dev_dbg(&indio_dev->dev, "vrefint calibration not found\n");
-			else
-				adc->vrefint.vrefint_cal = vrefint;
+			if (ret == -ENOENT) {
+				dev_dbg(&indio_dev->dev, "vrefint calibration not found. Skip vrefint channel\n");
+				return ret;
+			} else if (!vrefint) {
+				dev_dbg(&indio_dev->dev, "Null vrefint calibration value. Skip vrefint channel\n");
+				return -ENOENT;
+			}
+			adc->int_ch[i] = chan;
+			adc->vrefint.vrefint_cal = vrefint;
 		}
 	}
 
@@ -2030,7 +2025,9 @@ static int stm32_adc_generic_chan_init(struct iio_dev *indio_dev,
 			}
 			strncpy(adc->chan_name[val], name, STM32_ADC_CH_SZ);
 			ret = stm32_adc_populate_int_ch(indio_dev, name, val);
-			if (ret)
+			if (ret == -ENOENT)
+				continue;
+			else if (ret)
 				goto err;
 		} else if (ret != -EINVAL) {
 			dev_err(&indio_dev->dev, "Invalid label %d\n", ret);
drivers/iio/adc/ti-ads131e08.c +7 -3
index 0c2025a22575..80a09817c119 100644
@@ -739,7 +739,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev)
 	device_for_each_child_node(dev, node) {
 		ret = fwnode_property_read_u32(node, "reg", &channel);
 		if (ret)
-			return ret;
+			goto err_child_out;
 
 		ret = fwnode_property_read_u32(node, "ti,gain", &tmp);
 		if (ret) {
@@ -747,7 +747,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev)
 		} else {
 			ret = ads131e08_pga_gain_to_field_value(st, tmp);
 			if (ret < 0)
-				return ret;
+				goto err_child_out;
 
 			channel_config[i].pga_gain = tmp;
 		}
@@ -758,7 +758,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev)
 		} else {
 			ret = ads131e08_validate_channel_mux(st, tmp);
 			if (ret)
-				return ret;
+				goto err_child_out;
 
 			channel_config[i].mux = tmp;
 		}
@@ -784,6 +784,10 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev)
 	st->channel_config = channel_config;
 
 	return 0;
+
+err_child_out:
+	fwnode_handle_put(node);
+	return ret;
 }
 
 static void ads131e08_regulator_disable(void *data)
drivers/iio/adc/xilinx-ams.c +1 -1
index a55396c1f8b2..a7687706012d 100644
@@ -1409,7 +1409,7 @@ static int ams_probe(struct platform_device *pdev)
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0)
-		return ret;
+		return irq;
 
 	ret = devm_request_irq(&pdev->dev, irq, &ams_irq, 0, "ams-irq",
 			       indio_dev);
drivers/iio/afe/iio-rescale.c +1 -1
index 7e511293d6d1..dc426e1484f0 100644
@@ -278,7 +278,7 @@ static int rescale_configure_channel(struct device *dev,
 	chan->ext_info = rescale->ext_info;
 	chan->type = rescale->cfg->type;
 
-	if (iio_channel_has_info(schan, IIO_CHAN_INFO_RAW) ||
+	if (iio_channel_has_info(schan, IIO_CHAN_INFO_RAW) &&
 	    iio_channel_has_info(schan, IIO_CHAN_INFO_SCALE)) {
 		dev_info(dev, "using raw+scale source channel\n");
 	} else if (iio_channel_has_info(schan, IIO_CHAN_INFO_PROCESSED)) {
drivers/iio/chemical/ccs811.c +2 -2
index 847194fa1e46..80ef1aa9aae3 100644
@@ -499,11 +499,11 @@ static int ccs811_probe(struct i2c_client *client,
 
 		data->drdy_trig->ops = &ccs811_trigger_ops;
 		iio_trigger_set_drvdata(data->drdy_trig, indio_dev);
-		indio_dev->trig = data->drdy_trig;
-		iio_trigger_get(indio_dev->trig);
 		ret = iio_trigger_register(data->drdy_trig);
 		if (ret)
 			goto err_poweroff;
+
+		indio_dev->trig = iio_trigger_get(data->drdy_trig);
 	}
 
 	ret = iio_triggered_buffer_setup(indio_dev, NULL,
drivers/iio/gyro/mpu3050-core.c +1 -0
index ea387efab62d..f4c2f4cb4834 100644
@@ -874,6 +874,7 @@ static int mpu3050_power_up(struct mpu3050 *mpu3050)
 	ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM,
 				 MPU3050_PWR_MGM_SLEEP, 0);
 	if (ret) {
+		regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs);
 		dev_err(mpu3050->dev, "error setting power mode\n");
 		return ret;
 	}
drivers/iio/humidity/hts221_buffer.c +4 -1
index f29692b9d2db..66b32413cf5e 100644
@@ -135,9 +135,12 @@ int hts221_allocate_trigger(struct iio_dev *iio_dev)
 
 	iio_trigger_set_drvdata(hw->trig, iio_dev);
 	hw->trig->ops = &hts221_trigger_ops;
+
+	err = devm_iio_trigger_register(hw->dev, hw->trig);
+
 	iio_dev->trig = iio_trigger_get(hw->trig);
 
-	return devm_iio_trigger_register(hw->dev, hw->trig);
+	return err;
 }
 
 static int hts221_buffer_preenable(struct iio_dev *iio_dev)
drivers/iio/imu/inv_icm42600/inv_icm42600.h +1 -0
index c0f5059b13b3..995a9dc06521 100644
@@ -17,6 +17,7 @@
 #include "inv_icm42600_buffer.h"
 
 enum inv_icm42600_chip {
+	INV_CHIP_INVALID,
 	INV_CHIP_ICM42600,
 	INV_CHIP_ICM42602,
 	INV_CHIP_ICM42605,
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +1 -1
index 86858da9cc38..ca85fccc9839 100644
@@ -565,7 +565,7 @@ int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq,
 	bool open_drain;
 	int ret;
 
-	if (chip < 0 || chip >= INV_CHIP_NB) {
+	if (chip <= INV_CHIP_INVALID || chip >= INV_CHIP_NB) {
 		dev_err(dev, "invalid chip = %d\n", chip);
 		return -ENODEV;
 	}
drivers/iio/magnetometer/yamaha-yas530.c +1 -1
index 9ff7b0e56cf6..b2bc637150bf 100644
@@ -639,7 +639,7 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx)
 	dev_dbg(yas5xx->dev, "calibration data: %*ph\n", 14, data);
 
 	/* Sanity check, is this all zeroes? */
-	if (memchr_inv(data, 0x00, 13)) {
+	if (memchr_inv(data, 0x00, 13) == NULL) {
 		if (!(data[13] & BIT(7)))
 			dev_warn(yas5xx->dev, "calibration is blank!\n");
 	}
drivers/iio/proximity/sx9324.c +3 -0
index 70c37f664f6d..63fbcaa4cac8 100644
@@ -885,6 +885,9 @@ sx9324_get_default_reg(struct device *dev, int idx,
 			break;
 		ret = device_property_read_u32_array(dev, prop, pin_defs,
 						     ARRAY_SIZE(pin_defs));
+		if (ret)
+			break;
+
 		for (pin = 0; pin < SX9324_NUM_PINS; pin++)
 			raw |= (pin_defs[pin] << (2 * pin)) &
 			       SX9324_REG_AFE_PH0_PIN_MASK(pin);
drivers/iio/test/Kconfig +1 -1
index 56ca0ad7e77a..4c66c3f18c34 100644
@@ -6,7 +6,7 @@
 # Keep in alphabetical order
 config IIO_RESCALE_KUNIT_TEST
 	bool "Test IIO rescale conversion functions"
-	depends on KUNIT=y && !IIO_RESCALE
+	depends on KUNIT=y && IIO_RESCALE=y
 	default KUNIT_ALL_TESTS
 	help
 	  If you want to run tests on the iio-rescale code say Y here.
drivers/iio/test/Makefile +1 -1
index f15ae0a6394f..880360f8d02c 100644
@@ -4,6 +4,6 @@
 #
 
 # Keep in alphabetical order
-obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o ../afe/iio-rescale.o
+obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o
 obj-$(CONFIG_IIO_TEST_FORMAT) += iio-test-format.o
 CFLAGS_iio-test-format.o += $(DISABLE_STRUCTLEAK_PLUGIN)
drivers/iio/trigger/iio-trig-sysfs.c +1 -0
index 2a4b75897910..3d911c24b265 100644
@@ -191,6 +191,7 @@ static int iio_sysfs_trigger_remove(int id)
 	}
 
 	iio_trigger_unregister(t->trig);
+	irq_work_sync(&t->work);
 	iio_trigger_free(t->trig);
 
 	list_del(&t->l);
drivers/iommu/ipmmu-vmsa.c +1 -1
index 8fdb84b3642b..1d42084d0276 100644
@@ -987,7 +987,7 @@ static const struct of_device_id ipmmu_of_ids[] = {
 		.compatible = "renesas,ipmmu-r8a779a0",
 		.data = &ipmmu_features_rcar_gen4,
 	}, {
-		.compatible = "renesas,rcar-gen4-ipmmu",
+		.compatible = "renesas,rcar-gen4-ipmmu-vmsa",
 		.data = &ipmmu_features_rcar_gen4,
 	}, {
 		/* Terminator */
drivers/md/dm-era-target.c +7 -1
index 1f6bf152b3c7..e92c1afc3677 100644
@@ -1400,7 +1400,7 @@ static void start_worker(struct era *era)
 static void stop_worker(struct era *era)
 {
 	atomic_set(&era->suspended, 1);
-	flush_workqueue(era->wq);
+	drain_workqueue(era->wq);
 }
 
 /*----------------------------------------------------------------
@@ -1570,6 +1570,12 @@ static void era_postsuspend(struct dm_target *ti)
 	}
 
 	stop_worker(era);
+
+	r = metadata_commit(era->md);
+	if (r) {
+		DMERR("%s: metadata_commit failed", __func__);
+		/* FIXME: fail mode */
+	}
 }
 
 static int era_preresume(struct dm_target *ti)
drivers/md/dm-log.c +1 -1
index 2dda05aada23..0c6620e7b7bf 100644
@@ -615,7 +615,7 @@ static int disk_resume(struct dm_dirty_log *log)
 			log_clear_bit(lc, lc->clean_bits, i);
 
 	/* clear any old bits -- device has shrunk */
-	for (i = lc->region_count; i % (sizeof(*lc->clean_bits) << BYTE_SHIFT); i++)
+	for (i = lc->region_count; i % BITS_PER_LONG; i++)
 		log_clear_bit(lc, lc->clean_bits, i);
 
 	/* copy clean across to sync */
drivers/md/dm.c +3 -1
index 83dd17abf1af..f01d33bc3613 100644
@@ -899,9 +899,11 @@ static void dm_io_complete(struct dm_io *io)
 			if (io_error == BLK_STS_AGAIN) {
 				/* io_uring doesn't handle BLK_STS_AGAIN (yet) */
 				queue_io(md, bio);
+				return;
 			}
 		}
-		return;
+		if (io_error == BLK_STS_DM_REQUEUE)
+			return;
 	}
 
 	if (bio_is_flush_with_data(bio)) {
drivers/memory/mtk-smi.c +4 -1
index 86a3d34f418e..4c5154e0bf00 100644
@@ -404,13 +404,16 @@ static int mtk_smi_device_link_common(struct device *dev, struct device **com_de
 	of_node_put(smi_com_node);
 	if (smi_com_pdev) {
 		/* smi common is the supplier, Make sure it is ready before */
-		if (!platform_get_drvdata(smi_com_pdev))
+		if (!platform_get_drvdata(smi_com_pdev)) {
+			put_device(&smi_com_pdev->dev);
 			return -EPROBE_DEFER;
+		}
 		smi_com_dev = &smi_com_pdev->dev;
 		link = device_link_add(dev, smi_com_dev,
 				       DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS);
 		if (!link) {
 			dev_err(dev, "Unable to link smi-common dev\n");
+			put_device(&smi_com_pdev->dev);
 			return -ENODEV;
 		}
 		*com_dev = smi_com_dev;
drivers/memory/samsung/exynos5422-dmc.c +18 -11
index 4733e7898ffe..c491cd549644 100644
@@ -1187,33 +1187,39 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc)
 
 	dmc->timing_row = devm_kmalloc_array(dmc->dev, TIMING_COUNT,
 					     sizeof(u32), GFP_KERNEL);
-	if (!dmc->timing_row)
-		return -ENOMEM;
+	if (!dmc->timing_row) {
+		ret = -ENOMEM;
+		goto put_node;
+	}
 
 	dmc->timing_data = devm_kmalloc_array(dmc->dev, TIMING_COUNT,
 					      sizeof(u32), GFP_KERNEL);
-	if (!dmc->timing_data)
-		return -ENOMEM;
+	if (!dmc->timing_data) {
+		ret = -ENOMEM;
+		goto put_node;
+	}
 
 	dmc->timing_power = devm_kmalloc_array(dmc->dev, TIMING_COUNT,
 					       sizeof(u32), GFP_KERNEL);
-	if (!dmc->timing_power)
-		return -ENOMEM;
+	if (!dmc->timing_power) {
+		ret = -ENOMEM;
+		goto put_node;
+	}
 
 	dmc->timings = of_lpddr3_get_ddr_timings(np_ddr, dmc->dev,
 						 DDR_TYPE_LPDDR3,
 						 &dmc->timings_arr_size);
 	if (!dmc->timings) {
-		of_node_put(np_ddr);
 		dev_warn(dmc->dev, "could not get timings from DT\n");
-		return -EINVAL;
+		ret = -EINVAL;
+		goto put_node;
 	}
 
 	dmc->min_tck = of_lpddr3_get_min_tck(np_ddr, dmc->dev);
 	if (!dmc->min_tck) {
-		of_node_put(np_ddr);
 		dev_warn(dmc->dev, "could not get tck from DT\n");
-		return -EINVAL;
+		ret = -EINVAL;
+		goto put_node;
 	}
 
 	/* Sorted array of OPPs with frequency ascending */
@@ -1227,13 +1233,14 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc)
 					     clk_period_ps);
 	}
 
-	of_node_put(np_ddr);
 
 	/* Take the highest frequency's timings as 'bypass' */
 	dmc->bypass_timing_row = dmc->timing_row[idx - 1];
 	dmc->bypass_timing_data = dmc->timing_data[idx - 1];
 	dmc->bypass_timing_power = dmc->timing_power[idx - 1];
 
+put_node:
+	of_node_put(np_ddr);
 	return ret;
 }
 
drivers/mmc/host/mtk-sd.c +12 -8
index e61b0b98065a..b74a0e54e652 100644
@@ -1356,7 +1356,7 @@ static void msdc_data_xfer_next(struct msdc_host *host, struct mmc_request *mrq)
 		msdc_request_done(host, mrq);
 }
 
-static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
+static void msdc_data_xfer_done(struct msdc_host *host, u32 events,
 				struct mmc_request *mrq, struct mmc_data *data)
 {
 	struct mmc_command *stop;
@@ -1376,7 +1376,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
 	spin_unlock_irqrestore(&host->lock, flags);
 
 	if (done)
-		return true;
+		return;
 	stop = data->stop;
 
 	if (check_data || (stop && stop->error)) {
@@ -1385,12 +1385,15 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
 		sdr_set_field(host->base + MSDC_DMA_CTRL, MSDC_DMA_CTRL_STOP,
 				1);
 
+		ret = readl_poll_timeout_atomic(host->base + MSDC_DMA_CTRL, val,
+						!(val & MSDC_DMA_CTRL_STOP), 1, 20000);
+		if (ret)
+			dev_dbg(host->dev, "DMA stop timed out\n");
+
 		ret = readl_poll_timeout_atomic(host->base + MSDC_DMA_CFG, val,
 						!(val & MSDC_DMA_CFG_STS), 1, 20000);
-		if (ret) {
-			dev_dbg(host->dev, "DMA stop timed out\n");
-			return false;
-		}
+		if (ret)
+			dev_dbg(host->dev, "DMA inactive timed out\n");
 
 		sdr_clr_bits(host->base + MSDC_INTEN, data_ints_mask);
 		dev_dbg(host->dev, "DMA stop\n");
@@ -1415,9 +1418,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
 		}
 
 		msdc_data_xfer_next(host, mrq);
-		done = true;
 	}
-	return done;
 }
 
 static void msdc_set_buswidth(struct msdc_host *host, u32 width)
@@ -2416,6 +2417,9 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)
 	if (recovery) {
 		sdr_set_field(host->base + MSDC_DMA_CTRL,
 			      MSDC_DMA_CTRL_STOP, 1);
+		if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CTRL, val,
+			!(val & MSDC_DMA_CTRL_STOP), 1, 3000)))
+			return;
 		if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CFG, val,
 			!(val & MSDC_DMA_CFG_STS), 1, 3000)))
 			return;
drivers/mmc/host/sdhci-pci-o2micro.c +2 -0
index 92c20cb8074a..0d4d343dbb77 100644
@@ -152,6 +152,8 @@ static int sdhci_o2_get_cd(struct mmc_host *mmc)
 
 	if (!(sdhci_readw(host, O2_PLL_DLL_WDT_CONTROL1) & O2_PLL_LOCK_STATUS))
 		sdhci_o2_enable_internal_clock(host);
+	else
+		sdhci_o2_wait_card_detect_stable(host);
 
 	return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
 }
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +1 -1
index 44b14c9dc9a7..375529b7d12e 100644
@@ -695,7 +695,7 @@ static int gpmi_nfc_compute_timings(struct gpmi_nand_data *this,
 	hw->timing0 = BF_GPMI_TIMING0_ADDRESS_SETUP(addr_setup_cycles) |
 		      BF_GPMI_TIMING0_DATA_HOLD(data_hold_cycles) |
 		      BF_GPMI_TIMING0_DATA_SETUP(data_setup_cycles);
-	hw->timing1 = BF_GPMI_TIMING1_BUSY_TIMEOUT(busy_timeout_cycles * 4096);
+	hw->timing1 = BF_GPMI_TIMING1_BUSY_TIMEOUT(DIV_ROUND_UP(busy_timeout_cycles, 4096));
 
 	/*
 	 * Derive NFC ideal delay from {3}:
drivers/net/bonding/bond_main.c +3 -1
index 26a6573adf0f..93c7a551264e 100644
@@ -3684,9 +3684,11 @@ static void bond_activebackup_arp_mon(struct bonding *bond)
 		if (!rtnl_trylock())
 			return;
 
-		if (should_notify_peers)
+		if (should_notify_peers) {
+			bond->send_peer_notif--;
 			call_netdevice_notifiers(NETDEV_NOTIFY_PEERS,
 						 bond->dev);
+		}
 		if (should_notify_rtnl) {
 			bond_slave_state_notify(bond);
 			bond_slave_link_notify(bond);
drivers/net/dsa/qca8k.h +1 -1
index f375627174c8..e553e3e6fa0f 100644
@@ -15,7 +15,7 @@
 
 #define QCA8K_ETHERNET_MDIO_PRIORITY			7
 #define QCA8K_ETHERNET_PHY_PRIORITY			6
-#define QCA8K_ETHERNET_TIMEOUT				100
+#define QCA8K_ETHERNET_TIMEOUT				5
 
 #define QCA8K_NUM_PORTS					7
 #define QCA8K_NUM_CPU_PORTS				2
drivers/net/ethernet/intel/ice/ice_ethtool.c +48 -1

67 lines not on this page · raw message

drivers/net/ethernet/intel/ice/ice_lib.c +37 -5

93 lines not on this page · raw message

drivers/net/ethernet/intel/ice/ice_tc_lib.c +4 -1
index 3acd9f921c44..2ce2694fcbd7 100644
@@ -524,6 +524,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
 	 */
 	fltr->rid = rule_added.rid;
 	fltr->rule_id = rule_added.rule_id;
+	fltr->dest_id = rule_added.vsi_handle;
 
 exit:
 	kfree(list);
@@ -994,7 +995,9 @@ ice_parse_cls_flower(struct net_device *filter_dev, struct ice_vsi *vsi,
 		n_proto_key = ntohs(match.key->n_proto);
 		n_proto_mask = ntohs(match.mask->n_proto);
 
-		if (n_proto_key == ETH_P_ALL || n_proto_key == 0) {
+		if (n_proto_key == ETH_P_ALL || n_proto_key == 0 ||
+		    fltr->tunnel_type == TNL_GTPU ||
+		    fltr->tunnel_type == TNL_GTPC) {
 			n_proto_key = 0;
 			n_proto_mask = 0;
 		} else {
drivers/net/ethernet/intel/igb/igb_main.c +10 -9
index 68be2976f539..c5f04c40284b 100644
@@ -4819,8 +4819,11 @@ static void igb_clean_tx_ring(struct igb_ring *tx_ring)
 	while (i != tx_ring->next_to_use) {
 		union e1000_adv_tx_desc *eop_desc, *tx_desc;
 
-		/* Free all the Tx ring sk_buffs */
-		dev_kfree_skb_any(tx_buffer->skb);
+		/* Free all the Tx ring sk_buffs or xdp frames */
+		if (tx_buffer->type == IGB_TYPE_SKB)
+			dev_kfree_skb_any(tx_buffer->skb);
+		else
+			xdp_return_frame(tx_buffer->xdpf);
 
 		/* unmap skb header data */
 		dma_unmap_single(tx_ring->dev,
@@ -9898,11 +9901,10 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 	struct e1000_hw *hw = &adapter->hw;
 	u32 dmac_thr;
 	u16 hwm;
+	u32 reg;
 
 	if (hw->mac.type > e1000_82580) {
 		if (adapter->flags & IGB_FLAG_DMAC) {
-			u32 reg;
-
 			/* force threshold to 0. */
 			wr32(E1000_DMCTXTH, 0);
 
@@ -9935,7 +9937,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 			/* Disable BMC-to-OS Watchdog Enable */
 			if (hw->mac.type != e1000_i354)
 				reg &= ~E1000_DMACR_DC_BMC2OSW_EN;
-
 			wr32(E1000_DMACR, reg);
 
 			/* no lower threshold to disable
@@ -9952,12 +9953,12 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 			 */
 			wr32(E1000_DMCTXTH, (IGB_MIN_TXPBSIZE -
 			     (IGB_TX_BUF_4096 + adapter->max_frame_size)) >> 6);
+		}
 
-			/* make low power state decision controlled
-			 * by DMA coal
-			 */
+		if (hw->mac.type >= e1000_i210 ||
+		    (adapter->flags & IGB_FLAG_DMAC)) {
 			reg = rd32(E1000_PCIEMISC);
-			reg &= ~E1000_PCIEMISC_LX_DECISION;
+			reg |= E1000_PCIEMISC_LX_DECISION;
 			wr32(E1000_PCIEMISC, reg);
 		} /* endif adapter->dmac is not disabled */
 	} else if (hw->mac.type == e1000_82580) {
drivers/net/phy/aquantia_main.c +14 -1
index a8db1a19011b..c7047f5d7a9b 100644
@@ -34,6 +34,8 @@
 #define MDIO_AN_VEND_PROV			0xc400
 #define MDIO_AN_VEND_PROV_1000BASET_FULL	BIT(15)
 #define MDIO_AN_VEND_PROV_1000BASET_HALF	BIT(14)
+#define MDIO_AN_VEND_PROV_5000BASET_FULL	BIT(11)
+#define MDIO_AN_VEND_PROV_2500BASET_FULL	BIT(10)
 #define MDIO_AN_VEND_PROV_DOWNSHIFT_EN		BIT(4)
 #define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK	GENMASK(3, 0)
 #define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT	4
@@ -231,9 +233,20 @@ static int aqr_config_aneg(struct phy_device *phydev)
 			      phydev->advertising))
 		reg |= MDIO_AN_VEND_PROV_1000BASET_HALF;
 
+	/* Handle the case when the 2.5G and 5G speeds are not advertised */
+	if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
+			      phydev->advertising))
+		reg |= MDIO_AN_VEND_PROV_2500BASET_FULL;
+
+	if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+			      phydev->advertising))
+		reg |= MDIO_AN_VEND_PROV_5000BASET_FULL;
+
 	ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV,
 				     MDIO_AN_VEND_PROV_1000BASET_HALF |
-				     MDIO_AN_VEND_PROV_1000BASET_FULL, reg);
+				     MDIO_AN_VEND_PROV_1000BASET_FULL |
+				     MDIO_AN_VEND_PROV_2500BASET_FULL |
+				     MDIO_AN_VEND_PROV_5000BASET_FULL, reg);
 	if (ret < 0)
 		return ret;
 	if (ret > 0)
drivers/net/phy/at803x.c +6 -0
index 6a467e7817a6..59fe356942b5 100644
@@ -2072,6 +2072,8 @@ static struct phy_driver at803x_driver[] = {
 	/* ATHEROS AR9331 */
 	PHY_ID_MATCH_EXACT(ATH9331_PHY_ID),
 	.name			= "Qualcomm Atheros AR9331 built-in PHY",
+	.probe			= at803x_probe,
+	.remove			= at803x_remove,
 	.suspend		= at803x_suspend,
 	.resume			= at803x_resume,
 	.flags			= PHY_POLL_CABLE_TEST,
@@ -2087,6 +2089,8 @@ static struct phy_driver at803x_driver[] = {
 	/* Qualcomm Atheros QCA9561 */
 	PHY_ID_MATCH_EXACT(QCA9561_PHY_ID),
 	.name			= "Qualcomm Atheros QCA9561 built-in PHY",
+	.probe			= at803x_probe,
+	.remove			= at803x_remove,
 	.suspend		= at803x_suspend,
 	.resume			= at803x_resume,
 	.flags			= PHY_POLL_CABLE_TEST,
@@ -2151,6 +2155,8 @@ static struct phy_driver at803x_driver[] = {
 	PHY_ID_MATCH_EXACT(QCA8081_PHY_ID),
 	.name			= "Qualcomm QCA8081",
 	.flags			= PHY_POLL_CABLE_TEST,
+	.probe			= at803x_probe,
+	.remove			= at803x_remove,
 	.config_intr		= at803x_config_intr,
 	.handle_interrupt	= at803x_handle_interrupt,
 	.get_tunable		= at803x_get_tunable,
drivers/net/veth.c +4 -0
index eb0121a64d6d..1d1dea07d932 100644
@@ -312,6 +312,7 @@ static bool veth_skb_is_eligible_for_gro(const struct net_device *dev,
 static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct veth_priv *rcv_priv, *priv = netdev_priv(dev);
+	struct netdev_queue *queue = NULL;
 	struct veth_rq *rq = NULL;
 	struct net_device *rcv;
 	int length = skb->len;
@@ -329,6 +330,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
 	rxq = skb_get_queue_mapping(skb);
 	if (rxq < rcv->real_num_rx_queues) {
 		rq = &rcv_priv->rq[rxq];
+		queue = netdev_get_tx_queue(dev, rxq);
 
 		/* The napi pointer is available when an XDP program is
 		 * attached or when GRO is enabled
@@ -340,6 +342,8 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
 
 	skb_tx_timestamp(skb);
 	if (likely(veth_forward_skb(rcv, skb, rq, use_napi) == NET_RX_SUCCESS)) {
+		if (queue)
+			txq_trans_cond_update(queue);
 		if (!use_napi)
 			dev_lstats_add(dev, length);
 	} else {
drivers/net/virtio_net.c +6 -19
index cbba9d2e8f32..10d548b07b9c 100644
@@ -2768,7 +2768,6 @@ static const struct ethtool_ops virtnet_ethtool_ops = {
 static void virtnet_freeze_down(struct virtio_device *vdev)
 {
 	struct virtnet_info *vi = vdev->priv;
-	int i;
 
 	/* Make sure no work handler is accessing the device */
 	flush_work(&vi->config_work);
@@ -2776,14 +2775,8 @@ static void virtnet_freeze_down(struct virtio_device *vdev)
 	netif_tx_lock_bh(vi->dev);
 	netif_device_detach(vi->dev);
 	netif_tx_unlock_bh(vi->dev);
-	cancel_delayed_work_sync(&vi->refill);
-
-	if (netif_running(vi->dev)) {
-		for (i = 0; i < vi->max_queue_pairs; i++) {
-			napi_disable(&vi->rq[i].napi);
-			virtnet_napi_tx_disable(&vi->sq[i].napi);
-		}
-	}
+	if (netif_running(vi->dev))
+		virtnet_close(vi->dev);
 }
 
 static int init_vqs(struct virtnet_info *vi);
@@ -2791,7 +2784,7 @@ static int init_vqs(struct virtnet_info *vi);
 static int virtnet_restore_up(struct virtio_device *vdev)
 {
 	struct virtnet_info *vi = vdev->priv;
-	int err, i;
+	int err;
 
 	err = init_vqs(vi);
 	if (err)
@@ -2800,15 +2793,9 @@ static int virtnet_restore_up(struct virtio_device *vdev)
 	virtio_device_ready(vdev);
 
 	if (netif_running(vi->dev)) {
-		for (i = 0; i < vi->curr_queue_pairs; i++)
-			if (!try_fill_recv(vi, &vi->rq[i], GFP_KERNEL))
-				schedule_delayed_work(&vi->refill, 0);
-
-		for (i = 0; i < vi->max_queue_pairs; i++) {
-			virtnet_napi_enable(vi->rq[i].vq, &vi->rq[i].napi);
-			virtnet_napi_tx_enable(vi, vi->sq[i].vq,
-					       &vi->sq[i].napi);
-		}
+		err = virtnet_open(vi->dev);
+		if (err)
+			return err;
 	}
 
 	netif_tx_lock_bh(vi->dev);
drivers/nvme/host/core.c +14 -0
index 1ea85c88d795..a2862a56fadc 100644
@@ -2487,6 +2487,20 @@ static const struct nvme_core_quirk_entry core_quirks[] = {
 		.vid = 0x1e0f,
 		.mn = "KCD6XVUL6T40",
 		.quirks = NVME_QUIRK_NO_APST,
+	},
+	{
+		/*
+		 * The external Samsung X5 SSD fails initialization without a
+		 * delay before checking if it is ready and has a whole set of
+		 * other problems.  To make this even more interesting, it
+		 * shares the PCI ID with internal Samsung 970 Evo Plus that
+		 * does not need or want these quirks.
+		 */
+		.vid = 0x144d,
+		.mn = "Samsung Portable SSD X5",
+		.quirks = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |
+			  NVME_QUIRK_NO_DEEPEST_PS |
+			  NVME_QUIRK_IGNORE_DEV_SUBNQN,
 	}
 };
 
drivers/nvme/host/pci.c +0 -4
index 17aeb7d5c485..ddea0fb90c28 100644
@@ -3475,10 +3475,6 @@ static const struct pci_device_id nvme_id_table[] = {
 				NVME_QUIRK_128_BYTES_SQES |
 				NVME_QUIRK_SHARED_TAGS |
 				NVME_QUIRK_SKIP_CID_GEN },
-	{ PCI_DEVICE(0x144d, 0xa808),   /* Samsung X5 */
-		.driver_data =  NVME_QUIRK_DELAY_BEFORE_CHK_RDY|
-				NVME_QUIRK_NO_DEEPEST_PS |
-				NVME_QUIRK_IGNORE_DEV_SUBNQN, },
 	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
 	{ 0, }
 };
drivers/scsi/ibmvscsi/ibmvfc.c +64 -18

171 lines not on this page · raw message

drivers/scsi/ibmvscsi/ibmvfc.h +1 -1
index 3718406e0988..c39a245f43d0 100644
@@ -789,6 +789,7 @@ struct ibmvfc_queue {
 	spinlock_t _lock;
 	spinlock_t *q_lock;
 
+	struct ibmvfc_host *vhost;
 	struct ibmvfc_event_pool evt_pool;
 	struct list_head sent;
 	struct list_head free;
@@ -797,7 +798,6 @@ struct ibmvfc_queue {
 	union ibmvfc_iu cancel_rsp;
 
 	/* Sub-CRQ fields */
-	struct ibmvfc_host *vhost;
 	unsigned long cookie;
 	unsigned long vios_cookie;
 	unsigned long hw_irq;
drivers/scsi/scsi_debug.c +20 -2
index 592a290e6cfa..6cdd67f2a08e 100644
@@ -2788,6 +2788,24 @@ static void zbc_open_zone(struct sdebug_dev_info *devip,
 	}
 }
 
+static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
+				     struct sdeb_zone_state *zsp)
+{
+	switch (zsp->z_cond) {
+	case ZC2_IMPLICIT_OPEN:
+		devip->nr_imp_open--;
+		break;
+	case ZC3_EXPLICIT_OPEN:
+		devip->nr_exp_open--;
+		break;
+	default:
+		WARN_ONCE(true, "Invalid zone %llu condition %x\n",
+			  zsp->z_start, zsp->z_cond);
+		break;
+	}
+	zsp->z_cond = ZC5_FULL;
+}
+
 static void zbc_inc_wp(struct sdebug_dev_info *devip,
 		       unsigned long long lba, unsigned int num)
 {
@@ -2800,7 +2818,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip,
 	if (zsp->z_type == ZBC_ZONE_TYPE_SWR) {
 		zsp->z_wp += num;
 		if (zsp->z_wp >= zend)
-			zsp->z_cond = ZC5_FULL;
+			zbc_set_zone_full(devip, zsp);
 		return;
 	}
 
@@ -2819,7 +2837,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip,
 			n = num;
 		}
 		if (zsp->z_wp >= zend)
-			zsp->z_cond = ZC5_FULL;
+			zbc_set_zone_full(devip, zsp);
 
 		num -= n;
 		lba += n;
drivers/scsi/scsi_transport_iscsi.c +6 -1
index 2c0dd64159b0..5d21f07456c6 100644
@@ -212,7 +212,12 @@ iscsi_create_endpoint(int dd_size)
 		return NULL;
 
 	mutex_lock(&iscsi_ep_idr_mutex);
-	id = idr_alloc(&iscsi_ep_idr, ep, 0, -1, GFP_NOIO);
+
+	/*
+	 * First endpoint id should be 1 to comply with user space
+	 * applications (iscsid).
+	 */
+	id = idr_alloc(&iscsi_ep_idr, ep, 1, -1, GFP_NOIO);
 	if (id < 0) {
 		mutex_unlock(&iscsi_ep_idr_mutex);
 		printk(KERN_ERR "Could not allocate endpoint ID. Error %d.\n",
drivers/scsi/storvsc_drv.c +22 -5
index 9a0bba5a51a7..4b1f1d73eee8 100644
@@ -1916,7 +1916,7 @@ static struct scsi_host_template scsi_driver = {
 	.cmd_per_lun =		2048,
 	.this_id =		-1,
 	/* Ensure there are no gaps in presented sgls */
-	.virt_boundary_mask =	PAGE_SIZE-1,
+	.virt_boundary_mask =	HV_HYP_PAGE_SIZE - 1,
 	.no_write_same =	1,
 	.track_queue_depth =	1,
 	.change_queue_depth =	storvsc_change_queue_depth,
@@ -1970,6 +1970,7 @@ static int storvsc_probe(struct hv_device *device,
 	int max_targets;
 	int max_channels;
 	int max_sub_channels = 0;
+	u32 max_xfer_bytes;
 
 	/*
 	 * Based on the windows host we are running on,
@@ -2059,12 +2060,28 @@ static int storvsc_probe(struct hv_device *device,
 	}
 	/* max cmd length */
 	host->max_cmd_len = STORVSC_MAX_CMD_LEN;
-
 	/*
-	 * set the table size based on the info we got
-	 * from the host.
+	 * Any reasonable Hyper-V configuration should provide
+	 * max_transfer_bytes value aligning to HV_HYP_PAGE_SIZE,
+	 * protecting it from any weird value.
+	 */
+	max_xfer_bytes = round_down(stor_device->max_transfer_bytes, HV_HYP_PAGE_SIZE);
+	/* max_hw_sectors_kb */
+	host->max_sectors = max_xfer_bytes >> 9;
[… more lines in the raw message]

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

drivers/soc/bcm/brcmstb/pm/pm-arm.c +1 -0
index 3cbb165d6e30..70ad0f3dce28 100644

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

drivers/usb/chipidea/udc.c +3 -0
index dc6c96e04bcf..3b8bf6daf7d0 100644

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

drivers/usb/gadget/function/uvc_video.c +3 -0
index 7f59a0c47402..4e4a7c312646 100644

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

drivers/usb/gadget/legacy/raw_gadget.c +47 -16

63 lines not on this page · raw message

drivers/usb/host/xhci-hub.c +1 -1
index f65f1ba2b592..fc322a9526c8 100644

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

drivers/usb/host/xhci-pci.c +5 -1
index d57c5ff5ae1f..64173010d466 100644

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

drivers/usb/host/xhci.c +13 -2
index 2be38d9de8df..162d975b648c 100644

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

drivers/usb/host/xhci.h +2 -0
index 473a33ce299e..1f3f311d9951 100644

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

drivers/usb/serial/option.c +6 -0
index ed1e50d83cca..de59fa919540 100644

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

drivers/usb/serial/pl2303.c +17 -12
index 3506c47e1eef..40b1ab3d284d 100644

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

drivers/usb/typec/tcpm/Kconfig +0 -1
index 557f392fe24d..073fd2ea5e0b 100644

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

drivers/video/console/sticore.c +2 -0
index 6a947ff96d6e..19fd3389946d 100644

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

drivers/xen/features.c +1 -1
index 7b591443833c..87f1828d40d5 100644

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

drivers/xen/gntdev-common.h +7 -0
index 20d7d059dadb..40ef379c28ab 100644

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

drivers/xen/gntdev.c +106 -51

157 lines not on this page · raw message

fs/9p/fid.c +9 -13
index 79df61fe0e59..baf2b152229e 100644

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

fs/9p/vfs_addr.c +13 -0
index 595875228672..a58c554b4070 100644

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

fs/9p/vfs_inode.c +4 -4
index e660c6348b9d..d4b705a866ea 100644

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

fs/9p/vfs_inode_dotl.c +3 -0
index d17502a738a9..b6eb1160296c 100644

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

fs/afs/inode.c +2 -1
index 22811e9eacf5..c4c9f6dff0a2 100644

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

fs/btrfs/disk-io.c +11 -2
index 30d0bbfdb3bc..6f30413ed9a9 100644

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

fs/btrfs/file.c +52 -15

67 lines not on this page · raw message

fs/btrfs/locking.c +0 -3
index 313d9d685adb..33461b4f9c8b 100644

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

fs/btrfs/reflink.c +11 -4
index 998e3f180d90..6db7f50de84d 100644

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

fs/btrfs/super.c +40 -7

47 lines not on this page · raw message

fs/cifs/smb2pdu.c +15 -6
index 179c1630bf56..6a8a00f28b19 100644

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

fs/f2fs/iostat.c +18 -13
index be599f31d3c4..d84c5f6cc09d 100644

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

fs/f2fs/namei.c +11 -6
index fffafd2aa438..3764e12f19db 100644

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

fs/f2fs/node.c +3 -1
index a8d0fa2731cb..aedc3d334113 100644

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

fs/io_uring.c +14 -6
index 68aab48838e4..e4186635aaa8 100644

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

fs/proc/vmcore.c +34 -20

54 lines not on this page · raw message

include/linux/crash_dump.h +4 -5
index 620821549b23..a1cf7d5c03c7 100644

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

include/linux/mm.h +1 -0
index b0183450e484..da08cce2a9fa 100644

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

include/linux/ratelimit_types.h +8 -4
index c21c7f8103e2..002266693e50 100644

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

include/net/inet_sock.h +5 -0
index 234d70ae5f4c..48e4c59d85e2 100644

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

include/trace/events/libata.h +1 -0
index d4e631aa976f..6025dd8ba4aa 100644

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

kernel/dma/direct.c +2 -3
index e978f36e6be8..8d0b68a17042 100644

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

kernel/trace/rethook.c +9 -0
index b56833700d23..c69d82273ce7 100644

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

kernel/trace/trace_kprobe.c +10 -1
index 47cebef78532..13439743285c 100644

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

mm/filemap.c +2 -0
index 61dd39990fda..be1859a276e1 100644

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

mm/hwpoison-inject.c +1 -1
index bb0cea5468cb..f483742e9dea 100644

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

mm/madvise.c +1 -1
index 1873616a37d2..4d29a11c18e9 100644

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

mm/memory-failure.c +12 -0
index d4a4adcca01f..94dac77f5eba 100644

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

mm/readahead.c +2 -0
index 4a60cdb64262..38635af5bab7 100644

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

mm/slub.c +2 -0
index ed5c2c03a47a..46de927322fc 100644

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

mm/swap.c +1 -1
index 7e320ec08c6a..8a98d21d2786 100644

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

net/core/dev.c +15 -10
index 0784c339cd7d..842917883adb 100644

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

net/core/filter.c +28 -6
index 8847316ee20e..af1e77f2f24a 100644

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

net/core/net-sysfs.c +1 -0
index 9cbc1c8289bc..9ee57997354a 100644

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

net/core/skmsg.c +5 -0
index cc381165ea08..ede0af308f40 100644

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

net/ethtool/eeprom.c +1 -1
index 7e6b37a54add..1c94bb8ea03f 100644

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

net/ipv4/ip_gre.c +10 -5
index bc8dfdf1c48a..318673517976 100644

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

net/ipv4/ping.c +7 -3
index 4e5ceca7ff7f..9dccbf863f82 100644

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

net/ipv4/tcp_bpf.c +0 -3
index 1cdcb4df0eb7..2c597a4e429a 100644

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

net/ipv6/ip6_gre.c +10 -5
index 5136959b3dc5..b996ccaff56e 100644

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

net/netfilter/nf_dup_netdev.c +21 -4
index 7873bd1389c3..a8e2425e43b0 100644

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

net/netfilter/nft_meta.c +2 -11
index ac4859241e17..55d2d49c3425 100644

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

net/netfilter/nft_numgen.c +3 -9
index 81b40c663d86..45d3dc9e96f2 100644

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

net/openvswitch/flow.c +1 -1
index 372bf54a0ca9..e20d1a973417 100644

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

net/sched/sch_netem.c +2 -2
index ed4ccef5d6a8..5449ed114e40 100644

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

net/tipc/core.c +1 -2
index 3f4542e0f065..434e70eabe08 100644

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

net/tls/tls_main.c +2 -0
index 7b2b0e7ffee4..5c9697840ef7 100644

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

net/xdp/xsk.c +9 -7
index d6bcdbfd0fc5..9b12ea3ab85a 100644

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

scripts/mod/modpost.c +1 -1
index b28344fd7408..0005900b19b0 100644

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

sound/core/memalloc.c +1 -22
index 15dc7160ba34..8cfdaee77905 100644

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

sound/hda/hdac_i915.c +6 -9
index 3f35972e1cf7..161a9711cd63 100644

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

sound/pci/hda/hda_auto_parser.c +4 -3
index cd1db943b7e0..7c6b1fe8dfcc 100644

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

sound/pci/hda/hda_local.h +1 -0
index aca592651870..682dca2057db 100644

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

sound/pci/hda/patch_conexant.c +2 -2
index bce2cef80000..0b7d500249f6 100644

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

sound/pci/hda/patch_realtek.c +35 -1
index 588d4a59c8d9..d3d786de8f4c 100644

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

sound/pci/hda/patch_via.c +2 -2
index 773a136161f1..a188901a83bb 100644

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

tools/perf/tests/shell/test_arm_callgraph_fp.sh +1 -1
index 6ffbb27afaba..ec108d45d3c6 100755

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

tools/perf/tests/topology.c +1 -1
index d23a9e322ff5..0b4f61b6cc6b 100644

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

tools/perf/util/arm-spe.c +8 -14
index 1a80151baed9..d040406f3314 100644

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

tools/perf/util/build-id.c +28 -0
index 82f3d46bea70..328668f38c69 100644

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

tools/testing/selftests/dma/Makefile +1 -0
index aa8e8b5b3864..cd8c5ece1cba 100644

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

tools/testing/selftests/dma/dma_map_benchmark.c +1 -1
index c3b3c09e995e..5c997f17fcbd 100644

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

tools/testing/selftests/net/fcnal-test.sh +56 -5

61 lines not on this page · raw message

tools/testing/selftests/netfilter/nft_concat_range.sh +1 -1
index b35010cc7f6a..a6991877e50c 100755

Lines of this file are not shown. View the 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.