Skip to contentSkip to conversation

Linux 5.15.11

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Dec 22, 2021 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.11 kernel.

All users of the 5.15 kernel series must upgrade.

The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/networking/device_drivers/ethernet/intel/ixgbe.rst |   16 +
 Makefile                                                         |    2 
 arch/arm/boot/dts/imx6ull-pinfunc.h                              |    2 
 arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts                 |    2 
 arch/arm/boot/dts/socfpga_arria5_socdk.dts                       |    2 
 arch/arm/boot/dts/socfpga_cyclone5_socdk.dts                     |    2 
 arch/arm/boot/dts/socfpga_cyclone5_sockit.dts                    |    2 
 arch/arm/boot/dts/socfpga_cyclone5_socrates.dts                  |    2 
 arch/arm/boot/dts/socfpga_cyclone5_sodia.dts                     |    2 
 arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts               |    4 
 arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts              |    2 
 arch/arm64/boot/dts/freescale/imx8mq.dtsi                        |    2 
 arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts                   |    2 
 arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi             |    1 
 arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts           |    1 
 arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts                |    2 
 arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi               |    2 
 arch/arm64/kernel/machine_kexec_file.c                           |    1 
 arch/powerpc/kernel/module_64.c                                  |   42 ++
 arch/powerpc/platforms/85xx/smp.c                                |    4 
 arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts              |    1 
 arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts              |    2 
 arch/s390/kernel/irq.c                                           |    9 
 arch/s390/kernel/machine_kexec_file.c                            |    7 
 arch/x86/kvm/ioapic.h                                            |    1 
 arch/x86/kvm/irq.h                                               |    1 
 arch/x86/kvm/vmx/vmx.c                                           |    4 
 arch/x86/kvm/x86.c                                               |   14 
 arch/x86/net/bpf_jit_comp.c                                      |  101 ++++---
 block/blk-iocost.c                                               |    9 
 drivers/Makefile                                                 |    3 
 drivers/ata/libata-scsi.c                                        |   15 -
 drivers/block/xen-blkfront.c                                     |   15 -
 drivers/bus/ti-sysc.c                                            |    3 
 drivers/clk/clk.c                                                |   15 -
 drivers/dma/idxd/irq.c                                           |    7 
 drivers/dma/idxd/registers.h                                     |    1 
 drivers/dma/idxd/submit.c                                        |   18 +
 drivers/dma/st_fdma.c                                            |    2 
 drivers/firmware/scpi_pm_domain.c                                |   10 
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c                            |    4 
 drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c                         |    1 
 drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c                         |    1 
 drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c                         |    1 
 drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c                          |    1 
 drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c                          |    1 
 drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c                          |    1 
 drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c                          |    1 
 drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c                          |    2 
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c                |    1 
 drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c                   |    3 
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c                   |    3 
 drivers/gpu/drm/ast/ast_mode.c                                   |    5 
 drivers/gpu/drm/drm_fb_helper.c                                  |    8 
 drivers/gpu/drm/i915/display/g4x_hdmi.c                          |    1 
 drivers/gpu/drm/i915/display/intel_ddi.c                         |    1 
 drivers/gpu/drm/i915/display/intel_dmc.c                         |    2 
 drivers/gpu/drm/i915/display/intel_hdmi.c                        |   32 +-
 drivers/gpu/drm/i915/display/intel_hdmi.h                        |    1 
 drivers/gpu/drm/tiny/simpledrm.c                                 |    2 
 drivers/md/persistent-data/dm-btree-remove.c                     |    2 
 drivers/media/usb/dvb-usb-v2/mxl111sf.c                          |   16 -
 drivers/net/can/m_can/m_can.c                                    |   24 +
 drivers/net/can/m_can/m_can.h                                    |    3 
 drivers/net/can/m_can/m_can_pci.c                                |   48 +++
 drivers/net/dsa/mv88e6xxx/chip.c                                 |    4 
 drivers/net/dsa/mv88e6xxx/port.c                                 |    4 
 drivers/net/ethernet/broadcom/bcmsysport.c                       |    5 
 drivers/net/ethernet/broadcom/bcmsysport.h                       |    1 
 drivers/net/ethernet/hisilicon/hns3/hnae3.h                      |    2 
 drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c               |   20 -
 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c         |    3 
 drivers/net/ethernet/intel/ice/ice_ptp.c                         |   13 
 drivers/net/ethernet/intel/ice/ice_ptp.h                         |    6 
 drivers/net/ethernet/intel/igb/igb_main.c                        |   28 -
 drivers/net/ethernet/intel/igbvf/netdev.c                        |    1 
 drivers/net/ethernet/intel/igc/igc_i225.c                        |    2 
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c                    |    4 
 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c                    |    3 
 drivers/net/ethernet/sfc/ef100_nic.c                             |    3 
 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c                   |    4 
 drivers/net/ethernet/stmicro/stmmac/stmmac.h                     |   17 +
 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c                  |   86 +++++
 drivers/net/netdevsim/bpf.c                                      |    1 
 drivers/net/netdevsim/ethtool.c                                  |    5 
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c                      |    5 
 drivers/net/xen-netback/common.h                                 |    1 
 drivers/net/xen-netback/rx.c                                     |   77 +++--
 drivers/net/xen-netfront.c                                       |  125 ++++++--
 drivers/pci/msi.c                                                |   15 -
 drivers/pinctrl/pinctrl-amd.c                                    |   29 +-
 drivers/reset/tegra/reset-bpmp.c                                 |    9 
 drivers/scsi/scsi_debug.c                                        |   42 +-
 drivers/scsi/ufs/ufshcd.c                                        |   12 
 drivers/soc/imx/soc-imx.c                                        |    4 
 drivers/soc/tegra/fuse/fuse-tegra.c                              |    2 
 drivers/soc/tegra/fuse/fuse.h                                    |    2 
 drivers/tee/amdtee/core.c                                        |    5 
 drivers/tty/hvc/hvc_xen.c                                        |   30 +-
 drivers/tty/n_hdlc.c                                             |   23 +
 drivers/tty/serial/8250/8250_fintek.c                            |   20 -
 drivers/usb/cdns3/cdnsp-gadget.c                                 |   12 
 drivers/usb/cdns3/cdnsp-ring.c                                   |   11 
 drivers/usb/cdns3/cdnsp-trace.h                                  |    4 
 drivers/usb/core/devio.c                                         |  144 +++++++---
 drivers/usb/core/quirks.c                                        |    3 
 drivers/usb/dwc2/platform.c                                      |    3 
 drivers/usb/early/xhci-dbc.c                                     |   15 -
 drivers/usb/gadget/composite.c                                   |    6 
 drivers/usb/gadget/function/u_ether.c                            |   16 -
 drivers/usb/gadget/legacy/dbgp.c                                 |    6 
 drivers/usb/gadget/legacy/inode.c                                |    6 
 drivers/usb/host/xhci-mtk-sch.c                                  |    2 
 drivers/usb/host/xhci-pci.c                                      |    6 
 drivers/usb/serial/cp210x.c                                      |    6 
 drivers/usb/serial/option.c                                      |    8 
 drivers/usb/typec/tcpm/tcpm.c                                    |   18 -
 drivers/vdpa/vdpa.c                                              |    3 
 drivers/vdpa/vdpa_user/vduse_dev.c                               |    6 
 drivers/vhost/vdpa.c                                             |    2 
 drivers/virtio/virtio_ring.c                                     |    2 
 drivers/xen/events/events_base.c                                 |    6 
 fs/afs/file.c                                                    |    5 
 fs/afs/super.c                                                   |    1 
 fs/btrfs/disk-io.c                                               |   14 
 fs/btrfs/extent_io.c                                             |   10 
 fs/btrfs/inode.c                                                 |    2 
 fs/btrfs/super.c                                                 |   26 -
 fs/btrfs/tree-log.c                                              |    1 
 fs/btrfs/volumes.c                                               |   25 -
 fs/btrfs/volumes.h                                               |    6 
 fs/ceph/caps.c                                                   |   16 -
 fs/ceph/file.c                                                   |   18 +
 fs/ceph/mds_client.c                                             |    3 
 fs/cifs/fs_context.c                                             |   38 ++
 fs/fuse/dir.c                                                    |    2 
 fs/io-wq.c                                                       |   31 +-
 fs/overlayfs/dir.c                                               |    3 
 fs/overlayfs/overlayfs.h                                         |    1 
 fs/overlayfs/super.c                                             |   12 
 fs/zonefs/super.c                                                |    1 
 include/uapi/linux/mptcp.h                                       |   18 -
 include/xen/events.h                                             |    1 
 kernel/audit.c                                                   |   21 -
 kernel/bpf/verifier.c                                            |   49 ++-
 kernel/locking/rtmutex.c                                         |    2 
 kernel/rcu/tree.c                                                |   10 
 kernel/time/timekeeping.c                                        |    3 
 net/core/skbuff.c                                                |    2 
 net/ipv4/inet_diag.c                                             |    4 
 net/ipv6/sit.c                                                   |    1 
 net/mac80211/agg-rx.c                                            |    5 
 net/mac80211/agg-tx.c                                            |   16 -
 net/mac80211/driver-ops.h                                        |    5 
 net/mac80211/mlme.c                                              |   13 
 net/mac80211/sta_info.h                                          |    1 
 net/mac80211/tx.c                                                |    6 
 net/mac80211/util.c                                              |    7 
 net/mptcp/pm_netlink.c                                           |    3 
 net/mptcp/protocol.c                                             |    6 
 net/mptcp/sockopt.c                                              |    1 
 net/packet/af_packet.c                                           |    5 
 net/rds/connection.c                                             |    1 
 net/sched/cls_api.c                                              |    1 
 net/sched/sch_cake.c                                             |    6 
 net/sched/sch_ets.c                                              |    4 
 net/smc/af_smc.c                                                 |    4 
 net/vmw_vsock/virtio_transport_common.c                          |    3 
 net/wireless/reg.c                                               |    7 
 scripts/recordmcount.pl                                          |    2 
 security/selinux/hooks.c                                         |   33 +-
 tools/perf/builtin-inject.c                                      |   13 
 tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c     |   16 -
 tools/testing/selftests/bpf/verifier/atomic_cmpxchg.c            |   86 +++++
 tools/testing/selftests/bpf/verifier/value_ptr_arith.c           |   23 +
 tools/testing/selftests/damon/.gitignore                         |    2 
 tools/testing/selftests/damon/Makefile                           |    2 
 tools/testing/selftests/damon/debugfs_attrs.sh                   |   18 +
 tools/testing/selftests/damon/huge_count_read_write.c            |   39 ++
 tools/testing/selftests/kvm/kvm_create_max_vcpus.c               |   30 ++
 tools/testing/selftests/net/fcnal-test.sh                        |   45 ++-
 tools/testing/selftests/net/forwarding/forwarding.config.sample  |    2 
 tools/testing/selftests/net/icmp_redirect.sh                     |    2 
 tools/testing/selftests/net/toeplitz.c                           |    2 
 virt/kvm/kvm_main.c                                              |    6 
 185 files changed, 1583 insertions(+), 554 deletions(-)

Adrian Hunter (2):
perf inject: Fix segfault due to close without open perf inject: Fix segfault due to perf_data__fd() without open

Alan Stern (1):
USB: core: Make do_proc_control() and do_proc_bulk() killable

Alejandro Concepcion-Rodriguez (1):
drm: simpledrm: fix wrong unit with pixel clock

Alex Bee (1):
arm64: dts: rockchip: fix audio-supply for Rock Pi 4

Alexei Starovoitov (2):
bpf: Fix extable fixup offset.
bpf: Fix extable address check.

Alyssa Ross (1):
dmaengine: st_fdma: fix MODULE_ALIAS

Amelie Delaunay (1):
usb: dwc2: fix STM ID/VBUS detection startup delay in dwc2_driver_probe

Anand Jain (4):
btrfs: convert latest_bdev type to btrfs_device and rename
btrfs: use latest_dev in btrfs_show_devname
btrfs: update latest_dev when we create a sprout device
btrfs: remove stale comment about the btrfs_show_devname

Andrey Eremeev (1):
dsa: mv88e6xxx: fix debug print for SPEED_UNFORCED

Arnd Bergmann (1):
virtio: always enter drivers/virtio/

Artem Lapkin (1):
arm64: dts: rockchip: remove mmc-hs400-enhanced-strobe from rk3399-khadas-edge

Baowen Zheng (1):
flow_offload: return EOPNOTSUPP for the unsupported mpls action type

Bin Meng (2):
riscv: dts: unleashed: Add gpio card detect to mmc-spi-slot
riscv: dts: unmatched: Add gpio card detect to mmc-spi-slot

Christian Brauner (1):
ceph: fix up non-directory creation in SGID directories

Chunfeng Yun (1):
usb: xhci-mtk: fix list_del warning when enable list debug

Cyril Novikov (1):
ixgbe: set X550 MDIO speed before talking to PHY

D. Wythe (1):
net/smc: Prevent smc_release() from long blocking

Dan Carpenter (4):
vduse: fix memory corruption in vduse_dev_ioctl()
vduse: check that offset is within bounds in get_config()
vdpa: check that offsets are within bounds
tee: amdtee: fix an IS_ERR() vs NULL bug

Daniel Borkmann (7):
bpf: Fix kernel address leakage in atomic fetch
bpf, selftests: Add test case for atomic fetch on spilled pointer
bpf: Fix signed bounds propagation after mov32
bpf: Make 32->64 bounds propagation slightly more robust bpf, selftests: Add test case trying to taint map value pointer
bpf: Fix kernel address leakage in atomic cmpxchg's r0 aux reg bpf, selftests: Update test case for atomic cmpxchg on r0 with pointer

Daniele Palmas (1):
USB: serial: option: add Telit FN990 compositions

Dave Jiang (3):
dmaengine: idxd: add halt interrupt support
dmaengine: idxd: fix calling wq quiesce inside spinlock
dmaengine: idxd: fix missed completion on abort path

David Ahern (3):
selftests: Add duplicate config only for MD5 VRF tests
selftests: Fix raw socket bind tests with VRF
selftests: Fix IPv6 address bind tests

David Howells (1):
afs: Fix mmap

Davide Caratti (1):
net/sched: sch_ets: don't remove idle classes from the round-robin list

Dinh Nguyen (1):
ARM: socfpga: dts: fix qspi node compatible

Eric Dumazet (3):
sch_cake: do not call cake_destroy() from cake_init()
inet_diag: fix kernel-infoleak for UDP sockets
sit: do not call ipip6_dev_free() from sit_init_net()

Fabio Estevam (1):
ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name

Felix Fietkau (3):
mac80211: fix rate control for retransmitted frames
mac80211: fix regression in SSN handling of addba tx
mac80211: send ADDBA requests using the tid/queue of the aggregation session

Filip Pokryvka (1):
netdevsim: don't overwrite read only ethtool parms

Filipe Manana (1):
btrfs: fix double free of anon_dev after failure to create subvolume

Florian Fainelli (1):
net: systemport: Add global locking for descriptor lifecycle

Florian Klink (1):
arm64: dts: rockchip: fix poweroff on helios64

Florian Westphal (2):
mptcp: remove tcp ulp setsockopt support
mptcp: clear 'kern' flag from fallback sockets

Gal Pressman (1):

      net: Fix double 0x prefix print in SKB dump

George Kennedy (4):
libata: if T_LENGTH is zero, dma direction should be DMA_NONE
scsi: scsi_debug: Don't call kcalloc() if size arg is zero
scsi: scsi_debug: Fix type in min_t to avoid stack OOB
scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select()

Greg Kroah-Hartman (3):
USB: gadget: bRequestType is a bitfield, not a enum Revert "usb: early: convert to readl_poll_timeout_atomic()" Linux 5.15.11

Haimin Zhang (1):
netdevsim: Zero-initialize memory for new map's value in function nsim_bpf_map_alloc

Hangbin Liu (1):
selftest/net/forwarding: declare NETIFS p9 p10

Hangyu Hua (1):
rds: memory leak in __rds_conn_create()

Harshit Mogalapalli (1):
drm/i915/display: Fix an unsigned subtraction which can never be negative.

Hawking Zhang (1):
drm/amdgpu: don't override default ECO_BITs setting

Hu Weiwen (1):
ceph: fix duplicate increment of opened_inodes metric

Ilan Peer (1):
cfg80211: Acquire wiphy mutex on regulatory work

Jaegeuk Kim (1):
scsi: ufs: core: Retry START_STOP on UNIT_ATTENTION

Jani Nikula (1):
drm/i915/hdmi: convert intel_hdmi_to_dev to intel_hdmi_to_i915

Javier Martinez Canillas (1):
Revert "drm/fb-helper: improve DRM fbdev emulation device names"

Jens Axboe (3):
io-wq: remove spurious bit clear on task_work addition
io-wq: check for wq exit after adding new worker task_work
io-wq: drop wqe lock before creating new worker

Jerome Marchand (1):
recordmcount.pl: look for jgnop instruction as well as bcrl on s390

Ji-Ze Hong (Peter Hong) (1):
serial: 8250_fintek: Fix garbled text for console

Jianglei Nie (1):
btrfs: fix memory leak in __add_inode_ref()

Jiasheng Jiang (2):
drm/ast: potential dereference of null pointer
sfc_ef100: potential dereference of null pointer

Jie Meng (1):
bpf, x64: Factor out emission of REX byte in more cases

Jie Wang (1):
net: hns3: fix use-after-free bug in hclgevf_send_mbx_msg

Jie2x Zhou (1):
selftests: net: Correct ping6 expected rc from 2 to 1

Jimmy Wang (1):
USB: NO_LPM quirk Lenovo USB-C to Ethernet Adapher(RTL8153-04)

Joe Thornber (1):
dm btree remove: fix use after free in rebalance_children()

Johan Hovold (1):

      USB: serial: cp210x: fix CP2105 GPIO registration

Johannes Berg (6):
mac80211: mark TX-during-stop for TX in in_reconfig
mac80211: validate extended element ID is present
mac80211: track only QoS data frames for admission control
iwlwifi: mvm: don't crash on invalid rate w/o STA
mac80211: agg-tx: don't schedule_and_wake_txq() under sta->lock
mac80211: fix lookup when adding AddBA extension element

John Keeping (3):
arm64: dts: rockchip: fix rk3308-roc-cc vcc-sd supply
arm64: dts: rockchip: fix rk3399-leez-p710 vcc3v3-lan supply
net: stmmac: dwmac-rk: fix oob read in rk_gmac_setup

Jon Hunter (1):
reset: tegra-bpmp: Revert Handle errors in BPMP response

Josef Bacik (1):
btrfs: check WRITE_ERR when trying to read an extent buffer

Juergen Gross (6):
x86/kvm: remove unused ack_notifier callbacks xen/blkfront: harden blkfront against event channel storms xen/netfront: harden netfront against event channel storms xen/console: harden hvc_xen against event channel storms xen/netback: fix rx queue stall detection xen/netback: don't queue unlimited number of packages

Karen Sornek (1):
igb: Fix removal of unicast MAC filters of VFs

Karol Kolacinski (2):
ice: Use div64_u64 instead of div_u64 in adjfine
ice: Don't put stale timestamps in the skb

Lai Jiangshan (1):
KVM: X86: Fix tlb flush for tdp in kvm_invalidate_pcid()

Lakshmi Ramasubramanian (1):
arm64: kexec: Fix missing error code 'ret' warning in load_other_segments()

Lang Yu (1):
drm/amd/pm: fix a potential gpu_metrics_table memory leak

Le Ma (1):
drm/amdgpu: correct register access for RLC_JUMP_TABLE_RESTORE

Letu Ren (1):
igbvf: fix double free in igbvf_probe

Magnus Karlsson (2):
xsk: Do not sleep in poll() when need_wakeup set Revert "xsk: Do not sleep in poll() when need_wakeup set"

Marek Behún (1):
net: dsa: mv88e6xxx: Unforce speed & duplex in mac_link_down()

Marian Postevca (1):
usb: gadget: u_ether: fix race in setting MAC address in setup phase

Mario Limonciello (2):
pinctrl: amd: Fix wakeups when IRQ is shared with SCI drm/amd/pm: fix reading SMU FW version from amdgpu_firmware_info on YC

Martin KaFai Lau (1):
bpf, selftests: Fix racing issue in btf_skc_cls_ingress test

Martin Kepplinger (1):
arm64: dts: imx8mq: remove interconnect property from lcdif

Mathew McBride (1):
arm64: dts: ten64: remove redundant interrupt declaration for gpio-keys

Matthias Schiffer (3):
Revert "can: m_can: remove support for custom bit timing"
can: m_can: make custom bittiming fields const
can: m_can: pci: use custom bit timings for Elkhart Lake

Matthieu Baerts (1):
mptcp: add missing documented NL params

Maxim Galaganov (1):
mptcp: fix deadlock in __mptcp_push_pending()

Mike Tipton (1):
clk: Don't parent clks until the parent is fully registered

Miklos Szeredi (2):
fuse: annotate lock in fuse_reverse_inval_entry()
ovl: fix warning in ovl_create_real()

Naohiro Aota (1):
zonefs: add MODULE_ALIAS_FS

Nathan Chancellor (1):
soc/tegra: fuse: Fix bitwise vs. logical OR warning

Nehal Bakulchandra Shah (1):
usb: xhci: Extend support for runtime power management for AMD's Yellow carp.

Nicholas Kazlauskas (1):
drm/amd/display: Set exit_optimized_pwr_state for DCN31

Ong Boon Leong (1):
net: stmmac: fix tc flower deletion for VLAN priority Rx steering

Paolo Abeni (1):
mptcp: never allow the PM to close a listener subflow

Paolo Bonzini (2):
KVM: VMX: clear vmx_x86_ops.sync_pir_to_irr if APICv is disabled
KVM: downgrade two BUG_ONs to WARN_ON_ONCE

Parav Pandit (1):
vdpa: Consider device id larger than 31

Paul E. McKenney (1):
rcu: Mark accesses to rcu_state.n_force_qs

Paul Moore (1):
audit: improve robustness of the audit queue handling

Pavel Skripkin (1):
media: mxl111sf: change mutex_init() location

Pawel Laszczak (4):
usb: cdnsp: Fix incorrect status for control request
usb: cdnsp: Fix incorrect calling of cdnsp_died function
usb: cdnsp: Fix issue in cdnsp_log_ep trace event
usb: cdnsp: Fix lack of spin_lock_irqsave/spin_lock_restore

Philipp Rudo (1):
s390/kexec_file: fix error handling when applying relocations

Po-Hsu Lin (1):
selftests: icmp_redirect: pass xfail=0 to log_test()

Robert Schlabbach (1):
ixgbe: Document how to enable NBASE-T support

Russell Currey (1):
powerpc/module_64: Fix livepatching for RO modules

Sasha Neftin (1):
igc: Fix typo in i225 LTR functions

Scott Mayhew (1):
selinux: fix sleeping function called from invalid context

SeongJae Park (1):
selftests/damon: test debugfs file reads/writes with huge count

Shin'ichiro Kawasaki (1):
btrfs: fix missing blkdev_put() call in btrfs_scan_one_device()

Stefan Roese (1):
PCI/MSI: Mask MSI-X vectors only on success

Stephan Gerhold (1):
soc: imx: Register SoC device only on i.MX boards

Sudeep Holla (1):
firmware: arm_scpi: Fix string overflow in SCPI genpd driver

Sven Schnelle (1):
s390/entry: fix duplicate tracking of irq nesting level

Tejun Heo (1):
iocost: Fix divide-by-zero on donation from low hweight cgroup

Tetsuo Handa (1):
tty: n_hdlc: make n_hdlc_tty_wakeup() asynchronous

Thiago Rafael Becker (1):
cifs: sanitize multiple delimiters in prepath

Thomas Gleixner (1):
PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error

Tony Lindgren (1):
bus: ti-sysc: Fix variable set but not used warning for reinit_modules

Ville Syrjälä (1):

      drm/i915/hdmi: Turn DP++ TMDS output buffers back on in encoder->shutdown()

Vitaly Kuznetsov (2):
KVM: selftests: Make sure kvm_create_max_vcpus test won't hit RLIMIT_NOFILE
KVM: x86: Drop guest CPUID check for host initiated writes to MSR_IA32_PERF_CAPABILITIES

Wei Wang (1):
virtio/vsock: fix the transport to work with VMADDR_CID_ANY

Will Deacon (1):
virtio_ring: Fix querying of maximum DMA mapping size for virtio device

Willem de Bruijn (2):
selftests/net: toeplitz: fix udp option
net/packet: rx_owner_map depends on pg_vec

Xiaoming Ni (1):
powerpc/85xx: Fix oops when CONFIG_FSL_PMC=n

Xiubo Li (1):
ceph: initialize pathlen variable in reconnect_caps_cb

Xu Yang (1):
usb: typec: tcpm: fix tcpm unregister port but leave a pending timer

Yu Liao (1):
timekeeping: Really make sure wall_to_monotonic isn't positive

Yufeng Mo (1):
net: hns3: fix race condition in debugfs

Zqiang (1):
locking/rtmutex: Fix incorrect condition in rtmutex_spin_on_owner()

author maintainer
#1 lore raw
Documentation/networking/device_drivers/ethernet/intel/ixgbe.rst +16 -0
index f1d5233e5e51..0a233b17c664 100644
@@ -440,6 +440,22 @@ NOTE: For 82599-based network connections, if you are enabling jumbo frames in
 a virtual function (VF), jumbo frames must first be enabled in the physical
 function (PF). The VF MTU setting cannot be larger than the PF MTU.
 
+NBASE-T Support
+---------------
+The ixgbe driver supports NBASE-T on some devices. However, the advertisement
+of NBASE-T speeds is suppressed by default, to accommodate broken network
+switches which cannot cope with advertised NBASE-T speeds. Use the ethtool
+command to enable advertising NBASE-T speeds on devices which support it::
+
+  ethtool -s eth? advertise 0x1800000001028
+
+On Linux systems with INTERFACES(5), this can be specified as a pre-up command
+in /etc/network/interfaces so that the interface is always brought up with
+NBASE-T support, e.g.::
+
+  iface eth? inet dhcp
+       pre-up ethtool -s eth? advertise 0x1800000001028 || true
+
 Generic Receive Offload, aka GRO
 --------------------------------
 The driver supports the in-kernel software implementation of GRO. GRO has
Makefile +1 -1
index d5e266291e5d..37a1144c32df 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 10
+SUBLEVEL = 11
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arm/boot/dts/imx6ull-pinfunc.h +1 -1
index eb025a9d4759..7328d4ef8559 100644
@@ -82,6 +82,6 @@
 #define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS                         0x01F4 0x0480 0x0000 0x9 0x0
 #define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK                        0x01F8 0x0484 0x0000 0x9 0x0
 #define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0                       0x01FC 0x0488 0x0000 0x9 0x0
-#define MX6ULL_PAD_CSI_DATA07__ESAI_T0                            0x0200 0x048C 0x0000 0x9 0x0
+#define MX6ULL_PAD_CSI_DATA07__ESAI_TX0                           0x0200 0x048C 0x0000 0x9 0x0
 
 #endif /* __DTS_IMX6ULL_PINFUNC_H */
arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts +1 -1
index 2b645642b935..2a745522404d 100644
@@ -12,7 +12,7 @@ &qspi {
 	flash0: n25q00@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q00aa";
+		compatible = "micron,mt25qu02g", "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <100000000>;
 
arch/arm/boot/dts/socfpga_arria5_socdk.dts +1 -1
index 90e676e7019f..1b02d46496a8 100644
@@ -119,7 +119,7 @@ &qspi {
 	flash: flash@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q256a";
+		compatible = "micron,n25q256a", "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <100000000>;
 
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts +1 -1
index 6f138b2b2616..51bb436784e2 100644
@@ -124,7 +124,7 @@ &qspi {
 	flash0: n25q00@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q00";
+		compatible = "micron,mt25qu02g", "jedec,spi-nor";
 		reg = <0>;	/* chip select */
 		spi-max-frequency = <100000000>;
 
arch/arm/boot/dts/socfpga_cyclone5_sockit.dts +1 -1
index c155ff02eb6e..cae9ddd5ed38 100644
@@ -169,7 +169,7 @@ &qspi {
 	flash: flash@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q00";
+		compatible = "micron,mt25qu02g", "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <100000000>;
 
arch/arm/boot/dts/socfpga_cyclone5_socrates.dts +1 -1
index 8d5d3996f6f2..ca18b959e655 100644
@@ -80,7 +80,7 @@ &qspi {
 	flash: flash@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q256a";
+		compatible = "micron,n25q256a", "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <100000000>;
 		m25p,fast-read;
arch/arm/boot/dts/socfpga_cyclone5_sodia.dts +1 -1
index 99a71757cdf4..3f7aa7bf0863 100644
@@ -116,7 +116,7 @@ &qspi {
 	flash0: n25q512a@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q512a";
+		compatible = "micron,n25q512a", "jedec,spi-nor";
 		reg = <0>;
 		spi-max-frequency = <100000000>;
 
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts +2 -2
index a060718758b6..25874e1b9c82 100644
@@ -224,7 +224,7 @@ &qspi {
 	n25q128@0 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q128";
+		compatible = "micron,n25q128", "jedec,spi-nor";
 		reg = <0>;		/* chip select */
 		spi-max-frequency = <100000000>;
 		m25p,fast-read;
@@ -241,7 +241,7 @@ n25q128@0 {
 	n25q00@1 {
 		#address-cells = <1>;
 		#size-cells = <1>;
-		compatible = "n25q00";
+		compatible = "micron,mt25qu02g", "jedec,spi-nor";
 		reg = <1>;		/* chip select */
 		spi-max-frequency = <100000000>;
 		m25p,fast-read;
arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts +0 -2
index 3063851c2fb9..d3f03dcbb8c3 100644
@@ -38,7 +38,6 @@ buttons {
 		powerdn {
 			label = "External Power Down";
 			gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
-			interrupts = <&gpio1 17 IRQ_TYPE_EDGE_FALLING>;
 			linux,code = <KEY_POWER>;
 		};
 
@@ -46,7 +45,6 @@ powerdn {
 		admin {
 			label = "ADMIN button";
 			gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>;
-			interrupts = <&gpio3 8 IRQ_TYPE_EDGE_RISING>;
 			linux,code = <KEY_WPS_BUTTON>;
 		};
 	};
arch/arm64/boot/dts/freescale/imx8mq.dtsi +0 -2
index 4066b1612655..2bc57d8f29c7 100644
@@ -524,8 +524,6 @@ lcdif: lcd-controller@30320000 {
 						  <&clk IMX8MQ_VIDEO_PLL1>,
 						  <&clk IMX8MQ_VIDEO_PLL1_OUT>;
 				assigned-clock-rates = <0>, <0>, <0>, <594000000>;
-				interconnects = <&noc IMX8MQ_ICM_LCDIF &noc IMX8MQ_ICS_DRAM>;
-				interconnect-names = "dram";
 				status = "disabled";
 
 				port@0 {
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +1 -1
index 665b2e69455d..ea6820902ede 100644
@@ -97,7 +97,7 @@ vcc_sd: vcc-sd {
 		regulator-max-microvolt = <3300000>;
 		regulator-always-on;
 		regulator-boot-on;
-		vim-supply = <&vcc_io>;
+		vin-supply = <&vcc_io>;
 	};
 
 	vdd_core: vdd-core {
arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi +0 -1
index d5c7648c841d..f1fcc6b5b402 100644
@@ -705,7 +705,6 @@ &sdmmc {
 &sdhci {
 	bus-width = <8>;
 	mmc-hs400-1_8v;
-	mmc-hs400-enhanced-strobe;
 	non-removable;
 	status = "okay";
 };
arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +1 -0
index 738cfd21df3e..354f54767bad 100644
@@ -269,6 +269,7 @@ rk808: pmic@1b {
 		clock-output-names = "xin32k", "rk808-clkout2";
 		pinctrl-names = "default";
 		pinctrl-0 = <&pmic_int_l>;
+		rockchip,system-power-controller;
 		vcc1-supply = <&vcc5v0_sys>;
 		vcc2-supply = <&vcc5v0_sys>;
 		vcc3-supply = <&vcc5v0_sys>;
arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts +1 -1
index 7c93f840bc64..e890166e7fd4 100644
@@ -55,7 +55,7 @@ vcc3v3_lan: vcc3v3-lan {
 		regulator-boot-on;
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
-		vim-supply = <&vcc3v3_sys>;
+		vin-supply = <&vcc3v3_sys>;
 	};
 
 	vcc3v3_sys: vcc3v3-sys {
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi +1 -1
index b28888ea9262..100a769165ef 100644
@@ -457,7 +457,7 @@ &io_domains {
 	status = "okay";
 
 	bt656-supply = <&vcc_3v0>;
-	audio-supply = <&vcc_3v0>;
+	audio-supply = <&vcc1v8_codec>;
 	sdmmc-supply = <&vcc_sdio>;
 	gpio1830-supply = <&vcc_3v0>;
 };
arch/arm64/kernel/machine_kexec_file.c +1 -0
index 63634b4d72c1..59c648d51848 100644
@@ -149,6 +149,7 @@ int load_other_segments(struct kimage *image,
 					   initrd_len, cmdline, 0);
 	if (!dtb) {
 		pr_err("Preparing for new dtb failed\n");
+		ret = -EINVAL;
 		goto out_err;
 	}
 
arch/powerpc/kernel/module_64.c +34 -8

72 lines not on this page · raw message

arch/powerpc/platforms/85xx/smp.c +2 -2
index 83f4a6389a28..d7081e9af65c 100644
@@ -220,7 +220,7 @@ static int smp_85xx_start_cpu(int cpu)
 	local_irq_save(flags);
 	hard_irq_disable();
 
-	if (qoriq_pm_ops)
+	if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare)
 		qoriq_pm_ops->cpu_up_prepare(cpu);
 
 	/* if cpu is not spinning, reset it */
@@ -292,7 +292,7 @@ static int smp_85xx_kick_cpu(int nr)
 		booting_thread_hwid = cpu_thread_in_core(nr);
 		primary = cpu_first_thread_sibling(nr);
 
-		if (qoriq_pm_ops)
+		if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare)
 			qoriq_pm_ops->cpu_up_prepare(nr);
 
 		/*
arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +1 -0
index 60846e88ae4b..22f971e97161 100644
@@ -80,6 +80,7 @@ mmc@0 {
 		spi-max-frequency = <20000000>;
 		voltage-ranges = <3300 3300>;
 		disable-wp;
+		gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
 	};
 };
 
arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts +2 -0
index 2e4ea84f27e7..b40990210fb5 100644
@@ -2,6 +2,7 @@
 /* Copyright (c) 2020 SiFive, Inc */
 
 #include "fu740-c000.dtsi"
+#include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 
 /* Clock frequency (in Hz) of the PCB crystal for rtcclk */
@@ -228,6 +229,7 @@ mmc@0 {
 		spi-max-frequency = <20000000>;
 		voltage-ranges = <3300 3300>;
 		disable-wp;
+		gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
 	};
 };
 
arch/s390/kernel/irq.c +5 -4
index 3a3145c4a3ba..be5d432b902e 100644
@@ -138,7 +138,7 @@ void noinstr do_io_irq(struct pt_regs *regs)
 	struct pt_regs *old_regs = set_irq_regs(regs);
 	int from_idle;
 
-	irq_enter();
+	irq_enter_rcu();
 
 	if (user_mode(regs))
 		update_timer_sys();
@@ -155,7 +155,8 @@ void noinstr do_io_irq(struct pt_regs *regs)
 			do_irq_async(regs, IO_INTERRUPT);
 	} while (MACHINE_IS_LPAR && irq_pending(regs));
 
-	irq_exit();
+	irq_exit_rcu();
+
 	set_irq_regs(old_regs);
 	irqentry_exit(regs, state);
 
@@ -169,7 +170,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)
 	struct pt_regs *old_regs = set_irq_regs(regs);
 	int from_idle;
 
-	irq_enter();
+	irq_enter_rcu();
 
 	if (user_mode(regs))
 		update_timer_sys();
@@ -184,7 +185,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)
 
 	do_irq_async(regs, EXT_INTERRUPT);
 
-	irq_exit();
+	irq_exit_rcu();
 	set_irq_regs(old_regs);
 	irqentry_exit(regs, state);
 
arch/s390/kernel/machine_kexec_file.c +6 -1
index e7435f3a3d2d..76cd09879eaf 100644
@@ -277,6 +277,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
 {
 	Elf_Rela *relas;
 	int i, r_type;
+	int ret;
 
 	relas = (void *)pi->ehdr + relsec->sh_offset;
 
@@ -311,7 +312,11 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
 		addr = section->sh_addr + relas[i].r_offset;
 
 		r_type = ELF64_R_TYPE(relas[i].r_info);
-		arch_kexec_do_relocs(r_type, loc, val, addr);
+		ret = arch_kexec_do_relocs(r_type, loc, val, addr);
+		if (ret) {
+			pr_err("Unknown rela relocation: %d\n", r_type);
+			return -ENOEXEC;
+		}
 	}
 	return 0;
 }
arch/x86/kvm/ioapic.h +0 -1
index 27e61ff3ac3e..f1b2b2a6ff4d 100644
@@ -81,7 +81,6 @@ struct kvm_ioapic {
 	unsigned long irq_states[IOAPIC_NUM_PINS];
 	struct kvm_io_device dev;
 	struct kvm *kvm;
-	void (*ack_notifier)(void *opaque, int irq);
 	spinlock_t lock;
 	struct rtc_status rtc_status;
 	struct delayed_work eoi_inject;
arch/x86/kvm/irq.h +0 -1
index 650642b18d15..c2d7cfe82d00 100644
@@ -56,7 +56,6 @@ struct kvm_pic {
 	struct kvm_io_device dev_master;
 	struct kvm_io_device dev_slave;
 	struct kvm_io_device dev_elcr;
-	void (*ack_notifier)(void *opaque, int irq);
 	unsigned long irq_states[PIC_NUM_PINS];
 };
 
arch/x86/kvm/vmx/vmx.c +2 -2
index dacdf2395f01..4e212f04268b 100644
@@ -7776,10 +7776,10 @@ static __init int hardware_setup(void)
 		ple_window_shrink = 0;
 	}
 
-	if (!cpu_has_vmx_apicv()) {
+	if (!cpu_has_vmx_apicv())
 		enable_apicv = 0;
+	if (!enable_apicv)
 		vmx_x86_ops.sync_pir_to_irr = NULL;
-	}
 
 	if (cpu_has_vmx_tsc_scaling()) {
 		kvm_has_tsc_control = true;
arch/x86/kvm/x86.c +13 -1
index eff065ce6f8e..dea578586fa4 100644
@@ -1091,6 +1091,18 @@ static void kvm_invalidate_pcid(struct kvm_vcpu *vcpu, unsigned long pcid)
 	unsigned long roots_to_free = 0;
 	int i;
 
+	/*
+	 * MOV CR3 and INVPCID are usually not intercepted when using TDP, but
+	 * this is reachable when running EPT=1 and unrestricted_guest=0,  and
+	 * also via the emulator.  KVM's TDP page tables are not in the scope of
+	 * the invalidation, but the guest's TLB entries need to be flushed as
+	 * the CPU may have cached entries in its TLB for the target PCID.
+	 */
+	if (unlikely(tdp_enabled)) {
+		kvm_make_request(KVM_REQ_TLB_FLUSH_GUEST, vcpu);
+		return;
+	}
+
 	/*
 	 * If neither the current CR3 nor any of the prev_roots use the given
 	 * PCID, then nothing needs to be done here because a resync will
@@ -3347,7 +3359,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 
 		if (!msr_info->host_initiated)
 			return 1;
-		if (guest_cpuid_has(vcpu, X86_FEATURE_PDCM) && kvm_get_msr_feature(&msr_ent))
+		if (kvm_get_msr_feature(&msr_ent))
 			return 1;
 		if (data & ~msr_ent.data)
 			return 1;
arch/x86/net/bpf_jit_comp.c +69 -32

161 lines not on this page · raw message

block/blk-iocost.c +8 -1
index b3880e4ba22a..eb7b0d6bd11f 100644
@@ -2311,7 +2311,14 @@ static void ioc_timer_fn(struct timer_list *timer)
 			hwm = current_hweight_max(iocg);
 			new_hwi = hweight_after_donation(iocg, old_hwi, hwm,
 							 usage, &now);
-			if (new_hwi < hwm) {
+			/*
+			 * Donation calculation assumes hweight_after_donation
+			 * to be positive, a condition that a donor w/ hwa < 2
+			 * can't meet. Don't bother with donation if hwa is
+			 * below 2. It's not gonna make a meaningful difference
+			 * anyway.
+			 */
+			if (new_hwi < hwm && hwa >= 2) {
 				iocg->hweight_donating = hwa;
 				iocg->hweight_after_donation = new_hwi;
 				list_add(&iocg->surplus_list, &surpluses);
drivers/Makefile +1 -2
index be5d40ae1488..a110338c860c 100644
@@ -41,8 +41,7 @@ obj-$(CONFIG_DMADEVICES)	+= dma/
 # SOC specific infrastructure drivers.
 obj-y				+= soc/
 
-obj-$(CONFIG_VIRTIO)		+= virtio/
-obj-$(CONFIG_VIRTIO_PCI_LIB)	+= virtio/
+obj-y				+= virtio/
 obj-$(CONFIG_VDPA)		+= vdpa/
 obj-$(CONFIG_XEN)		+= xen/
 
drivers/ata/libata-scsi.c +13 -2
index 1fb4611f7eeb..10303611d17b 100644
@@ -2826,8 +2826,19 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
 		goto invalid_fld;
 	}
 
-	if (ata_is_ncq(tf->protocol) && (cdb[2 + cdb_offset] & 0x3) == 0)
-		tf->protocol = ATA_PROT_NCQ_NODATA;
+	if ((cdb[2 + cdb_offset] & 0x3) == 0) {
+		/*
+		 * When T_LENGTH is zero (No data is transferred), dir should
+		 * be DMA_NONE.
+		 */
+		if (scmd->sc_data_direction != DMA_NONE) {
+			fp = 2 + cdb_offset;
+			goto invalid_fld;
+		}
+
+		if (ata_is_ncq(tf->protocol))
+			tf->protocol = ATA_PROT_NCQ_NODATA;
+	}
 
 	/* enable LBA */
 	tf->flags |= ATA_TFLAG_LBA;
drivers/block/xen-blkfront.c +12 -3
index 72902104f111..4dbb71230d6e 100644
@@ -1511,9 +1511,12 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 	unsigned long flags;
 	struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;
 	struct blkfront_info *info = rinfo->dev_info;
+	unsigned int eoiflag = XEN_EOI_FLAG_SPURIOUS;
 
-	if (unlikely(info->connected != BLKIF_STATE_CONNECTED))
+	if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) {
+		xen_irq_lateeoi(irq, XEN_EOI_FLAG_SPURIOUS);
 		return IRQ_HANDLED;
+	}
 
 	spin_lock_irqsave(&rinfo->ring_lock, flags);
  again:
@@ -1529,6 +1532,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		unsigned long id;
 		unsigned int op;
 
+		eoiflag = 0;
+
 		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
 		id = bret.id;
 
@@ -1645,6 +1650,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 
 	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 
+	xen_irq_lateeoi(irq, eoiflag);
+
 	return IRQ_HANDLED;
 
  err:
@@ -1652,6 +1659,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 
 	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 
+	/* No EOI in order to avoid further interrupts. */
+
 	pr_alert("%s disabled for further use\n", info->gd->disk_name);
 	return IRQ_HANDLED;
 }
@@ -1691,8 +1700,8 @@ static int setup_blkring(struct xenbus_device *dev,
 	if (err)
 		goto fail;
 
-	err = bind_evtchn_to_irqhandler(rinfo->evtchn, blkif_interrupt, 0,
-					"blkif", rinfo);
+	err = bind_evtchn_to_irqhandler_lateeoi(rinfo->evtchn, blkif_interrupt,
+						0, "blkif", rinfo);
 	if (err <= 0) {
 		xenbus_dev_fatal(dev, err,
 				 "bind_evtchn_to_irqhandler failed");
drivers/bus/ti-sysc.c +1 -2
index bb377bb13564..ebf22929ff32 100644
@@ -2456,12 +2456,11 @@ static void sysc_reinit_modules(struct sysc_soc_info *soc)
 	struct sysc_module *module;
 	struct list_head *pos;
 	struct sysc *ddata;
-	int error = 0;
 
 	list_for_each(pos, &sysc_soc->restored_modules) {
 		module = list_entry(pos, struct sysc_module, node);
 		ddata = module->ddata;
-		error = sysc_reinit_module(ddata, ddata->enabled);
+		sysc_reinit_module(ddata, ddata->enabled);
 	}
 }
 
drivers/clk/clk.c +12 -3
index 65508eb89ec9..a277fd4f2f0a 100644
@@ -3415,6 +3415,14 @@ static int __clk_core_init(struct clk_core *core)
 
 	clk_prepare_lock();
 
+	/*
+	 * Set hw->core after grabbing the prepare_lock to synchronize with
+	 * callers of clk_core_fill_parent_index() where we treat hw->core
+	 * being NULL as the clk not being registered yet. This is crucial so
+	 * that clks aren't parented until their parent is fully registered.
+	 */
+	core->hw->core = core;
+
 	ret = clk_pm_runtime_get(core);
 	if (ret)
 		goto unlock;
@@ -3579,8 +3587,10 @@ static int __clk_core_init(struct clk_core *core)
 out:
 	clk_pm_runtime_put(core);
 unlock:
-	if (ret)
+	if (ret) {
 		hlist_del_init(&core->child_node);
+		core->hw->core = NULL;
+	}
 
 	clk_prepare_unlock();
 
@@ -3844,7 +3854,6 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 	core->num_parents = init->num_parents;
 	core->min_rate = 0;
 	core->max_rate = ULONG_MAX;
-	hw->core = core;
 
 	ret = clk_core_populate_parent_map(core, init);
 	if (ret)
@@ -3862,7 +3871,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 		goto fail_create_clk;
 	}
 
-	clk_core_link_consumer(hw->core, hw->clk);
+	clk_core_link_consumer(core, hw->clk);
 
 	ret = __clk_core_init(core);
 	if (!ret)
drivers/dma/idxd/irq.c +6 -1
index ca88fa7a328e..6d6af0dc3c0e 100644
@@ -63,6 +63,9 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)
 	int i;
 	bool err = false;
 
+	if (cause & IDXD_INTC_HALT_STATE)
+		goto halt;
+
 	if (cause & IDXD_INTC_ERR) {
 		spin_lock(&idxd->dev_lock);
 		for (i = 0; i < 4; i++)
@@ -121,6 +124,7 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)
 	if (!err)
 		return 0;
 
+halt:
 	gensts.bits = ioread32(idxd->reg_base + IDXD_GENSTATS_OFFSET);
 	if (gensts.state == IDXD_DEVICE_STATE_HALT) {
 		idxd->state = IDXD_DEV_HALTED;
@@ -133,9 +137,10 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)
 			INIT_WORK(&idxd->work, idxd_device_reinit);
 			queue_work(idxd->wq, &idxd->work);
 		} else {
-			spin_lock(&idxd->dev_lock);
+			idxd->state = IDXD_DEV_HALTED;
 			idxd_wqs_quiesce(idxd);
 			idxd_wqs_unmap_portal(idxd);
+			spin_lock(&idxd->dev_lock);
 			idxd_device_clear_state(idxd);
 			dev_err(&idxd->pdev->dev,
 				"idxd halted, need %s.\n",
drivers/dma/idxd/registers.h +1 -0
index ffc7550a77ee..97ffb06de9b0 100644
@@ -158,6 +158,7 @@ enum idxd_device_reset_type {
 #define IDXD_INTC_CMD			0x02
 #define IDXD_INTC_OCCUPY			0x04
 #define IDXD_INTC_PERFMON_OVFL		0x08
+#define IDXD_INTC_HALT_STATE		0x10
 
 #define IDXD_CMD_OFFSET			0xa0
 union idxd_command_reg {
drivers/dma/idxd/submit.c +17 -1
index de76fb4abac2..83452fbbb168 100644
@@ -106,6 +106,7 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie,
 {
 	struct idxd_desc *d, *t, *found = NULL;
 	struct llist_node *head;
+	LIST_HEAD(flist);
 
 	desc->completion->status = IDXD_COMP_DESC_ABORT;
 	/*
@@ -120,7 +121,11 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie,
 				found = desc;
 				continue;
 			}
-			list_add_tail(&desc->list, &ie->work_list);
+
+			if (d->completion->status)
+				list_add_tail(&d->list, &flist);
+			else
+				list_add_tail(&d->list, &ie->work_list);
 		}
 	}
 
@@ -130,6 +135,17 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie,
 
 	if (found)
 		complete_desc(found, IDXD_COMPLETE_ABORT);
+
+	/*
+	 * complete_desc() will return desc to allocator and the desc can be
+	 * acquired by a different process and the desc->list can be modified.
+	 * Delete desc from list so the list trasversing does not get corrupted
+	 * by the other process.
+	 */
+	list_for_each_entry_safe(d, t, &flist, list) {
+		list_del_init(&d->list);
+		complete_desc(d, IDXD_COMPLETE_NORMAL);
+	}
 }
 
 int idxd_submit_desc(struct idxd_wq *wq, struct idxd_desc *desc)
drivers/dma/st_fdma.c +1 -1
index 962b6e05287b..d95c421877fb 100644
@@ -874,4 +874,4 @@ MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("STMicroelectronics FDMA engine driver");
 MODULE_AUTHOR("Ludovic.barre <[email protected]>");
 MODULE_AUTHOR("Peter Griffin <[email protected]>");
-MODULE_ALIAS("platform: " DRIVER_NAME);
+MODULE_ALIAS("platform:" DRIVER_NAME);
drivers/firmware/scpi_pm_domain.c +7 -3
index 51201600d789..800673910b51 100644
@@ -16,7 +16,6 @@ struct scpi_pm_domain {
 	struct generic_pm_domain genpd;
 	struct scpi_ops *ops;
 	u32 domain;
-	char name[30];
 };
 
 /*
@@ -110,8 +109,13 @@ static int scpi_pm_domain_probe(struct platform_device *pdev)
 
 		scpi_pd->domain = i;
 		scpi_pd->ops = scpi_ops;
-		sprintf(scpi_pd->name, "%pOFn.%d", np, i);
-		scpi_pd->genpd.name = scpi_pd->name;
+		scpi_pd->genpd.name = devm_kasprintf(dev, GFP_KERNEL,
+						     "%pOFn.%d", np, i);
+		if (!scpi_pd->genpd.name) {
+			dev_err(dev, "Failed to allocate genpd name:%pOFn.%d\n",
+				np, i);
+			continue;
+		}
 		scpi_pd->genpd.power_off = scpi_pd_power_off;
 		scpi_pd->genpd.power_on = scpi_pd_power_on;
 
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -2
index 55f8dd6e56b4..c39e53a41f13 100644
@@ -3061,8 +3061,8 @@ static void gfx_v9_0_init_pg(struct amdgpu_device *adev)
 			      AMD_PG_SUPPORT_CP |
 			      AMD_PG_SUPPORT_GDS |
 			      AMD_PG_SUPPORT_RLC_SMU_HS)) {
-		WREG32(mmRLC_JUMP_TABLE_RESTORE,
-		       adev->gfx.rlc.cp_table_gpu_addr >> 8);
+		WREG32_SOC15(GC, 0, mmRLC_JUMP_TABLE_RESTORE,
+			     adev->gfx.rlc.cp_table_gpu_addr >> 8);
 		gfx_v9_0_init_gfx_power_gating(adev);
 	}
 }
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c +0 -1
index bda1542ef1dd..f51fd0688eca 100644
@@ -162,7 +162,6 @@ static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC);/* XXX for emulation. */
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1);
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c +0 -1
index 14c1c1a297dd..6e0ace2fbfab 100644
@@ -196,7 +196,6 @@ static void gfxhub_v2_0_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC); /* UC, uncached */
 
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c +0 -1
index 1a374ec0514a..9328991e8807 100644
@@ -197,7 +197,6 @@ static void gfxhub_v2_1_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC); /* UC, uncached */
 
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +0 -1
index a99953833820..b3bede1dc41d 100644
@@ -145,7 +145,6 @@ static void mmhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC);/* XXX for emulation. */
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1);
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c +0 -1
index f80a14a1b82d..f5f7181f9af5 100644
@@ -165,7 +165,6 @@ static void mmhub_v1_7_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC);/* XXX for emulation. */
 	tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1);
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c +0 -1
index 7ded6b2f058e..2e58ed2caa48 100644
@@ -269,7 +269,6 @@ static void mmhub_v2_0_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC); /* UC, uncached */
 
drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c +0 -1
index 88e457a150e0..c63b6b934935 100644
@@ -194,7 +194,6 @@ static void mmhub_v2_3_init_tlb_regs(struct amdgpu_device *adev)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC); /* UC, uncached */
 
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c +0 -2
index c4ef822bbe8c..ff49eeaf7882 100644
@@ -189,8 +189,6 @@ static void mmhub_v9_4_init_tlb_regs(struct amdgpu_device *adev, int hubid)
 			    ENABLE_ADVANCED_DRIVER_MODEL, 1);
 	tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL,
 			    SYSTEM_APERTURE_UNMAPPED_ACCESS, 0);
-	tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL,
-			    ECO_BITS, 0);
 	tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL,
 			    MTYPE, MTYPE_UC);/* XXX for emulation. */
 	tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c +1 -0
index 40011cd3c8ef..ac8fb202fd5e 100644
@@ -100,6 +100,7 @@ static const struct hw_sequencer_funcs dcn31_funcs = {
 	.z10_save_init = dcn31_z10_save_init,
 	.is_abm_supported = dcn31_is_abm_supported,
 	.set_disp_pattern_generator = dcn30_set_disp_pattern_generator,
+	.exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state,
 	.update_visual_confirm_color = dcn20_update_visual_confirm_color,
 };
 
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c +3 -0
index d60b8c5e8715..43028f2cd28b 100644
@@ -191,6 +191,9 @@ int smu_v12_0_fini_smc_tables(struct smu_context *smu)
 	kfree(smu_table->watermarks_table);
 	smu_table->watermarks_table = NULL;
 
+	kfree(smu_table->gpu_metrics_table);
+	smu_table->gpu_metrics_table = NULL;
+
 	return 0;
 }
 
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +3 -0
index a0e50f23b1dd..8d4aa16b2ae7 100644
@@ -197,6 +197,7 @@ int smu_v13_0_check_fw_status(struct smu_context *smu)
 
 int smu_v13_0_check_fw_version(struct smu_context *smu)
 {
+	struct amdgpu_device *adev = smu->adev;
 	uint32_t if_version = 0xff, smu_version = 0xff;
 	uint16_t smu_major;
 	uint8_t smu_minor, smu_debug;
@@ -209,6 +210,8 @@ int smu_v13_0_check_fw_version(struct smu_context *smu)
 	smu_major = (smu_version >> 16) & 0xffff;
 	smu_minor = (smu_version >> 8) & 0xff;
 	smu_debug = (smu_version >> 0) & 0xff;
+	if (smu->is_apu)
+		adev->pm.fw_version = smu_version;
 
 	switch (smu->adev->asic_type) {
 	case CHIP_ALDEBARAN:
drivers/gpu/drm/ast/ast_mode.c +4 -1
index 1e30eaeb0e1b..d5c98f79d58d 100644
@@ -1121,7 +1121,10 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		crtc->funcs->atomic_destroy_state(crtc, crtc->state);
 
-	__drm_atomic_helper_crtc_reset(crtc, &ast_state->base);
+	if (ast_state)
+		__drm_atomic_helper_crtc_reset(crtc, &ast_state->base);
+	else
+		__drm_atomic_helper_crtc_reset(crtc, NULL);
 }
 
 static struct drm_crtc_state *
drivers/gpu/drm/drm_fb_helper.c +7 -1
index 8e7a124d6c5a..22bf690910b2 100644
@@ -1743,7 +1743,13 @@ void drm_fb_helper_fill_info(struct fb_info *info,
 			       sizes->fb_width, sizes->fb_height);
 
 	info->par = fb_helper;
-	snprintf(info->fix.id, sizeof(info->fix.id), "%s",
+	/*
+	 * The DRM drivers fbdev emulation device name can be confusing if the
+	 * driver name also has a "drm" suffix on it. Leading to names such as
+	 * "simpledrmdrmfb" in /proc/fb. Unfortunately, it's an uAPI and can't
+	 * be changed due user-space tools (e.g: pm-utils) matching against it.
+	 */
+	snprintf(info->fix.id, sizeof(info->fix.id), "%sdrmfb",
 		 fb_helper->dev->driver->name);
 
 }
drivers/gpu/drm/i915/display/g4x_hdmi.c +1 -0
index be352e9f0afc..63baaf6988ad 100644
@@ -584,6 +584,7 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
 		else
 			intel_encoder->enable = g4x_enable_hdmi;
 	}
+	intel_encoder->shutdown = intel_hdmi_encoder_shutdown;
 
 	intel_encoder->type = INTEL_OUTPUT_HDMI;
 	intel_encoder->power_domain = intel_port_to_power_domain(port);
drivers/gpu/drm/i915/display/intel_ddi.c +1 -0
index bd184325d0c7..82e5064b4ce7 100644
@@ -4432,6 +4432,7 @@ static void intel_ddi_encoder_shutdown(struct intel_encoder *encoder)
 	enum phy phy = intel_port_to_phy(i915, encoder->port);
 
 	intel_dp_encoder_shutdown(encoder);
+	intel_hdmi_encoder_shutdown(encoder);
 
 	if (!intel_phy_is_tc(i915, phy))
 		return;
drivers/gpu/drm/i915/display/intel_dmc.c +1 -1
index b3c8e1c450ef..73076737add7 100644
@@ -606,7 +606,7 @@ static void parse_dmc_fw(struct drm_i915_private *dev_priv,
 			continue;
 
 		offset = readcount + dmc->dmc_info[id].dmc_offset * 4;
-		if (fw->size - offset < 0) {
+		if (offset > fw->size) {
 			drm_err(&dev_priv->drm, "Reading beyond the fw_size\n");
 			continue;
 		}
drivers/gpu/drm/i915/display/intel_hdmi.c +21 -11
index b04685bb6439..c3787512295d 100644
@@ -53,21 +53,20 @@
 #include "intel_panel.h"
 #include "intel_snps_phy.h"
 
-static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi)
+static struct drm_i915_private *intel_hdmi_to_i915(struct intel_hdmi *intel_hdmi)
 {
-	return hdmi_to_dig_port(intel_hdmi)->base.base.dev;
+	return to_i915(hdmi_to_dig_port(intel_hdmi)->base.base.dev);
 }
 
 static void
 assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
 {
-	struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi);
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = intel_hdmi_to_i915(intel_hdmi);
 	u32 enabled_bits;
 
 	enabled_bits = HAS_DDI(dev_priv) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE;
 
-	drm_WARN(dev,
+	drm_WARN(&dev_priv->drm,
 		 intel_de_read(dev_priv, intel_hdmi->hdmi_reg) & enabled_bits,
 		 "HDMI port enabled, expecting disabled\n");
 }
@@ -1246,13 +1245,14 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
 
 void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
 {
-	struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi));
-	struct i2c_adapter *adapter =
-		intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+	struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
+	struct i2c_adapter *adapter;
 
 	if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
 		return;
 
+	adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+
 	drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n",
 		    enable ? "Enabling" : "Disabling");
 
@@ -1830,7 +1830,7 @@ hdmi_port_clock_valid(struct intel_hdmi *hdmi,
 		      int clock, bool respect_downstream_limits,
 		      bool has_hdmi_sink)
 {
-	struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi));
+	struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
 
 	if (clock < 25000)
 		return MODE_CLOCK_LOW;
@@ -1946,8 +1946,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
 		      struct drm_display_mode *mode)
 {
 	struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
-	struct drm_device *dev = intel_hdmi_to_dev(hdmi);
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
 	enum drm_mode_status status;
 	int clock = mode->clock;
 	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
@@ -2260,6 +2259,17 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
 	return 0;
 }
 
+void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder)
+{
+	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+
+	/*
+	 * Give a hand to buggy BIOSen which forget to turn
+	 * the TMDS output buffers back on after a reboot.
+	 */
+	intel_dp_dual_mode_set_tmds_output(intel_hdmi, true);
+}
+
 static void
 intel_hdmi_unset_edid(struct drm_connector *connector)
 {
drivers/gpu/drm/i915/display/intel_hdmi.h +1 -0
index b43a180d007e..2bf440eb400a 100644
@@ -28,6 +28,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
 int intel_hdmi_compute_config(struct intel_encoder *encoder,
 			      struct intel_crtc_state *pipe_config,
 			      struct drm_connector_state *conn_state);
+void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder);
 bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
 				       struct drm_connector *connector,
 				       bool high_tmds_clock_ratio,
drivers/gpu/drm/tiny/simpledrm.c +1 -1
index 481b48bde047..5a6e89825bc2 100644
@@ -458,7 +458,7 @@ static struct drm_display_mode simpledrm_mode(unsigned int width,
 {
 	struct drm_display_mode mode = { SIMPLEDRM_MODE(width, height) };
 
-	mode.clock = 60 /* Hz */ * mode.hdisplay * mode.vdisplay;
+	mode.clock = mode.hdisplay * mode.vdisplay * 60 / 1000 /* kHz */;
 	drm_mode_set_name(&mode);
 
 	return mode;
drivers/md/persistent-data/dm-btree-remove.c +1 -1
index 70532335c7c7..cb670f16e98e 100644
@@ -423,9 +423,9 @@ static int rebalance_children(struct shadow_spine *s,
 
 		memcpy(n, dm_block_data(child),
 		       dm_bm_block_size(dm_tm_get_bm(info->tm)));
-		dm_tm_unlock(info->tm, child);
 
 		dm_tm_dec(info->tm, dm_block_location(child));
+		dm_tm_unlock(info->tm, child);
 		return 0;
 	}
 
drivers/media/usb/dvb-usb-v2/mxl111sf.c +14 -2
index 7865fa0a8295..cd5861a30b6f 100644
@@ -931,8 +931,6 @@ static int mxl111sf_init(struct dvb_usb_device *d)
 		  .len = sizeof(eeprom), .buf = eeprom },
 	};
 
-	mutex_init(&state->msg_lock);
-
 	ret = get_chip_info(state);
 	if (mxl_fail(ret))
 		pr_err("failed to get chip info during probe");
@@ -1074,6 +1072,14 @@ static int mxl111sf_get_stream_config_dvbt(struct dvb_frontend *fe,
 	return 0;
 }
 
+static int mxl111sf_probe(struct dvb_usb_device *dev)
+{
+	struct mxl111sf_state *state = d_to_priv(dev);
+
+	mutex_init(&state->msg_lock);
+	return 0;
+}
+
 static struct dvb_usb_device_properties mxl111sf_props_dvbt = {
 	.driver_name = KBUILD_MODNAME,
 	.owner = THIS_MODULE,
@@ -1083,6 +1089,7 @@ static struct dvb_usb_device_properties mxl111sf_props_dvbt = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_dvbt,
 	.tuner_attach      = mxl111sf_attach_tuner,
@@ -1124,6 +1131,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_atsc,
 	.tuner_attach      = mxl111sf_attach_tuner,
@@ -1165,6 +1173,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mh = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_mh,
 	.tuner_attach      = mxl111sf_attach_tuner,
@@ -1233,6 +1242,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc_mh = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_atsc_mh,
 	.tuner_attach      = mxl111sf_attach_tuner,
@@ -1311,6 +1321,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_mercury,
 	.tuner_attach      = mxl111sf_attach_tuner,
@@ -1381,6 +1392,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury_mh = {
 	.generic_bulk_ctrl_endpoint = 0x02,
 	.generic_bulk_ctrl_endpoint_response = 0x81,
 
+	.probe             = mxl111sf_probe,
 	.i2c_algo          = &mxl111sf_i2c_algo,
 	.frontend_attach   = mxl111sf_frontend_attach_mercury_mh,
 	.tuner_attach      = mxl111sf_attach_tuner,
drivers/net/can/m_can/m_can.c +18 -6
index e330b4c121bf..c2a8421e7845 100644
@@ -1494,20 +1494,32 @@ static int m_can_dev_setup(struct m_can_classdev *cdev)
 	case 30:
 		/* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.0.x */
 		can_set_static_ctrlmode(dev, CAN_CTRLMODE_FD_NON_ISO);
-		cdev->can.bittiming_const = &m_can_bittiming_const_30X;
-		cdev->can.data_bittiming_const = &m_can_data_bittiming_const_30X;
+		cdev->can.bittiming_const = cdev->bit_timing ?
+			cdev->bit_timing : &m_can_bittiming_const_30X;
+
+		cdev->can.data_bittiming_const = cdev->data_timing ?
+			cdev->data_timing :
+			&m_can_data_bittiming_const_30X;
 		break;
 	case 31:
 		/* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.1.x */
 		can_set_static_ctrlmode(dev, CAN_CTRLMODE_FD_NON_ISO);
-		cdev->can.bittiming_const = &m_can_bittiming_const_31X;
-		cdev->can.data_bittiming_const = &m_can_data_bittiming_const_31X;
+		cdev->can.bittiming_const = cdev->bit_timing ?
+			cdev->bit_timing : &m_can_bittiming_const_31X;
+
+		cdev->can.data_bittiming_const = cdev->data_timing ?
+			cdev->data_timing :
+			&m_can_data_bittiming_const_31X;
 		break;
 	case 32:
 	case 33:
 		/* Support both MCAN version v3.2.x and v3.3.0 */
-		cdev->can.bittiming_const = &m_can_bittiming_const_31X;
-		cdev->can.data_bittiming_const = &m_can_data_bittiming_const_31X;
+		cdev->can.bittiming_const = cdev->bit_timing ?
+			cdev->bit_timing : &m_can_bittiming_const_31X;
+
+		cdev->can.data_bittiming_const = cdev->data_timing ?
+			cdev->data_timing :
+			&m_can_data_bittiming_const_31X;
 
 		cdev->can.ctrlmode_supported |=
 			(m_can_niso_supported(cdev) ?
drivers/net/can/m_can/m_can.h +3 -0
index d18b515e6ccc..2c5d40997168 100644
@@ -85,6 +85,9 @@ struct m_can_classdev {
 	struct sk_buff *tx_skb;
 	struct phy *transceiver;
 
+	const struct can_bittiming_const *bit_timing;
+	const struct can_bittiming_const *data_timing;
+
 	struct m_can_ops *ops;
 
 	int version;
drivers/net/can/m_can/m_can_pci.c +44 -4

83 lines not on this page · raw message

drivers/net/dsa/mv88e6xxx/chip.c +4 -0
index a31cc0ab7c62..43d126628610 100644
@@ -769,6 +769,10 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,
 	if ((!mv88e6xxx_port_ppu_updates(chip, port) ||
 	     mode == MLO_AN_FIXED) && ops->port_sync_link)
 		err = ops->port_sync_link(chip, port, mode, false);
+
+	if (!err && ops->port_set_speed_duplex)
+		err = ops->port_set_speed_duplex(chip, port, SPEED_UNFORCED,
+						 DUPLEX_UNFORCED);
 	mv88e6xxx_reg_unlock(chip);
 
 	if (err)
drivers/net/dsa/mv88e6xxx/port.c +2 -2
index d9817b20ea64..ab41619a809b 100644
@@ -283,7 +283,7 @@ static int mv88e6xxx_port_set_speed_duplex(struct mv88e6xxx_chip *chip,
 	if (err)
 		return err;
 
-	if (speed)
+	if (speed != SPEED_UNFORCED)
 		dev_dbg(chip->dev, "p%d: Speed set to %d Mbps\n", port, speed);
 	else
 		dev_dbg(chip->dev, "p%d: Speed unforced\n", port);
@@ -516,7 +516,7 @@ int mv88e6393x_port_set_speed_duplex(struct mv88e6xxx_chip *chip, int port,
 	if (err)
 		return err;
 
-	if (speed)
+	if (speed != SPEED_UNFORCED)
 		dev_dbg(chip->dev, "p%d: Speed set to %d Mbps\n", port, speed);
 	else
 		dev_dbg(chip->dev, "p%d: Speed unforced\n", port);
drivers/net/ethernet/broadcom/bcmsysport.c +4 -1
index 7fa1b695400d..0877b3d7f88c 100644
@@ -1309,11 +1309,11 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
 	struct bcm_sysport_priv *priv = netdev_priv(dev);
 	struct device *kdev = &priv->pdev->dev;
 	struct bcm_sysport_tx_ring *ring;
+	unsigned long flags, desc_flags;
 	struct bcm_sysport_cb *cb;
 	struct netdev_queue *txq;
 	u32 len_status, addr_lo;
 	unsigned int skb_len;
-	unsigned long flags;
 	dma_addr_t mapping;
 	u16 queue;
 	int ret;
@@ -1373,8 +1373,10 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
 	ring->desc_count--;
 
 	/* Ports are latched, so write upper address first */
+	spin_lock_irqsave(&priv->desc_lock, desc_flags);
 	tdma_writel(priv, len_status, TDMA_WRITE_PORT_HI(ring->index));
 	tdma_writel(priv, addr_lo, TDMA_WRITE_PORT_LO(ring->index));
+	spin_unlock_irqrestore(&priv->desc_lock, desc_flags);
 
 	/* Check ring space and update SW control flow */
 	if (ring->desc_count == 0)
@@ -2013,6 +2015,7 @@ static int bcm_sysport_open(struct net_device *dev)
 	}
 
 	/* Initialize both hardware and software ring */
+	spin_lock_init(&priv->desc_lock);
 	for (i = 0; i < dev->num_tx_queues; i++) {
 		ret = bcm_sysport_init_tx_ring(priv, i);
 		if (ret) {
drivers/net/ethernet/broadcom/bcmsysport.h +1 -0
index 984f76e74b43..16b73bb9acc7 100644
@@ -711,6 +711,7 @@ struct bcm_sysport_priv {
 	int			wol_irq;
 
 	/* Transmit rings */
+	spinlock_t		desc_lock;
 	struct bcm_sysport_tx_ring *tx_rings;
 
 	/* Receive queue */
drivers/net/ethernet/hisilicon/hns3/hnae3.h +2 -0
index d701451596c8..47bba4c62f04 100644
@@ -830,6 +830,8 @@ struct hnae3_handle {
 
 	u8 netdev_flags;
 	struct dentry *hnae3_dbgfs;
+	/* protects concurrent contention between debugfs commands */
+	struct mutex dbgfs_lock;
 
 	/* Network interface message level enabled bits */
 	u32 msg_enable;
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +14 -6
index e54f96251fea..3205849bdb95 100644
@@ -1021,6 +1021,7 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer,
 	if (ret)
 		return ret;
 
+	mutex_lock(&handle->dbgfs_lock);
 	save_buf = &hns3_dbg_cmd[index].buf;
 
 	if (!test_bit(HNS3_NIC_STATE_INITED, &priv->state) ||
@@ -1033,15 +1034,15 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer,
 		read_buf = *save_buf;
 	} else {
 		read_buf = kvzalloc(hns3_dbg_cmd[index].buf_len, GFP_KERNEL);
-		if (!read_buf)
-			return -ENOMEM;
+		if (!read_buf) {
+			ret = -ENOMEM;
+			goto out;
+		}
 
 		/* save the buffer addr until the last read operation */
 		*save_buf = read_buf;
-	}
 
-	/* get data ready for the first time to read */
-	if (!*ppos) {
+		/* get data ready for the first time to read */
 		ret = hns3_dbg_read_cmd(dbg_data, hns3_dbg_cmd[index].cmd,
 					read_buf, hns3_dbg_cmd[index].buf_len);
 		if (ret)
@@ -1050,8 +1051,10 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer,
 
 	size = simple_read_from_buffer(buffer, count, ppos, read_buf,
 				       strlen(read_buf));
-	if (size > 0)
+	if (size > 0) {
+		mutex_unlock(&handle->dbgfs_lock);
 		return size;
+	}
 
 out:
 	/* free the buffer for the last read operation */
@@ -1060,6 +1063,7 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer,
 		*save_buf = NULL;
 	}
 
+	mutex_unlock(&handle->dbgfs_lock);
 	return ret;
 }
 
@@ -1132,6 +1136,8 @@ int hns3_dbg_init(struct hnae3_handle *handle)
 			debugfs_create_dir(hns3_dbg_dentry[i].name,
 					   handle->hnae3_dbgfs);
 
+	mutex_init(&handle->dbgfs_lock);
+
 	for (i = 0; i < ARRAY_SIZE(hns3_dbg_cmd); i++) {
 		if ((hns3_dbg_cmd[i].cmd == HNAE3_DBG_CMD_TM_NODES &&
 		     ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2) ||
@@ -1158,6 +1164,7 @@ int hns3_dbg_init(struct hnae3_handle *handle)
 	return 0;
 
 out:
+	mutex_destroy(&handle->dbgfs_lock);
 	debugfs_remove_recursive(handle->hnae3_dbgfs);
 	handle->hnae3_dbgfs = NULL;
 	return ret;
@@ -1173,6 +1180,7 @@ void hns3_dbg_uninit(struct hnae3_handle *handle)
 			hns3_dbg_cmd[i].buf = NULL;
 		}
 
+	mutex_destroy(&handle->dbgfs_lock);
 	debugfs_remove_recursive(handle->hnae3_dbgfs);
 	handle->hnae3_dbgfs = NULL;
 }
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c +2 -1
index fdc66fae0960..c5ac6ecf36e1 100644
@@ -114,7 +114,8 @@ int hclgevf_send_mbx_msg(struct hclgevf_dev *hdev,
 
 	memcpy(&req->msg, send_msg, sizeof(struct hclge_vf_to_pf_msg));
 
-	trace_hclge_vf_mbx_send(hdev, req);
+	if (test_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state))
+		trace_hclge_vf_mbx_send(hdev, req);
 
 	/* synchronous send */
 	if (need_resp) {
drivers/net/ethernet/intel/ice/ice_ptp.c +5 -8
index d1ef3d48a4b0..ac27a4fe8b94 100644
@@ -459,7 +459,7 @@ static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm)
 		scaled_ppm = -scaled_ppm;
 	}
 
-	while ((u64)scaled_ppm > div_u64(U64_MAX, incval)) {
+	while ((u64)scaled_ppm > div64_u64(U64_MAX, incval)) {
 		/* handle overflow by scaling down the scaled_ppm and
 		 * the divisor, losing some precision
 		 */
@@ -1182,19 +1182,16 @@ static void ice_ptp_tx_tstamp_work(struct kthread_work *work)
 		if (err)
 			continue;
 
-		/* Check if the timestamp is valid */
-		if (!(raw_tstamp & ICE_PTP_TS_VALID))
+		/* Check if the timestamp is invalid or stale */
+		if (!(raw_tstamp & ICE_PTP_TS_VALID) ||
+		    raw_tstamp == tx->tstamps[idx].cached_tstamp)
 			continue;
 
-		/* clear the timestamp register, so that it won't show valid
-		 * again when re-used.
-		 */
-		ice_clear_phy_tstamp(hw, tx->quad, phy_idx);
-
 		/* The timestamp is valid, so we'll go ahead and clear this
 		 * index and then send the timestamp up to the stack.
 		 */
 		spin_lock(&tx->lock);
+		tx->tstamps[idx].cached_tstamp = raw_tstamp;
 		clear_bit(idx, tx->in_use);
 		skb = tx->tstamps[idx].skb;
 		tx->tstamps[idx].skb = NULL;
drivers/net/ethernet/intel/ice/ice_ptp.h +6 -0
index e1c787bd5b96..8cdd6f7046b7 100644
@@ -46,15 +46,21 @@ struct ice_perout_channel {
  * struct ice_tx_tstamp - Tracking for a single Tx timestamp
  * @skb: pointer to the SKB for this timestamp request
  * @start: jiffies when the timestamp was first requested
+ * @cached_tstamp: last read timestamp
  *
  * This structure tracks a single timestamp request. The SKB pointer is
  * provided when initiating a request. The start time is used to ensure that
  * we discard old requests that were not fulfilled within a 2 second time
  * window.
+ * Timestamp values in the PHY are read only and do not get cleared except at
+ * hardware reset or when a new timestamp value is captured. The cached_tstamp
+ * field is used to detect the case where a new timestamp has not yet been
+ * captured, ensuring that we avoid sending stale timestamp data to the stack.
  */
 struct ice_tx_tstamp {
 	struct sk_buff *skb;
 	unsigned long start;
+	u64 cached_tstamp;
 };
 
 /**
drivers/net/ethernet/intel/igb/igb_main.c +14 -14
index 8f30577386b6..533199d81950 100644
@@ -7641,6 +7641,20 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,
 	struct vf_mac_filter *entry = NULL;
 	int ret = 0;
 
+	if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) &&
+	    !vf_data->trusted) {
+		dev_warn(&pdev->dev,
+			 "VF %d requested MAC filter but is administratively denied\n",
+			  vf);
+		return -EINVAL;
+	}
+	if (!is_valid_ether_addr(addr)) {
+		dev_warn(&pdev->dev,
+			 "VF %d attempted to set invalid MAC filter\n",
+			  vf);
+		return -EINVAL;
+	}
+
 	switch (info) {
 	case E1000_VF_MAC_FILTER_CLR:
 		/* remove all unicast MAC filters related to the current VF */
@@ -7654,20 +7668,6 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,
 		}
 		break;
 	case E1000_VF_MAC_FILTER_ADD:
-		if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) &&
-		    !vf_data->trusted) {
-			dev_warn(&pdev->dev,
-				 "VF %d requested MAC filter but is administratively denied\n",
-				 vf);
-			return -EINVAL;
-		}
-		if (!is_valid_ether_addr(addr)) {
-			dev_warn(&pdev->dev,
-				 "VF %d attempted to set invalid MAC filter\n",
-				 vf);
-			return -EINVAL;
-		}
-
 		/* try to find empty slot in the list */
 		list_for_each(pos, &adapter->vf_macs.l) {
 			entry = list_entry(pos, struct vf_mac_filter, l);
drivers/net/ethernet/intel/igbvf/netdev.c +1 -0
index d32e72d953c8..d051918dfdff 100644
@@ -2861,6 +2861,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	return 0;
 
 err_hw_init:
+	netif_napi_del(&adapter->rx_ring->napi);
 	kfree(adapter->tx_ring);
 	kfree(adapter->rx_ring);
 err_sw_init:
drivers/net/ethernet/intel/igc/igc_i225.c +1 -1
index b2ef9fde97b3..b6807e16eea9 100644
@@ -636,7 +636,7 @@ s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)
 		ltrv = rd32(IGC_LTRMAXV);
 		if (ltr_max != (ltrv & IGC_LTRMAXV_LTRV_MASK)) {
 			ltrv = IGC_LTRMAXV_LSNP_REQ | ltr_max |
-			       (scale_min << IGC_LTRMAXV_SCALE_SHIFT);
+			       (scale_max << IGC_LTRMAXV_SCALE_SHIFT);
 			wr32(IGC_LTRMAXV, ltrv);
 		}
 	}
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -0
index 13c4782b920a..750b02bb2fdc 100644
@@ -5526,6 +5526,10 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
 	if (!speed && hw->mac.ops.get_link_capabilities) {
 		ret = hw->mac.ops.get_link_capabilities(hw, &speed,
 							&autoneg);
+		/* remove NBASE-T speeds from default autonegotiation
+		 * to accommodate broken network switches in the field
+		 * which cannot cope with advertised NBASE-T speeds
+		 */
 		speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |
 			   IXGBE_LINK_SPEED_2_5GB_FULL);
 	}
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +3 -0
index 9724ffb16518..e4b50c7781ff 100644
@@ -3405,6 +3405,9 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
 	/* flush pending Tx transactions */
 	ixgbe_clear_tx_pending(hw);
 
+	/* set MDIO speed before talking to the PHY in case it's the 1st time */
+	ixgbe_set_mdio_speed(hw);
+
 	/* PHY ops must be identified and initialized prior to reset */
 	status = hw->phy.ops.init(hw);
 	if (status == IXGBE_ERR_SFP_NOT_SUPPORTED ||
drivers/net/ethernet/sfc/ef100_nic.c +3 -0
index 518268ce2064..d35cafd422b1 100644
@@ -609,6 +609,9 @@ static size_t ef100_update_stats(struct efx_nic *efx,
 	ef100_common_stat_mask(mask);
 	ef100_ethtool_stat_mask(mask);
 
+	if (!mc_stats)
+		return 0;
+
 	efx_nic_copy_stats(efx, mc_stats);
 	efx_nic_update_stats(ef100_stat_desc, EF100_STAT_COUNT, mask,
 			     stats, mc_stats, false);
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +3 -1
index 6924a6aacbd5..c469abc91fa1 100644
@@ -33,6 +33,7 @@ struct rk_gmac_ops {
 	void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv, int speed);
 	void (*set_rmii_speed)(struct rk_priv_data *bsp_priv, int speed);
 	void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv);
+	bool regs_valid;
 	u32 regs[];
 };
 
@@ -1092,6 +1093,7 @@ static const struct rk_gmac_ops rk3568_ops = {
 	.set_to_rmii = rk3568_set_to_rmii,
 	.set_rgmii_speed = rk3568_set_gmac_speed,
 	.set_rmii_speed = rk3568_set_gmac_speed,
+	.regs_valid = true,
 	.regs = {
 		0xfe2a0000, /* gmac0 */
 		0xfe010000, /* gmac1 */
@@ -1383,7 +1385,7 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
 	 * to be distinguished.
 	 */
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (res) {
+	if (res && ops->regs_valid) {
 		int i = 0;
 
 		while (ops->regs[i]) {
drivers/net/ethernet/stmicro/stmmac/stmmac.h +17 -0
index 5f129733aabd..873b9e3e5da2 100644
@@ -172,6 +172,19 @@ struct stmmac_flow_entry {
 	int is_l4;
 };
 
+/* Rx Frame Steering */
+enum stmmac_rfs_type {
+	STMMAC_RFS_T_VLAN,
+	STMMAC_RFS_T_MAX,
+};
+
+struct stmmac_rfs_entry {
+	unsigned long cookie;
+	int in_use;
+	int type;
+	int tc;
+};
+
 struct stmmac_priv {
 	/* Frequently used values are kept adjacent for cache effect */
 	u32 tx_coal_frames[MTL_MAX_TX_QUEUES];
@@ -289,6 +302,10 @@ struct stmmac_priv {
 	struct stmmac_tc_entry *tc_entries;
 	unsigned int flow_entries_max;
 	struct stmmac_flow_entry *flow_entries;
+	unsigned int rfs_entries_max[STMMAC_RFS_T_MAX];
+	unsigned int rfs_entries_cnt[STMMAC_RFS_T_MAX];
+	unsigned int rfs_entries_total;
+	struct stmmac_rfs_entry *rfs_entries;
 
 	/* Pulse Per Second output */
 	struct stmmac_pps_cfg pps[STMMAC_PPS_MAX];
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c +73 -13

136 lines not on this page · raw message

drivers/net/netdevsim/bpf.c +1 -0
index 90aafb56f140..a43820212932 100644
@@ -514,6 +514,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap)
 				goto err_free;
 			key = nmap->entry[i].key;
 			*key = i;
+			memset(nmap->entry[i].value, 0, offmap->map.value_size);
 		}
 	}
 
drivers/net/netdevsim/ethtool.c +4 -1
index b03a0513eb7e..2e7c1cc16cb9 100644
@@ -77,7 +77,10 @@ static int nsim_set_ringparam(struct net_device *dev,
 {
 	struct netdevsim *ns = netdev_priv(dev);
 
-	memcpy(&ns->ethtool.ring, ring, sizeof(ns->ethtool.ring));
+	ns->ethtool.ring.rx_pending = ring->rx_pending;
+	ns->ethtool.ring.rx_jumbo_pending = ring->rx_jumbo_pending;
+	ns->ethtool.ring.rx_mini_pending = ring->rx_mini_pending;
+	ns->ethtool.ring.tx_pending = ring->tx_pending;
 	return 0;
 }
 
drivers/net/wireless/intel/iwlwifi/mvm/tx.c +3 -2
index 0a13c2bda2ee..06fbd9ab37df 100644
@@ -268,17 +268,18 @@ static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm,
 	int rate_idx = -1;
 	u8 rate_plcp;
 	u32 rate_flags = 0;
-	struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
 
 	/* info->control is only relevant for non HW rate control */
 	if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) {
+		struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
+
 		/* HT rate doesn't make sense for a non data frame */
 		WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS &&
 			  !ieee80211_is_data(fc),
 			  "Got a HT rate (flags:0x%x/mcs:%d/fc:0x%x/state:%d) for a non data frame\n",
 			  info->control.rates[0].flags,
 			  info->control.rates[0].idx,
-			  le16_to_cpu(fc), mvmsta->sta_state);
+			  le16_to_cpu(fc), sta ? mvmsta->sta_state : -1);
 
 		rate_idx = info->control.rates[0].idx;
 	}
drivers/net/xen-netback/common.h +1 -0
index 4a16d6e33c09..d9dea4829c86 100644
@@ -203,6 +203,7 @@ struct xenvif_queue { /* Per-queue data for xenvif */
 	unsigned int rx_queue_max;
 	unsigned int rx_queue_len;
 	unsigned long last_rx_time;
+	unsigned int rx_slots_needed;
 	bool stalled;
 
 	struct xenvif_copy_state rx_copy;
drivers/net/xen-netback/rx.c +49 -28

129 lines not on this page · raw message

drivers/net/xen-netfront.c +94 -31

250 lines not on this page · raw message

drivers/pci/msi.c +11 -4
index e2dedfa9072d..e11530cb0569 100644
@@ -721,9 +721,6 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
 		goto out_disable;
 	}
 
-	/* Ensure that all table entries are masked. */
-	msix_mask_all(base, tsize);
-
 	ret = msix_setup_entries(dev, base, entries, nvec, affd);
 	if (ret)
 		goto out_disable;
@@ -750,6 +747,16 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
 	/* Set MSI-X enabled bits and unmask the function */
 	pci_intx_for_msi(dev, 0);
 	dev->msix_enabled = 1;
+
+	/*
+	 * Ensure that all table entries are masked to prevent
+	 * stale entries from firing in a crash kernel.
+	 *
+	 * Done late to deal with a broken Marvell NVME device
+	 * which takes the MSI-X mask bits into account even
+	 * when MSI-X is disabled, which prevents MSI delivery.
+	 */
+	msix_mask_all(base, tsize);
 	pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
 
 	pcibios_free_irq(dev);
@@ -776,7 +783,7 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
 	free_msi_irqs(dev);
 
 out_disable:
-	pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
+	pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE, 0);
 
 	return ret;
 }
drivers/pinctrl/pinctrl-amd.c +26 -3
index bae9d429b813..ecab9064a845 100644
@@ -598,14 +598,14 @@ static struct irq_chip amd_gpio_irqchip = {
 
 #define PIN_IRQ_PENDING	(BIT(INTERRUPT_STS_OFF) | BIT(WAKE_STS_OFF))
 
-static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
+static bool do_amd_gpio_irq_handler(int irq, void *dev_id)
 {
 	struct amd_gpio *gpio_dev = dev_id;
 	struct gpio_chip *gc = &gpio_dev->gc;
-	irqreturn_t ret = IRQ_NONE;
 	unsigned int i, irqnr;
 	unsigned long flags;
 	u32 __iomem *regs;
+	bool ret = false;
 	u32  regval;
 	u64 status, mask;
 
@@ -627,6 +627,14 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
 		/* Each status bit covers four pins */
 		for (i = 0; i < 4; i++) {
 			regval = readl(regs + i);
+			/* caused wake on resume context for shared IRQ */
+			if (irq < 0 && (regval & BIT(WAKE_STS_OFF))) {
+				dev_dbg(&gpio_dev->pdev->dev,
+					"Waking due to GPIO %d: 0x%x",
+					irqnr + i, regval);
+				return true;
+			}
+
 			if (!(regval & PIN_IRQ_PENDING) ||
 			    !(regval & BIT(INTERRUPT_MASK_OFF)))
 				continue;
@@ -650,9 +658,12 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
 			}
 			writel(regval, regs + i);
 			raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
-			ret = IRQ_HANDLED;
+			ret = true;
 		}
 	}
+	/* did not cause wake on resume context for shared IRQ */
+	if (irq < 0)
+		return false;
 
 	/* Signal EOI to the GPIO unit */
 	raw_spin_lock_irqsave(&gpio_dev->lock, flags);
@@ -664,6 +675,16 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
 	return ret;
 }
 
+static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
+{
+	return IRQ_RETVAL(do_amd_gpio_irq_handler(irq, dev_id));
+}
+
+static bool __maybe_unused amd_gpio_check_wake(void *dev_id)
+{
+	return do_amd_gpio_irq_handler(-1, dev_id);
+}
+
 static int amd_get_groups_count(struct pinctrl_dev *pctldev)
 {
 	struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctldev);
@@ -1033,6 +1054,7 @@ static int amd_gpio_probe(struct platform_device *pdev)
 		goto out2;
 
 	platform_set_drvdata(pdev, gpio_dev);
+	acpi_register_wakeup_handler(gpio_dev->irq, amd_gpio_check_wake, gpio_dev);
 
 	dev_dbg(&pdev->dev, "amd gpio driver loaded\n");
 	return ret;
@@ -1050,6 +1072,7 @@ static int amd_gpio_remove(struct platform_device *pdev)
 	gpio_dev = platform_get_drvdata(pdev);
 
 	gpiochip_remove(&gpio_dev->gc);
+	acpi_unregister_wakeup_handler(amd_gpio_check_wake, gpio_dev);
 
 	return 0;
 }
drivers/reset/tegra/reset-bpmp.c +1 -8
index 4c5bba52b105..24d3395964cc 100644
@@ -20,7 +20,6 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
 	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
 	struct mrq_reset_request request;
 	struct tegra_bpmp_message msg;
-	int err;
 
 	memset(&request, 0, sizeof(request));
 	request.cmd = command;
@@ -31,13 +30,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
 	msg.tx.data = &request;
 	msg.tx.size = sizeof(request);
 
-	err = tegra_bpmp_transfer(bpmp, &msg);
-	if (err)
-		return err;
-	if (msg.rx.ret)
-		return -EINVAL;
-
-	return 0;
+	return tegra_bpmp_transfer(bpmp, &msg);
 }
 
 static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
drivers/scsi/scsi_debug.c +25 -17

137 lines not on this page · raw message

drivers/scsi/ufs/ufshcd.c +9 -3
index 55f2e4d6f10b..31adf25e57b0 100644
@@ -8477,7 +8477,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 	struct scsi_sense_hdr sshdr;
 	struct scsi_device *sdp;
 	unsigned long flags;
-	int ret;
+	int ret, retries;
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	sdp = hba->sdev_ufs_device;
@@ -8510,8 +8510,14 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 	 * callbacks hence set the RQF_PM flag so that it doesn't resume the
 	 * already suspended childs.
 	 */
-	ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
-			START_STOP_TIMEOUT, 0, 0, RQF_PM, NULL);
+	for (retries = 3; retries > 0; --retries) {
+		ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
+				START_STOP_TIMEOUT, 0, 0, RQF_PM, NULL);
+		if (!scsi_status_is_check_condition(ret) ||
+				!scsi_sense_valid(&sshdr) ||
+				sshdr.sense_key != UNIT_ATTENTION)
+			break;
+	}
 	if (ret) {
 		sdev_printk(KERN_WARNING, sdp,
 			    "START_STOP failed for power mode: %d, result %x\n",
drivers/soc/imx/soc-imx.c +4 -0
index ac6d856ba228..77bc12039c3d 100644
@@ -36,6 +36,10 @@ static int __init imx_soc_device_init(void)
 	int ret;
 	int i;
 
+	/* Return early if this is running on devices with different SoCs */
+	if (!__mxc_cpu_type)
+		return 0;
+
 	if (of_machine_is_compatible("fsl,ls1021a"))
 		return 0;
 
drivers/soc/tegra/fuse/fuse-tegra.c +1 -1
index f2151815db58..e714ed3b61bc 100644
@@ -320,7 +320,7 @@ static struct platform_driver tegra_fuse_driver = {
 };
 builtin_platform_driver(tegra_fuse_driver);
 
-bool __init tegra_fuse_read_spare(unsigned int spare)
+u32 __init tegra_fuse_read_spare(unsigned int spare)
 {
 	unsigned int offset = fuse->soc->info->spare + spare * 4;
 
drivers/soc/tegra/fuse/fuse.h +1 -1
index de58feba0435..ecff0c08e959 100644
@@ -65,7 +65,7 @@ struct tegra_fuse {
 void tegra_init_revision(void);
 void tegra_init_apbmisc(void);
 
-bool __init tegra_fuse_read_spare(unsigned int spare);
+u32 __init tegra_fuse_read_spare(unsigned int spare);
 u32 __init tegra_fuse_read_early(unsigned int offset);
 
 u8 tegra_get_major_rev(void);
drivers/tee/amdtee/core.c +2 -3
index da6b88e80dc0..297dc62bca29 100644
@@ -203,9 +203,8 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta,
 
 	*ta_size = roundup(fw->size, PAGE_SIZE);
 	*ta = (void *)__get_free_pages(GFP_KERNEL, get_order(*ta_size));
-	if (IS_ERR(*ta)) {
-		pr_err("%s: get_free_pages failed 0x%llx\n", __func__,
-		       (u64)*ta);
+	if (!*ta) {
+		pr_err("%s: get_free_pages failed\n", __func__);
 		rc = -ENOMEM;
 		goto rel_fw;
 	}
drivers/tty/hvc/hvc_xen.c +27 -3
index f0bf01ea069a..8ee7ce120692 100644
@@ -37,6 +37,8 @@ struct xencons_info {
 	struct xenbus_device *xbdev;
 	struct xencons_interface *intf;
 	unsigned int evtchn;
+	XENCONS_RING_IDX out_cons;
+	unsigned int out_cons_same;
 	struct hvc_struct *hvc;
 	int irq;
 	int vtermno;
@@ -138,6 +140,8 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)
 	XENCONS_RING_IDX cons, prod;
 	int recv = 0;
 	struct xencons_info *xencons = vtermno_to_xencons(vtermno);
+	unsigned int eoiflag = 0;
+
 	if (xencons == NULL)
 		return -EINVAL;
 	intf = xencons->intf;
@@ -157,7 +161,27 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)
 	mb();			/* read ring before consuming */
 	intf->in_cons = cons;
 
-	notify_daemon(xencons);
+	/*
+	 * When to mark interrupt having been spurious:
+	 * - there was no new data to be read, and
+	 * - the backend did not consume some output bytes, and
+	 * - the previous round with no read data didn't see consumed bytes
+	 *   (we might have a race with an interrupt being in flight while
+	 *   updating xencons->out_cons, so account for that by allowing one
+	 *   round without any visible reason)
+	 */
+	if (intf->out_cons != xencons->out_cons) {
+		xencons->out_cons = intf->out_cons;
+		xencons->out_cons_same = 0;
+	}
+	if (recv) {
+		notify_daemon(xencons);
+	} else if (xencons->out_cons_same++ > 1) {
+		eoiflag = XEN_EOI_FLAG_SPURIOUS;
+	}
+
+	xen_irq_lateeoi(xencons->irq, eoiflag);
+
 	return recv;
 }
 
@@ -386,7 +410,7 @@ static int xencons_connect_backend(struct xenbus_device *dev,
 	if (ret)
 		return ret;
 	info->evtchn = evtchn;
-	irq = bind_evtchn_to_irq(evtchn);
+	irq = bind_interdomain_evtchn_to_irq_lateeoi(dev, evtchn);
 	if (irq < 0)
 		return irq;
 	info->irq = irq;
@@ -550,7 +574,7 @@ static int __init xen_hvc_init(void)
 			return r;
 
 		info = vtermno_to_xencons(HVC_COOKIE);
-		info->irq = bind_evtchn_to_irq(info->evtchn);
+		info->irq = bind_evtchn_to_irq_lateeoi(info->evtchn);
 	}
 	if (info->irq < 0)
 		info->irq = 0; /* NO_IRQ */
drivers/tty/n_hdlc.c +22 -1
index 580a37b3fe1b..166f651fde33 100644
@@ -140,6 +140,8 @@ struct n_hdlc {
 	struct n_hdlc_buf_list	rx_buf_list;
 	struct n_hdlc_buf_list	tx_free_buf_list;
 	struct n_hdlc_buf_list	rx_free_buf_list;
+	struct work_struct	write_work;
+	struct tty_struct	*tty_for_write_work;
 };
 
 /*
@@ -154,6 +156,7 @@ static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list);
 /* Local functions */
 
 static struct n_hdlc *n_hdlc_alloc(void);
+static void n_hdlc_tty_write_work(struct work_struct *work);
 
 /* max frame size for memory allocations */
 static int maxframe = 4096;
@@ -210,6 +213,8 @@ static void n_hdlc_tty_close(struct tty_struct *tty)
 	wake_up_interruptible(&tty->read_wait);
 	wake_up_interruptible(&tty->write_wait);
 
+	cancel_work_sync(&n_hdlc->write_work);
+
 	n_hdlc_free_buf_list(&n_hdlc->rx_free_buf_list);
 	n_hdlc_free_buf_list(&n_hdlc->tx_free_buf_list);
 	n_hdlc_free_buf_list(&n_hdlc->rx_buf_list);
@@ -241,6 +246,8 @@ static int n_hdlc_tty_open(struct tty_struct *tty)
 		return -ENFILE;
 	}
 
+	INIT_WORK(&n_hdlc->write_work, n_hdlc_tty_write_work);
+	n_hdlc->tty_for_write_work = tty;
 	tty->disc_data = n_hdlc;
 	tty->receive_room = 65536;
 
@@ -334,6 +341,20 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty)
 		goto check_again;
 }	/* end of n_hdlc_send_frames() */
 
+/**
+ * n_hdlc_tty_write_work - Asynchronous callback for transmit wakeup
+ * @work: pointer to work_struct
+ *
+ * Called when low level device driver can accept more send data.
+ */
+static void n_hdlc_tty_write_work(struct work_struct *work)
+{
+	struct n_hdlc *n_hdlc = container_of(work, struct n_hdlc, write_work);
+	struct tty_struct *tty = n_hdlc->tty_for_write_work;
+
+	n_hdlc_send_frames(n_hdlc, tty);
+}	/* end of n_hdlc_tty_write_work() */
+
 /**
  * n_hdlc_tty_wakeup - Callback for transmit wakeup
  * @tty: pointer to associated tty instance data
@@ -344,7 +365,7 @@ static void n_hdlc_tty_wakeup(struct tty_struct *tty)
 {
 	struct n_hdlc *n_hdlc = tty->disc_data;
 
-	n_hdlc_send_frames(n_hdlc, tty);
+	schedule_work(&n_hdlc->write_work);
 }	/* end of n_hdlc_tty_wakeup() */
 
 /**
drivers/tty/serial/8250/8250_fintek.c +0 -20
index 31c9e83ea3cb..251f0018ae8c 100644
@@ -290,25 +290,6 @@ static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata)
 	}
 }
 
-static void fintek_8250_goto_highspeed(struct uart_8250_port *uart,
-			      struct fintek_8250 *pdata)
-{
-	sio_write_reg(pdata, LDN, pdata->index);
-
-	switch (pdata->pid) {
-	case CHIP_ID_F81966:
-	case CHIP_ID_F81866: /* set uart clock for high speed serial mode */
-		sio_write_mask_reg(pdata, F81866_UART_CLK,
-			F81866_UART_CLK_MASK,
-			F81866_UART_CLK_14_769MHZ);
-
-		uart->port.uartclk = 921600 * 16;
-		break;
-	default: /* leave clock speed untouched */
-		break;
-	}
-}
-
 static void fintek_8250_set_termios(struct uart_port *port,
 				    struct ktermios *termios,
 				    struct ktermios *old)
@@ -430,7 +411,6 @@ static int probe_setup_port(struct fintek_8250 *pdata,
 
 				fintek_8250_set_irq_mode(pdata, level_mode);
 				fintek_8250_set_max_fifo(pdata);
-				fintek_8250_goto_highspeed(uart, pdata);
 
 				fintek_8250_exit_key(addr[i]);
 
drivers/usb/cdns3/cdnsp-gadget.c +12 -0
index 27df0c697897..e85bf768c66d 100644
@@ -1541,15 +1541,27 @@ static int cdnsp_gadget_pullup(struct usb_gadget *gadget, int is_on)
 {
 	struct cdnsp_device *pdev = gadget_to_cdnsp(gadget);
 	struct cdns *cdns = dev_get_drvdata(pdev->dev);
+	unsigned long flags;
 
 	trace_cdnsp_pullup(is_on);
 
+	/*
+	 * Disable events handling while controller is being
+	 * enabled/disabled.
+	 */
+	disable_irq(cdns->dev_irq);
+	spin_lock_irqsave(&pdev->lock, flags);
+
 	if (!is_on) {
 		cdnsp_reset_device(pdev);
 		cdns_clear_vbus(cdns);
 	} else {
 		cdns_set_vbus(cdns);
 	}
+
+	spin_unlock_irqrestore(&pdev->lock, flags);
+	enable_irq(cdns->dev_irq);
+
 	return 0;
 }
 
drivers/usb/cdns3/cdnsp-ring.c +10 -1
index 1b1438457fb0..e45c3d6e1536 100644
@@ -1029,6 +1029,8 @@ static void cdnsp_process_ctrl_td(struct cdnsp_device *pdev,
 		return;
 	}
 
+	*status = 0;
+
 	cdnsp_finish_td(pdev, td, event, pep, status);
 }
 
@@ -1523,7 +1525,14 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)
 	spin_lock_irqsave(&pdev->lock, flags);
 
 	if (pdev->cdnsp_state & (CDNSP_STATE_HALTED | CDNSP_STATE_DYING)) {
-		cdnsp_died(pdev);
+		/*
+		 * While removing or stopping driver there may still be deferred
+		 * not handled interrupt which should not be treated as error.
+		 * Driver should simply ignore it.
+		 */
+		if (pdev->gadget_driver)
+			cdnsp_died(pdev);
+
 		spin_unlock_irqrestore(&pdev->lock, flags);
 		return IRQ_HANDLED;
 	}
drivers/usb/cdns3/cdnsp-trace.h +2 -2
index 6a2571c6aa9e..5983dfb99653 100644
@@ -57,9 +57,9 @@ DECLARE_EVENT_CLASS(cdnsp_log_ep,
 		__entry->first_prime_det = pep->stream_info.first_prime_det;
 		__entry->drbls_count = pep->stream_info.drbls_count;
 	),
-	TP_printk("%s: SID: %08x ep state: %x stream: enabled: %d num  %d "
+	TP_printk("%s: SID: %08x, ep state: %x, stream: enabled: %d num %d "
 		  "tds %d, first prime: %d drbls %d",
-		  __get_str(name), __entry->state, __entry->stream_id,
+		  __get_str(name), __entry->stream_id, __entry->state,
 		  __entry->enabled, __entry->num_streams, __entry->td_count,
 		  __entry->first_prime_det, __entry->drbls_count)
 );
drivers/usb/core/devio.c +111 -33

243 lines not on this page · raw message

drivers/usb/core/quirks.c +3 -0
index 019351c0b52c..d3c14b5ed4a1 100644
@@ -434,6 +434,9 @@ static const struct usb_device_id usb_quirk_list[] = {
 	{ USB_DEVICE(0x1532, 0x0116), .driver_info =
 			USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
 
+	/* Lenovo USB-C to Ethernet Adapter RTL8153-04 */
+	{ USB_DEVICE(0x17ef, 0x720c), .driver_info = USB_QUIRK_NO_LPM },
+
 	/* Lenovo Powered USB-C Travel Hub (4X90S92381, RTL8153 GigE) */
 	{ USB_DEVICE(0x17ef, 0x721e), .driver_info = USB_QUIRK_NO_LPM },
 
drivers/usb/dwc2/platform.c +3 -0
index c8f18f3ba9e3..c331a5128c2c 100644
@@ -575,6 +575,9 @@ static int dwc2_driver_probe(struct platform_device *dev)
 		ggpio |= GGPIO_STM32_OTG_GCCFG_IDEN;
 		ggpio |= GGPIO_STM32_OTG_GCCFG_VBDEN;
 		dwc2_writel(hsotg, ggpio, GGPIO);
+
+		/* ID/VBUS detection startup time */
+		usleep_range(5000, 7000);
 	}
 
 	retval = dwc2_drd_init(hsotg);
drivers/usb/early/xhci-dbc.c +11 -4
index be4ecbabdd58..6c0434100e38 100644
@@ -14,7 +14,6 @@
 #include <linux/pci_ids.h>
 #include <linux/memblock.h>
 #include <linux/io.h>
-#include <linux/iopoll.h>
 #include <asm/pci-direct.h>
 #include <asm/fixmap.h>
 #include <linux/bcd.h>
@@ -136,9 +135,17 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done, int wait, int delay)
 {
 	u32 result;
 
-	return readl_poll_timeout_atomic(ptr, result,
-					 ((result & mask) == done),
-					 delay, wait);
+	/* Can not use readl_poll_timeout_atomic() for early boot things */
+	do {
+		result = readl(ptr);
+		result &= mask;
+		if (result == done)
+			return 0;
+		udelay(delay);
+		wait -= delay;
+	} while (wait > 0);
+
+	return -ETIMEDOUT;
 }
 
 static void __init xdbc_bios_handoff(void)
drivers/usb/gadget/composite.c +3 -3
index 284eea9f6e4d..3789c329183c 100644
@@ -1680,14 +1680,14 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
 	u8				endp;
 
 	if (w_length > USB_COMP_EP0_BUFSIZ) {
-		if (ctrl->bRequestType == USB_DIR_OUT) {
-			goto done;
-		} else {
+		if (ctrl->bRequestType & USB_DIR_IN) {
 			/* Cast away the const, we are going to overwrite on purpose. */
 			__le16 *temp = (__le16 *)&ctrl->wLength;
 
 			*temp = cpu_to_le16(USB_COMP_EP0_BUFSIZ);
 			w_length = USB_COMP_EP0_BUFSIZ;
+		} else {
+			goto done;
 		}
 	}
 
drivers/usb/gadget/function/u_ether.c +6 -10
index 85a3f6d4b5af..d15a54f6c24b 100644
@@ -17,6 +17,7 @@
 #include <linux/etherdevice.h>
 #include <linux/ethtool.h>
 #include <linux/if_vlan.h>
+#include <linux/etherdevice.h>
 
 #include "u_ether.h"
 
@@ -861,19 +862,23 @@ int gether_register_netdev(struct net_device *net)
 {
 	struct eth_dev *dev;
 	struct usb_gadget *g;
-	struct sockaddr sa;
 	int status;
 
 	if (!net->dev.parent)
 		return -EINVAL;
 	dev = netdev_priv(net);
 	g = dev->gadget;
+
+	net->addr_assign_type = NET_ADDR_RANDOM;
+	eth_hw_addr_set(net, dev->dev_mac);
+
 	status = register_netdev(net);
 	if (status < 0) {
 		dev_dbg(&g->dev, "register_netdev failed, %d\n", status);
 		return status;
 	} else {
 		INFO(dev, "HOST MAC %pM\n", dev->host_mac);
+		INFO(dev, "MAC %pM\n", dev->dev_mac);
 
 		/* two kinds of host-initiated state changes:
 		 *  - iff DATA transfer is active, carrier is "on"
@@ -881,15 +886,6 @@ int gether_register_netdev(struct net_device *net)
 		 */
 		netif_carrier_off(net);
 	}
-	sa.sa_family = net->type;
-	memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN);
-	rtnl_lock();
-	status = dev_set_mac_address(net, &sa, NULL);
-	rtnl_unlock();
-	if (status)
-		pr_warn("cannot set self ethernet address: %d\n", status);
-	else
[… more lines in the raw message]

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

drivers/usb/gadget/legacy/dbgp.c +3 -3
index 355bc7dab9d5..6bcbad382580 100644

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

drivers/usb/gadget/legacy/inode.c +3 -3
index 0a4041552ed1..1b223cba4c2c 100644

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

drivers/usb/host/xhci-mtk-sch.c +1 -1
index 134f4789bd89..b4c84b363507 100644

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

drivers/usb/host/xhci-pci.c +5 -1
index 1d8a4c089a85..8c04a7d73388 100644

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

drivers/usb/serial/cp210x.c +4 -2
index 189279869a8b..22e62c01c0aa 100644

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

drivers/usb/serial/option.c +8 -0
index 546fce4617a8..42420bfc983c 100644

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

drivers/usb/typec/tcpm/tcpm.c +13 -5
index 6010b9901126..59d4fa2443f2 100644

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

drivers/vdpa/vdpa.c +2 -1
index 1dc121a07a93..12bf3d16a40f 100644

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

drivers/vdpa/vdpa_user/vduse_dev.c +4 -2
index 841667a896dd..8c3de5a76282 100644

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

drivers/vhost/vdpa.c +1 -1
index 39039e046117..d62f05d056b7 100644

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

drivers/virtio/virtio_ring.c +1 -1
index d1f47327f6cf..9919407973cd 100644

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

drivers/xen/events/events_base.c +6 -0
index a78704ae3618..46d9295d9a6e 100644

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

fs/afs/file.c +3 -2
index e6c447ae91f3..b165377179c3 100644

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

fs/afs/super.c +1 -0
index d110def8aa8e..34c68724c98b 100644

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

fs/btrfs/disk-io.c +11 -3
index c37239c8ac0c..e1a262120e02 100644

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

fs/btrfs/extent_io.c +9 -1
index beac825edca1..250fd3c146ac 100644

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

fs/btrfs/inode.c +1 -1
index 61b4651f008d..4af74b62e7d9 100644

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

fs/btrfs/super.c +6 -20
index 537d90bf5d84..7f91d62c2225 100644

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

fs/btrfs/tree-log.c +1 -0
index 110e63d6727d..b79da8917cbf 100644

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

fs/btrfs/volumes.c +11 -14
index 7bf09ca82137..c34efdc1ecdd 100644

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

fs/btrfs/volumes.h +5 -1
index 2183361db614..4db10d071d67 100644

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

fs/ceph/caps.c +8 -8
index 8f537f1d9d1d..8be4da2e2b82 100644

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

fs/ceph/file.c +15 -3
index e61018d9764e..e873c2ba7a7f 100644

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

fs/ceph/mds_client.c +1 -2
index d64413adc0fd..e9409c460acd 100644

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

fs/cifs/fs_context.c +37 -1
index 0e660d6ade20..0a2542286552 100644

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

fs/fuse/dir.c +1 -1
index 2798fbe8d001..80a2181b402b 100644

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

fs/io-wq.c +25 -6
index e8f77903d775..01d4e3ff3170 100644

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

fs/overlayfs/dir.c +1 -2
index 93c7c267de93..f18490813170 100644

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

fs/overlayfs/overlayfs.h +1 -0
index 3894f3347955..2cd5741c873b 100644

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

fs/overlayfs/super.c +8 -4
index 178daa5e82c9..265181c110ae 100644

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

fs/zonefs/super.c +1 -0
index ddc346a9df9b..807f33553a8e 100644

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

include/uapi/linux/mptcp.h +10 -8
index f66038b9551f..80c40194e297 100644

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

include/xen/events.h +1 -0
index c204262d9fc2..344081e71584 100644

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

kernel/audit.c +10 -11
index 121d37e700a6..4cebadb5f30d 100644

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

kernel/bpf/verifier.c +36 -13

49 lines not on this page · raw message

kernel/locking/rtmutex.c +1 -1
index 6bb116c559b4..ea5a701ab240 100644

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

kernel/rcu/tree.c +5 -5
index bdd1dc6de71a..7ae10fab68b8 100644

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

kernel/time/timekeeping.c +1 -2
index b348749a9fc6..dcdcb85121e4 100644

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

net/core/skbuff.c +1 -1
index 38d7dee4bbe9..f7e003571a35 100644

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

net/ipv4/inet_diag.c +1 -3
index ef7897226f08..ae70e07c5244 100644

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

net/ipv6/sit.c +0 -1
index ef0c7a7c18e2..626cb53aa57a 100644

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

net/mac80211/agg-rx.c +3 -2
index cce28e3b2232..ef729b1e39ea 100644

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

net/mac80211/agg-tx.c +11 -5
index 430a58587538..74a878f213d3 100644

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

net/mac80211/driver-ops.h +4 -1
index cd3731cbf6c6..c336267f4599 100644

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

net/mac80211/mlme.c +10 -3
index c0ea3b1aa9e1..dd42d83dbe33 100644

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

net/mac80211/sta_info.h +1 -0
index ba2796782008..e7443fc4669c 100644

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

net/mac80211/tx.c +3 -3
index 0527bf41a32c..a499b07fee33 100644

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

net/mac80211/util.c +6 -1
index 03ea4f929b99..2fe71ed9137b 100644

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

net/mptcp/pm_netlink.c +3 -0
index 050eea231528..b79251a36dcb 100644

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

net/mptcp/protocol.c +4 -2
index 421fa62ce5cd..4c889552cde7 100644

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

net/mptcp/sockopt.c +0 -1
index 8c03afac5ca0..4bb305342fcc 100644

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

net/packet/af_packet.c +3 -2
index 2a2bc64f75cf..1bc7ef49e148 100644

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

net/rds/connection.c +1 -0
index a3bc4b54d491..b4cc699c5fad 100644

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

net/sched/cls_api.c +1 -0
index 2ef8f5a6205a..e54f0a42270c 100644

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

net/sched/sch_cake.c +1 -5
index 3c2300d14468..857aaebd49f4 100644

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

net/sched/sch_ets.c +2 -2
index 92a686807971..44fa2532a87c 100644

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

net/smc/af_smc.c +3 -1
index 06e4a07bdcdc..eea6d4a854e9 100644

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

net/vmw_vsock/virtio_transport_common.c +2 -1
index 59ee1be5a6dd..ec2c2afbf0d0 100644

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

net/wireless/reg.c +6 -1
index df87c7f3a049..795e86b371bb 100644

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

scripts/recordmcount.pl +1 -1
index 7d631aaa0ae1..52a000b057a5 100755

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

security/selinux/hooks.c +19 -14
index c8bf3db90c8b..51432ea74044 100644

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

tools/perf/builtin-inject.c +9 -4
index d454f5a7af93..50c2e6892b3e 100644

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

tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c +14 -2
index 762f6a9da8b5..664ffc0364f4 100644

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

tools/testing/selftests/bpf/verifier/atomic_cmpxchg.c +86 -0

86 lines not on this page · raw message

tools/testing/selftests/bpf/verifier/value_ptr_arith.c +23 -0
index 2debba4e8a3a..4d347bc53aa2 100644

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

tools/testing/selftests/damon/.gitignore new file +2 -0
new file mode 100644
index 000000000000..c6c2965a6607

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

tools/testing/selftests/damon/Makefile +2 -0
index 8a3f2cd9fec0..f0aa954b5d13 100644

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

tools/testing/selftests/damon/debugfs_attrs.sh +18 -0
index bfabb19dc0d3..ecda972e8777 100644

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

tools/testing/selftests/damon/huge_count_read_write.c new file +39 -0
new file mode 100644
index 000000000000..ad7a6b4cf338

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

tools/testing/selftests/kvm/kvm_create_max_vcpus.c +30 -0
index 0299cd81b8ba..aa3795cd7bd3 100644

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

tools/testing/selftests/net/fcnal-test.sh +34 -11

45 lines not on this page · raw message

tools/testing/selftests/net/forwarding/forwarding.config.sample +2 -0
index e5e2fbeca22e..e51def39fd80 100644

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

tools/testing/selftests/net/icmp_redirect.sh +1 -1
index ecbf57f264ed..7b9d6e31b8e7 100755

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

tools/testing/selftests/net/toeplitz.c +1 -1
index 710ac956bdb3..c5489341cfb8 100644

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

virt/kvm/kvm_main.c +4 -2
index ce1847bc898b..c6bfd4e15d28 100644

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.