Skip to contentSkip to conversation

Linux 6.5.9

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Oct 25, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.5.9 kernel.

All users of the 6.5 kernel series must upgrade.

The updated 6.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.5.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/devicetree/bindings/mmc/sdhci-msm.yaml                   |    2 
 Documentation/networking/representors.rst                              |    8 
 Documentation/rust/general-information.rst                             |    2 
 Documentation/rust/index.rst                                           |    8 
 Makefile                                                               |    4 
 arch/arm/boot/dts/ti/omap/motorola-mapphone-common.dtsi                |    1 
 arch/arm64/boot/dts/mediatek/mt8195.dtsi                               |   10 
 arch/powerpc/Kconfig                                                   |    2 
 arch/powerpc/lib/qspinlock.c                                           |    3 
 arch/s390/pci/pci_dma.c                                                |   15 
 arch/x86/boot/compressed/sev.c                                         |   10 
 arch/x86/include/asm/fpu/api.h                                         |    3 
 arch/x86/include/asm/svm.h                                             |    1 
 arch/x86/kernel/fpu/core.c                                             |    5 
 arch/x86/kernel/fpu/xstate.c                                           |   12 
 arch/x86/kernel/fpu/xstate.h                                           |    3 
 arch/x86/kernel/sev-shared.c                                           |   53 ++-
 arch/x86/kernel/sev.c                                                  |   30 +
 arch/x86/kvm/cpuid.c                                                   |    8 
 arch/x86/kvm/lapic.c                                                   |    8 
 arch/x86/kvm/pmu.h                                                     |    6 
 arch/x86/kvm/svm/avic.c                                                |    5 
 arch/x86/kvm/svm/nested.c                                              |    3 
 arch/x86/kvm/svm/pmu.c                                                 |    2 
 arch/x86/kvm/svm/svm.c                                                 |    3 
 arch/x86/kvm/vmx/pmu_intel.c                                           |    4 
 arch/x86/kvm/x86.c                                                     |   37 +-
 crypto/asymmetric_keys/public_key.c                                    |    5 
 drivers/accel/ivpu/ivpu_drv.c                                          |    2 
 drivers/accel/ivpu/ivpu_fw.c                                           |    9 
 drivers/accel/ivpu/ivpu_gem.h                                          |    5 
 drivers/acpi/bus.c                                                     |    2 
 drivers/acpi/irq.c                                                     |    7 
 drivers/ata/libata-core.c                                              |    2 
 drivers/ata/libata-eh.c                                                |    2 
 drivers/base/regmap/regmap.c                                           |    2 
 drivers/bluetooth/btusb.c                                              |    1 
 drivers/bluetooth/hci_vhci.c                                           |    3 
 drivers/firmware/efi/unaccepted_memory.c                               |   64 +++
 drivers/gpio/gpio-timberdale.c                                         |    5 
 drivers/gpio/gpio-vf610.c                                              |    7 
 drivers/gpio/gpiolib-acpi.c                                            |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c                                 |    3 
 drivers/gpu/drm/amd/pm/amdgpu_pm.c                                     |    1 
 drivers/gpu/drm/bridge/ti-sn65dsi86.c                                  |   14 
 drivers/gpu/drm/drm_edid.c                                             |    3 
 drivers/gpu/drm/drm_panel_orientation_quirks.c                         |   16 
 drivers/gpu/drm/i915/display/intel_cx0_phy.c                           |    3 
 drivers/gpu/drm/i915/gem/i915_gem_mman.c                               |    1 
 drivers/gpu/drm/mediatek/mtk_drm_gem.c                                 |    6 
 drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c                       |   14 
 drivers/hid/hid-holtek-kbd.c                                           |    4 
 drivers/hid/hid-ids.h                                                  |    1 
 drivers/hid/hid-input.c                                                |    2 
 drivers/hid/hid-logitech-hidpp.c                                       |    2 
 drivers/hid/hid-multitouch.c                                           |    4 
 drivers/hid/hid-nintendo.c                                             |  175 +++++-----
 drivers/i2c/i2c-mux.c                                                  |    2 
 drivers/iio/light/vcnl4000.c                                           |    1 
 drivers/mmc/core/block.c                                               |   31 +
 drivers/mmc/core/mmc.c                                                 |    2 
 drivers/mmc/core/sdio.c                                                |    8 
 drivers/mmc/host/mtk-sd.c                                              |    6 
 drivers/mmc/host/sdhci-pci-gli.c                                       |  104 +++--
 drivers/mtd/maps/physmap-core.c                                        |   11 
 drivers/mtd/nand/raw/arasan-nand-controller.c                          |   16 
 drivers/mtd/nand/raw/marvell_nand.c                                    |   23 +
 drivers/mtd/nand/raw/nand_base.c                                       |    3 
 drivers/mtd/nand/raw/nand_jedec.c                                      |    3 
 drivers/mtd/nand/raw/nand_onfi.c                                       |    3 
 drivers/mtd/nand/raw/pl35x-nand-controller.c                           |    9 
 drivers/mtd/nand/raw/qcom_nandc.c                                      |    2 
 drivers/mtd/nand/spi/micron.c                                          |    2 
 drivers/net/bonding/bond_main.c                                        |    2 
 drivers/net/dsa/bcm_sf2.c                                              |   24 -
 drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c            |   36 +-
 drivers/net/ethernet/google/gve/gve_rx.c                               |   18 -
 drivers/net/ethernet/intel/i40e/i40e_common.c                          |    4 
 drivers/net/ethernet/intel/ice/ice_lib.c                               |    3 
 drivers/net/ethernet/intel/ice/ice_main.c                              |   18 +
 drivers/net/ethernet/marvell/octeon_ep/octep_main.c                    |   13 
 drivers/net/ethernet/marvell/sky2.h                                    |    2 
 drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c               |    2 
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c              |    3 
 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c                       |    8 
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c                       |   10 
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c                        |   35 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.h                     |   11 
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c                        |    5 
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c                      |   17 
 drivers/net/ethernet/qlogic/qed/qed_ll2.c                              |    7 
 drivers/net/mdio/mdio-mux.c                                            |   47 ++
 drivers/net/phy/bcm7xxx.c                                              |    3 
 drivers/net/tun.c                                                      |    7 
 drivers/net/usb/smsc95xx.c                                             |    2 
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c                            |    3 
 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c                   |   16 
 drivers/net/wwan/iosm/iosm_ipc_imem.c                                  |   17 
 drivers/net/wwan/iosm/iosm_ipc_imem.h                                  |    2 
 drivers/net/wwan/iosm/iosm_ipc_pcie.c                                  |    4 
 drivers/net/wwan/iosm/iosm_ipc_port.c                                  |   17 
 drivers/net/wwan/iosm/iosm_ipc_trace.c                                 |    8 
 drivers/net/wwan/iosm/iosm_ipc_wwan.c                                  |   21 -
 drivers/nvme/host/auth.c                                               |    4 
 drivers/nvme/host/ioctl.c                                              |   10 
 drivers/nvme/host/pci.c                                                |    3 
 drivers/nvme/host/rdma.c                                               |    3 
 drivers/nvme/target/fabrics-cmd-auth.c                                 |    9 
 drivers/nvme/target/tcp.c                                              |    7 
 drivers/phy/motorola/phy-mapphone-mdm6600.c                            |   38 +-
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c                              |    6 
 drivers/phy/qualcomm/phy-qcom-qmp-pcs-usb-v6.h                         |    3 
 drivers/phy/qualcomm/phy-qcom-qmp-usb.c                                |   24 +
 drivers/pinctrl/core.c                                                 |   16 
 drivers/pinctrl/qcom/pinctrl-lpass-lpi.c                               |   17 
 drivers/platform/surface/surface_platform_profile.c                    |    3 
 drivers/platform/x86/apple-gmux.c                                      |   14 
 drivers/platform/x86/asus-nb-wmi.c                                     |    3 
 drivers/platform/x86/asus-wmi.c                                        |   15 
 drivers/platform/x86/asus-wmi.h                                        |    2 
 drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c  |    8 
 drivers/platform/x86/msi-ec.c                                          |    3 
 drivers/platform/x86/touchscreen_dmi.c                                 |   45 ++
 drivers/power/reset/Kconfig                                            |    2 
 drivers/regulator/core.c                                               |    6 
 drivers/s390/cio/css.c                                                 |    6 
 drivers/thunderbolt/tb.c                                               |   10 
 drivers/usb/serial/option.c                                            |    7 
 fs/btrfs/ctree.c                                                       |   52 ++
 fs/btrfs/delayed-ref.c                                                 |   46 ++
 fs/btrfs/delayed-ref.h                                                 |    1 
 fs/btrfs/extent-tree.c                                                 |    6 
 fs/btrfs/ioctl.c                                                       |    4 
 fs/btrfs/transaction.c                                                 |    6 
 fs/btrfs/tree-log.c                                                    |    2 
 fs/btrfs/volumes.c                                                     |    2 
 fs/fs-writeback.c                                                      |   11 
 fs/namei.c                                                             |    9 
 fs/nfs/flexfilelayout/flexfilelayout.c                                 |   17 
 fs/nfs/nfs42proc.c                                                     |    3 
 fs/nfs/nfs4proc.c                                                      |    2 
 fs/nfs/pnfs.c                                                          |   33 +
 fs/nfs/write.c                                                         |    4 
 fs/notify/fanotify/fanotify_user.c                                     |   25 -
 fs/ntfs3/fsntfs.c                                                      |    6 
 fs/ntfs3/index.c                                                       |    3 
 fs/ntfs3/ntfs_fs.h                                                     |    2 
 fs/ntfs3/super.c                                                       |   31 +
 fs/ntfs3/xattr.c                                                       |    7 
 fs/overlayfs/copy_up.c                                                 |    2 
 include/linux/fs.h                                                     |    2 
 include/linux/mtd/jedec.h                                              |    3 
 include/linux/mtd/onfi.h                                               |    1 
 include/linux/mtd/rawnand.h                                            |    2 
 include/linux/perf_event.h                                             |    1 
 include/linux/virtio_net.h                                             |   19 -
 include/net/bluetooth/hci_core.h                                       |    3 
 include/net/bluetooth/hci_mon.h                                        |    2 
 include/net/bluetooth/hci_sync.h                                       |    3 
 include/net/ip_fib.h                                                   |    1 
 include/net/netns/xfrm.h                                               |    1 
 include/net/sock.h                                                     |   10 
 include/net/tcp.h                                                      |    3 
 include/trace/events/neigh.h                                           |    4 
 io_uring/io-wq.c                                                       |   10 
 io_uring/io_uring.c                                                    |    6 
 kernel/auditsc.c                                                       |    8 
 kernel/events/core.c                                                   |   39 +-
 kernel/sched/cpufreq_schedutil.c                                       |    3 
 kernel/trace/fprobe.c                                                  |    6 
 kernel/trace/trace_events.c                                            |    1 
 kernel/trace/trace_kprobe.c                                            |   63 +++
 kernel/trace/trace_probe.h                                             |    1 
 mm/slab_common.c                                                       |    6 
 net/bluetooth/hci_conn.c                                               |  135 +++++--
 net/bluetooth/hci_core.c                                               |    8 
 net/bluetooth/hci_event.c                                              |   77 ++--
 net/bluetooth/hci_sock.c                                               |    3 
 net/bluetooth/hci_sync.c                                               |   70 ++--
 net/bluetooth/iso.c                                                    |   14 
 net/core/dev.c                                                         |   65 ++-
 net/core/dev.h                                                         |    3 
 net/core/pktgen.c                                                      |   14 
 net/core/rtnetlink.c                                                   |    4 
 net/core/stream.c                                                      |   12 
 net/ipv4/af_inet.c                                                     |   10 
 net/ipv4/esp4.c                                                        |    4 
 net/ipv4/fib_semantics.c                                               |   15 
 net/ipv4/fib_trie.c                                                    |    4 
 net/ipv4/inet_connection_sock.c                                        |    1 
 net/ipv4/inet_hashtables.c                                             |   24 -
 net/ipv4/tcp.c                                                         |   16 
 net/ipv4/tcp_bpf.c                                                     |   12 
 net/ipv4/tcp_ipv4.c                                                    |    1 
 net/ipv4/tcp_output.c                                                  |   25 +
 net/ipv4/tcp_recovery.c                                                |    2 
 net/ipv6/esp6.c                                                        |    4 
 net/ipv6/xfrm6_policy.c                                                |    4 
 net/mac80211/cfg.c                                                     |    3 
 net/mac80211/ibss.c                                                    |    2 
 net/mac80211/ieee80211_i.h                                             |    1 
 net/mac80211/mesh_plink.c                                              |    2 
 net/mac80211/mlme.c                                                    |   27 +
 net/mac80211/tx.c                                                      |    3 
 net/mac80211/vht.c                                                     |   16 
 net/mptcp/protocol.c                                                   |   43 +-
 net/netfilter/nf_tables_api.c                                          |   20 -
 net/netfilter/nft_inner.c                                              |    1 
 net/netfilter/nft_payload.c                                            |    2 
 net/netfilter/nft_set_rbtree.c                                         |    2 
 net/nfc/nci/spi.c                                                      |    2 
 net/rfkill/core.c                                                      |   37 +-
 net/rfkill/rfkill-gpio.c                                               |    4 
 net/sched/sch_hfsc.c                                                   |   18 -
 net/smc/af_smc.c                                                       |    2 
 net/sunrpc/auth.c                                                      |   11 
 net/sunrpc/auth_tls.c                                                  |    4 
 net/sunrpc/clnt.c                                                      |   10 
 net/sunrpc/xprtsock.c                                                  |    6 
 net/tls/tls_main.c                                                     |   10 
 net/tls/tls_sw.c                                                       |   57 ++-
 net/wireless/core.c                                                    |    2 
 net/wireless/nl80211.c                                                 |   21 +
 net/wireless/scan.c                                                    |    4 
 net/xfrm/xfrm_interface_core.c                                         |   22 -
 net/xfrm/xfrm_policy.c                                                 |   27 -
 rust/Makefile                                                          |   24 -
 rust/kernel/error.rs                                                   |    2 
 sound/pci/hda/patch_realtek.c                                          |   27 +
 sound/soc/codecs/cs35l56.c                                             |    2 
 sound/soc/codecs/cs42l42-sdw.c                                         |    1 
 sound/soc/codecs/wcd938x-sdw.c                                         |   27 +
 sound/soc/codecs/wcd938x.c                                             |   76 +++-
 sound/soc/pxa/pxa-ssp.c                                                |    2 
 tools/perf/util/dlfilter.c                                             |   32 -
 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc |   13 
 tools/testing/selftests/net/mptcp/mptcp_join.sh                        |   21 +
 tools/testing/selftests/net/openvswitch/openvswitch.sh                 |    4 
 tools/testing/selftests/net/openvswitch/ovs-dpctl.py                   |   14 
 tools/testing/selftests/netfilter/nft_audit.sh                         |    6 
 240 files changed, 2166 insertions(+), 912 deletions(-)

Aaron Conole (3):
selftests: openvswitch: Catch cases where the tests are killed
selftests: openvswitch: Fix the ct_tuple for v4
selftests: openvswitch: Add version check for pyroute2

Aditya Kumar Singh (1):
wifi: cfg80211: validate AP phy operation before starting it

Adrian Hunter (1):
perf dlfilter: Fix use of addr_location__exit() in dlfilter__object_code()

Adrien Thierry (2):
phy: qcom-qmp-usb: initialize PCS_USB registers
phy: qcom-qmp-usb: split PCS_USB init table for sc8280xp and sa8775p

Amir Goldstein (1):
fanotify: limit reporting of event with non-decodeable file handles

Amir Tzin (1):
net/mlx5e: Fix VF representors reporting zero counters to "ip -s" command

Andy Shevchenko (2):
Revert "pinctrl: avoid unsafe code pattern in find_pinctrl()"
gpiolib: acpi: Add missing memset(0) to acpi_get_gpiod_from_data()

Anna Schumaker (1):
SUNRPC/TLS: Lock the lower_xprt during the tls handshake

Arkadiusz Bokowy (1):
Bluetooth: vhci: Fix race when opening vhci device

Armin Wolf (1):
platform/surface: platform_profile: Propagate error if profile registration fails

Arnd Bergmann (1):
Bluetooth: avoid memcmp() out of bounds warning

Artem Borisov (1):
ALSA: hda/realtek: Add quirk for ASUS ROG GU603ZV

Avri Altman (1):
mmc: core: Capture correct oemid-bits for eMMC cards

Bagas Sanjaya (1):
Revert "net: wwan: iosm: enable runtime pm support for 7560"

Ben Greear (1):
wifi: iwlwifi: Ensure ack flag is properly cleared.

Benjamin Berg (1):
wifi: cfg80211: avoid leaking stack data into trace

Benoît Monin (1):
USB: serial: option: add entry for Sierra EM9191 with new firmware

Bibek Kumar Patro (1):
mtd: rawnand: qcom: Unmap the right resource upon probe failure

Borislav Petkov (AMD) (1):
x86/sev: Disable MMIO emulation from user mode

Carlos Bilbao (1):
docs: Move rustdoc output, cross-reference it

Catalin Marinas (1):
mm: slab: Do not create kmalloc caches smaller than arch_slab_minalign()

Chen-Yu Tsai (1):
drm/mediatek: Correctly free sg_table in gem prime vmap

Chengfeng Ye (1):

      gpio: timberdale: Fix potential deadlock on &tgpio->lock

Christoph Paasch (1):
netlink: Correct offload_xstats size

Chuck Lever (1):
SUNRPC: Fail quickly when server does not recognize TLS

Chunhai Guo (1):
fs-writeback: do not requeue a clean inode having skipped pages

Clément Léger (1):
tracing: relax trace_event_eval_update() execution with cond_resched()

Dai Ngo (1):
nfs42: client needs to strip file mode's suid/sgid bit after ALLOCATE op

Damien Le Moal (2):
ata: libata-core: Fix compilation warning in ata_dev_config_ncq()
ata: libata-eh: Fix compilation warning in ata_eh_link_report()

Dan Carpenter (2):
net: usb: smsc95xx: Fix an error code in smsc95xx_reset()
ASoC: pxa: fix a memory leak in probe()

Dan Clash (1):
audit,io_uring: io_uring openat triggers audit reference count underflow

David Thompson (1):
pwr-mlxbf: extend Kconfig to include gpio-mlxbf3 dependency

Dinghao Liu (1):
s390/cio: fix a memleak in css_alloc_subchannel

Dong Chenchen (1):
net: xfrm: skip policies marked as dead while reinserting policies

Dragos Tatulea (3):
net/mlx5e: RX, Fix page_pool allocation failure recovery for striding rq net/mlx5e: RX, Fix page_pool allocation failure recovery for legacy rq net/mlx5e: XDP, Fix XDP_REDIRECT mpwqe page fragment leaks on shutdown

Dust Li (1):
net/smc: return the right falback reason when prefix checks fail

Edward AD (1):
Bluetooth: hci_sock: fix slab oob read in create_monitor_event

Eric Dumazet (6):
xfrm: fix a data-race in xfrm_lookup_with_ifid()
xfrm: fix a data-race in xfrm_gen_index()
xfrm: interface: use DEV_STATS_INC()
tcp: tsq: relax tcp_small_queue_check() when rtx queue contains a single skb
tun: prevent negative ifindex
ipv4: fib: annotate races around nh->nh_saddr_genid and nh->nh_saddr

Fabian Vogt (1):
HID: Add quirk to ignore the touchscreen battery on HP ENVY 15-eu0556ng

Fabio Porcedda (1):

      USB: serial: option: add Telit LE910C4-WWX 0x1035 composition

Felix Kuehling (1):
drm/amdgpu: Fix possible null pointer dereference

Filipe Manana (6):
btrfs: fix race when refilling delayed refs block reserve
btrfs: prevent transaction block reserve underflow when starting transaction
btrfs: return -EUCLEAN for delayed tree ref with a ref count not equals to 1
btrfs: error out when COWing block using a stale transaction
btrfs: error when COWing block from a root that is being deleted
btrfs: error out when reallocating block for defrag using a stale transaction

Florian Fainelli (1):
net: phy: bcm7xxx: Add missing 16nm EPHY statistics

Florian Westphal (1):
netfilter: nft_payload: fix wrong mac header matching

Francis Laniel (2):
tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols selftests/ftrace: Add new test case which checks non unique symbol

Gavrilov Ilia (1):
net: pktgen: Fix interface flags printing

Geert Uytterhoeven (2):
neighbor: tracing: Move pin6 inside CONFIG_IPV6=y section
mtd: physmap-core: Restore map_rom fallback

Geliang Tang (1):
mptcp: avoid sending RST when closing the initial subflow

Gil Fine (1):
thunderbolt: Call tb_switch_put() once DisplayPort bandwidth request is finished

Greg Kroah-Hartman (1):

      Linux 6.5.9

Gustavo A. R. Silva (1):
wifi: mwifiex: Sanity check tlv_len and tlv_bitmap_len

Haibo Chen (3):
mmc: core: sdio: hold retuning if sdio in 1-bit mode
gpio: vf610: set value before the direction to avoid a glitch
gpio: vf610: mask the gpio irq in system suspend and support wakeup

Hamza Mahfooz (1):
drm/edid: add 8 bpc quirk to the BenQ GW2765

Hangbin Liu (1):
ipv4/fib: send notify when delete source address routes

Hanjun Guo (1):
ACPI: bus: Move acpi_arm_init() to the place of after acpi_ghes_init()

Hannes Reinecke (1):
net/tls: split tls_rx_reader_lock

Hans de Goede (4):
HID: logitech-hidpp: Add Bluetooth ID for the Logitech M720 Triathlon mouse platform/x86: asus-wmi: Change ASUS_WMI_BRN_DOWN code from 0x20 to 0x2e platform/x86: asus-wmi: Only map brightness codes when using asus-wmi backlight control platform/x86: asus-wmi: Map 0x2a code, Ignore 0x2b and 0x2c events

Heiner Kallweit (1):
i2c: mux: Avoid potential false error message in i2c_mux_add_adapter

Herbert Xu (1):
KEYS: asymmetric: Fix sign/verify on pkcs1pad without a hash

Ilan Peer (1):
wifi: cfg80211: Fix 6GHz scan configuration

Iulia Tanasescu (1):
Bluetooth: ISO: Fix invalid context error

Jacek Lawrynowicz (1):
accel/ivpu: Don't flood dmesg with VPU ready message

Jakub Kicinski (4):
net: avoid UAF on deleted altname
net: fix ifname in netlink ntf during netns move
net: check for altname conflicts when changing netdev's netns
net: move altnames together with the netdevice

Jeff Layton (2):
overlayfs: set ctime when setting mtime and atime
nfs: decrement nrequests counter before releasing the req

Jeff Moyer (1):
io-wq: fully initialize wqe before calling cpuhp_state_add_instance_nocalls()

Jens Axboe (1):
io_uring: fix crash with IORING_SETUP_NO_MMAP and invalid SQ ring address

Jesse Brandeburg (2):
ice: fix over-shifted variable
ice: reset first in crash dump kernels

Jianbo Liu (1):
net/mlx5e: Don't offload internal port if filter device is out device

Jim Mattson (1):
KVM: x86: Mask LVTPC when handling a PMI

Jinjie Ruan (1):
net: dsa: bcm_sf2: Fix possible memory leak in bcm_sf2_mdio_register()

Jiri Wiesner (1):
bonding: Return pointer to data after pull on skb

Joerg Roedel (2):
x86/sev: Check IOBM for IOIO exceptions from user-space x86/sev: Check for user-space IOIO pointing to kernel space

Johan Hovold (8):
regmap: fix NULL deref on lookup
ASoC: codecs: wcd938x-sdw: fix use after free on driver unbind
ASoC: codecs: wcd938x-sdw: fix runtime PM imbalance on probe errors
ASoC: codecs: wcd938x: drop bogus bind error handling
ASoC: codecs: wcd938x: fix unbind tear down order
ASoC: codecs: wcd938x: fix resource leaks on bind errors
ASoC: codecs: wcd938x: fix regulator leaks on probe errors
ASoC: codecs: wcd938x: fix runtime PM imbalance on remove

Johannes Berg (4):
wifi: cfg80211: use system_unbound_wq for wiphy work
rfkill: sync before userspace visibility/changes
wifi: mac80211: work around Cisco AP 9115 VHT MPDU length
net: rfkill: reduce data->mtx scope in rfkill_fop_open

Josef Bacik (2):
btrfs: initialize start_slot in btrfs_log_prealloc_extents
btrfs: fix some -Wmaybe-uninitialized warnings in ioctl.c

Josua Mayer (1):
net: rfkill: gpio: prevent value glitch during probe

Kai Uwe Broulik (1):
drm: panel-orientation-quirks: Add quirk for One Mix 2S

Kailang Yang (1):
ALSA: hda/realtek - Fixed ASUS platform headset Mic issue

Karol Herbst (1):
drm/nouveau/disp: fix DP capable DSM connectors

Kees Cook (2):
sky2: Make sure there is at least one frag_addr available
Bluetooth: hci_sock: Correctly bounds check and pad HCI_MON_NEW_INDEX name

Keith Busch (2):
nvme: sanitize metadata bounce buffer for reads
nvme-pci: add BOGUS_NID for Intel 0a54 device

Kenneth Feng (1):

      drm/amd/pm: add unique_id for gc 11.0.3

Khaled Almahallawy (1):
drm/i915/cx0: Only clear/set the Pipe Reset bit of the PHY Lanes Owned

Kirill A. Shutemov (1):
efi/unaccepted: Fix soft lockups caused by parallel memory acceptance

Konrad Dybcio (2):
phy: qcom-qmp-combo: Square out 8550 POWER_STATE_CONFIG1
phy: qcom-qmp-combo: initialize PCS_USB registers

Konstantin Komarov (2):
fs/ntfs3: Fix shift-out-of-bounds in ntfs_fill_super fs/ntfs3: fix deadlock in mark_as_free_ex

Krzysztof Kozlowski (3):
nfc: nci: fix possible NULL pointer dereference in send_acknowledge()
dt-bindings: mmc: sdhci-msm: correct minimum number of clocks
pinctrl: qcom: lpass-lpi: fix concurrent register updates

Kuniyuki Iwashima (1):
tcp: Fix listen() warning with v4-mapped-v6 address.

Lama Kayal (1):
net/mlx5e: Take RTNL lock before triggering netdev notifiers

Lee, Chun-Yi (2):
Bluetooth: hci_event: Ignore NULL link key
Bluetooth: Reject connection with the device which has same BD_ADDR

Luiz Augusto von Dentz (6):
Bluetooth: hci_event: Fix coding style
Bluetooth: hci_conn: Fix modifying handle while aborting
Bluetooth: hci_core: Fix build warnings
Bluetooth: hci_sync: Fix not handling ISO_LINK in hci_abort_conn_sync
Bluetooth: hci_sync: Introduce PTR_UINT/UINT_PTR macros
Bluetooth: hci_event: Fix using memcmp when comparing keys

Luka Guzenko (1):
ALSA: hda/relatek: Enable Mute LED on HP Laptop 15s-fq5xxx

Ma Ke (3):
net: ipv4: fix return value check in esp_remove_trailer
net: ipv6: fix return value check in esp_remove_trailer
HID: holtek: fix slab-out-of-bounds Write in holtek_kbd_input_event

Maher Sanalla (1):
net/mlx5: Handle fw tracer change ownership event based on MTRC

Manish Chopra (1):
qed: fix LL2 RX buffer allocation

Martin Kurbanov (1):
mtd: spinand: micron: correct bitmask for ecc status

Martin Wilck (1):

      nvme-auth: use chap->s2 to indicate bidirectional authentication

Martino Fontana (1):
HID: nintendo: reinitialize USB Pro Controller after resuming from suspend

Masami Hiramatsu (Google) (1):
fprobe: Fix to ensure the number of active retprobes is not zero

Mateusz Pacuszka (1):
ice: Fix safe mode when DDP is missing

Mateusz Polchlopek (1):
docs: fix info about representor identification

Matthieu Baerts (2):
selftests: mptcp: join: no RST when rm subflow/addr
selftests: mptcp: join: correctly check for no RST

Maurizio Lombardi (2):
nvmet-auth: complete a request only after freeing the dhchap pointers
nvme-rdma: do not try to stop unallocated queues

Maxim Levitsky (3):
x86: KVM: SVM: always update the x2avic msr interception
x86: KVM: SVM: add support for Invalid IPI Vector interception
x86: KVM: SVM: refresh AVIC inhibition in svm_leave_nested()

Michael Ellerman (1):
powerpc/mm: Allow ARCH_FORCE_MAX_ORDER up to 12

Michal Schmidt (1):
i40e: prevent crash on probe if hw registers have invalid values

Michał Mirosław (1):
regulator/core: Revert "fix kobject release warning and memory leak in regulator_register()"

Miguel Ojeda (3):
rust: docs: fix logo replacement
docs: rust: update Rust docs output path
kbuild: remove old Rust docs output path

Miquel Raynal (3):
mtd: rawnand: pl353: Ensure program page operations are successful
mtd: rawnand: marvell: Ensure program page operations are successful
mtd: rawnand: arasan: Ensure program page operations are successful

Mårten Lindahl (1):
iio: light: vcnl4000: Don't power on/off chip in config

Neal Cardwell (1):
tcp: fix excessive TLP and RACK timeouts from HZ rounding

Nicholas Piggin (1):
powerpc/qspinlock: Fix stale propagated yield_cpu

Nikita Kravets (1):
platform/x86: msi-ec: Fix the 3rd config

Niklas Schnelle (1):
s390/pci: fix iommu bitmap allocation

Olga Kornievskaia (1):
NFSv4.1: fixup use EXCHGID4_FLAG_USE_PNFS_DS for DS server

Orlando Chamberlain (1):
apple-gmux: Hard Code max brightness for MMIO gmux

Pablo Neira Ayuso (4):
netfilter: nft_set_rbtree: .deactivate fails if element has expired
netfilter: nf_tables: do not refresh timeout when resetting element
netfilter: nf_tables: do not remove elements if set backend implements .abort
netfilter: nf_tables: revert do not remove elements if set backend implements .abort

Pablo Sun (1):
mmc: mtk-sd: Use readl_poll_timeout_atomic in msdc_reset_hw

Paolo Abeni (4):
tcp: check mptcp-level constraints for backlog coalescing
mptcp: more conservative check for zero probes
tcp: allow again tcp_disconnect() when threads are waiting
tcp_bpf: properly release resources on error paths

Pauli Virtanen (2):
Bluetooth: hci_sync: delete CIS in BT_OPEN/CONNECT/BOUND when aborting
Bluetooth: hci_sync: always check if connection is alive before deleting

Pavel Skripkin (1):
fs/ntfs3: Fix OOB read in ntfs_init_from_boot

Pedro Tammela (1):
net/sched: sch_hfsc: upgrade 'rt' to 'sc' when it becomes a inner curve

Peter Zijlstra (1):
perf: Disallow mis-matched inherited group reads

Phil Sutter (1):
selftests: netfilter: Run nft_audit.sh in its own netns

Puliang Lu (1):
USB: serial: option: add Fibocom to DELL custom modem FM101R-GL

Rahul Rameshbabu (1):

      HID: multitouch: Add required quirk for Synaptics 0xcd7e device

Renan Guilherme Lebre Ramos (1):
platform/x86: touchscreen_dmi: Add info for the Positivo C4128B

Richard Fitzgerald (2):
ASoC: cs35l56: Fix illegal use of init_completion()
ASoC: cs42l42: Fix missing include of gpio/consumer.h

Rob Herring (1):
arm64: dts: mediatek: Fix "mediatek,merge-mute" and "mediatek,merge-fifo-en" types

Rocky Liao (1):
Bluetooth: btusb: add shutdown function for QCA6174

Roman Kagan (1):
KVM: x86/pmu: Truncate counter value to allowed width on write

Rouven Czerwinski (1):
mtd: rawnand: Ensure the nand chip supports cached reads

Sagi Grimberg (1):
nvmet-tcp: Fix a possible UAF in queue intialization setup

Scott Mayhew (1):
NFS: Fix potential oops in nfs_inode_remove_request()

Sean Christopherson (2):
x86/fpu: Allow caller to constrain xfeatures when copying to uabi buffer
KVM: x86: Constrain guest-supported xfeatures only at KVM_GET_XSAVE{2}

Shailend Chand (1):
gve: Do not fully free QPL pages on prefill errors

Shay Drory (1):
net/mlx5: E-switch, register event handler before arming the event

Shinas Rasheed (1):
octeon_ep: update BQL sent bytes before ringing doorbell

Srinivas Pandruvada (1):
platform/x86: intel-uncore-freq: Conditionally create attribute for read frequency

Stanislaw Gruszka (1):
Revert "accel/ivpu: Use cached buffers for FW loading"

Stephen Boyd (1):
drm/bridge: ti-sn65dsi86: Associate DSI device lifetime with auxiliary device

Sunil V L (1):
ACPI: irq: Fix incorrect return value in acpi_register_gsi()

Sven van Ashbrook (1):
mmc: sdhci-pci-gli: fix LPM negotiation so x86/S0ix SoCs can suspend

Tomasz Swiatek (1):
platform/x86: touchscreen_dmi: Add info for the BUSH Bush Windows tablet

Tony Lindgren (4):
ARM: dts: ti: omap: Fix noisy serial with overrun-throttle-ms for mapphone
phy: mapphone-mdm6600: Fix runtime disable on probe
phy: mapphone-mdm6600: Fix runtime PM for remove
phy: mapphone-mdm6600: Fix pinctrl_pm handling for sleep pins

Trond Myklebust (2):
pNFS: Fix a hang in nfs4_evict_inode()
pNFS/flexfiles: Check the layout validity in ff_layout_mirror_prepare_stats

Ulf Hansson (1):
mmc: core: Fix error propagation for some ioctl commands

Ville Syrjälä (1):
drm/i915: Retry gtt fault when out of fence registers

Vladimir Oltean (1):
net: mdio-mux: fix C45 access returning -EIO after API change

Wedson Almeida Filho (1):
rust: error: fix the description for ECHILD

Wen Gong (1):
wifi: mac80211: allow transmitting EAPOL frames with tainted key

Willem de Bruijn (1):
net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation

Xingyuan Mo (2):
nf_tables: fix NULL pointer dereference in nft_expr_inner_parse()
nf_tables: fix NULL pointer dereference in nft_inner_init()

Xuewen Yan (1):
cpufreq: schedutil: Update next_freq when cpufreq_limits change

Ying Hsu (1):
Bluetooth: Avoid redundant authentication

Zeng Heng (1):
fs/ntfs3: fix panic about slab-out-of-bounds caused by ntfs_list_ea()

Zhang Changzhong (1):
xfrm6: fix inet6_dev refcount underflow problem

Ziqi Zhao (1):
fs/ntfs3: Fix possible null-pointer dereference in hdr_find_e()

Ziyang Xuan (1):
Bluetooth: Fix a refcnt underflow problem for hci_conn

Zygo Blaxell (1):
btrfs: fix stripe length calculation for non-zoned data chunk allocation

author maintainer
#1 lore raw
Documentation/devicetree/bindings/mmc/sdhci-msm.yaml +1 -1
index 6da28e630577..30a2c1e36b97 100644
@@ -69,7 +69,7 @@ properties:
     maxItems: 4
 
   clocks:
-    minItems: 3
+    minItems: 2
     items:
       - description: Main peripheral bus clock, PCLK/HCLK - AHB Bus clock
       - description: SDC MMC clock, MCLK
Documentation/networking/representors.rst +5 -3
index ee1f5cd54496..decb39c19b9e 100644
@@ -162,9 +162,11 @@ How are representors identified?
 The representor netdevice should *not* directly refer to a PCIe device (e.g.
 through ``net_dev->dev.parent`` / ``SET_NETDEV_DEV()``), either of the
 representee or of the switchdev function.
-Instead, it should implement the ``ndo_get_devlink_port()`` netdevice op, which
-the kernel uses to provide the ``phys_switch_id`` and ``phys_port_name`` sysfs
-nodes.  (Some legacy drivers implement ``ndo_get_port_parent_id()`` and
+Instead, the driver should use the ``SET_NETDEV_DEVLINK_PORT`` macro to
+assign a devlink port instance to the netdevice before registering the
+netdevice; the kernel uses the devlink port to provide the ``phys_switch_id``
+and ``phys_port_name`` sysfs nodes.
+(Some legacy drivers implement ``ndo_get_port_parent_id()`` and
 ``ndo_get_phys_port_name()`` directly, but this is deprecated.)  See
 :ref:`Documentation/networking/devlink/devlink-port.rst <devlink_port>` for the
 details of this API.
Documentation/rust/general-information.rst +1 -1
index 49029ee82e55..081397827a7e 100644
@@ -29,7 +29,7 @@ target with the same invocation used for compilation, e.g.::
 
 To read the docs locally in your web browser, run e.g.::
 
-	xdg-open rust/doc/kernel/index.html
+	xdg-open Documentation/output/rust/rustdoc/kernel/index.html
 
 To learn about how to write the documentation, please see coding-guidelines.rst.
 
Documentation/rust/index.rst +8 -0
index 4ae8c66b94fa..e599be2cec9b 100644
@@ -6,6 +6,14 @@ Rust
 Documentation related to Rust within the kernel. To start using Rust
 in the kernel, please read the quick-start.rst guide.
 
+.. only:: rustdoc and html
+
+	You can also browse `rustdoc documentation <rustdoc/kernel/index.html>`_.
+
+.. only:: not rustdoc and html
+
+	This documentation does not include rustdoc generated information.
+
 .. toctree::
     :maxdepth: 1
 
Makefile +2 -2
index a687c9a0646c..fc83c079c471 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 5
-SUBLEVEL = 8
+SUBLEVEL = 9
 EXTRAVERSION =
 NAME = Hurr durr I'ma ninja sloth
 
@@ -1595,7 +1595,7 @@ endif
 # Directories & files removed with 'make clean'
 CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
 	       modules.builtin modules.builtin.modinfo modules.nsdeps \
-	       compile_commands.json .thinlto-cache rust/test rust/doc \
+	       compile_commands.json .thinlto-cache rust/test \
 	       rust-project.json .vmlinux.objs .vmlinux.export.c
 
 # Directories & files removed with 'make mrproper'
arch/arm/boot/dts/ti/omap/motorola-mapphone-common.dtsi +1 -0
index d69f0f4b4990..d2d516d113ba 100644
@@ -640,6 +640,7 @@ &uart1 {
 &uart3 {
 	interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
 			       &omap4_pmx_core 0x17c>;
+	overrun-throttle-ms = <500>;
 };
 
 &uart4 {
arch/arm64/boot/dts/mediatek/mt8195.dtsi +5 -5
index 43011bc41da7..54c674c45b49 100644
@@ -2958,7 +2958,7 @@ merge1: vpp-merge@1c10c000 {
 			clock-names = "merge","merge_async";
 			power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
 			mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xc000 0x1000>;
-			mediatek,merge-mute = <1>;
+			mediatek,merge-mute;
 			resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE0_DL_ASYNC>;
 		};
 
@@ -2971,7 +2971,7 @@ merge2: vpp-merge@1c10d000 {
 			clock-names = "merge","merge_async";
 			power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
 			mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xd000 0x1000>;
-			mediatek,merge-mute = <1>;
+			mediatek,merge-mute;
 			resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE1_DL_ASYNC>;
 		};
 
@@ -2984,7 +2984,7 @@ merge3: vpp-merge@1c10e000 {
 			clock-names = "merge","merge_async";
 			power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
 			mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xe000 0x1000>;
-			mediatek,merge-mute = <1>;
+			mediatek,merge-mute;
 			resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE2_DL_ASYNC>;
 		};
 
@@ -2997,7 +2997,7 @@ merge4: vpp-merge@1c10f000 {
 			clock-names = "merge","merge_async";
 			power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
 			mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xf000 0x1000>;
-			mediatek,merge-mute = <1>;
+			mediatek,merge-mute;
 			resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE3_DL_ASYNC>;
 		};
 
@@ -3010,7 +3010,7 @@ merge5: vpp-merge@1c110000 {
 			clock-names = "merge","merge_async";
 			power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
 			mediatek,gce-client-reg = <&gce0 SUBSYS_1c11XXXX 0x0000 0x1000>;
-			mediatek,merge-fifo-en = <1>;
+			mediatek,merge-fifo-en;
 			resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE4_DL_ASYNC>;
 		};
 
arch/powerpc/Kconfig +1 -1
index 0b1172cbeccb..b3fdb3d26836 100644
@@ -917,7 +917,7 @@ config ARCH_FORCE_MAX_ORDER
 	default "6" if PPC32 && PPC_64K_PAGES
 	range 4 10 if PPC32 && PPC_256K_PAGES
 	default "4" if PPC32 && PPC_256K_PAGES
-	range 10 10
+	range 10 12
 	default "10"
 	help
 	  The kernel page allocator limits the size of maximal physically
arch/powerpc/lib/qspinlock.c +3 -0
index 253620979d0c..6dd2f46bd3ef 100644
@@ -406,6 +406,9 @@ static __always_inline bool yield_to_prev(struct qspinlock *lock, struct qnode *
 	if ((yield_count & 1) == 0)
 		goto yield_prev; /* owner vcpu is running */
 
+	if (get_owner_cpu(READ_ONCE(lock->val)) != yield_cpu)
+		goto yield_prev; /* re-sample lock owner */
+
 	spin_end();
 
 	preempted = true;
arch/s390/pci/pci_dma.c +13 -2
index 2d9b01d7ca4c..99209085c75b 100644
@@ -564,6 +564,17 @@ static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
 		s->dma_length = 0;
 	}
 }
+
+static unsigned long *bitmap_vzalloc(size_t bits, gfp_t flags)
+{
+	size_t n = BITS_TO_LONGS(bits);
+	size_t bytes;
+
+	if (unlikely(check_mul_overflow(n, sizeof(unsigned long), &bytes)))
+		return NULL;
+
+	return vzalloc(bytes);
+}
 	
 int zpci_dma_init_device(struct zpci_dev *zdev)
 {
@@ -604,13 +615,13 @@ int zpci_dma_init_device(struct zpci_dev *zdev)
 				zdev->end_dma - zdev->start_dma + 1);
 	zdev->end_dma = zdev->start_dma + zdev->iommu_size - 1;
 	zdev->iommu_pages = zdev->iommu_size >> PAGE_SHIFT;
-	zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8);
+	zdev->iommu_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
 	if (!zdev->iommu_bitmap) {
 		rc = -ENOMEM;
 		goto free_dma_table;
 	}
 	if (!s390_iommu_strict) {
-		zdev->lazy_bitmap = vzalloc(zdev->iommu_pages / 8);
+		zdev->lazy_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
 		if (!zdev->lazy_bitmap) {
 			rc = -ENOMEM;
 			goto free_bitmap;
arch/x86/boot/compressed/sev.c +10 -0
index c3e343bd4760..45dd3ca2c737 100644
@@ -103,6 +103,16 @@ static enum es_result vc_read_mem(struct es_em_ctxt *ctxt,
 	return ES_OK;
 }
 
+static enum es_result vc_ioio_check(struct es_em_ctxt *ctxt, u16 port, size_t size)
+{
+	return ES_OK;
+}
+
+static bool fault_in_kernel_space(unsigned long address)
+{
+	return false;
+}
+
 #undef __init
 #define __init
 
arch/x86/include/asm/fpu/api.h +2 -1
index b475d9a582b8..e829fa4c6788 100644
@@ -148,7 +148,8 @@ static inline void fpu_update_guest_xfd(struct fpu_guest *guest_fpu, u64 xfd) {
 static inline void fpu_sync_guest_vmexit_xfd_state(void) { }
 #endif
 
-extern void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf, unsigned int size, u32 pkru);
+extern void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf,
+					   unsigned int size, u64 xfeatures, u32 pkru);
 extern int fpu_copy_uabi_to_guest_fpstate(struct fpu_guest *gfpu, const void *buf, u64 xcr0, u32 *vpkru);
 
 static inline void fpstate_set_confidential(struct fpu_guest *gfpu)
arch/x86/include/asm/svm.h +1 -0
index e7c7379d6ac7..3aa23b250d5e 100644
@@ -268,6 +268,7 @@ enum avic_ipi_failure_cause {
 	AVIC_IPI_FAILURE_TARGET_NOT_RUNNING,
 	AVIC_IPI_FAILURE_INVALID_TARGET,
 	AVIC_IPI_FAILURE_INVALID_BACKING_PAGE,
+	AVIC_IPI_FAILURE_INVALID_IPI_VECTOR,
 };
 
 #define AVIC_PHYSICAL_MAX_INDEX_MASK	GENMASK_ULL(8, 0)
arch/x86/kernel/fpu/core.c +3 -2
index 98e507cc7d34..b582325b9c37 100644
@@ -369,14 +369,15 @@ int fpu_swap_kvm_fpstate(struct fpu_guest *guest_fpu, bool enter_guest)
 EXPORT_SYMBOL_GPL(fpu_swap_kvm_fpstate);
 
 void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf,
-				    unsigned int size, u32 pkru)
+				    unsigned int size, u64 xfeatures, u32 pkru)
 {
 	struct fpstate *kstate = gfpu->fpstate;
 	union fpregs_state *ustate = buf;
 	struct membuf mb = { .p = buf, .left = size };
 
 	if (cpu_feature_enabled(X86_FEATURE_XSAVE)) {
-		__copy_xstate_to_uabi_buf(mb, kstate, pkru, XSTATE_COPY_XSAVE);
+		__copy_xstate_to_uabi_buf(mb, kstate, xfeatures, pkru,
+					  XSTATE_COPY_XSAVE);
 	} else {
 		memcpy(&ustate->fxsave, &kstate->regs.fxsave,
 		       sizeof(ustate->fxsave));
arch/x86/kernel/fpu/xstate.c +6 -6
index 1afbc4866b10..ebe698f8af73 100644
@@ -1053,6 +1053,7 @@ static void copy_feature(bool from_xstate, struct membuf *to, void *xstate,
  * __copy_xstate_to_uabi_buf - Copy kernel saved xstate to a UABI buffer
  * @to:		membuf descriptor
  * @fpstate:	The fpstate buffer from which to copy
+ * @xfeatures:	The mask of xfeatures to save (XSAVE mode only)
  * @pkru_val:	The PKRU value to store in the PKRU component
  * @copy_mode:	The requested copy mode
  *
@@ -1063,7 +1064,8 @@ static void copy_feature(bool from_xstate, struct membuf *to, void *xstate,
  * It supports partial copy but @to.pos always starts from zero.
  */
 void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
-			       u32 pkru_val, enum xstate_copy_mode copy_mode)
+			       u64 xfeatures, u32 pkru_val,
+			       enum xstate_copy_mode copy_mode)
 {
 	const unsigned int off_mxcsr = offsetof(struct fxregs_state, mxcsr);
 	struct xregs_state *xinit = &init_fpstate.regs.xsave;
@@ -1087,7 +1089,7 @@ void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
 		break;
 
 	case XSTATE_COPY_XSAVE:
-		header.xfeatures &= fpstate->user_xfeatures;
+		header.xfeatures &= fpstate->user_xfeatures & xfeatures;
 		break;
 	}
 
@@ -1189,6 +1191,7 @@ void copy_xstate_to_uabi_buf(struct membuf to, struct task_struct *tsk,
 			     enum xstate_copy_mode copy_mode)
 {
 	__copy_xstate_to_uabi_buf(to, tsk->thread.fpu.fpstate,
+				  tsk->thread.fpu.fpstate->user_xfeatures,
 				  tsk->thread.pkru, copy_mode);
 }
 
@@ -1540,10 +1543,7 @@ static int fpstate_realloc(u64 xfeatures, unsigned int ksize,
 		fpregs_restore_userregs();
 
 	newfps->xfeatures = curfps->xfeatures | xfeatures;
-
-	if (!guest_fpu)
-		newfps->user_xfeatures = curfps->user_xfeatures | xfeatures;
-
+	newfps->user_xfeatures = curfps->user_xfeatures | xfeatures;
 	newfps->xfd = curfps->xfd & ~xfeatures;
 
 	/* Do the final updates within the locked region */
arch/x86/kernel/fpu/xstate.h +2 -1
index a4ecb04d8d64..3518fb26d06b 100644
@@ -43,7 +43,8 @@ enum xstate_copy_mode {
 
 struct membuf;
 extern void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
-				      u32 pkru_val, enum xstate_copy_mode copy_mode);
+				      u64 xfeatures, u32 pkru_val,
+				      enum xstate_copy_mode copy_mode);
 extern void copy_xstate_to_uabi_buf(struct membuf to, struct task_struct *tsk,
 				    enum xstate_copy_mode mode);
 extern int copy_uabi_from_kernel_to_xstate(struct fpstate *fpstate, const void *kbuf, u32 *pkru);
arch/x86/kernel/sev-shared.c +44 -9

137 lines not on this page · raw message

arch/x86/kernel/sev.c +30 -0
index 2b0342a03c1b..60ea3f1a9653 100644
@@ -524,6 +524,33 @@ static enum es_result vc_slow_virt_to_phys(struct ghcb *ghcb, struct es_em_ctxt
 	return ES_OK;
 }
 
+static enum es_result vc_ioio_check(struct es_em_ctxt *ctxt, u16 port, size_t size)
+{
+	BUG_ON(size > 4);
+
+	if (user_mode(ctxt->regs)) {
+		struct thread_struct *t = &current->thread;
+		struct io_bitmap *iobm = t->io_bitmap;
+		size_t idx;
+
+		if (!iobm)
+			goto fault;
+
+		for (idx = port; idx < port + size; ++idx) {
+			if (test_bit(idx, iobm->bitmap))
+				goto fault;
+		}
+	}
+
+	return ES_OK;
+
+fault:
+	ctxt->fi.vector = X86_TRAP_GP;
+	ctxt->fi.error_code = 0;
+
+	return ES_EXCEPTION;
+}
+
 /* Include code shared with pre-decompression boot stage */
 #include "sev-shared.c"
 
@@ -1508,6 +1535,9 @@ static enum es_result vc_handle_mmio(struct ghcb *ghcb, struct es_em_ctxt *ctxt)
 			return ES_DECODE_FAILED;
 	}
 
+	if (user_mode(ctxt->regs))
+		return ES_UNSUPPORTED;
+
 	switch (mmio) {
 	case INSN_MMIO_WRITE:
 		memcpy(ghcb->shared_buffer, reg_data, bytes);
arch/x86/kvm/cpuid.c +0 -8
index d3432687c9e6..7bdc66abfc92 100644
@@ -326,14 +326,6 @@ static void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)
 	vcpu->arch.guest_supported_xcr0 =
 		cpuid_get_supported_xcr0(vcpu->arch.cpuid_entries, vcpu->arch.cpuid_nent);
 
-	/*
-	 * FP+SSE can always be saved/restored via KVM_{G,S}ET_XSAVE, even if
-	 * XSAVE/XCRO are not exposed to the guest, and even if XSAVE isn't
-	 * supported by the host.
-	 */
-	vcpu->arch.guest_fpu.fpstate->user_xfeatures = vcpu->arch.guest_supported_xcr0 |
-						       XFEATURE_MASK_FPSSE;
-
 	kvm_update_pv_runtime(vcpu);
 
 	vcpu->arch.maxphyaddr = cpuid_query_maxphyaddr(vcpu);
arch/x86/kvm/lapic.c +6 -2
index a983a16163b1..e74e223f46aa 100644
@@ -2738,13 +2738,17 @@ int kvm_apic_local_deliver(struct kvm_lapic *apic, int lvt_type)
 {
 	u32 reg = kvm_lapic_get_reg(apic, lvt_type);
 	int vector, mode, trig_mode;
+	int r;
 
 	if (kvm_apic_hw_enabled(apic) && !(reg & APIC_LVT_MASKED)) {
 		vector = reg & APIC_VECTOR_MASK;
 		mode = reg & APIC_MODE_MASK;
 		trig_mode = reg & APIC_LVT_LEVEL_TRIGGER;
-		return __apic_accept_irq(apic, mode, vector, 1, trig_mode,
-					NULL);
+
+		r = __apic_accept_irq(apic, mode, vector, 1, trig_mode, NULL);
+		if (r && lvt_type == APIC_LVTPC)
+			kvm_lapic_set_reg(apic, APIC_LVTPC, reg | APIC_LVT_MASKED);
+		return r;
 	}
 	return 0;
 }
arch/x86/kvm/pmu.h +6 -0
index 7d9ba301c090..1d64113de488 100644
@@ -74,6 +74,12 @@ static inline u64 pmc_read_counter(struct kvm_pmc *pmc)
 	return counter & pmc_bitmask(pmc);
 }
 
+static inline void pmc_write_counter(struct kvm_pmc *pmc, u64 val)
+{
+	pmc->counter += val - pmc_read_counter(pmc);
+	pmc->counter &= pmc_bitmask(pmc);
+}
+
 static inline void pmc_release_perf_event(struct kvm_pmc *pmc)
 {
 	if (pmc->perf_event) {
arch/x86/kvm/svm/avic.c +4 -1
index 2092db892d7d..4b74ea91f4e6 100644
@@ -529,8 +529,11 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)
 	case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE:
 		WARN_ONCE(1, "Invalid backing page\n");
 		break;
+	case AVIC_IPI_FAILURE_INVALID_IPI_VECTOR:
+		/* Invalid IPI with vector < 16 */
+		break;
 	default:
-		pr_err("Unknown IPI interception\n");
+		vcpu_unimpl(vcpu, "Unknown avic incomplete IPI interception\n");
 	}
 
 	return 1;
arch/x86/kvm/svm/nested.c +3 -0
index c66c823ae222..36482780a42f 100644
@@ -1243,6 +1243,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu)
 
 		nested_svm_uninit_mmu_context(vcpu);
 		vmcb_mark_all_dirty(svm->vmcb);
+
+		if (kvm_apicv_activated(vcpu->kvm))
+			kvm_make_request(KVM_REQ_APICV_UPDATE, vcpu);
 	}
 
 	kvm_clear_request(KVM_REQ_GET_NESTED_STATE_PAGES, vcpu);
arch/x86/kvm/svm/pmu.c +1 -1
index cef5a3d0abd0..373ff6a6687b 100644
@@ -160,7 +160,7 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 	/* MSR_PERFCTRn */
 	pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_COUNTER);
 	if (pmc) {
-		pmc->counter += data - pmc_read_counter(pmc);
+		pmc_write_counter(pmc, data);
 		pmc_update_sample_period(pmc);
 		return 0;
 	}
arch/x86/kvm/svm/svm.c +1 -2
index e3d92670c111..c8466bc64b87 100644
@@ -829,8 +829,7 @@ void svm_set_x2apic_msr_interception(struct vcpu_svm *svm, bool intercept)
 	if (intercept == svm->x2avic_msrs_intercepted)
 		return;
 
-	if (!x2avic_enabled ||
-	    !apic_x2apic_mode(svm->vcpu.arch.apic))
+	if (!x2avic_enabled)
 		return;
 
 	for (i = 0; i < MAX_DIRECT_ACCESS_MSRS; i++) {
arch/x86/kvm/vmx/pmu_intel.c +2 -2
index 80c769c58a87..18a658aa2a8d 100644
@@ -406,11 +406,11 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 			if (!msr_info->host_initiated &&
 			    !(msr & MSR_PMC_FULL_WIDTH_BIT))
 				data = (s64)(s32)data;
-			pmc->counter += data - pmc_read_counter(pmc);
+			pmc_write_counter(pmc, data);
 			pmc_update_sample_period(pmc);
 			break;
 		} else if ((pmc = get_fixed_pmc(pmu, msr))) {
-			pmc->counter += data - pmc_read_counter(pmc);
+			pmc_write_counter(pmc, data);
 			pmc_update_sample_period(pmc);
 			break;
 		} else if ((pmc = get_gp_pmc(pmu, msr, MSR_P6_EVNTSEL0))) {
arch/x86/kvm/x86.c +24 -13
index e24bbc8d1fc1..7bcf1a76a6ab 100644
@@ -5385,26 +5385,37 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
 	return 0;
 }
 
-static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
-					 struct kvm_xsave *guest_xsave)
-{
-	if (fpstate_is_confidential(&vcpu->arch.guest_fpu))
-		return;
-
-	fpu_copy_guest_fpstate_to_uabi(&vcpu->arch.guest_fpu,
-				       guest_xsave->region,
-				       sizeof(guest_xsave->region),
-				       vcpu->arch.pkru);
-}
 
 static void kvm_vcpu_ioctl_x86_get_xsave2(struct kvm_vcpu *vcpu,
 					  u8 *state, unsigned int size)
 {
+	/*
+	 * Only copy state for features that are enabled for the guest.  The
+	 * state itself isn't problematic, but setting bits in the header for
+	 * features that are supported in *this* host but not exposed to the
+	 * guest can result in KVM_SET_XSAVE failing when live migrating to a
+	 * compatible host without the features that are NOT exposed to the
+	 * guest.
+	 *
+	 * FP+SSE can always be saved/restored via KVM_{G,S}ET_XSAVE, even if
+	 * XSAVE/XCRO are not exposed to the guest, and even if XSAVE isn't
+	 * supported by the host.
+	 */
+	u64 supported_xcr0 = vcpu->arch.guest_supported_xcr0 |
+			     XFEATURE_MASK_FPSSE;
+
 	if (fpstate_is_confidential(&vcpu->arch.guest_fpu))
 		return;
 
-	fpu_copy_guest_fpstate_to_uabi(&vcpu->arch.guest_fpu,
-				       state, size, vcpu->arch.pkru);
+	fpu_copy_guest_fpstate_to_uabi(&vcpu->arch.guest_fpu, state, size,
+				       supported_xcr0, vcpu->arch.pkru);
+}
+
+static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
+					 struct kvm_xsave *guest_xsave)
+{
+	return kvm_vcpu_ioctl_x86_get_xsave2(vcpu, (void *)guest_xsave->region,
+					     sizeof(guest_xsave->region));
 }
 
 static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
crypto/asymmetric_keys/public_key.c +2 -3
index 773e159dbbcb..a957304304be 100644
@@ -81,14 +81,13 @@ software_key_determine_akcipher(const struct public_key *pkey,
 		 * RSA signatures usually use EMSA-PKCS1-1_5 [RFC3447 sec 8.2].
 		 */
 		if (strcmp(encoding, "pkcs1") == 0) {
+			*sig = op == kernel_pkey_sign ||
+			       op == kernel_pkey_verify;
 			if (!hash_algo) {
-				*sig = false;
 				n = snprintf(alg_name, CRYPTO_MAX_ALG_NAME,
 					     "pkcs1pad(%s)",
 					     pkey->pkey_algo);
 			} else {
-				*sig = op == kernel_pkey_sign ||
-				       op == kernel_pkey_verify;
 				n = snprintf(alg_name, CRYPTO_MAX_ALG_NAME,
 					     "pkcs1pad(%s,%s)",
 					     pkey->pkey_algo, hash_algo);
drivers/accel/ivpu/ivpu_drv.c +1 -1
index 8396db2b5203..09dee5be2070 100644
@@ -303,7 +303,7 @@ static int ivpu_wait_for_ready(struct ivpu_device *vdev)
 	}
 
 	if (!ret)
-		ivpu_info(vdev, "VPU ready message received successfully\n");
+		ivpu_dbg(vdev, PM, "VPU ready message received successfully\n");
 	else
 		ivpu_hw_diagnose_failure(vdev);
 
drivers/accel/ivpu/ivpu_fw.c +4 -5
index 93c69aaa6218..34e4026c7758 100644
@@ -195,8 +195,7 @@ static int ivpu_fw_mem_init(struct ivpu_device *vdev)
 	if (ret)
 		return ret;
 
-	fw->mem = ivpu_bo_alloc_internal(vdev, fw->runtime_addr, fw->runtime_size,
-					 DRM_IVPU_BO_CACHED | DRM_IVPU_BO_NOSNOOP);
+	fw->mem = ivpu_bo_alloc_internal(vdev, fw->runtime_addr, fw->runtime_size, DRM_IVPU_BO_WC);
 	if (!fw->mem) {
 		ivpu_err(vdev, "Failed to allocate firmware runtime memory\n");
 		return -ENOMEM;
@@ -273,7 +272,7 @@ int ivpu_fw_load(struct ivpu_device *vdev)
 		memset(start, 0, size);
 	}
 
-	clflush_cache_range(fw->mem->kvaddr, fw->mem->base.size);
+	wmb(); /* Flush WC buffers after writing fw->mem */
 
 	return 0;
 }
@@ -375,7 +374,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params
 	if (!ivpu_fw_is_cold_boot(vdev)) {
 		boot_params->save_restore_ret_address = 0;
 		vdev->pm->is_warmboot = true;
-		clflush_cache_range(vdev->fw->mem->kvaddr, SZ_4K);
+		wmb(); /* Flush WC buffers after writing save_restore_ret_address */
 		return;
 	}
 
@@ -430,7 +429,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params
 	boot_params->punit_telemetry_sram_size = ivpu_hw_reg_telemetry_size_get(vdev);
 	boot_params->vpu_telemetry_enable = ivpu_hw_reg_telemetry_enable_get(vdev);
 
-	clflush_cache_range(vdev->fw->mem->kvaddr, SZ_4K);
+	wmb(); /* Flush WC buffers after writing bootparams */
 
 	ivpu_fw_boot_params_print(vdev, boot_params);
 }
drivers/accel/ivpu/ivpu_gem.h +0 -5
index f4130586ff1b..6b0ceda5f253 100644
@@ -8,8 +8,6 @@
 #include <drm/drm_gem.h>
 #include <drm/drm_mm.h>
 
-#define DRM_IVPU_BO_NOSNOOP       0x10000000
-
 struct dma_buf;
 struct ivpu_bo_ops;
 struct ivpu_file_priv;
@@ -85,9 +83,6 @@ static inline u32 ivpu_bo_cache_mode(struct ivpu_bo *bo)
 
 static inline bool ivpu_bo_is_snooped(struct ivpu_bo *bo)
 {
-	if (bo->flags & DRM_IVPU_BO_NOSNOOP)
-		return false;
-
 	return ivpu_bo_cache_mode(bo) == DRM_IVPU_BO_CACHED;
 }
 
drivers/acpi/bus.c +1 -1
index 2fc2b43a4ed3..6d3b878a1358 100644
@@ -1387,10 +1387,10 @@ static int __init acpi_init(void)
 	acpi_init_ffh();
 
 	pci_mmcfg_late_init();
-	acpi_arm_init();
 	acpi_viot_early_init();
 	acpi_hest_init();
 	acpi_ghes_init();
+	acpi_arm_init();
 	acpi_scan_init();
 	acpi_ec_init();
 	acpi_debugfs_init();
drivers/acpi/irq.c +6 -1
index c2c786eb95ab..1687483ff319 100644
@@ -57,6 +57,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger,
 		      int polarity)
 {
 	struct irq_fwspec fwspec;
+	unsigned int irq;
 
 	fwspec.fwnode = acpi_get_gsi_domain_id(gsi);
 	if (WARN_ON(!fwspec.fwnode)) {
@@ -68,7 +69,11 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger,
 	fwspec.param[1] = acpi_dev_get_irq_type(trigger, polarity);
 	fwspec.param_count = 2;
 
-	return irq_create_fwspec_mapping(&fwspec);
+	irq = irq_create_fwspec_mapping(&fwspec);
+	if (!irq)
+		return -EINVAL;
+
+	return irq;
 }
 EXPORT_SYMBOL_GPL(acpi_register_gsi);
 
drivers/ata/libata-core.c +1 -1
index 2a21f4d9500d..97a842b57a75 100644
@@ -2624,7 +2624,7 @@ static int ata_dev_config_lba(struct ata_device *dev)
 {
 	const u16 *id = dev->id;
 	const char *lba_desc;
-	char ncq_desc[24];
+	char ncq_desc[32];
 	int ret;
 
 	dev->flags |= ATA_DFLAG_LBA;
drivers/ata/libata-eh.c +1 -1
index 150e7ab62d1a..e7c4edb04f8e 100644
@@ -2366,7 +2366,7 @@ static void ata_eh_link_report(struct ata_link *link)
 	struct ata_eh_context *ehc = &link->eh_context;
 	struct ata_queued_cmd *qc;
 	const char *frozen, *desc;
-	char tries_buf[6] = "";
+	char tries_buf[16] = "";
 	int tag, nr_failed = 0;
 
 	if (ehc->i.flags & ATA_EHI_QUIET)
drivers/base/regmap/regmap.c +1 -1
index 1bfd1727b4da..bb2f41043f60 100644
@@ -1572,7 +1572,7 @@ static int dev_get_regmap_match(struct device *dev, void *res, void *data)
 
 	/* If the user didn't specify a name match any */
 	if (data)
-		return !strcmp((*r)->name, data);
+		return (*r)->name && !strcmp((*r)->name, data);
 	else
 		return 1;
 }
drivers/bluetooth/btusb.c +1 -0
index dfdfb72d350f..ca9e2a210fff 100644
@@ -4348,6 +4348,7 @@ static int btusb_probe(struct usb_interface *intf,
 
 	if (id->driver_info & BTUSB_QCA_ROME) {
 		data->setup_on_usb = btusb_setup_qca;
+		hdev->shutdown = btusb_shutdown_qca;
 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
 		hdev->cmd_timeout = btusb_qca_cmd_timeout;
 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
drivers/bluetooth/hci_vhci.c +3 -0
index 40e2b9fa11a2..f3892e9ce800 100644
@@ -74,7 +74,10 @@ static int vhci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 	struct vhci_data *data = hci_get_drvdata(hdev);
 
 	memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
+
+	mutex_lock(&data->open_mutex);
 	skb_queue_tail(&data->readq, skb);
+	mutex_unlock(&data->open_mutex);
 
 	wake_up_interruptible(&data->read_wait);
 	return 0;
drivers/firmware/efi/unaccepted_memory.c +60 -4

95 lines not on this page · raw message

drivers/gpio/gpio-timberdale.c +3 -2
index de14949a3fe5..92c1f2baa4bf 100644
@@ -43,9 +43,10 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
 	unsigned offset, bool enabled)
 {
 	struct timbgpio *tgpio = gpiochip_get_data(gpio);
+	unsigned long flags;
 	u32 reg;
 
-	spin_lock(&tgpio->lock);
+	spin_lock_irqsave(&tgpio->lock, flags);
 	reg = ioread32(tgpio->membase + offset);
 
 	if (enabled)
@@ -54,7 +55,7 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
 		reg &= ~(1 << index);
 
 	iowrite32(reg, tgpio->membase + offset);
-	spin_unlock(&tgpio->lock);
+	spin_unlock_irqrestore(&tgpio->lock, flags);
 
 	return 0;
 }
drivers/gpio/gpio-vf610.c +4 -3
index d3f3a69d4907..314dfaa63385 100644
@@ -127,14 +127,14 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
 	unsigned long mask = BIT(gpio);
 	u32 val;
 
+	vf610_gpio_set(chip, gpio, value);
+
 	if (port->sdata && port->sdata->have_paddr) {
 		val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR);
 		val |= mask;
 		vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR);
 	}
 
-	vf610_gpio_set(chip, gpio, value);
-
 	return pinctrl_gpio_direction_output(chip->base + gpio);
 }
 
@@ -247,7 +247,8 @@ static const struct irq_chip vf610_irqchip = {
 	.irq_unmask = vf610_gpio_irq_unmask,
 	.irq_set_type = vf610_gpio_irq_set_type,
 	.irq_set_wake = vf610_gpio_irq_set_wake,
-	.flags = IRQCHIP_IMMUTABLE,
+	.flags = IRQCHIP_IMMUTABLE | IRQCHIP_MASK_ON_SUSPEND
+			| IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND,
 	GPIOCHIP_IRQ_RESOURCE_HELPERS,
 };
 
drivers/gpio/gpiolib-acpi.c +1 -0
index 97496c0f9133..a775d2bdac94 100644
@@ -951,6 +951,7 @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,
 	if (!propname)
 		return ERR_PTR(-EINVAL);
 
+	memset(&lookup, 0, sizeof(lookup));
 	lookup.index = index;
 
 	ret = acpi_gpio_property_lookup(fwnode, propname, index, &lookup);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +2 -1
index ec1ec08d4058..7a67bb149015 100644
@@ -1094,7 +1094,8 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,
 			struct drm_gem_object *gobj = dma_buf->priv;
 			struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
 
-			if (abo->tbo.resource->mem_type == TTM_PL_VRAM)
+			if (abo->tbo.resource &&
+			    abo->tbo.resource->mem_type == TTM_PL_VRAM)
 				bo = gem_to_amdgpu_bo(gobj);
 		}
 		mem = bo->tbo.resource;
drivers/gpu/drm/amd/pm/amdgpu_pm.c +1 -0
index d68fe5474676..7f7a476b6829 100644
@@ -2077,6 +2077,7 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 		case IP_VERSION(11, 0, 0):
 		case IP_VERSION(11, 0, 1):
 		case IP_VERSION(11, 0, 2):
+		case IP_VERSION(11, 0, 3):
 			*states = ATTR_STATE_SUPPORTED;
 			break;
 		default:
drivers/gpu/drm/bridge/ti-sn65dsi86.c +7 -7
index f448b903e190..84148a79414b 100644
@@ -692,7 +692,7 @@ static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
 	return container_of(bridge, struct ti_sn65dsi86, bridge);
 }
 
-static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
+static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86 *pdata)
 {
 	int val;
 	struct mipi_dsi_host *host;
@@ -707,7 +707,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
 	if (!host)
 		return -EPROBE_DEFER;
 
-	dsi = devm_mipi_dsi_device_register_full(dev, host, &info);
+	dsi = devm_mipi_dsi_device_register_full(&adev->dev, host, &info);
 	if (IS_ERR(dsi))
 		return PTR_ERR(dsi);
 
@@ -725,7 +725,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
 
 	pdata->dsi = dsi;
 
-	return devm_mipi_dsi_attach(dev, dsi);
+	return devm_mipi_dsi_attach(&adev->dev, dsi);
 }
 
 static int ti_sn_bridge_attach(struct drm_bridge *bridge,
@@ -1298,9 +1298,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,
 	struct device_node *np = pdata->dev->of_node;
 	int ret;
 
-	pdata->next_bridge = devm_drm_of_get_bridge(pdata->dev, np, 1, 0);
+	pdata->next_bridge = devm_drm_of_get_bridge(&adev->dev, np, 1, 0);
 	if (IS_ERR(pdata->next_bridge))
-		return dev_err_probe(pdata->dev, PTR_ERR(pdata->next_bridge),
+		return dev_err_probe(&adev->dev, PTR_ERR(pdata->next_bridge),
 				     "failed to create panel bridge\n");
 
 	ti_sn_bridge_parse_lanes(pdata, np);
@@ -1319,9 +1319,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,
 
 	drm_bridge_add(&pdata->bridge);
 
-	ret = ti_sn_attach_host(pdata);
+	ret = ti_sn_attach_host(adev, pdata);
 	if (ret) {
-		dev_err_probe(pdata->dev, ret, "failed to attach dsi host\n");
+		dev_err_probe(&adev->dev, ret, "failed to attach dsi host\n");
 		goto err_remove_bridge;
 	}
 
drivers/gpu/drm/drm_edid.c +3 -0
index 9271e47d6657..69d855123d3e 100644
@@ -123,6 +123,9 @@ static const struct edid_quirk {
 	/* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
 	EDID_QUIRK('A', 'E', 'O', 0, EDID_QUIRK_FORCE_6BPC),
 
+	/* BenQ GW2765 */
+	EDID_QUIRK('B', 'N', 'Q', 0x78d6, EDID_QUIRK_FORCE_8BPC),
+
 	/* BOE model on HP Pavilion 15-n233sl reports 8 bpc, but is a 6 bpc panel */
 	EDID_QUIRK('B', 'O', 'E', 0x78b, EDID_QUIRK_FORCE_6BPC),
 
drivers/gpu/drm/drm_panel_orientation_quirks.c +16 -0
index 0cb646cb04ee..d5c15292ae93 100644
@@ -38,6 +38,14 @@ static const struct drm_dmi_panel_orientation_data gpd_micropc = {
 	.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
 };
 
+static const struct drm_dmi_panel_orientation_data gpd_onemix2s = {
+	.width = 1200,
+	.height = 1920,
+	.bios_dates = (const char * const []){ "05/21/2018", "10/26/2018",
+		"03/04/2019", NULL },
+	.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
+};
+
 static const struct drm_dmi_panel_orientation_data gpd_pocket = {
 	.width = 1200,
 	.height = 1920,
@@ -401,6 +409,14 @@ static const struct dmi_system_id orientation_data[] = {
 		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LTH17"),
 		},
 		.driver_data = (void *)&lcd800x1280_rightside_up,
+	}, {	/* One Mix 2S (generic strings, also match on bios date) */
+		.matches = {
+		  DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
+		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"),
+		  DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"),
+		  DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
+		},
+		.driver_data = (void *)&gpd_onemix2s,
 	},
 	{}
 };
drivers/gpu/drm/i915/display/intel_cx0_phy.c +1 -2
index 719447ce86e7..974dd52e720c 100644
@@ -2554,8 +2554,7 @@ static void intel_cx0_phy_lane_reset(struct drm_i915_private *i915,
 		drm_warn(&i915->drm, "PHY %c failed to bring out of SOC reset after %dus.\n",
 			 phy_name(phy), XELPDP_PORT_BUF_SOC_READY_TIMEOUT_US);
 
-	intel_de_rmw(i915, XELPDP_PORT_BUF_CTL2(port),
-		     XELPDP_LANE_PIPE_RESET(0) | XELPDP_LANE_PIPE_RESET(1),
+	intel_de_rmw(i915, XELPDP_PORT_BUF_CTL2(port), lane_pipe_reset,
 		     lane_pipe_reset);
 
 	if (__intel_de_wait_for_register(i915, XELPDP_PORT_BUF_CTL2(port),
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -0
index aa4d842d4c5a..310654542b42 100644
@@ -235,6 +235,7 @@ static vm_fault_t i915_error_to_vmf_fault(int err)
 	case 0:
 	case -EAGAIN:
 	case -ENOSPC: /* transient failure to evict? */
+	case -ENOBUFS: /* temporarily out of fences? */
 	case -ERESTARTSYS:
 	case -EINTR:
 	case -EBUSY:
drivers/gpu/drm/mediatek/mtk_drm_gem.c +5 -1
index 9f364df52478..0e0a41b2f57f 100644
@@ -239,6 +239,7 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
 	npages = obj->size >> PAGE_SHIFT;
 	mtk_gem->pages = kcalloc(npages, sizeof(*mtk_gem->pages), GFP_KERNEL);
 	if (!mtk_gem->pages) {
+		sg_free_table(sgt);
 		kfree(sgt);
 		return -ENOMEM;
 	}
@@ -248,12 +249,15 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
 	mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,
 			       pgprot_writecombine(PAGE_KERNEL));
 	if (!mtk_gem->kvaddr) {
+		sg_free_table(sgt);
 		kfree(sgt);
 		kfree(mtk_gem->pages);
 		return -ENOMEM;
 	}
-out:
+	sg_free_table(sgt);
 	kfree(sgt);
+
+out:
 	iosys_map_set_vaddr(map, mtk_gem->kvaddr);
 
 	return 0;
drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c +13 -1
index 46b057fe1412..3249e5c1c893 100644
@@ -62,6 +62,18 @@ nvkm_uconn_uevent_gpio(struct nvkm_object *object, u64 token, u32 bits)
 	return object->client->event(token, &args, sizeof(args.v0));
 }
 
+static bool
+nvkm_connector_is_dp_dms(u8 type)
+{
+	switch (type) {
+	case DCB_CONNECTOR_DMS59_DP0:
+	case DCB_CONNECTOR_DMS59_DP1:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static int
 nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_uevent *uevent)
 {
@@ -101,7 +113,7 @@ nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_
 	if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_GPIO_LO;
 	if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ) {
 		/* TODO: support DP IRQ on ANX9805 and remove this hack. */
-		if (!outp->info.location)
+		if (!outp->info.location && !nvkm_connector_is_dp_dms(conn->info.type))
 			return -EINVAL;
 	}
 
drivers/hid/hid-holtek-kbd.c +4 -0
index 403506b9697e..b346d68a06f5 100644
@@ -130,6 +130,10 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type,
 		return -ENODEV;
 
 	boot_hid = usb_get_intfdata(boot_interface);
+	if (list_empty(&boot_hid->inputs)) {
+		hid_err(hid, "no inputs found\n");
+		return -ENODEV;
+	}
 	boot_hid_input = list_first_entry(&boot_hid->inputs,
 		struct hid_input, list);
 
drivers/hid/hid-ids.h +1 -0
index 8a310f8ff20f..cc0d0186a0d9 100644
@@ -425,6 +425,7 @@
 #define I2C_DEVICE_ID_HP_SPECTRE_X360_13T_AW100	0x29F5
 #define I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V1	0x2BED
 #define I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V2	0x2BEE
+#define I2C_DEVICE_ID_HP_ENVY_X360_15_EU0556NG		0x2D02
 
 #define USB_VENDOR_ID_ELECOM		0x056e
 #define USB_DEVICE_ID_ELECOM_BM084	0x0061
drivers/hid/hid-input.c +2 -0
index 40a5645f8fe8..5e2f721855e5 100644
@@ -406,6 +406,8 @@ static const struct hid_device_id hid_battery_quirks[] = {
 	  HID_BATTERY_QUIRK_IGNORE },
 	{ HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V2),
 	  HID_BATTERY_QUIRK_IGNORE },
+	{ HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_ENVY_X360_15_EU0556NG),
+	  HID_BATTERY_QUIRK_IGNORE },
 	{}
 };
 
drivers/hid/hid-logitech-hidpp.c +2 -0
index 1c00e4121c7e..08b68f8476db 100644
@@ -4676,6 +4676,8 @@ static const struct hid_device_id hidpp_devices[] = {
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb008) },
 	{ /* MX Master mouse over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012) },
+	{ /* M720 Triathlon mouse over Bluetooth */
+	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb015) },
 	{ /* MX Ergo trackball over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) },
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e) },
drivers/hid/hid-multitouch.c +4 -0
index 521b2ffb4244..8db4ae05febc 100644
@@ -2144,6 +2144,10 @@ static const struct hid_device_id mt_devices[] = {
 			USB_DEVICE_ID_MTP_STM)},
 
 	/* Synaptics devices */
+	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
+		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
+			USB_VENDOR_ID_SYNAPTICS, 0xcd7e) },
+
 	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
 		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
 			USB_VENDOR_ID_SYNAPTICS, 0xce08) },
drivers/hid/hid-nintendo.c +103 -72

221 lines not on this page · raw message

drivers/i2c/i2c-mux.c +1 -1
index 313904be5f3b..57ff09f18c37 100644
@@ -341,7 +341,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
 		priv->adap.lock_ops = &i2c_parent_lock_ops;
 
 	/* Sanity check on class */
-	if (i2c_mux_parent_classes(parent) & class)
+	if (i2c_mux_parent_classes(parent) & class & ~I2C_CLASS_DEPRECATED)
 		dev_err(&parent->dev,
 			"Segment %d behind mux can't share classes with ancestors\n",
 			chan_id);
drivers/iio/light/vcnl4000.c +0 -1
index 7c7362e28821..66433886b7b0 100644
@@ -994,7 +994,6 @@ static int vcnl4040_write_event_config(struct iio_dev *indio_dev,
 
 out:
 	mutex_unlock(&data->vcnl4000_lock);
-	data->chip_spec->set_power_state(data, data->ps_int != 0);
 
 	return ret;
 }
drivers/mmc/core/block.c +20 -11
index b6f4be25b31b..b66aa5de2dde 100644
@@ -179,6 +179,7 @@ static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
 			       struct mmc_queue *mq);
 static void mmc_blk_hsq_req_done(struct mmc_request *mrq);
 static int mmc_spi_err_check(struct mmc_card *card);
+static int mmc_blk_busy_cb(void *cb_data, bool *busy);
 
 static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
 {
@@ -470,7 +471,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
 	struct mmc_data data = {};
 	struct mmc_request mrq = {};
 	struct scatterlist sg;
-	bool r1b_resp, use_r1b_resp = false;
+	bool r1b_resp;
 	unsigned int busy_timeout_ms;
 	int err;
 	unsigned int target_part;
@@ -551,8 +552,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
 	busy_timeout_ms = idata->ic.cmd_timeout_ms ? : MMC_BLK_TIMEOUT_MS;
 	r1b_resp = (cmd.flags & MMC_RSP_R1B) == MMC_RSP_R1B;
 	if (r1b_resp)
-		use_r1b_resp = mmc_prepare_busy_cmd(card->host, &cmd,
-						    busy_timeout_ms);
+		mmc_prepare_busy_cmd(card->host, &cmd, busy_timeout_ms);
 
 	mmc_wait_for_req(card->host, &mrq);
 	memcpy(&idata->ic.response, cmd.resp, sizeof(cmd.resp));
@@ -605,19 +605,28 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
 	if (idata->ic.postsleep_min_us)
 		usleep_range(idata->ic.postsleep_min_us, idata->ic.postsleep_max_us);
 
-	/* No need to poll when using HW busy detection. */
-	if ((card->host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp)
-		return 0;
-
 	if (mmc_host_is_spi(card->host)) {
 		if (idata->ic.write_flag || r1b_resp || cmd.flags & MMC_RSP_SPI_BUSY)
 			return mmc_spi_err_check(card);
 		return err;
 	}
-	/* Ensure RPMB/R1B command has completed by polling with CMD13. */
-	if (idata->rpmb || r1b_resp)
-		err = mmc_poll_for_busy(card, busy_timeout_ms, false,
-					MMC_BUSY_IO);
+
+	/*
+	 * Ensure RPMB, writes and R1B responses are completed by polling with
+	 * CMD13. Note that, usually we don't need to poll when using HW busy
+	 * detection, but here it's needed since some commands may indicate the
+	 * error through the R1 status bits.
+	 */
+	if (idata->rpmb || idata->ic.write_flag || r1b_resp) {
+		struct mmc_blk_busy_data cb_data = {
+			.card = card,
+		};
+
+		err = __mmc_poll_for_busy(card->host, 0, busy_timeout_ms,
+					  &mmc_blk_busy_cb, &cb_data);
+
+		idata->ic.response[0] = cb_data.status;
+	}
 
 	return err;
 }
drivers/mmc/core/mmc.c +1 -1
index 89cd48fcec79..4a4bab9aa726 100644
@@ -104,7 +104,7 @@ static int mmc_decode_cid(struct mmc_card *card)
 	case 3: /* MMC v3.1 - v3.3 */
 	case 4: /* MMC v4 */
 		card->cid.manfid	= UNSTUFF_BITS(resp, 120, 8);
-		card->cid.oemid		= UNSTUFF_BITS(resp, 104, 16);
+		card->cid.oemid		= UNSTUFF_BITS(resp, 104, 8);
 		card->cid.prod_name[0]	= UNSTUFF_BITS(resp, 96, 8);
 		card->cid.prod_name[1]	= UNSTUFF_BITS(resp, 88, 8);
 		card->cid.prod_name[2]	= UNSTUFF_BITS(resp, 80, 8);
drivers/mmc/core/sdio.c +7 -1
index f64b9ac76a5c..5914516df2f7 100644
@@ -1089,8 +1089,14 @@ static int mmc_sdio_resume(struct mmc_host *host)
 		}
 		err = mmc_sdio_reinit_card(host);
 	} else if (mmc_card_wake_sdio_irq(host)) {
-		/* We may have switched to 1-bit mode during suspend */
+		/*
+		 * We may have switched to 1-bit mode during suspend,
+		 * need to hold retuning, because tuning only supprt
+		 * 4-bit mode or 8 bit mode.
+		 */
+		mmc_retune_hold_now(host);
 		err = sdio_enable_4bit_bus(host->card);
+		mmc_retune_release(host);
 	}
 
 	if (err)
drivers/mmc/host/mtk-sd.c +3 -3
index 02403ff99e0d..41111c550277 100644
@@ -671,11 +671,11 @@ static void msdc_reset_hw(struct msdc_host *host)
 	u32 val;
 
 	sdr_set_bits(host->base + MSDC_CFG, MSDC_CFG_RST);
-	readl_poll_timeout(host->base + MSDC_CFG, val, !(val & MSDC_CFG_RST), 0, 0);
+	readl_poll_timeout_atomic(host->base + MSDC_CFG, val, !(val & MSDC_CFG_RST), 0, 0);
 
 	sdr_set_bits(host->base + MSDC_FIFOCS, MSDC_FIFOCS_CLR);
-	readl_poll_timeout(host->base + MSDC_FIFOCS, val,
-			   !(val & MSDC_FIFOCS_CLR), 0, 0);
+	readl_poll_timeout_atomic(host->base + MSDC_FIFOCS, val,
+				  !(val & MSDC_FIFOCS_CLR), 0, 0);
 
 	val = readl(host->base + MSDC_INT);
 	writel(val, host->base + MSDC_INT);
drivers/mmc/host/sdhci-pci-gli.c +66 -38

122 lines not on this page · raw message

drivers/mtd/maps/physmap-core.c +11 -0
index c73854da5136..19dad5a23f94 100644
@@ -552,6 +552,17 @@ static int physmap_flash_probe(struct platform_device *dev)
 		if (info->probe_type) {
 			info->mtds[i] = do_map_probe(info->probe_type,
 						     &info->maps[i]);
+
+			/* Fall back to mapping region as ROM */
+			if (!info->mtds[i] && IS_ENABLED(CONFIG_MTD_ROM) &&
+			    strcmp(info->probe_type, "map_rom")) {
+				dev_warn(&dev->dev,
+					 "map_probe() failed for type %s\n",
+					 info->probe_type);
+
+				info->mtds[i] = do_map_probe("map_rom",
+							     &info->maps[i]);
+			}
 		} else {
 			int j;
 
drivers/mtd/nand/raw/arasan-nand-controller.c +14 -2
index 906eef70cb6d..487c139316fe 100644
@@ -515,6 +515,7 @@ static int anfc_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
 	struct mtd_info *mtd = nand_to_mtd(chip);
 	unsigned int len = mtd->writesize + (oob_required ? mtd->oobsize : 0);
 	dma_addr_t dma_addr;
+	u8 status;
 	int ret;
 	struct anfc_op nfc_op = {
 		.pkt_reg =
@@ -561,10 +562,21 @@ static int anfc_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
 	}
 
 	/* Spare data is not protected */
-	if (oob_required)
+	if (oob_required) {
 		ret = nand_write_oob_std(chip, page);
+		if (ret)
+			return ret;
+	}
 
-	return ret;
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
+	return 0;
 }
 
 static int anfc_sel_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
drivers/mtd/nand/raw/marvell_nand.c +22 -1
index 30c15e4e1cc0..576441095012 100644
@@ -1162,6 +1162,7 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip,
 		.ndcb[2] = NDCB2_ADDR5_PAGE(page),
 	};
 	unsigned int oob_bytes = lt->spare_bytes + (raw ? lt->ecc_bytes : 0);
+	u8 status;
 	int ret;
 
 	/* NFCv2 needs more information about the operation being executed */
@@ -1195,7 +1196,18 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip,
 
 	ret = marvell_nfc_wait_op(chip,
 				  PSEC_TO_MSEC(sdr->tPROG_max));
-	return ret;
+	if (ret)
+		return ret;
+
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
+	return 0;
 }
 
 static int marvell_nfc_hw_ecc_hmg_write_page_raw(struct nand_chip *chip,
@@ -1624,6 +1636,7 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,
 	int data_len = lt->data_bytes;
 	int spare_len = lt->spare_bytes;
 	int chunk, ret;
+	u8 status;
 
 	marvell_nfc_select_target(chip, chip->cur_cs);
 
@@ -1660,6 +1673,14 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,
 	if (ret)
 		return ret;
 
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
 	return 0;
 }
 
drivers/mtd/nand/raw/nand_base.c +3 -0
index a6af521832aa..458ff93eb88a 100644
@@ -5109,6 +5109,9 @@ static void rawnand_check_cont_read_support(struct nand_chip *chip)
 {
 	struct mtd_info *mtd = nand_to_mtd(chip);
 
+	if (!chip->parameters.supports_read_cache)
+		return;
+
 	if (chip->read_retries)
 		return;
 
drivers/mtd/nand/raw/nand_jedec.c +3 -0
index 836757717660..b3cc8f360529 100644
@@ -94,6 +94,9 @@ int nand_jedec_detect(struct nand_chip *chip)
 		goto free_jedec_param_page;
 	}
 
+	if (p->opt_cmd[0] & JEDEC_OPT_CMD_READ_CACHE)
+		chip->parameters.supports_read_cache = true;
+
 	memorg->pagesize = le32_to_cpu(p->byte_per_page);
 	mtd->writesize = memorg->pagesize;
 
drivers/mtd/nand/raw/nand_onfi.c +3 -0
index f15ef90aec8c..861975e44b55 100644
@@ -303,6 +303,9 @@ int nand_onfi_detect(struct nand_chip *chip)
 			   ONFI_FEATURE_ADDR_TIMING_MODE, 1);
 	}
 
+	if (le16_to_cpu(p->opt_cmd) & ONFI_OPT_CMD_READ_CACHE)
+		chip->parameters.supports_read_cache = true;
+
 	onfi = kzalloc(sizeof(*onfi), GFP_KERNEL);
 	if (!onfi) {
 		ret = -ENOMEM;
drivers/mtd/nand/raw/pl35x-nand-controller.c +9 -0
index 28b7bd7e22eb..9dd06eeb021e 100644
@@ -513,6 +513,7 @@ static int pl35x_nand_write_page_hwecc(struct nand_chip *chip,
 	u32 addr1 = 0, addr2 = 0, row;
 	u32 cmd_addr;
 	int i, ret;
+	u8 status;
 
 	ret = pl35x_smc_set_ecc_mode(nfc, chip, PL35X_SMC_ECC_CFG_MODE_APB);
 	if (ret)
@@ -565,6 +566,14 @@ static int pl35x_nand_write_page_hwecc(struct nand_chip *chip,
 	if (ret)
 		goto disable_ecc_engine;
 
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		goto disable_ecc_engine;
+
+	if (status & NAND_STATUS_FAIL)
+		ret = -EIO;
+
 disable_ecc_engine:
 	pl35x_smc_set_ecc_mode(nfc, chip, PL35X_SMC_ECC_CFG_MODE_BYPASS);
 
drivers/mtd/nand/raw/qcom_nandc.c +1 -1
index 72d6168d8a1b..ce8b539de900 100644
@@ -3309,7 +3309,7 @@ static int qcom_nandc_probe(struct platform_device *pdev)
 err_aon_clk:
 	clk_disable_unprepare(nandc->core_clk);
 err_core_clk:
-	dma_unmap_resource(dev, res->start, resource_size(res),
+	dma_unmap_resource(dev, nandc->base_dma, resource_size(res),
 			   DMA_BIDIRECTIONAL, 0);
 	return ret;
 }
drivers/mtd/nand/spi/micron.c +1 -1
index 50b7295bc922..12601bc4227a 100644
@@ -12,7 +12,7 @@
 
 #define SPINAND_MFR_MICRON		0x2c
 
-#define MICRON_STATUS_ECC_MASK		GENMASK(7, 4)
+#define MICRON_STATUS_ECC_MASK		GENMASK(6, 4)
 #define MICRON_STATUS_ECC_NO_BITFLIPS	(0 << 4)
 #define MICRON_STATUS_ECC_1TO3_BITFLIPS	(1 << 4)
 #define MICRON_STATUS_ECC_4TO6_BITFLIPS	(3 << 4)
drivers/net/bonding/bond_main.c +1 -1
index 447b06ea4fc9..a64ebb7f5b71 100644
@@ -4022,7 +4022,7 @@ static inline const void *bond_pull_data(struct sk_buff *skb,
 	if (likely(n <= hlen))
 		return data;
 	else if (skb && likely(pskb_may_pull(skb, n)))
-		return skb->head;
+		return skb->data;
 
 	return NULL;
 }
drivers/net/dsa/bcm_sf2.c +15 -9
index 72374b066f64..cd1f240c90f3 100644
@@ -617,17 +617,16 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
 	dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio");
 	priv->master_mii_bus = of_mdio_find_bus(dn);
 	if (!priv->master_mii_bus) {
-		of_node_put(dn);
-		return -EPROBE_DEFER;
+		err = -EPROBE_DEFER;
+		goto err_of_node_put;
 	}
 
-	get_device(&priv->master_mii_bus->dev);
 	priv->master_mii_dn = dn;
 
 	priv->slave_mii_bus = mdiobus_alloc();
 	if (!priv->slave_mii_bus) {
-		of_node_put(dn);
-		return -ENOMEM;
+		err = -ENOMEM;
+		goto err_put_master_mii_bus_dev;
 	}
 
 	priv->slave_mii_bus->priv = priv;
@@ -684,11 +683,17 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
 	}
 
 	err = mdiobus_register(priv->slave_mii_bus);
-	if (err && dn) {
-		mdiobus_free(priv->slave_mii_bus);
-		of_node_put(dn);
-	}
+	if (err && dn)
+		goto err_free_slave_mii_bus;
 
+	return 0;
+
+err_free_slave_mii_bus:
+	mdiobus_free(priv->slave_mii_bus);
+err_put_master_mii_bus_dev:
+	put_device(&priv->master_mii_bus->dev);
+err_of_node_put:
+	of_node_put(dn);
 	return err;
 }
 
@@ -696,6 +701,7 @@ static void bcm_sf2_mdio_unregister(struct bcm_sf2_priv *priv)
 {
 	mdiobus_unregister(priv->slave_mii_bus);
 	mdiobus_free(priv->slave_mii_bus);
+	put_device(&priv->master_mii_bus->dev);
 	of_node_put(priv->master_mii_dn);
 }
 
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c +29 -7
index 5fc64e47568a..d567e42e1760 100644
@@ -911,7 +911,7 @@ static int csk_wait_memory(struct chtls_dev *cdev,
 			   struct sock *sk, long *timeo_p)
 {
 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
-	int err = 0;
+	int ret, err = 0;
 	long current_timeo;
 	long vm_wait = 0;
 	bool noblock;
@@ -942,10 +942,13 @@ static int csk_wait_memory(struct chtls_dev *cdev,
 
 		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
 		sk->sk_write_pending++;
-		sk_wait_event(sk, &current_timeo, sk->sk_err ||
-			      (sk->sk_shutdown & SEND_SHUTDOWN) ||
-			      (csk_mem_free(cdev, sk) && !vm_wait), &wait);
+		ret = sk_wait_event(sk, &current_timeo, sk->sk_err ||
+				    (sk->sk_shutdown & SEND_SHUTDOWN) ||
+				    (csk_mem_free(cdev, sk) && !vm_wait),
+				    &wait);
 		sk->sk_write_pending--;
+		if (ret < 0)
+			goto do_error;
 
 		if (vm_wait) {
 			vm_wait -= current_timeo;
@@ -1348,6 +1351,7 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int copied = 0;
 	int target;
 	long timeo;
+	int ret;
 
 	buffers_freed = 0;
 
@@ -1423,7 +1427,11 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		if (copied >= target)
 			break;
 		chtls_cleanup_rbuf(sk, copied);
-		sk_wait_data(sk, &timeo, NULL);
+		ret = sk_wait_data(sk, &timeo, NULL);
+		if (ret < 0) {
+			copied = copied ? : ret;
+			goto unlock;
+		}
 		continue;
 found_ok_skb:
 		if (!skb->len) {
@@ -1518,6 +1526,8 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 
 	if (buffers_freed)
 		chtls_cleanup_rbuf(sk, copied);
+
+unlock:
 	release_sock(sk);
 	return copied;
 }
@@ -1534,6 +1544,7 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
 	int copied = 0;
 	size_t avail;          /* amount of available data in current skb */
 	long timeo;
+	int ret;
 
 	lock_sock(sk);
 	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
@@ -1585,7 +1596,12 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
 			release_sock(sk);
 			lock_sock(sk);
 		} else {
-			sk_wait_data(sk, &timeo, NULL);
+			ret = sk_wait_data(sk, &timeo, NULL);
+			if (ret < 0) {
+				/* here 'copied' is 0 due to previous checks */
+				copied = ret;
+				break;
+			}
 		}
 
 		if (unlikely(peek_seq != tp->copied_seq)) {
@@ -1656,6 +1672,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int copied = 0;
 	long timeo;
 	int target;             /* Read at least this many bytes */
+	int ret;
 
 	buffers_freed = 0;
 
@@ -1747,7 +1764,11 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		if (copied >= target)
 			break;
 		chtls_cleanup_rbuf(sk, copied);
-		sk_wait_data(sk, &timeo, NULL);
+		ret = sk_wait_data(sk, &timeo, NULL);
+		if (ret < 0) {
+			copied = copied ? : ret;
+			goto unlock;
+		}
 		continue;
 
 found_ok_skb:
@@ -1816,6 +1837,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	if (buffers_freed)
 		chtls_cleanup_rbuf(sk, copied);
 
+unlock:
 	release_sock(sk);
 	return copied;
 }
drivers/net/ethernet/google/gve/gve_rx.c +16 -2
index d1da7413dc4d..e84a066aa1a4 100644
@@ -146,7 +146,7 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx)
 		err = gve_rx_alloc_buffer(priv, &priv->pdev->dev, &rx->data.page_info[i],
 					  &rx->data.data_ring[i]);
 		if (err)
-			goto alloc_err;
+			goto alloc_err_rda;
 	}
 
 	if (!rx->data.raw_addressing) {
@@ -171,12 +171,26 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx)
 	return slots;
 
 alloc_err_qpl:
+	/* Fully free the copy pool pages. */
 	while (j--) {
 		page_ref_sub(rx->qpl_copy_pool[j].page,
 			     rx->qpl_copy_pool[j].pagecnt_bias - 1);
 		put_page(rx->qpl_copy_pool[j].page);
 	}
-alloc_err:
+
+	/* Do not fully free QPL pages - only remove the bias added in this
+	 * function with gve_setup_rx_buffer.
+	 */
+	while (i--)
+		page_ref_sub(rx->data.page_info[i].page,
+			     rx->data.page_info[i].pagecnt_bias - 1);
+
+	gve_unassign_qpl(priv, rx->data.qpl->id);
+	rx->data.qpl = NULL;
+
+	return err;
+
+alloc_err_rda:
 	while (i--)
 		gve_rx_free_buffer(&priv->pdev->dev,
 				   &rx->data.page_info[i],
drivers/net/ethernet/intel/i40e/i40e_common.c +2 -2
index ed88e38d488b..95843f0f1a3e 100644
@@ -1082,7 +1082,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
 		     I40E_PFLAN_QALLOC_FIRSTQ_SHIFT;
 	j = (val & I40E_PFLAN_QALLOC_LASTQ_MASK) >>
 	    I40E_PFLAN_QALLOC_LASTQ_SHIFT;
-	if (val & I40E_PFLAN_QALLOC_VALID_MASK)
+	if (val & I40E_PFLAN_QALLOC_VALID_MASK && j >= base_queue)
 		num_queues = (j - base_queue) + 1;
 	else
 		num_queues = 0;
@@ -1092,7 +1092,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
 	    I40E_PF_VT_PFALLOC_FIRSTVF_SHIFT;
 	j = (val & I40E_PF_VT_PFALLOC_LASTVF_MASK) >>
 	    I40E_PF_VT_PFALLOC_LASTVF_SHIFT;
-	if (val & I40E_PF_VT_PFALLOC_VALID_MASK)
+	if (val & I40E_PF_VT_PFALLOC_VALID_MASK && j >= i)
 		num_vfs = (j - i) + 1;
 	else
 		num_vfs = 0;
drivers/net/ethernet/intel/ice/ice_lib.c +1 -2
index 0054d7e64ec3..40234ddf1073 100644
@@ -1201,8 +1201,7 @@ static void ice_set_rss_vsi_ctx(struct ice_vsi_ctx *ctxt, struct ice_vsi *vsi)
 
 	ctxt->info.q_opt_rss = ((lut_type << ICE_AQ_VSI_Q_OPT_RSS_LUT_S) &
 				ICE_AQ_VSI_Q_OPT_RSS_LUT_M) |
-				((hash_type << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) &
-				 ICE_AQ_VSI_Q_OPT_RSS_HASH_M);
+				(hash_type & ICE_AQ_VSI_Q_OPT_RSS_HASH_M);
 }
 
 static void
drivers/net/ethernet/intel/ice/ice_main.c +18 -0
index c2cdc79308dc..5c940da8717b 100644
@@ -6,6 +6,7 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include <generated/utsrelease.h>
+#include <linux/crash_dump.h>
 #include "ice.h"
 #include "ice_base.h"
 #include "ice_lib.h"
@@ -4632,6 +4633,9 @@ static void ice_init_features(struct ice_pf *pf)
 
 static void ice_deinit_features(struct ice_pf *pf)
 {
+	if (ice_is_safe_mode(pf))
+		return;
+
 	ice_deinit_lag(pf);
 	if (test_bit(ICE_FLAG_DCB_CAPABLE, pf->flags))
 		ice_cfg_lldp_mib_change(&pf->hw, false);
@@ -4963,6 +4967,20 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
 		return -EINVAL;
 	}
 
+	/* when under a kdump kernel initiate a reset before enabling the
+	 * device in order to clear out any pending DMA transactions. These
+	 * transactions can cause some systems to machine check when doing
+	 * the pcim_enable_device() below.
+	 */
+	if (is_kdump_kernel()) {
+		pci_save_state(pdev);
+		pci_clear_master(pdev);
+		err = pcie_flr(pdev);
+		if (err)
+			return err;
+		pci_restore_state(pdev);
+	}
+
 	/* this driver uses devres, see
 	 * Documentation/driver-api/driver-model/devres.rst
 	 */
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +6 -7
index dbc518ff8276..5b46ca47c8e5 100644
@@ -715,20 +715,19 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb,
 		hw_desc->dptr = tx_buffer->sglist_dma;
 	}
 
-	/* Flush the hw descriptor before writing to doorbell */
-	wmb();
-
-	/* Ring Doorbell to notify the NIC there is a new packet */
-	writel(1, iq->doorbell_reg);
+	netdev_tx_sent_queue(iq->netdev_q, skb->len);
+	skb_tx_timestamp(skb);
 	atomic_inc(&iq->instr_pending);
 	wi++;
 	if (wi == iq->max_count)
 		wi = 0;
 	iq->host_write_index = wi;
+	/* Flush the hw descriptor before writing to doorbell */
+	wmb();
 
-	netdev_tx_sent_queue(iq->netdev_q, skb->len);
+	/* Ring Doorbell to notify the NIC there is a new packet */
+	writel(1, iq->doorbell_reg);
 	iq->stats.instr_posted++;
-	skb_tx_timestamp(skb);
 	return NETDEV_TX_OK;
 
 dma_map_sg_err:
drivers/net/ethernet/marvell/sky2.h +1 -1
index ddec1627f1a7..8d0bacf4e49c 100644
@@ -2195,7 +2195,7 @@ struct rx_ring_info {
 	struct sk_buff	*skb;
 	dma_addr_t	data_addr;
 	DEFINE_DMA_UNMAP_LEN(data_size);
-	dma_addr_t	frag_addr[ETH_JUMBO_MTU >> PAGE_SHIFT];
+	dma_addr_t	frag_addr[ETH_JUMBO_MTU >> PAGE_SHIFT ?: 1];
 };
 
 enum flow_control {
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +1 -1
index 7c0f2adbea00..ad789349c06e 100644
@@ -848,7 +848,7 @@ static void mlx5_fw_tracer_ownership_change(struct work_struct *work)
 
 	mlx5_core_dbg(tracer->dev, "FWTracer: ownership changed, current=(%d)\n", tracer->owner);
 	if (tracer->owner) {
-		tracer->owner = false;
+		mlx5_fw_tracer_ownership_acquire(tracer);
 		return;
 	}
 
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +2 -1
index 1730f6a716ee..b10e40e1a9c1 100644
@@ -24,7 +24,8 @@ static int mlx5e_set_int_port_tunnel(struct mlx5e_priv *priv,
 
 	route_dev = dev_get_by_index(dev_net(e->out_dev), e->route_dev_ifindex);
 
-	if (!route_dev || !netif_is_ovs_master(route_dev))
+	if (!route_dev || !netif_is_ovs_master(route_dev) ||
+	    attr->parse_attr->filter_dev == e->out_dev)
 		goto out;
 
 	err = mlx5e_set_fwd_to_int_port_actions(priv, attr, e->route_dev_ifindex,
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +4 -4
index 40589cebb773..4fd4c9febab9 100644
@@ -873,11 +873,11 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
 	}
 
 out:
-	if (flags & XDP_XMIT_FLUSH) {
-		if (sq->mpwqe.wqe)
-			mlx5e_xdp_mpwqe_complete(sq);
+	if (sq->mpwqe.wqe)
+		mlx5e_xdp_mpwqe_complete(sq);
+
+	if (flags & XDP_XMIT_FLUSH)
 		mlx5e_xmit_xdp_doorbell(sq);
-	}
 
 	return nxmit;
 }
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +9 -1
index 99b3843396f3..0cd44ef19005 100644
@@ -704,7 +704,7 @@ mlx5e_rep_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)
 
 	/* update HW stats in background for next time */
 	mlx5e_queue_update_stats(priv);
-	memcpy(stats, &priv->stats.vf_vport, sizeof(*stats));
+	mlx5e_stats_copy_rep_stats(stats, &priv->stats.rep_stats);
 }
 
 static int mlx5e_rep_change_mtu(struct net_device *netdev, int new_mtu)
@@ -772,6 +772,7 @@ static int mlx5e_rep_max_nch_limit(struct mlx5_core_dev *mdev)
 
 static void mlx5e_build_rep_params(struct net_device *netdev)
 {
+	const bool take_rtnl = netdev->reg_state == NETREG_REGISTERED;
 	struct mlx5e_priv *priv = netdev_priv(netdev);
 	struct mlx5e_rep_priv *rpriv = priv->ppriv;
 	struct mlx5_eswitch_rep *rep = rpriv->rep;
@@ -797,8 +798,15 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
 	/* RQ */
 	mlx5e_build_rq_params(mdev, params);
 
+	/* If netdev is already registered (e.g. move from nic profile to uplink,
+	 * RTNL lock must be held before triggering netdev notifiers.
+	 */
+	if (take_rtnl)
+		rtnl_lock();
 	/* update XDP supported features */
 	mlx5e_set_xdp_feature(netdev);
+	if (take_rtnl)
+		rtnl_unlock();
 
 	/* CQ moderation params */
 	params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +26 -9
index 41d37159e027..5df970e6e29d 100644
@@ -457,26 +457,41 @@ static int mlx5e_alloc_rx_wqes(struct mlx5e_rq *rq, u16 ix, int wqe_bulk)
 static int mlx5e_refill_rx_wqes(struct mlx5e_rq *rq, u16 ix, int wqe_bulk)
 {
 	int remaining = wqe_bulk;
-	int i = 0;
+	int total_alloc = 0;
+	int refill_alloc;
+	int refill;
 
 	/* The WQE bulk is split into smaller bulks that are sized
 	 * according to the page pool cache refill size to avoid overflowing
 	 * the page pool cache due to too many page releases at once.
 	 */
 	do {
-		int refill = min_t(u16, rq->wqe.info.refill_unit, remaining);
-		int alloc_count;
+		refill = min_t(u16, rq->wqe.info.refill_unit, remaining);
 
-		mlx5e_free_rx_wqes(rq, ix + i, refill);
-		alloc_count = mlx5e_alloc_rx_wqes(rq, ix + i, refill);
-		i += alloc_count;
-		if (unlikely(alloc_count != refill))
-			break;
+		mlx5e_free_rx_wqes(rq, ix + total_alloc, refill);
+		refill_alloc = mlx5e_alloc_rx_wqes(rq, ix + total_alloc, refill);
+		if (unlikely(refill_alloc != refill))
+			goto err_free;
 
+		total_alloc += refill_alloc;
 		remaining -= refill;
 	} while (remaining);
 
-	return i;
+	return total_alloc;
+
+err_free:
+	mlx5e_free_rx_wqes(rq, ix, total_alloc + refill_alloc);
+
+	for (int i = 0; i < total_alloc + refill; i++) {
+		int j = mlx5_wq_cyc_ctr2ix(&rq->wqe.wq, ix + i);
+		struct mlx5e_wqe_frag_info *frag;
+
+		frag = get_frag(rq, j);
+		for (int k = 0; k < rq->wqe.info.num_frags; k++, frag++)
+			frag->flags |= BIT(MLX5E_WQE_FRAG_SKIP_RELEASE);
+	}
+
+	return 0;
 }
 
 static void
@@ -816,6 +831,8 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix)
 		mlx5e_page_release_fragmented(rq, frag_page);
 	}
 
+	bitmap_fill(wi->skip_release_bitmap, rq->mpwqe.pages_per_wqe);
+
 err:
 	rq->stats->buff_alloc_err++;
 
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +10 -1
index 1ff8a06027dc..67938b4ea1b9 100644
@@ -475,11 +475,20 @@ struct mlx5e_stats {
 	struct mlx5e_vnic_env_stats vnic;
 	struct mlx5e_vport_stats vport;
 	struct mlx5e_pport_stats pport;
-	struct rtnl_link_stats64 vf_vport;
 	struct mlx5e_pcie_stats pcie;
 	struct mlx5e_rep_stats rep_stats;
 };
 
+static inline void mlx5e_stats_copy_rep_stats(struct rtnl_link_stats64 *vf_vport,
+					      struct mlx5e_rep_stats *rep_stats)
+{
+	memset(vf_vport, 0, sizeof(*vf_vport));
+	vf_vport->rx_packets = rep_stats->vport_rx_packets;
+	vf_vport->tx_packets = rep_stats->vport_tx_packets;
+	vf_vport->rx_bytes = rep_stats->vport_rx_bytes;
+	vf_vport->tx_bytes = rep_stats->vport_tx_bytes;
+}
+
 extern mlx5e_stats_grp_t mlx5e_nic_stats_grps[];
 unsigned int mlx5e_nic_stats_grps_num(struct mlx5e_priv *priv);
 
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +3 -2
index 4b22a91482ce..5797d8607633 100644
@@ -4931,7 +4931,8 @@ static int scan_tc_matchall_fdb_actions(struct mlx5e_priv *priv,
 			if (err)
 				return err;
 
-			rpriv->prev_vf_vport_stats = priv->stats.vf_vport;
+			mlx5e_stats_copy_rep_stats(&rpriv->prev_vf_vport_stats,
+						   &priv->stats.rep_stats);
 			break;
 		default:
 			NL_SET_ERR_MSG_MOD(extack, "mlx5 supports only police action for matchall");
@@ -4971,7 +4972,7 @@ void mlx5e_tc_stats_matchall(struct mlx5e_priv *priv,
 	u64 dbytes;
 	u64 dpkts;
 
-	cur_stats = priv->stats.vf_vport;
+	mlx5e_stats_copy_rep_stats(&cur_stats, &priv->stats.rep_stats);
 	dpkts = cur_stats.rx_packets - rpriv->prev_vf_vport_stats.rx_packets;
 	dbytes = cur_stats.rx_bytes - rpriv->prev_vf_vport_stats.rx_bytes;
 	rpriv->prev_vf_vport_stats = cur_stats;
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +8 -9
index 6e9b1b183190..51afb97b9e45 100644
@@ -1022,11 +1022,8 @@ const u32 *mlx5_esw_query_functions(struct mlx5_core_dev *dev)
 	return ERR_PTR(err);
 }
 
-static void mlx5_eswitch_event_handlers_register(struct mlx5_eswitch *esw)
+static void mlx5_eswitch_event_handler_register(struct mlx5_eswitch *esw)
 {
-	MLX5_NB_INIT(&esw->nb, eswitch_vport_event, NIC_VPORT_CHANGE);
-	mlx5_eq_notifier_register(esw->dev, &esw->nb);
-
 	if (esw->mode == MLX5_ESWITCH_OFFLOADS && mlx5_eswitch_is_funcs_handler(esw->dev)) {
 		MLX5_NB_INIT(&esw->esw_funcs.nb, mlx5_esw_funcs_changed_handler,
 			     ESW_FUNCTIONS_CHANGED);
@@ -1034,13 +1031,11 @@ static void mlx5_eswitch_event_handlers_register(struct mlx5_eswitch *esw)
 	}
 }
 
-static void mlx5_eswitch_event_handlers_unregister(struct mlx5_eswitch *esw)
+static void mlx5_eswitch_event_handler_unregister(struct mlx5_eswitch *esw)
 {
 	if (esw->mode == MLX5_ESWITCH_OFFLOADS && mlx5_eswitch_is_funcs_handler(esw->dev))
 		mlx5_eq_notifier_unregister(esw->dev, &esw->esw_funcs.nb);
 
-	mlx5_eq_notifier_unregister(esw->dev, &esw->nb);
-
 	flush_workqueue(esw->work_queue);
 }
 
@@ -1419,6 +1414,9 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs)
 
 	mlx5_eswitch_update_num_of_vfs(esw, num_vfs);
 
+	MLX5_NB_INIT(&esw->nb, eswitch_vport_event, NIC_VPORT_CHANGE);
+	mlx5_eq_notifier_register(esw->dev, &esw->nb);
+
 	if (esw->mode == MLX5_ESWITCH_LEGACY) {
 		err = esw_legacy_enable(esw);
 	} else {
@@ -1431,7 +1429,7 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs)
 
 	esw->fdb_table.flags |= MLX5_ESW_FDB_CREATED;
 
-	mlx5_eswitch_event_handlers_register(esw);
+	mlx5_eswitch_event_handler_register(esw);
 
 	esw_info(esw->dev, "Enable: mode(%s), nvfs(%d), necvfs(%d), active vports(%d)\n",
 		 esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
@@ -1558,7 +1556,8 @@ void mlx5_eswitch_disable_locked(struct mlx5_eswitch *esw)
 	 */
 	mlx5_esw_mode_change_notify(esw, MLX5_ESWITCH_LEGACY);
 
-	mlx5_eswitch_event_handlers_unregister(esw);
+	mlx5_eq_notifier_unregister(esw->dev, &esw->nb);
+	mlx5_eswitch_event_handler_unregister(esw);
 
 	esw_info(esw->dev, "Disable: mode(%s), nvfs(%d), necvfs(%d), active vports(%d)\n",
 		 esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
drivers/net/ethernet/qlogic/qed/qed_ll2.c +5 -2
index 717a0b3f89bd..ab5ef254a748 100644
@@ -113,7 +113,10 @@ static void qed_ll2b_complete_tx_packet(void *cxt,
 static int qed_ll2_alloc_buffer(struct qed_dev *cdev,
 				u8 **data, dma_addr_t *phys_addr)
 {
-	*data = kmalloc(cdev->ll2->rx_size, GFP_ATOMIC);
+	size_t size = cdev->ll2->rx_size + NET_SKB_PAD +
+		      SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
+
+	*data = kmalloc(size, GFP_ATOMIC);
 	if (!(*data)) {
 		DP_INFO(cdev, "Failed to allocate LL2 buffer data\n");
 		return -ENOMEM;
@@ -2589,7 +2592,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
 	INIT_LIST_HEAD(&cdev->ll2->list);
 	spin_lock_init(&cdev->ll2->lock);
 
-	cdev->ll2->rx_size = NET_SKB_PAD + ETH_HLEN +
+	cdev->ll2->rx_size = PRM_DMA_PAD_BYTES_NUM + ETH_HLEN +
 			     L1_CACHE_BYTES + params->mtu;
 
 	/* Allocate memory for LL2.
drivers/net/mdio/mdio-mux.c +47 -0

65 lines not on this page · raw message

drivers/net/phy/bcm7xxx.c +3 -0
index f8c17a253f8b..efe2542d0881 100644
@@ -894,6 +894,9 @@ static int bcm7xxx_28nm_probe(struct phy_device *phydev)
 	.name		= _name,					\
 	/* PHY_BASIC_FEATURES */					\
 	.flags		= PHY_IS_INTERNAL,				\
+	.get_sset_count	= bcm_phy_get_sset_count,			\
+	.get_strings	= bcm_phy_get_strings,				\
+	.get_stats	= bcm7xxx_28nm_get_phy_stats,			\
 	.probe		= bcm7xxx_28nm_probe,				\
 	.config_init	= bcm7xxx_16nm_ephy_config_init,		\
 	.config_aneg	= genphy_config_aneg,				\
drivers/net/tun.c +5 -2
index 100339bc8b04..bd3fc4b9d61a 100644
@@ -3068,10 +3068,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
 	struct net *net = sock_net(&tfile->sk);
 	struct tun_struct *tun;
 	void __user* argp = (void __user*)arg;
-	unsigned int ifindex, carrier;
+	unsigned int carrier;
 	struct ifreq ifr;
 	kuid_t owner;
 	kgid_t group;
+	int ifindex;
 	int sndbuf;
 	int vnet_hdr_sz;
 	int le;
@@ -3127,7 +3128,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
 		ret = -EFAULT;
 		if (copy_from_user(&ifindex, argp, sizeof(ifindex)))
 			goto unlock;
-
+		ret = -EINVAL;
+		if (ifindex < 0)
+			goto unlock;
 		ret = 0;
 		tfile->ifindex = ifindex;
 		goto unlock;
drivers/net/usb/smsc95xx.c +1 -1
index 563ecd27b93e..17da42fe605c 100644
@@ -897,7 +897,7 @@ static int smsc95xx_reset(struct usbnet *dev)
 
 	if (timeout >= 100) {
 		netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
-		return ret;
+		return -ETIMEDOUT;
 	}
 
 	ret = smsc95xx_set_mac_address(dev);
drivers/net/wireless/intel/iwlwifi/mvm/tx.c +3 -0
index 36d70d589aed..898dca393643 100644
@@ -1612,6 +1612,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
 		iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
 
 		memset(&info->status, 0, sizeof(info->status));
+		info->flags &= ~(IEEE80211_TX_STAT_ACK | IEEE80211_TX_STAT_TX_FILTERED);
 
 		/* inform mac80211 about what happened with the frame */
 		switch (status & TX_STATUS_MSK) {
@@ -1964,6 +1965,8 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
 		 */
 		if (!is_flush)
 			info->flags |= IEEE80211_TX_STAT_ACK;
+		else
+			info->flags &= ~IEEE80211_TX_STAT_ACK;
 	}
 
 	/*
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +16 -0
index d1d3632a3ed7..4ab3a14567b6 100644
@@ -921,6 +921,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv,
 	while (tlv_buf_left >= sizeof(*tlv_rxba)) {
 		tlv_type = le16_to_cpu(tlv_rxba->header.type);
 		tlv_len  = le16_to_cpu(tlv_rxba->header.len);
+		if (size_add(sizeof(tlv_rxba->header), tlv_len) > tlv_buf_left) {
+			mwifiex_dbg(priv->adapter, WARN,
+				    "TLV size (%zu) overflows event_buf buf_left=%d\n",
+				    size_add(sizeof(tlv_rxba->header), tlv_len),
+				    tlv_buf_left);
+			return;
+		}
+
 		if (tlv_type != TLV_TYPE_RXBA_SYNC) {
 			mwifiex_dbg(priv->adapter, ERROR,
 				    "Wrong TLV id=0x%x\n", tlv_type);
@@ -929,6 +937,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv,
 
 		tlv_seq_num = le16_to_cpu(tlv_rxba->seq_num);
 		tlv_bitmap_len = le16_to_cpu(tlv_rxba->bitmap_len);
+		if (size_add(sizeof(*tlv_rxba), tlv_bitmap_len) > tlv_buf_left) {
+			mwifiex_dbg(priv->adapter, WARN,
+				    "TLV size (%zu) overflows event_buf buf_left=%d\n",
+				    size_add(sizeof(*tlv_rxba), tlv_bitmap_len),
+				    tlv_buf_left);
+			return;
+		}
+
 		mwifiex_dbg(priv->adapter, INFO,
 			    "%pM tid=%d seq_num=%d bitmap_len=%d\n",
 			    tlv_rxba->mac, tlv_rxba->tid, tlv_seq_num,
drivers/net/wwan/iosm/iosm_ipc_imem.c +0 -17
index 635301d677e1..829515a601b3 100644
@@ -4,7 +4,6 @@
  */
 
 #include <linux/delay.h>
-#include <linux/pm_runtime.h>
 
 #include "iosm_ipc_chnl_cfg.h"
 #include "iosm_ipc_devlink.h"
@@ -632,11 +631,6 @@ static void ipc_imem_run_state_worker(struct work_struct *instance)
 	/* Complete all memory stores after setting bit */
 	smp_mb__after_atomic();
 
-	if (ipc_imem->pcie->pci->device == INTEL_CP_DEVICE_7560_ID) {
-		pm_runtime_mark_last_busy(ipc_imem->dev);
-		pm_runtime_put_autosuspend(ipc_imem->dev);
-	}
-
 	return;
 
 err_ipc_mux_deinit:
@@ -1240,7 +1234,6 @@ void ipc_imem_cleanup(struct iosm_imem *ipc_imem)
 
 	/* forward MDM_NOT_READY to listeners */
 	ipc_uevent_send(ipc_imem->dev, UEVENT_MDM_NOT_READY);
-	pm_runtime_get_sync(ipc_imem->dev);
 
 	hrtimer_cancel(&ipc_imem->td_alloc_timer);
 	hrtimer_cancel(&ipc_imem->tdupdate_timer);
@@ -1426,16 +1419,6 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
 
 		set_bit(IOSM_DEVLINK_INIT, &ipc_imem->flag);
 	}
-
-	if (!pm_runtime_enabled(ipc_imem->dev))
-		pm_runtime_enable(ipc_imem->dev);
-
-	pm_runtime_set_autosuspend_delay(ipc_imem->dev,
-					 IPC_MEM_AUTO_SUSPEND_DELAY_MS);
-	pm_runtime_use_autosuspend(ipc_imem->dev);
-	pm_runtime_allow(ipc_imem->dev);
-	pm_runtime_mark_last_busy(ipc_imem->dev);
-
 	return ipc_imem;
 devlink_channel_fail:
 	ipc_devlink_deinit(ipc_imem->ipc_devlink);
drivers/net/wwan/iosm/iosm_ipc_imem.h +0 -2
index 0144b45e2afb..5664ac507c90 100644
@@ -103,8 +103,6 @@ struct ipc_chnl_cfg;
 #define FULLY_FUNCTIONAL 0
 #define IOSM_DEVLINK_INIT 1
 
-#define IPC_MEM_AUTO_SUSPEND_DELAY_MS 5000
-
 /* List of the supported UL/DL pipes. */
 enum ipc_mem_pipes {
 	IPC_MEM_PIPE_0 = 0,
drivers/net/wwan/iosm/iosm_ipc_pcie.c +1 -3
index 3a259c9abefd..04517bd3325a 100644
@@ -6,7 +6,6 @@
 #include <linux/acpi.h>
 #include <linux/bitfield.h>
 #include <linux/module.h>
-#include <linux/pm_runtime.h>
 #include <net/rtnetlink.h>
 
 #include "iosm_ipc_imem.h"
@@ -438,8 +437,7 @@ static int __maybe_unused ipc_pcie_resume_cb(struct device *dev)
 	return 0;
 }
 
-static DEFINE_RUNTIME_DEV_PM_OPS(iosm_ipc_pm, ipc_pcie_suspend_cb,
-				 ipc_pcie_resume_cb, NULL);
+static SIMPLE_DEV_PM_OPS(iosm_ipc_pm, ipc_pcie_suspend_cb, ipc_pcie_resume_cb);
 
 static struct pci_driver iosm_ipc_driver = {
 	.name = KBUILD_MODNAME,
drivers/net/wwan/iosm/iosm_ipc_port.c +1 -16
index 2ba1ddca3945..5d5b4183e14a 100644
@@ -3,8 +3,6 @@
  * Copyright (C) 2020-21 Intel Corporation.
  */
 
-#include <linux/pm_runtime.h>
-
 #include "iosm_ipc_chnl_cfg.h"
 #include "iosm_ipc_imem_ops.h"
 #include "iosm_ipc_port.h"
@@ -15,16 +13,12 @@ static int ipc_port_ctrl_start(struct wwan_port *port)
 	struct iosm_cdev *ipc_port = wwan_port_get_drvdata(port);
 	int ret = 0;
 
-	pm_runtime_get_sync(ipc_port->ipc_imem->dev);
 	ipc_port->channel = ipc_imem_sys_port_open(ipc_port->ipc_imem,
 						   ipc_port->chl_id,
 						   IPC_HP_CDEV_OPEN);
 	if (!ipc_port->channel)
 		ret = -EIO;
 
-	pm_runtime_mark_last_busy(ipc_port->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_port->ipc_imem->dev);
-
 	return ret;
 }
 
@@ -33,24 +27,15 @@ static void ipc_port_ctrl_stop(struct wwan_port *port)
 {
 	struct iosm_cdev *ipc_port = wwan_port_get_drvdata(port);
 
-	pm_runtime_get_sync(ipc_port->ipc_imem->dev);
 	ipc_imem_sys_port_close(ipc_port->ipc_imem, ipc_port->channel);
-	pm_runtime_mark_last_busy(ipc_port->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_port->ipc_imem->dev);
 }
 
 /* transfer control data to modem */
 static int ipc_port_ctrl_tx(struct wwan_port *port, struct sk_buff *skb)
 {
 	struct iosm_cdev *ipc_port = wwan_port_get_drvdata(port);
-	int ret;
 
-	pm_runtime_get_sync(ipc_port->ipc_imem->dev);
-	ret = ipc_imem_sys_cdev_write(ipc_port, skb);
-	pm_runtime_mark_last_busy(ipc_port->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_port->ipc_imem->dev);
-
-	return ret;
+	return ipc_imem_sys_cdev_write(ipc_port, skb);
 }
 
 static const struct wwan_port_ops ipc_wwan_ctrl_ops = {
drivers/net/wwan/iosm/iosm_ipc_trace.c +0 -8
index 4368373797b6..eeecfa3d10c5 100644
@@ -3,9 +3,7 @@
  * Copyright (C) 2020-2021 Intel Corporation.
  */
 
-#include <linux/pm_runtime.h>
 #include <linux/wwan.h>
-
 #include "iosm_ipc_trace.h"
 
 /* sub buffer size and number of sub buffer */
@@ -99,8 +97,6 @@ static ssize_t ipc_trace_ctrl_file_write(struct file *filp,
 	if (ret)
 		return ret;
 
-	pm_runtime_get_sync(ipc_trace->ipc_imem->dev);
-
 	mutex_lock(&ipc_trace->trc_mutex);
 	if (val == TRACE_ENABLE && ipc_trace->mode != TRACE_ENABLE) {
 		ipc_trace->channel = ipc_imem_sys_port_open(ipc_trace->ipc_imem,
@@ -121,10 +117,6 @@ static ssize_t ipc_trace_ctrl_file_write(struct file *filp,
 	ret = count;
 unlock:
 	mutex_unlock(&ipc_trace->trc_mutex);
-
-	pm_runtime_mark_last_busy(ipc_trace->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_trace->ipc_imem->dev);
-
 	return ret;
 }
 
drivers/net/wwan/iosm/iosm_ipc_wwan.c +2 -19
index 93d17de08786..ff747fc79aaf 100644
@@ -6,7 +6,6 @@
 #include <linux/etherdevice.h>
 #include <linux/if_arp.h>
 #include <linux/if_link.h>
-#include <linux/pm_runtime.h>
 #include <linux/rtnetlink.h>
 #include <linux/wwan.h>
 #include <net/pkt_sched.h>
@@ -52,13 +51,11 @@ static int ipc_wwan_link_open(struct net_device *netdev)
 	struct iosm_netdev_priv *priv = wwan_netdev_drvpriv(netdev);
 	struct iosm_wwan *ipc_wwan = priv->ipc_wwan;
 	int if_id = priv->if_id;
-	int ret = 0;
 
 	if (if_id < IP_MUX_SESSION_START ||
 	    if_id >= ARRAY_SIZE(ipc_wwan->sub_netlist))
 		return -EINVAL;
 
-	pm_runtime_get_sync(ipc_wwan->ipc_imem->dev);
 	/* get channel id */
 	priv->ch_id = ipc_imem_sys_wwan_open(ipc_wwan->ipc_imem, if_id);
 
@@ -66,8 +63,7 @@ static int ipc_wwan_link_open(struct net_device *netdev)
 		dev_err(ipc_wwan->dev,
 			"cannot connect wwan0 & id %d to the IPC mem layer",
 			if_id);
-		ret = -ENODEV;
-		goto err_out;
+		return -ENODEV;
 	}
 
 	/* enable tx path, DL data may follow */
@@ -76,11 +72,7 @@ static int ipc_wwan_link_open(struct net_device *netdev)
 	dev_dbg(ipc_wwan->dev, "Channel id %d allocated to if_id %d",
 		priv->ch_id, priv->if_id);
 
-err_out:
-	pm_runtime_mark_last_busy(ipc_wwan->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_wwan->ipc_imem->dev);
-
-	return ret;
+	return 0;
 }
 
 /* Bring-down the wwan net link */
@@ -90,12 +82,9 @@ static int ipc_wwan_link_stop(struct net_device *netdev)
 
 	netif_stop_queue(netdev);
 
-	pm_runtime_get_sync(priv->ipc_wwan->ipc_imem->dev);
 	ipc_imem_sys_wwan_close(priv->ipc_wwan->ipc_imem, priv->if_id,
 				priv->ch_id);
 	priv->ch_id = -1;
-	pm_runtime_mark_last_busy(priv->ipc_wwan->ipc_imem->dev);
-	pm_runtime_put_autosuspend(priv->ipc_wwan->ipc_imem->dev);
 
 	return 0;
 }
@@ -117,7 +106,6 @@ static netdev_tx_t ipc_wwan_link_transmit(struct sk_buff *skb,
 	    if_id >= ARRAY_SIZE(ipc_wwan->sub_netlist))
 		return -EINVAL;
 
-	pm_runtime_get(ipc_wwan->ipc_imem->dev);
 	/* Send the SKB to device for transmission */
 	ret = ipc_imem_sys_wwan_transmit(ipc_wwan->ipc_imem,
 					 if_id, priv->ch_id, skb);
@@ -131,14 +119,9 @@ static netdev_tx_t ipc_wwan_link_transmit(struct sk_buff *skb,
 		ret = NETDEV_TX_BUSY;
 		dev_err(ipc_wwan->dev, "unable to push packets");
 	} else {
-		pm_runtime_mark_last_busy(ipc_wwan->ipc_imem->dev);
-		pm_runtime_put_autosuspend(ipc_wwan->ipc_imem->dev);
 		goto exit;
 	}
 
-	pm_runtime_mark_last_busy(ipc_wwan->ipc_imem->dev);
-	pm_runtime_put_autosuspend(ipc_wwan->ipc_imem->dev);
-
 	return ret;
 
 exit:
drivers/nvme/host/auth.c +2 -2
index daf5d144a8ea..064592a5d546 100644
@@ -341,7 +341,7 @@ static int nvme_auth_process_dhchap_success1(struct nvme_ctrl *ctrl,
 	struct nvmf_auth_dhchap_success1_data *data = chap->buf;
 	size_t size = sizeof(*data);
 
-	if (chap->ctrl_key)
+	if (chap->s2)
 		size += chap->hash_len;
 
 	if (size > CHAP_BUF_SIZE) {
@@ -825,7 +825,7 @@ static void nvme_queue_auth_work(struct work_struct *work)
 		goto fail2;
 	}
 
-	if (chap->ctrl_key) {
+	if (chap->s2) {
 		/* DH-HMAC-CHAP Step 5: send success2 */
 		dev_dbg(ctrl->device, "%s: qid %d send success2\n",
 			__func__, chap->qid);
drivers/nvme/host/ioctl.c +7 -3
index d39f3219358b..09a223642bc1 100644
@@ -108,9 +108,13 @@ static void *nvme_add_user_metadata(struct request *req, void __user *ubuf,
 	if (!buf)
 		goto out;
 
-	ret = -EFAULT;
-	if ((req_op(req) == REQ_OP_DRV_OUT) && copy_from_user(buf, ubuf, len))
-		goto out_free_meta;
+	if (req_op(req) == REQ_OP_DRV_OUT) {
+		ret = -EFAULT;
+		if (copy_from_user(buf, ubuf, len))
+			goto out_free_meta;
+	} else {
+		memset(buf, 0, len);
+	}
 
 	bip = bio_integrity_alloc(bio, GFP_KERNEL, 1);
 	if (IS_ERR(bip)) {
drivers/nvme/host/pci.c +2 -1
index 347cb5daebc3..3f0c9ee09a12 100644
@@ -3329,7 +3329,8 @@ static const struct pci_device_id nvme_id_table[] = {
 	{ PCI_VDEVICE(INTEL, 0x0a54),	/* Intel P4500/P4600 */
 		.driver_data = NVME_QUIRK_STRIPE_SIZE |
 				NVME_QUIRK_DEALLOCATE_ZEROES |
-				NVME_QUIRK_IGNORE_DEV_SUBNQN, },
+				NVME_QUIRK_IGNORE_DEV_SUBNQN |
+				NVME_QUIRK_BOGUS_NID, },
 	{ PCI_VDEVICE(INTEL, 0x0a55),	/* Dell Express Flash P4600 */
 		.driver_data = NVME_QUIRK_STRIPE_SIZE |
 				NVME_QUIRK_DEALLOCATE_ZEROES, },
drivers/nvme/host/rdma.c +3 -0
index 337a624a537c..a7fea4cbacd7 100644
@@ -638,6 +638,9 @@ static void __nvme_rdma_stop_queue(struct nvme_rdma_queue *queue)
 
 static void nvme_rdma_stop_queue(struct nvme_rdma_queue *queue)
 {
+	if (!test_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags))
+		return;
+
 	mutex_lock(&queue->queue_lock);
 	if (test_and_clear_bit(NVME_RDMA_Q_LIVE, &queue->flags))
 		__nvme_rdma_stop_queue(queue);
drivers/nvme/target/fabrics-cmd-auth.c +6 -3
index 586458f765f1..1d9854484e2e 100644
@@ -333,19 +333,21 @@ void nvmet_execute_auth_send(struct nvmet_req *req)
 			 __func__, ctrl->cntlid, req->sq->qid,
 			 status, req->error_loc);
 	req->cqe->result.u64 = 0;
-	nvmet_req_complete(req, status);
 	if (req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2 &&
 	    req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_FAILURE2) {
 		unsigned long auth_expire_secs = ctrl->kato ? ctrl->kato : 120;
 
 		mod_delayed_work(system_wq, &req->sq->auth_expired_work,
 				 auth_expire_secs * HZ);
-		return;
+		goto complete;
 	}
 	/* Final states, clear up variables */
 	nvmet_auth_sq_free(req->sq);
 	if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE2)
 		nvmet_ctrl_fatal_error(ctrl);
+
+complete:
+	nvmet_req_complete(req, status);
 }
 
 static int nvmet_auth_challenge(struct nvmet_req *req, void *d, int al)
@@ -514,11 +516,12 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)
 	kfree(d);
 done:
 	req->cqe->result.u64 = 0;
-	nvmet_req_complete(req, status);
+
 	if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2)
 		nvmet_auth_sq_free(req->sq);
 	else if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE1) {
 		nvmet_auth_sq_free(req->sq);
 		nvmet_ctrl_fatal_error(ctrl);
 	}
+	nvmet_req_complete(req, status);
 }
drivers/nvme/target/tcp.c +2 -5
index cd92d7ddf5ed..197fc2ecb164 100644
@@ -372,6 +372,7 @@ static void nvmet_tcp_fatal_error(struct nvmet_tcp_queue *queue)
 
 static void nvmet_tcp_socket_error(struct nvmet_tcp_queue *queue, int status)
 {
+	queue->rcv_state = NVMET_TCP_RECV_ERR;
 	if (status == -EPIPE || status == -ECONNRESET)
 		kernel_sock_shutdown(queue->sock, SHUT_RDWR);
 	else
@@ -910,15 +911,11 @@ static int nvmet_tcp_handle_icreq(struct nvmet_tcp_queue *queue)
 	iov.iov_len = sizeof(*icresp);
 	ret = kernel_sendmsg(queue->sock, &msg, &iov, 1, iov.iov_len);
 	if (ret < 0)
-		goto free_crypto;
+		return ret; /* queue removal will cleanup */
 
 	queue->state = NVMET_TCP_Q_LIVE;
 	nvmet_prepare_receive_pdu(queue);
 	return 0;
-free_crypto:
-	if (queue->hdr_digest || queue->data_digest)
-		nvmet_tcp_free_crypto(queue);
-	return ret;
 }
 
 static void nvmet_tcp_handle_req_failure(struct nvmet_tcp_queue *queue,
drivers/phy/motorola/phy-mapphone-mdm6600.c +18 -20
index 1d567604b650..376d023a0aa9 100644
@@ -122,16 +122,10 @@ static int phy_mdm6600_power_on(struct phy *x)
 {
 	struct phy_mdm6600 *ddata = phy_get_drvdata(x);
 	struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE];
-	int error;
 
 	if (!ddata->enabled)
 		return -ENODEV;
 
-	error = pinctrl_pm_select_default_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with default_state: %i\n",
-			 __func__, error);
-
 	gpiod_set_value_cansleep(enable_gpio, 1);
 
 	/* Allow aggressive PM for USB, it's only needed for n_gsm port */
@@ -160,11 +154,6 @@ static int phy_mdm6600_power_off(struct phy *x)
 
 	gpiod_set_value_cansleep(enable_gpio, 0);
 
-	error = pinctrl_pm_select_sleep_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
-			 __func__, error);
-
 	return 0;
 }
 
@@ -456,6 +445,7 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata)
 {
 	struct gpio_desc *reset_gpio =
 		ddata->ctrl_gpios[PHY_MDM6600_RESET];
+	int error;
 
 	ddata->enabled = false;
 	phy_mdm6600_cmd(ddata, PHY_MDM6600_CMD_BP_SHUTDOWN_REQ);
@@ -471,6 +461,17 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata)
 	} else {
 		dev_err(ddata->dev, "Timed out powering down\n");
 	}
+
+	/*
+	 * Keep reset gpio high with padconf internal pull-up resistor to
+	 * prevent modem from waking up during deeper SoC idle states. The
+	 * gpio bank lines can have glitches if not in the always-on wkup
+	 * domain.
+	 */
+	error = pinctrl_pm_select_sleep_state(ddata->dev);
+	if (error)
+		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
+			 __func__, error);
 }
 
 static void phy_mdm6600_deferred_power_on(struct work_struct *work)
@@ -571,12 +572,6 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
 	ddata->dev = &pdev->dev;
 	platform_set_drvdata(pdev, ddata);
 
-	/* Active state selected in phy_mdm6600_power_on() */
-	error = pinctrl_pm_select_sleep_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
-			 __func__, error);
-
 	error = phy_mdm6600_init_lines(ddata);
 	if (error)
 		return error;
@@ -627,10 +622,12 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
 	pm_runtime_put_autosuspend(ddata->dev);
 
 cleanup:
-	if (error < 0)
+	if (error < 0) {
 		phy_mdm6600_device_power_off(ddata);
-	pm_runtime_disable(ddata->dev);
-	pm_runtime_dont_use_autosuspend(ddata->dev);
+		pm_runtime_disable(ddata->dev);
+		pm_runtime_dont_use_autosuspend(ddata->dev);
+	}
+
 	return error;
 }
 
@@ -639,6 +636,7 @@ static void phy_mdm6600_remove(struct platform_device *pdev)
 	struct phy_mdm6600 *ddata = platform_get_drvdata(pdev);
 	struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET];
 
+	pm_runtime_get_noresume(ddata->dev);
 	pm_runtime_dont_use_autosuspend(ddata->dev);
 	pm_runtime_put_sync(ddata->dev);
 	pm_runtime_disable(ddata->dev);
drivers/phy/qualcomm/phy-qcom-qmp-combo.c +5 -1
index bebce8c591a3..3e6bec4c4d6c 100644
@@ -772,10 +772,10 @@ static const struct qmp_phy_init_tbl sm8550_usb3_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_PCS_TX_RX_CONFIG, 0x0c),
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_EQ_CONFIG1, 0x4b),
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_EQ_CONFIG5, 0x10),
-	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1, 0x68),
 };
 
 static const struct qmp_phy_init_tbl sm8550_usb3_pcs_usb_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1, 0x68),
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
 	QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_RCVR_DTCT_DLY_U3_L, 0x40),
@@ -2649,6 +2649,7 @@ static int qmp_combo_usb_power_on(struct phy *phy)
 	void __iomem *tx2 = qmp->tx2;
 	void __iomem *rx2 = qmp->rx2;
 	void __iomem *pcs = qmp->pcs;
+	void __iomem *pcs_usb = qmp->pcs_usb;
 	void __iomem *status;
 	unsigned int val;
 	int ret;
@@ -2670,6 +2671,9 @@ static int qmp_combo_usb_power_on(struct phy *phy)
 
 	qmp_combo_configure(pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
 
+	if (pcs_usb)
+		qmp_combo_configure(pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num);
+
 	if (cfg->has_pwrdn_delay)
 		usleep_range(10, 20);
 
drivers/phy/qualcomm/phy-qcom-qmp-pcs-usb-v6.h +2 -1
index 9510e63ba9d8..c38530d6776b 100644
@@ -12,7 +12,7 @@
 #define QPHY_USB_V6_PCS_LOCK_DETECT_CONFIG3		0xcc
 #define QPHY_USB_V6_PCS_LOCK_DETECT_CONFIG6		0xd8
 #define QPHY_USB_V6_PCS_REFGEN_REQ_CONFIG1		0xdc
-#define QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1	0x90
+#define QPHY_USB_V6_PCS_POWER_STATE_CONFIG1		0x90
 #define QPHY_USB_V6_PCS_RX_SIGDET_LVL			0x188
 #define QPHY_USB_V6_PCS_RCVR_DTCT_DLY_P1U2_L		0x190
 #define QPHY_USB_V6_PCS_RCVR_DTCT_DLY_P1U2_H		0x194
@@ -23,6 +23,7 @@
 #define QPHY_USB_V6_PCS_EQ_CONFIG1			0x1dc
 #define QPHY_USB_V6_PCS_EQ_CONFIG5			0x1ec
 
+#define QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1	0x00
 #define QPHY_USB_V6_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL	0x18
 #define QPHY_USB_V6_PCS_USB3_RXEQTRAINING_DFE_TIME_S2	0x3c
 #define QPHY_USB_V6_PCS_USB3_RCVR_DTCT_DLY_U3_L		0x40
drivers/phy/qualcomm/phy-qcom-qmp-usb.c +19 -5
index 466f0a56c82e..575329004b90 100644
@@ -1480,8 +1480,6 @@ static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0xaa),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCS_TX_RX_CONFIG, 0x0c),
-	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
-	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_CDR_RESET_TIME, 0x0a),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG1, 0x88),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG2, 0x13),
@@ -1490,6 +1488,11 @@ static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x21),
 };
 
+static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_usb_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
+	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
+};
+
 static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_LOCK_DETECT_CONFIG1, 0xc4),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_LOCK_DETECT_CONFIG2, 0x89),
@@ -1499,9 +1502,6 @@ static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0xaa),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCS_TX_RX_CONFIG, 0x0c),
-	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
-	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
-	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_POWER_STATE_CONFIG1, 0x6f),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_CDR_RESET_TIME, 0x0a),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG1, 0x88),
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG2, 0x13),
@@ -1510,6 +1510,12 @@ static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x21),
 };
 
+static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_usb_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
+	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
+	QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_POWER_STATE_CONFIG1, 0x6f),
+};
+
 struct qmp_usb_offsets {
 	u16 serdes;
 	u16 pcs;
@@ -1788,6 +1794,8 @@ static const struct qmp_phy_cfg sa8775p_usb3_uniphy_cfg = {
 	.rx_tbl_num		= ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl),
 	.pcs_tbl		= sa8775p_usb3_uniphy_pcs_tbl,
 	.pcs_tbl_num		= ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_tbl),
+	.pcs_usb_tbl		= sa8775p_usb3_uniphy_pcs_usb_tbl,
+	.pcs_usb_tbl_num	= ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_usb_tbl),
 	.clk_list		= qmp_v4_phy_clk_l,
 	.num_clks		= ARRAY_SIZE(qmp_v4_phy_clk_l),
 	.reset_list		= qcm2290_usb3phy_reset_l,
@@ -1833,6 +1841,8 @@ static const struct qmp_phy_cfg sc8280xp_usb3_uniphy_cfg = {
 	.rx_tbl_num		= ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl),
 	.pcs_tbl		= sc8280xp_usb3_uniphy_pcs_tbl,
 	.pcs_tbl_num		= ARRAY_SIZE(sc8280xp_usb3_uniphy_pcs_tbl),
+	.pcs_usb_tbl		= sc8280xp_usb3_uniphy_pcs_usb_tbl,
+	.pcs_usb_tbl_num	= ARRAY_SIZE(sc8280xp_usb3_uniphy_pcs_usb_tbl),
 	.clk_list		= qmp_v4_phy_clk_l,
 	.num_clks		= ARRAY_SIZE(qmp_v4_phy_clk_l),
 	.reset_list		= qcm2290_usb3phy_reset_l,
@@ -2233,6 +2243,7 @@ static int qmp_usb_power_on(struct phy *phy)
 	void __iomem *tx = qmp->tx;
 	void __iomem *rx = qmp->rx;
 	void __iomem *pcs = qmp->pcs;
+	void __iomem *pcs_usb = qmp->pcs_usb;
 	void __iomem *status;
 	unsigned int val;
 	int ret;
@@ -2256,6 +2267,9 @@ static int qmp_usb_power_on(struct phy *phy)
 
 	qmp_usb_configure(pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
 
+	if (pcs_usb)
+		qmp_usb_configure(pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num);
+
 	if (cfg->has_pwrdn_delay)
 		usleep_range(10, 20);
 
drivers/pinctrl/core.c +7 -9
index b84781cfc259..401886c81344 100644
@@ -1012,20 +1012,17 @@ static int add_setting(struct pinctrl *p, struct pinctrl_dev *pctldev,
 
 static struct pinctrl *find_pinctrl(struct device *dev)
 {
-	struct pinctrl *entry, *p = NULL;
+	struct pinctrl *p;
 
 	mutex_lock(&pinctrl_list_mutex);
-
-	list_for_each_entry(entry, &pinctrl_list, node) {
-		if (entry->dev == dev) {
-			p = entry;
-			kref_get(&p->users);
-			break;
+	list_for_each_entry(p, &pinctrl_list, node)
+		if (p->dev == dev) {
+			mutex_unlock(&pinctrl_list_mutex);
+			return p;
 		}
-	}
 
 	mutex_unlock(&pinctrl_list_mutex);
-	return p;
+	return NULL;
 }
 
 static void pinctrl_free(struct pinctrl *p, bool inlist);
@@ -1133,6 +1130,7 @@ struct pinctrl *pinctrl_get(struct device *dev)
 	p = find_pinctrl(dev);
 	if (p) {
 		dev_dbg(dev, "obtain a copy of previously claimed pinctrl\n");
+		kref_get(&p->users);
 		return p;
 	}
 
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +11 -6
index fdb6585a9234..65088972dc94 100644
@@ -31,7 +31,8 @@ struct lpi_pinctrl {
 	char __iomem *tlmm_base;
 	char __iomem *slew_base;
 	struct clk_bulk_data clks[MAX_LPI_NUM_CLKS];
-	struct mutex slew_access_lock;
+	/* Protects from concurrent register updates */
+	struct mutex lock;
 	DECLARE_BITMAP(ever_gpio, MAX_NR_GPIO);
 	const struct lpi_pinctrl_variant_data *data;
 };
@@ -102,6 +103,7 @@ static int lpi_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned int function,
 	if (WARN_ON(i == g->nfuncs))
 		return -EINVAL;
 
+	mutex_lock(&pctrl->lock);
 	val = lpi_gpio_read(pctrl, pin, LPI_GPIO_CFG_REG);
 
 	/*
@@ -127,6 +129,7 @@ static int lpi_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned int function,
 
 	u32p_replace_bits(&val, i, LPI_GPIO_FUNCTION_MASK);
 	lpi_gpio_write(pctrl, pin, LPI_GPIO_CFG_REG, val);
+	mutex_unlock(&pctrl->lock);
 
 	return 0;
 }
@@ -232,14 +235,14 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
 			if (slew_offset == LPI_NO_SLEW)
 				break;
 
-			mutex_lock(&pctrl->slew_access_lock);
+			mutex_lock(&pctrl->lock);
 
 			sval = ioread32(pctrl->slew_base + LPI_SLEW_RATE_CTL_REG);
 			sval &= ~(LPI_SLEW_RATE_MASK << slew_offset);
 			sval |= arg << slew_offset;
 			iowrite32(sval, pctrl->slew_base + LPI_SLEW_RATE_CTL_REG);
 
-			mutex_unlock(&pctrl->slew_access_lock);
+			mutex_unlock(&pctrl->lock);
 			break;
 		default:
 			return -EINVAL;
@@ -255,6 +258,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
 		lpi_gpio_write(pctrl, group, LPI_GPIO_VALUE_REG, val);
 	}
 
+	mutex_lock(&pctrl->lock);
 	val = lpi_gpio_read(pctrl, group, LPI_GPIO_CFG_REG);
 
 	u32p_replace_bits(&val, pullup, LPI_GPIO_PULL_MASK);
@@ -263,6 +267,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
 	u32p_replace_bits(&val, output_enabled, LPI_GPIO_OE_MASK);
 
 	lpi_gpio_write(pctrl, group, LPI_GPIO_CFG_REG, val);
+	mutex_unlock(&pctrl->lock);
 
 	return 0;
 }
@@ -464,7 +469,7 @@ int lpi_pinctrl_probe(struct platform_device *pdev)
 	pctrl->chip.label = dev_name(dev);
 	pctrl->chip.can_sleep = false;
 
-	mutex_init(&pctrl->slew_access_lock);
+	mutex_init(&pctrl->lock);
 
 	pctrl->ctrl = devm_pinctrl_register(dev, &pctrl->desc, pctrl);
 	if (IS_ERR(pctrl->ctrl)) {
@@ -486,7 +491,7 @@ int lpi_pinctrl_probe(struct platform_device *pdev)
 	return 0;
 
 err_pinctrl:
-	mutex_destroy(&pctrl->slew_access_lock);
+	mutex_destroy(&pctrl->lock);
 	clk_bulk_disable_unprepare(MAX_LPI_NUM_CLKS, pctrl->clks);
 
 	return ret;
@@ -498,7 +503,7 @@ int lpi_pinctrl_remove(struct platform_device *pdev)
 	struct lpi_pinctrl *pctrl = platform_get_drvdata(pdev);
 	int i;
 
-	mutex_destroy(&pctrl->slew_access_lock);
+	mutex_destroy(&pctrl->lock);
 	clk_bulk_disable_unprepare(MAX_LPI_NUM_CLKS, pctrl->clks);
 
 	for (i = 0; i < pctrl->data->npins; i++)
drivers/platform/surface/surface_platform_profile.c +1 -2
index f433a13c3689..a5a3941b3f43 100644
@@ -159,8 +159,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
 	set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
 	set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
 
-	platform_profile_register(&tpd->handler);
-	return 0;
+	return platform_profile_register(&tpd->handler);
 }
 
 static void surface_platform_profile_remove(struct ssam_device *sdev)
drivers/platform/x86/apple-gmux.c +13 -1
index cadbb557a108..1417e230edbd 100644
@@ -105,6 +105,8 @@ struct apple_gmux_config {
 #define GMUX_BRIGHTNESS_MASK		0x00ffffff
 #define GMUX_MAX_BRIGHTNESS		GMUX_BRIGHTNESS_MASK
 
+# define MMIO_GMUX_MAX_BRIGHTNESS	0xffff
+
 static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port)
[… more lines in the raw message]

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

drivers/platform/x86/asus-nb-wmi.c +3 -0
index d85d895fee89..df1db54d4e18 100644

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

drivers/platform/x86/asus-wmi.c +4 -11
index 8bef66a2f0ce..66b9fa1d7698 100644

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

drivers/platform/x86/asus-wmi.h +1 -1
index a478ebfd34df..fc41d1b1bb7f 100644

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

drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +6 -2
index 1152deaa0078..33ab207493e3 100644

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

drivers/platform/x86/msi-ec.c +1 -2
index f26a3121092f..492eb383ee7a 100644

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

drivers/platform/x86/touchscreen_dmi.c +45 -0

45 lines not on this page · raw message

drivers/power/reset/Kconfig +1 -1
index fff07b2bd77b..62f592e61733 100644

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

drivers/regulator/core.c +1 -5
index 2820badc7a12..3137e40fcd3e 100644

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

drivers/s390/cio/css.c +4 -2
index 3ef636935a54..3ff46fc694f8 100644

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

drivers/thunderbolt/tb.c +6 -4
index 3fb4553a6442..7c0c46be3fdb 100644

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

drivers/usb/serial/option.c +7 -0
index 7994a4549a6c..45dcfaadaf98 100644

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

fs/btrfs/ctree.c +39 -13

52 lines not on this page · raw message

fs/btrfs/delayed-ref.c +35 -11

46 lines not on this page · raw message

fs/btrfs/delayed-ref.h +0 -1
index b8e14b0ba5f1..fd9bf2b709c0 100644

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

fs/btrfs/extent-tree.c +3 -3
index 0917c5f39e3d..2cf8d646085c 100644

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

fs/btrfs/ioctl.c +2 -2
index d27b0d86b8e2..bf35b6fce8f0 100644

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

fs/btrfs/transaction.c +3 -3
index 5bbd288b9cb5..0554ca2a8e3b 100644

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

fs/btrfs/tree-log.c +1 -1
index 365a1cc0a3c3..a00e7a0bc713 100644

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

fs/btrfs/volumes.c +1 -1
index 51070c0d4141..5019e9244d2d 100644

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

fs/fs-writeback.c +8 -3
index aca4b4811394..d532a93e980d 100644

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

fs/namei.c +5 -4
index 567ee547492b..94565bd7e73f 100644

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

fs/nfs/flexfilelayout/flexfilelayout.c +10 -7
index a1dc33864906..ef817a0475ff 100644

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

fs/nfs/nfs42proc.c +2 -1
index 063e00aff87e..28704f924612 100644

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

fs/nfs/nfs4proc.c +0 -2
index 51029e4b60f5..5f088e3eeca1 100644

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

fs/nfs/pnfs.c +23 -10
index 306cba0b9e69..84343aefbbd6 100644

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

fs/nfs/write.c +3 -1
index 8c1ee1a1a28f..9d82d50ce0b1 100644

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

fs/notify/fanotify/fanotify_user.c +17 -8
index f69c451018e3..62fe0b679e58 100644

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

fs/ntfs3/fsntfs.c +5 -1
index 33afee0f5559..9ddb2ab23b95 100644

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

fs/ntfs3/index.c +3 -0
index 124c6e822623..cf92b2433f7a 100644

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

fs/ntfs3/ntfs_fs.h +2 -0
index 629403ede6e5..788567d71d93 100644

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

fs/ntfs3/super.c +25 -6
index 1a02072b6b0e..d6b5170253a6 100644

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

fs/ntfs3/xattr.c +6 -1
index 023f314e8950..c59d6f5a725a 100644

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

fs/overlayfs/copy_up.c +1 -1
index 986d37a4c275..ab32c6b28d40 100644

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

include/linux/fs.h +1 -1
index 562f2623c9c9..87a21a18d114 100644

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

include/linux/mtd/jedec.h +3 -0
index 0b6b59f7cfbd..56047a4e54c9 100644

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

include/linux/mtd/onfi.h +1 -0
index a7376f9beddf..55ab2e4d62f9 100644

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

include/linux/mtd/rawnand.h +2 -0
index 5159d692f9ce..e8864c4f3921 100644

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

include/linux/perf_event.h +1 -0
index e657916c9509..227e9d45f61b 100644

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

include/linux/virtio_net.h +16 -3
index 7b4dd69555e4..27cc1d464321 100644

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

include/net/bluetooth/hci_core.h +2 -1
index c0a87558aea7..abb7cb5db945 100644

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

include/net/bluetooth/hci_mon.h +1 -1
index 2d5fcda1bcd0..082f89531b88 100644

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

include/net/bluetooth/hci_sync.h +3 -0
index b516a0f4a55b..57eeb07aeb25 100644

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

include/net/ip_fib.h +1 -0
index f0c13864180e..15de07d36540 100644

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

include/net/netns/xfrm.h +1 -0
index bd7c3be4af5d..423b52eca908 100644

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

include/net/sock.h +4 -6
index 4e787285fc66..fc189910e63f 100644

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

include/net/tcp.h +3 -0
index b1b1e01c6983..7f684806c291 100644

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

include/trace/events/neigh.h +2 -2
index 5eaa1fa99171..833143d0992e 100644

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

io_uring/io-wq.c +4 -6
index 2c03bc881edf..fbab9b2727fd 100644

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

io_uring/io_uring.c +6 -0
index 9736416136a1..3a55d2be8e25 100644

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

kernel/auditsc.c +4 -4
index eae5dfe9b9a0..28ea7411ff66 100644

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

kernel/events/core.c +33 -6
index 78ae7b6f90fd..b3d800738fc5 100644

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

kernel/sched/cpufreq_schedutil.c +2 -1
index 4492608b7d7f..458d359f5991 100644

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

kernel/trace/fprobe.c +3 -3
index 3b21f4063258..881f90f0cbcf 100644

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

kernel/trace/trace_events.c +1 -0
index 0cf84a7449f5..9841589b4af7 100644

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

kernel/trace/trace_kprobe.c +63 -0

63 lines not on this page · raw message

kernel/trace/trace_probe.h +1 -0
index 01ea148723de..975161164366 100644

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

mm/slab_common.c +4 -2
index 5658da50a2d0..e2701dbb8872 100644

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

net/bluetooth/hci_conn.c +97 -38

135 lines not on this page · raw message

net/bluetooth/hci_core.c +5 -3
index 26a265d9c59c..63d4d38863ac 100644

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

net/bluetooth/hci_event.c +50 -27

77 lines not on this page · raw message

net/bluetooth/hci_sock.c +2 -1
index 1d249d839819..484fc2a8e4ba 100644

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

net/bluetooth/hci_sync.c +52 -18

70 lines not on this page · raw message

net/bluetooth/iso.c +0 -14
index 42f7b257bdfb..c8460eb7f5c0 100644

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

net/core/dev.c +50 -15

65 lines not on this page · raw message

net/core/dev.h +3 -0
index e075e198092c..fa2e9c5c4122 100644

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

net/core/pktgen.c +7 -7
index f56b8d697014..4d1696677c48 100644

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

net/core/rtnetlink.c +1 -3
index 00c94d9622b4..c1a6f58cb2f6 100644

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

net/core/stream.c +7 -5
index f5c4e47df165..96fbcb9bbb30 100644

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

net/ipv4/af_inet.c +8 -2
index 02736b83c303..0c0ae021b7ff 100644

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

net/ipv4/esp4.c +3 -1
index 2be2d4922557..d18f0f092fe7 100644

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

net/ipv4/fib_semantics.c +10 -5
index eafa4a033515..5eb1b8d302bb 100644

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

net/ipv4/fib_trie.c +4 -0
index d13fb9e76b97..9bdfdab906fe 100644

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

net/ipv4/inet_connection_sock.c +0 -1
index aeebe8816689..394a498c2823 100644

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

net/ipv4/inet_hashtables.c +9 -15
index ae5e786a0598..60cffabfd478 100644

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

net/ipv4/tcp.c +8 -8
index 9cfc07d1e425..9bdc1b2eaf73 100644

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

net/ipv4/tcp_bpf.c +12 -0
index 327268203001..53b0d62fd2c2 100644

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

net/ipv4/tcp_ipv4.c +1 -0
index 2dbdc26da86e..38528d110288 100644

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

net/ipv4/tcp_output.c +19 -6
index a8f58f5e99a7..afa819eede6a 100644

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

net/ipv4/tcp_recovery.c +1 -1
index acf4869c5d3b..bba10110fbbc 100644

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

net/ipv6/esp6.c +3 -1
index fddd0cbdede1..e023d29e919c 100644

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

net/ipv6/xfrm6_policy.c +2 -2
index eecc5e59da17..50c278f1c106 100644

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

net/mac80211/cfg.c +2 -1
index e883c41a2163..0e3a1753a51c 100644

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

net/mac80211/ibss.c +1 -1
index e1900077bc4b..5542c93edfba 100644

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

net/mac80211/ieee80211_i.h +1 -0
index f8cd94ba55cc..2cce9eba6a12 100644

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

net/mac80211/mesh_plink.c +1 -1
index f3d5bb0a59f1..a1e526419e9d 100644

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

net/mac80211/mlme.c +25 -2
index 24b2833e0e47..0c9198997482 100644

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

net/mac80211/tx.c +2 -1
index 7fe7280e8437..d45d4be63dd8 100644

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

net/mac80211/vht.c +14 -2
index c1250aa47808..b3a5c3e96a72 100644

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

net/mptcp/protocol.c +23 -20

43 lines not on this page · raw message

net/netfilter/nf_tables_api.c +6 -14
index be5869366c7d..e43d9508e7a9 100644

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

net/netfilter/nft_inner.c +1 -0
index 28e2873ba24e..928312d01eb1 100644

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

net/netfilter/nft_payload.c +1 -1
index 120f6d395b98..0a689c8e0295 100644

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

net/netfilter/nft_set_rbtree.c +2 -0
index 2660ceab3759..e34662f4a71e 100644

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

net/nfc/nci/spi.c +2 -0
index 0935527d1d12..b68150c971d0 100644

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

net/rfkill/core.c +28 -9
index 01fca7a10b4b..14cc8fe8584b 100644

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

net/rfkill/rfkill-gpio.c +2 -2
index e9d1b2f2ff0a..5a81505fba9a 100644

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

net/sched/sch_hfsc.c +14 -4
index 61d52594ff6d..54dddc2ff502 100644

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

net/smc/af_smc.c +1 -1
index 7c77565c39d1..c0e4e587b499 100644

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

net/sunrpc/auth.c +8 -3
index 2f16f9d17966..814b0169f972 100644

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

net/sunrpc/auth_tls.c +2 -2
index de7678f8a23d..87f570fd3b00 100644

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

net/sunrpc/clnt.c +9 -1
index be6be7d78531..9fb0ccabc1a2 100644

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

net/sunrpc/xprtsock.c +6 -0
index 9f010369100a..f392718951b1 100644

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

net/tls/tls_main.c +7 -3
index 4a8ee2f6badb..f3d3fc1c3267 100644

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

net/tls/tls_sw.c +35 -22

57 lines not on this page · raw message

net/wireless/core.c +1 -1
index 64e861617110..acec41c1809a 100644

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

net/wireless/nl80211.c +20 -1
index 705d1cf04830..bf968cdbfbb5 100644

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

net/wireless/scan.c +4 -0
index 0cf1ce7b6934..939deecf0bbe 100644

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

net/xfrm/xfrm_interface_core.c +10 -12
index b86474084690..e21cc71095bb 100644

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

net/xfrm/xfrm_policy.c +16 -11
index d6b405782b63..d24b4d4f620e 100644

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

rust/Makefile +13 -11
index 4124bfa01798..467f50a752db 100644

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

rust/kernel/error.rs +1 -1
index 05fcab6abfe6..0f29e7b2194c 100644

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

sound/pci/hda/patch_realtek.c +27 -0
index 10703a3df7ea..c2fbf484b110 100644

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

sound/soc/codecs/cs35l56.c +1 -1
index 7e241908b5f1..4d7ccf682647 100644

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

sound/soc/codecs/cs42l42-sdw.c +1 -0
index 974bae4abfad..94a66a325303 100644

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

sound/soc/codecs/wcd938x-sdw.c +26 -1
index bd0e9fbc12eb..6405fed9f095 100644

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

sound/soc/codecs/wcd938x.c +57 -19

76 lines not on this page · raw message

sound/soc/pxa/pxa-ssp.c +1 -1
index 430dd446321e..452f0caf415b 100644

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

tools/perf/util/dlfilter.c +15 -17
index e0f822ebb9b9..38a33c7b3908 100644

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

tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc new file +13 -0
new file mode 100644
index 000000000000..bc9514428dba

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

tools/testing/selftests/net/mptcp/mptcp_join.sh +19 -2
index d01b73a8ed0f..621b1964ea6f 100755

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

tools/testing/selftests/net/openvswitch/openvswitch.sh +3 -1
index 3117a4be0cd0..e175cf2e7b50 100755

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

tools/testing/selftests/net/openvswitch/ovs-dpctl.py +12 -2
index 1c8b36bc15d4..0d9bb167ebf4 100644

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

tools/testing/selftests/netfilter/nft_audit.sh +6 -0
index bb34329e02a7..5267c88496d5 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.