Skip to contentSkip to conversation

Linux 5.15.7

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

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.7 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

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

 Makefile                                                          |    2 
 arch/arm64/include/asm/kvm_arm.h                                  |    4 
 arch/arm64/kernel/entry-ftrace.S                                  |    6 
 arch/parisc/Makefile                                              |    5 
 arch/parisc/install.sh                                            |    1 
 arch/parisc/kernel/time.c                                         |   30 -
 arch/powerpc/platforms/pseries/iommu.c                            |   15 
 arch/s390/include/asm/pci_io.h                                    |    7 
 arch/s390/kernel/setup.c                                          |    3 
 arch/x86/entry/entry_64.S                                         |   35 -
 arch/x86/hyperv/hv_init.c                                         |    9 
 arch/x86/kernel/cpu/mshyperv.c                                    |   20 
 arch/x86/kernel/sev.c                                             |   57 +
 arch/x86/kernel/tsc.c                                             |   28 
 arch/x86/kernel/tsc_sync.c                                        |   41 +
 arch/x86/kvm/lapic.c                                              |    2 
 arch/x86/kvm/mmu/mmu.c                                            |   37 -
 arch/x86/kvm/mmu/tdp_mmu.c                                        |   36 -
 arch/x86/kvm/mmu/tdp_mmu.h                                        |    5 
 arch/x86/kvm/svm/avic.c                                           |   16 
 arch/x86/kvm/svm/pmu.c                                            |    2 
 arch/x86/kvm/svm/sev.c                                            |   31 -
 arch/x86/kvm/svm/svm.c                                            |    1 
 arch/x86/kvm/vmx/nested.c                                         |   49 -
 arch/x86/kvm/vmx/posted_intr.c                                    |   20 
 arch/x86/kvm/vmx/vmx.c                                            |   62 +-
 arch/x86/kvm/x86.c                                                |   46 +
 arch/x86/kvm/x86.h                                                |    7 
 arch/x86/realmode/init.c                                          |   12 
 arch/x86/xen/xen-asm.S                                            |   20 
 drivers/ata/ahci.c                                                |    1 
 drivers/ata/libahci.c                                             |   15 
 drivers/ata/sata_fsl.c                                            |   20 
 drivers/char/ipmi/ipmi_msghandler.c                               |   13 
 drivers/cpufreq/cpufreq.c                                         |    9 
 drivers/dma-buf/heaps/system_heap.c                               |    2 
 drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c                          |    1 
 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c             |    5 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c       |   20 
 drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c                   |   13 
 drivers/gpu/drm/i915/display/intel_display_types.h                |    3 
 drivers/gpu/drm/i915/display/intel_dp.c                           |   11 
 drivers/gpu/drm/i915/display/intel_dp.h                           |    2 
 drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c             |    5 
 drivers/gpu/drm/i915/gt/intel_workarounds.c                       |    7 
 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c                       |    4 
 drivers/gpu/drm/msm/msm_debugfs.c                                 |    1 
 drivers/gpu/drm/msm/msm_drv.c                                     |   49 +
 drivers/gpu/drm/msm/msm_gem.c                                     |    3 
 drivers/gpu/drm/msm/msm_gem_submit.c                              |    1 
 drivers/gpu/drm/msm/msm_gpu.h                                     |    3 
 drivers/gpu/drm/msm/msm_gpu_devfreq.c                             |    5 
 drivers/gpu/drm/sun4i/Kconfig                                     |    1 
 drivers/gpu/drm/vc4/vc4_kms.c                                     |   40 -
 drivers/i2c/busses/i2c-cbus-gpio.c                                |    5 
 drivers/i2c/busses/i2c-stm32f7.c                                  |   31 -
 drivers/net/dsa/b53/b53_spi.c                                     |   14 
 drivers/net/dsa/mv88e6xxx/serdes.c                                |  252 +++++++-
 drivers/net/dsa/mv88e6xxx/serdes.h                                |    4 
 drivers/net/ethernet/aquantia/atlantic/aq_common.h                |   27 
 drivers/net/ethernet/aquantia/atlantic/aq_hw.h                    |    2 
 drivers/net/ethernet/aquantia/atlantic/aq_nic.c                   |   10 
 drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c              |    7 
 drivers/net/ethernet/aquantia/atlantic/aq_vec.c                   |    3 
 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c      |   25 
 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c |    3 
 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c          |   22 
 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h          |    2 
 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h    |   38 +
 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c |  110 ++-
 drivers/net/ethernet/dec/tulip/de4x5.c                            |   34 -
 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c                  |    2 
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c                |    4 
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c                   |    2 
 drivers/net/ethernet/marvell/octeontx2/af/rvu.c                   |    2 
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c                    |    9 
 drivers/net/ethernet/mellanox/mlx5/core/cmd.c                     |    2 
 drivers/net/ethernet/mellanox/mlx5/core/en.h                      |   14 
 drivers/net/ethernet/mellanox/mlx5/core/en/params.c               |   21 
 drivers/net/ethernet/mellanox/mlx5/core/en/params.h               |    6 
 drivers/net/ethernet/mellanox/mlx5/core/en/rss.c                  |   23 
 drivers/net/ethernet/mellanox/mlx5/core/en/rss.h                  |    7 
 drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c               |   66 +-
 drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h               |   11 
 drivers/net/ethernet/mellanox/mlx5/core/en/tir.c                  |   16 
 drivers/net/ethernet/mellanox/mlx5/core/en/tir.h                  |    6 
 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.c     |    2 
 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c        |   24 
 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c              |    4 
 drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c           |    6 
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c                 |   46 -
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c                  |    9 
 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c                 |    4 
 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c        |    1 
 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c             |    7 
 drivers/net/ethernet/natsemi/xtsonic.c                            |    2 
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c               |   10 
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c                 |   11 
 drivers/net/usb/lan78xx.c                                         |    2 
 drivers/net/usb/r8152.c                                           |    9 
 drivers/net/vrf.c                                                 |    2 
 drivers/net/wireguard/allowedips.c                                |    2 
 drivers/net/wireguard/device.c                                    |   39 -
 drivers/net/wireguard/device.h                                    |    9 
 drivers/net/wireguard/queueing.c                                  |    6 
 drivers/net/wireguard/queueing.h                                  |    2 
 drivers/net/wireguard/ratelimiter.c                               |    4 
 drivers/net/wireguard/receive.c                                   |   39 -
 drivers/net/wireguard/socket.c                                    |    2 
 drivers/net/wireless/intel/iwlwifi/fw/uefi.c                      |    6 
 drivers/net/wireless/intel/iwlwifi/iwl-drv.c                      |   22 
 drivers/net/wireless/intel/iwlwifi/iwl-drv.h                      |    3 
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c                 |   24 
 drivers/net/wireless/intel/iwlwifi/mvm/mvm.h                      |    3 
 drivers/net/wireless/intel/iwlwifi/mvm/ops.c                      |    5 
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c                   |    4 
 drivers/net/wireless/ralink/rt2x00/rt2x00usb.c                    |    3 
 drivers/pinctrl/qcom/Kconfig                                      |    2 
 drivers/platform/x86/dell/Kconfig                                 |    2 
 drivers/platform/x86/thinkpad_acpi.c                              |   13 
 drivers/scsi/lpfc/lpfc_els.c                                      |    9 
 drivers/scsi/scsi_transport_iscsi.c                               |    6 
 drivers/scsi/ufs/ufshcd-pci.c                                     |   18 
 drivers/thermal/thermal_core.c                                    |    2 
 drivers/tty/serial/8250/8250_bcm7271.c                            |   13 
 drivers/tty/serial/8250/8250_pci.c                                |   39 -
 drivers/tty/serial/8250/8250_port.c                               |    7 
 drivers/tty/serial/amba-pl011.c                                   |    1 
 drivers/tty/serial/liteuart.c                                     |   20 
 drivers/tty/serial/msm_serial.c                                   |    3 
 drivers/tty/serial/serial-tegra.c                                 |    4 
 drivers/tty/serial/serial_core.c                                  |   18 
 drivers/usb/cdns3/cdns3-gadget.c                                  |   20 
 drivers/usb/cdns3/cdnsp-mem.c                                     |    3 
 drivers/usb/core/quirks.c                                         |    3 
 drivers/usb/host/xhci-ring.c                                      |   21 
 drivers/usb/typec/tcpm/tcpm.c                                     |    4 
 drivers/video/console/vgacon.c                                    |   14 
 fs/btrfs/disk-io.c                                                |   14 
 fs/btrfs/volumes.c                                                |   18 
 fs/file.c                                                         |    4 
 fs/gfs2/bmap.c                                                    |    2 
 fs/gfs2/super.c                                                   |   14 
 fs/io-wq.c                                                        |    7 
 include/linux/acpi.h                                              |    9 
 include/linux/kprobes.h                                           |    2 
 include/linux/mlx5/mlx5_ifc.h                                     |    8 
 include/linux/netdevice.h                                         |   19 
 include/linux/siphash.h                                           |   14 
 include/net/dst_cache.h                                           |   11 
 include/net/fib_rules.h                                           |    4 
 include/net/ip_fib.h                                              |    2 
 include/net/netns/ipv4.h                                          |    2 
 include/net/sock.h                                                |   13 
 kernel/kprobes.c                                                  |    3 
 kernel/sched/core.c                                               |    6 
 kernel/trace/trace.c                                              |   12 
 kernel/trace/trace_events_hist.c                                  |    2 
 lib/siphash.c                                                     |   12 
 net/core/dev.c                                                    |    5 
 net/core/dst_cache.c                                              |   19 
 net/core/fib_rules.c                                              |    2 
 net/ipv4/devinet.c                                                |    2 
 net/ipv4/fib_frontend.c                                           |    2 
 net/ipv4/fib_rules.c                                              |    5 
 net/ipv4/fib_semantics.c                                          |    4 
 net/ipv6/esp6.c                                                   |    6 
 net/ipv6/fib6_rules.c                                             |    4 
 net/mac80211/led.h                                                |    8 
 net/mac80211/rx.c                                                 |   10 
 net/mac80211/tx.c                                                 |   34 -
 net/mctp/route.c                                                  |    9 
 net/mpls/af_mpls.c                                                |   68 +-
 net/rds/tcp.c                                                     |    2 
 net/rxrpc/conn_client.c                                           |   14 
 net/rxrpc/peer_object.c                                           |   14 
 net/smc/af_smc.c                                                  |   14 
 net/smc/smc_close.c                                               |    8 
 net/smc/smc_core.c                                                |    7 
 net/tls/tls_sw.c                                                  |    4 
 sound/hda/intel-dsp-config.c                                      |   10 
 sound/pci/hda/hda_local.h                                         |    9 
 sound/pci/hda/patch_cs8409.c                                      |    5 
 sound/soc/codecs/rk817_codec.c                                    |    1 
 sound/soc/tegra/tegra186_dspk.c                                   |  181 ++++--
 sound/soc/tegra/tegra210_admaif.c                                 |  140 +++-
 sound/soc/tegra/tegra210_ahub.c                                   |   11 
 sound/soc/tegra/tegra210_dmic.c                                   |  184 +++++-
 sound/soc/tegra/tegra210_i2s.c                                    |  296 +++++++---
 sound/usb/card.h                                                  |   10 
 sound/usb/endpoint.c                                              |  223 +++++--
 sound/usb/endpoint.h                                              |   13 
 sound/usb/pcm.c                                                   |  165 ++++-
 tools/perf/builtin-report.c                                       |   15 
 tools/perf/ui/hist.c                                              |   28 
 tools/perf/util/arm-spe.c                                         |   15 
 tools/perf/util/hist.c                                            |   23 
 tools/perf/util/hist.h                                            |    1 
 tools/perf/util/sort.c                                            |   52 -
 tools/perf/util/sort.h                                            |    6 
 tools/perf/util/util.c                                            |   14 
 tools/perf/util/util.h                                            |    2 
 tools/testing/selftests/net/fcnal-test.sh                         |    4 
 tools/testing/selftests/wireguard/netns.sh                        |   30 -
 tools/testing/selftests/wireguard/qemu/debug.config               |    2 
 tools/testing/selftests/wireguard/qemu/kernel.config              |    1 
 virt/kvm/kvm_main.c                                               |   50 +
 207 files changed, 2853 insertions(+), 1214 deletions(-)

Aaro Koskinen (1):
i2c: cbus-gpio: set atomic transfer callback

Aaron Ma (1):
net: usb: r8152: Add MAC passthrough support for more Lenovo Docks

Adrian Hunter (1):
scsi: ufs: ufs-pci: Add support for Intel ADL

Al Cooper (1):
serial: 8250_bcm7271: UART errors after resuming from S2

Alain Volmat (3):
i2c: stm32f7: flush TX FIFO upon transfer errors
i2c: stm32f7: recover the bus on access timeout
i2c: stm32f7: stop dma transfer in case of NACK

Alexey Kardashevskiy (2):
powerpc/pseries/ddw: Revert "Extend upper limit for huge DMA window for persistent memory" powerpc/pseries/ddw: Do not try direct mapping with persistent memory and one window

Andreas Gruenbacher (1):
gfs2: Fix length of holes reported at end-of-file

Andrew Halaney (1):
preempt/dynamic: Fix setup_preempt_mode() return value

Arnd Bergmann (1):
siphash: use _unaligned version by default

Badhri Jagan Sridharan (1):
usb: typec: tcpm: Wait in SNK_DEBOUNCED until disconnect

Baokun Li (2):
sata_fsl: fix UAF in sata_fsl_port_stop when rmmod sata_fsl
sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl

Ben Ben-Ishay (1):
net/mlx5e: Rename lro_timeout to packet_merge_timeout

Ben Gardon (1):
KVM: x86/mmu: Fix TLB flush range when handling disconnected pt

Benjamin Poirier (1):
net: mpls: Fix notifications when deleting a device

Bernard Zhao (1):
drm/amd/amdgpu: fix potential memleak

Bob Peterson (1):
gfs2: release iopen glock early in evict

Catalin Marinas (1):
KVM: arm64: Avoid setting the upper 32 bits of TCR_EL2 and CPTR_EL2 to 1

Christophe JAILLET (2):
net: marvell: mvpp2: Fix the computation of shared CPUs
iwlwifi: Fix memory leaks in error handling path

Dan Carpenter (1):
KVM: VMX: Set failure code in prepare_vmcs02()

David Matlack (1):
KVM: x86/mmu: Rename slot_handle_leaf to slot_handle_level_4k

Dmitry Bogdanov (2):
atlantic: Increase delay for fw transactions
atlantic: Fix statistics logic for production hardware

Dmytro Linkin (2):
net/mlx5: E-switch, Respect BW share of the new group net/mlx5: E-Switch, Check group pointer before reading bw_share value

Dongliang Mu (1):
dpaa2-eth: destroy workqueue at the end of remove function

Douglas Anderson (2):
drm/msm/a6xx: Allocate enough space for GMU registers drm/msm: Fix mmap to include VM_IO and VM_DONTDUMP

Dust Li (1):
net/smc: fix wrong list_del in smc_lgr_cleanup_early

Eiichi Tsukata (2):
rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()
rxrpc: Fix rxrpc_local leak in rxrpc_lookup_peer()

Eric Dumazet (2):
net: annotate data-races on txq->xmit_lock_owner
ipv4: convert fib_num_tclassid_users to atomic_t

Felix Fietkau (1):
mac80211: fix throughput LED trigger

Feng Tang (2):
x86/tsc: Add a timer to make sure TSC_adjust is always checked x86/tsc: Disable clocksource watchdog for TSC on qualified platorms

Filipe Manana (1):
btrfs: silence lockdep when reading chunk tree during mount

Florian Fainelli (1):
net: dsa: b53: Add SPI ID table

Frank Li (1):
usb: cdns3: gadget: fix new urb never complete if ep cancel previous requests

German Gomez (1):
perf inject: Fix ARM SPE handling

Greg Kroah-Hartman (1):

      Linux 5.15.7

Guangming (1):
dma-buf: system_heap: Use 'for_each_sgtable_sg' in pages free flow

Gustavo A. R. Silva (1):
wireguard: ratelimiter: use kvcalloc() instead of kvzalloc()

Helge Deller (3):
parisc: Fix KBUILD_IMAGE for self-extracting kernel
parisc: Fix "make install" on newer debian releases
parisc: Mark cr16 CPU clocksource unstable on all SMP machines

Hou Wenlong (2):
KVM: x86/mmu: Skip tlb flush if it has been done in zap_gfn_range()
KVM: x86/mmu: Pass parameter flush as false in kvm_tdp_mmu_zap_collapsible_sptes()

Ian Rogers (2):
perf hist: Fix memory leak of a perf_hpp_fmt perf report: Fix memory leaks around perf_tip()

Ilia Sergachev (1):

      serial: liteuart: Fix NULL pointer dereference in ->remove()

Ioanna Alifieraki (1):
ipmi: Move remove_work to dedicated workqueue

James Smart (1):
scsi: lpfc: Fix non-recovery of remote ports following an unsolicited LOGO

Jason A. Donenfeld (6):
wireguard: selftests: increase default dmesg log size
wireguard: allowedips: add missing __rcu annotation to satisfy sparse
wireguard: selftests: actually test for routing loops
wireguard: device: reset peer src endpoint when netns exits
wireguard: receive: use ring buffer for incoming handshakes
wireguard: receive: drop handshakes if queue lock is contended

Jay Dolan (2):
serial: 8250_pci: Fix ACCES entries in pci_serial_quirks array
serial: 8250_pci: rewrite pericom_do_set_divisor()

Jens Axboe (1):
io-wq: don't retry task_work creation failure on fatal conditions

Jimmy Wang (1):
platform/x86: thinkpad_acpi: Add support for dual fan control

Joerg Roedel (1):
x86/64/mm: Map all kernel memory into trampoline_pgd

Johan Hovold (3):
serial: core: fix transmit-buffer reset and memleak
serial: liteuart: fix use-after-free and memleak on unbind
serial: liteuart: fix minor-number leak on probe errors

Jordy Zomer (1):
ipv6: check return value of ipv6_skip_exthdr

José Roberto de Souza (1):

      Revert "drm/i915: Implement Wa_1508744258"

Julian Braha (2):
drm/sun4i: fix unmet dependency on RESET_CONTROLLER for PHY_SUN6I_MIPI_DPHY
pinctrl: qcom: fix unmet dependencies on GPIOLIB for GPIOLIB_IRQCHIP

Khalid Manaa (1):
net/mlx5e: Rename TIR lro functions to TIR packet merge functions

Lai Jiangshan (5):
KVM: X86: Use vcpu->arch.walk_mmu for kvm_mmu_invlpg()
KVM: X86: Fix when shadow_root_level=5 && guest root_level<4 x86/entry: Add a fence for kernel entry SWAPGS in paranoid_entry() x86/entry: Use the correct fence macro after swapgs in kernel CR3 x86/xen: Add xenpv_restore_regs_and_return_to_usermode()

Li Zhijian (2):
wireguard: selftests: rename DEBUG_PI_LIST to DEBUG_PLIST
selftests: net: Correct case name

Lijo Lazar (1):
drm/amd/pm: Remove artificial freq level on Navi1x

Like Xu (1):
KVM: x86/pmu: Fix reserved bits for AMD PerfEvtSeln register

Linus Torvalds (1):
fget: check that the fd still exists after getting a ref to it

Lorenzo Bianconi (1):
mt76: mt7915: fix NULL pointer dereference in mt7915_get_phy_mode

Lukas Wunner (1):
serial: 8250: Fix RTS modem control while in rs485 mode

Lyude Paul (1):
drm/i915/dp: Perform 30ms delay after source OUI write

Maciej W. Rozycki (1):
vgacon: Propagate console boot parameters before calling `vc_resize'

Manaf Meethalavalappu Pallikunhi (1):
thermal: core: Reset previous low and high trip during thermal zone init

Marek Behún (6):
net: dsa: mv88e6xxx: Fix application of erratum 4.8 for 88E6393X
net: dsa: mv88e6xxx: Drop unnecessary check in mv88e6393x_serdes_erratum_4_6()
net: dsa: mv88e6xxx: Save power by disabling SerDes trasmitter and receiver
net: dsa: mv88e6xxx: Add fix for erratum 5.2 of 88E6393X family
net: dsa: mv88e6xxx: Fix inband AN for 2500base-x on 88E6393X family
net: dsa: mv88e6xxx: Link in pcs_get_state() if AN is bypassed

Mario Limonciello (3):
ata: ahci: Add Green Sardine vendor ID as board_ahci_mobile
ata: libahci: Adjust behavior when StorageD3Enable _DSD is set
ACPI: Add stubs for wakeup handler functions

Mark Bloch (1):
net/mlx5: E-Switch, fix single FDB creation on BlueField

Mark Rutland (1):
arm64: ftrace: add missing BTIs

Masami Hiramatsu (1):
kprobes: Limit max data_size of the kretprobe instances

Mathias Nyman (1):
xhci: Fix commad ring abort, write all 64 bits to CRCR register.

Matt Johnston (1):
mctp: Don't let RTM_DELROUTE delete local routes

Maxime Ripard (6):
drm/vc4: kms: Wait for the commit before increasing our clock rate drm/vc4: kms: Fix return code check
drm/vc4: kms: Add missing drm_crtc_commit_put
drm/vc4: kms: Clear the HVS FIFO commit pointer once done drm/vc4: kms: Don't duplicate pending commit
drm/vc4: kms: Fix previous HVS commit wait

Michael Sterritt (1):
x86/sev: Fix SEV-ES INS/OUTS instructions for word, dword, and qword

Mike Christie (1):
scsi: iscsi: Unblock session then wake up error handler

Mordechay Goodstein (1):
iwlwifi: mvm: retry init flow if failed

Moshe Shemesh (1):
net/mlx5: Move MODIFY_RQT command to ignore list in internal error state

Namhyung Kim (3):
perf sort: Fix the 'weight' sort key behavior perf sort: Fix the 'ins_lat' sort key behavior perf sort: Fix the 'p_stage_cyc' sort key behavior

Nicholas Kazlauskas (1):
drm/amd/display: Allow DSC on supported MST branch devices

Nicolas Frattaroli (1):
ASoC: rk817: Add module alias for rk817-codec

Nikita Danilov (2):
atlatnic: enable Nbase-t speeds with base-t
atlantic: Add missing DIDs and fix 115c.

Nikita Yushchenko (1):
tracing: Don't use out-of-sync va_list in event printing

Niklas Schnelle (1):
s390/pci: move pseudo-MMIO to prevent MIO overlap

Ole Ernst (1):
USB: NO_LPM quirk Lenovo Powered USB-C Travel Hub

Paolo Abeni (1):
tcp: fix page frag corruption on page fault

Paolo Bonzini (7):
KVM: fix avic_set_running for preemptable kernels
KVM: x86: ignore APICv if LAPIC is not enabled
KVM: VMX: prepare sync_pir_to_irr for running with APICv disabled
KVM: x86: Use a stable condition around all VT-d PI paths
KVM: MMU: shadow nested paging does not have PKU
KVM: x86: check PIR even for vCPUs with disabled APICv
KVM: SEV: initialize regions_list of a mirror VM

Patrik John (1):
serial: tegra: Change lower tolerance baud rate limit for tegra20 and tegra30

Pierre Gondois (1):
serial: pl011: Add ACPI SBSA UART match id

Pierre-Louis Bossart (1):
ALSA: intel-dsp-config: add quirk for CML devices based on ES8336 codec

Qais Yousef (1):

      sched/uclamp: Fix rq->uclamp_max not set on first enqueue

Raed Salem (2):
net/mlx5e: IPsec: Fix Software parser inner l3 type setting in case of encapsulation net/mlx5e: Fix missing IPsec statistics on uplink representor

Randy Dunlap (1):
natsemi: xtensa: fix section mismatch warnings

Rob Clark (4):
drm/msm: Do hw_init() before capturing GPU state drm/msm/devfreq: Fix OPP refcnt leak drm/msm: Fix wait_fence submitqueue leak drm/msm: Restore error return on invalid fence

Sameer Pujar (9):
ASoC: tegra: Fix wrong value type in ADMAIF
ASoC: tegra: Fix wrong value type in I2S
ASoC: tegra: Fix wrong value type in DMIC
ASoC: tegra: Fix wrong value type in DSPK
ASoC: tegra: Fix kcontrol put callback in ADMAIF
ASoC: tegra: Fix kcontrol put callback in I2S
ASoC: tegra: Fix kcontrol put callback in DMIC
ASoC: tegra: Fix kcontrol put callback in DSPK
ASoC: tegra: Fix kcontrol put callback in AHUB

Sameer Saurabh (3):
atlantic: Fix to display FW bundle version instead of FW mac version. Remove Half duplex mode speed capabilities.
atlantic: Remove warn trace message.

Sean Christopherson (8):
x86/hyperv: Move required MSRs check to initial platform probing
KVM: Disallow user memslot with size that exceeds "unsigned long"
KVM: Ensure local memslot copies operate on up-to-date arch-specific data
KVM: nVMX: Emulate guest TLB flush on nested VM-Enter with new vpid12
KVM: nVMX: Flush current VPID (L1 vs. L2) for KVM_REQ_TLB_FLUSH_GUEST
KVM: nVMX: Abide to KVM_REQ_TLB_FLUSH_GUEST request on nested vmentry/vmexit
KVM: SEV: Return appropriate error codes if SEV-ES scratch setup fails
KVM: x86/mmu: Remove spurious TLB flushes in TDP MMU zap collapsible path

Slark Xiao (1):
platform/x86: thinkpad_acpi: Fix WWAN device disabled issue after S3 deep

Stanislaw Gruszka (1):
rt2x00: do not mark device gone on EPROTO errors during start

Stefan Binding (1):
ALSA: hda/cs8409: Set PMSG_ON earlier inside cs8409 driver

Stephen Suryaputra (1):
vrf: Reset IPCB/IP6CB when processing outbound pkts in vrf dev xmit

Steven Rostedt (VMware) (1):
tracing/histograms: String compares should not care about signed values

Sven Eckelmann (1):
tty: serial: msm_serial: Deactivate RX DMA for polling support

Sven Schuchmann (1):
net: usb: lan78xx: lan78xx_phy_init(): use PHY_POLL instead of "0" if no IRQ is available

Takashi Iwai (12):
ALSA: usb-audio: Restrict rates for the shared clocks
ALSA: usb-audio: Rename early_playback_start flag with lowlatency_playback
ALSA: usb-audio: Disable low-latency playback for free-wheel mode
ALSA: usb-audio: Disable low-latency mode for implicit feedback sync
ALSA: usb-audio: Check available frames for the next packet size
ALSA: usb-audio: Add spinlock to stop_urbs()
ALSA: usb-audio: Improved lowlatency playback support
ALSA: usb-audio: Avoid killing in-flight URBs during draining
ALSA: usb-audio: Fix packet size calculation regression
ALSA: usb-audio: Less restriction for low-latency playback mode
ALSA: usb-audio: Switch back to non-latency mode at a later point
ALSA: usb-audio: Don't start stream for capture at prepare

Tariq Toukan (1):
net/mlx5e: Sync TIR params updates against concurrent create/modify

Teng Qi (2):
ethernet: hisilicon: hns: hns_dsaf_misc: fix a possible array overflow in hns_dsaf_ge_srst_by_port()
net: ethernet: dec: tulip: de4x5: fix possible array overflows in type3_infoblock()

Thomas Weißschuh (1):
platform/x86: dell-wmi-descriptor: disable by default

Tianjia Zhang (1):
net/tls: Fix authentication failure in CCM mode

Tony Lu (1):
net/smc: Keep smc_close_final rc during active close

Vasily Gorbik (1):
s390/setup: avoid using memblock_enforce_memory_limit

Vincent Whitchurch (1):
net: stmmac: Avoid DMA_CHAN_CONTROL write if no Split Header support

Wang Yugui (1):
btrfs: check-integrity: fix a warning on write caching disabled disk

Wei Yongjun (1):
ipmi: msghandler: Make symbol 'remove_work_wq' static

Wen Gu (2):
net/smc: Transfer remaining wait queue entries during fallback net/smc: Avoid warning of possible recursive locking

William Kucharski (1):
net/rds: correct socket tunable error in rds_tcp_tune()

Xing Song (1):
mac80211: do not access the IV when it was stripped

Xiongfeng Wang (1):
cpufreq: Fix get_cpu_device() failure in add_cpu_dev_symlink()

Zekun Shen (1):
atlantic: Fix OOB read and write in hw_atl_utils_fw_rpc_wait

Zhou Qingyang (4):
net: qlogic: qlcnic: Fix a NULL pointer dereference in qlcnic_83xx_add_rings() net/mlx4_en: Fix an use-after-free bug in mlx4_en_try_alloc_resources()
octeontx2-af: Fix a memleak bug in rvu_mbox_init()
usb: cdnsp: Fix a NULL pointer dereference in cdnsp_endpoint_init()

liuguoqiang (1):
net: return correct error code

msizanoen1 (1):
ipv6: fix memory leak in fib6_rule_suppress

shaoyunl (1):
drm/amd/amdkfd: Fix kernel panic when reset failed and been triggered again

zhangyue (1):

      net: tulip: de4x5: fix the problem that the array 'lp->phy[8]' may be out of bound

Łukasz Bartosik (1):
iwlwifi: fix warnings produced by kernel debug options

author maintainer
#1 lore raw
Makefile +1 -1
index 0faa64733281..2d85216b1493 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 6
+SUBLEVEL = 7
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arm64/include/asm/kvm_arm.h +2 -2
index 327120c0089f..f67a561e0935 100644
@@ -91,7 +91,7 @@
 #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
 
 /* TCR_EL2 Registers bits */
-#define TCR_EL2_RES1		((1 << 31) | (1 << 23))
+#define TCR_EL2_RES1		((1U << 31) | (1 << 23))
 #define TCR_EL2_TBI		(1 << 20)
 #define TCR_EL2_PS_SHIFT	16
 #define TCR_EL2_PS_MASK		(7 << TCR_EL2_PS_SHIFT)
@@ -276,7 +276,7 @@
 #define CPTR_EL2_TFP_SHIFT 10
 
 /* Hyp Coprocessor Trap Register */
-#define CPTR_EL2_TCPAC	(1 << 31)
+#define CPTR_EL2_TCPAC	(1U << 31)
 #define CPTR_EL2_TAM	(1 << 30)
 #define CPTR_EL2_TTA	(1 << 20)
 #define CPTR_EL2_TFP	(1 << CPTR_EL2_TFP_SHIFT)
arch/arm64/kernel/entry-ftrace.S +6 -0
index b3e4f9a088b1..8cf970d219f5 100644
@@ -77,11 +77,17 @@
 	.endm
 
 SYM_CODE_START(ftrace_regs_caller)
+#ifdef BTI_C
+	BTI_C
+#endif
 	ftrace_regs_entry	1
 	b	ftrace_common
 SYM_CODE_END(ftrace_regs_caller)
 
 SYM_CODE_START(ftrace_caller)
+#ifdef BTI_C
+	BTI_C
+#endif
 	ftrace_regs_entry	0
 	b	ftrace_common
 SYM_CODE_END(ftrace_caller)
arch/parisc/Makefile +5 -0
index fcde3ffa0221..fadb098de154 100644
@@ -17,7 +17,12 @@
 # Mike Shaver, Helge Deller and Martin K. Petersen
 #
 
+ifdef CONFIG_PARISC_SELF_EXTRACT
+boot := arch/parisc/boot
+KBUILD_IMAGE := $(boot)/bzImage
+else
 KBUILD_IMAGE := vmlinuz
+endif
 
 NM		= sh $(srctree)/arch/parisc/nm
 CHECKFLAGS	+= -D__hppa__=1
arch/parisc/install.sh +1 -0
index 056d588befdd..70d3cffb0251 100644
@@ -39,6 +39,7 @@ verify "$3"
 if [ -n "${INSTALLKERNEL}" ]; then
   if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
   if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
+  if [ -x /usr/sbin/${INSTALLKERNEL} ]; then exec /usr/sbin/${INSTALLKERNEL} "$@"; fi
 fi
 
 # Default install
arch/parisc/kernel/time.c +8 -22
index 9fb1e794831b..061119a56fbe 100644
@@ -249,30 +249,16 @@ void __init time_init(void)
 static int __init init_cr16_clocksource(void)
 {
 	/*
-	 * The cr16 interval timers are not syncronized across CPUs on
-	 * different sockets, so mark them unstable and lower rating on
-	 * multi-socket SMP systems.
+	 * The cr16 interval timers are not syncronized across CPUs, even if
+	 * they share the same socket.
 	 */
 	if (num_online_cpus() > 1 && !running_on_qemu) {
-		int cpu;
-		unsigned long cpu0_loc;
-		cpu0_loc = per_cpu(cpu_data, 0).cpu_loc;
-
-		for_each_online_cpu(cpu) {
-			if (cpu == 0)
-				continue;
-			if ((cpu0_loc != 0) &&
-			    (cpu0_loc == per_cpu(cpu_data, cpu).cpu_loc))
-				continue;
-
-			/* mark sched_clock unstable */
-			clear_sched_clock_stable();
-
-			clocksource_cr16.name = "cr16_unstable";
-			clocksource_cr16.flags = CLOCK_SOURCE_UNSTABLE;
-			clocksource_cr16.rating = 0;
-			break;
-		}
+		/* mark sched_clock unstable */
+		clear_sched_clock_stable();
+
+		clocksource_cr16.name = "cr16_unstable";
+		clocksource_cr16.flags = CLOCK_SOURCE_UNSTABLE;
+		clocksource_cr16.rating = 0;
 	}
 
 	/* register at clocksource framework */
arch/powerpc/platforms/pseries/iommu.c +4 -11
index a52af8fbf571..8322ca86d5ac 100644
@@ -1092,15 +1092,6 @@ static phys_addr_t ddw_memory_hotplug_max(void)
 	phys_addr_t max_addr = memory_hotplug_max();
 	struct device_node *memory;
 
-	/*
-	 * The "ibm,pmemory" can appear anywhere in the address space.
-	 * Assuming it is still backed by page structs, set the upper limit
-	 * for the huge DMA window as MAX_PHYSMEM_BITS.
-	 */
-	if (of_find_node_by_type(NULL, "ibm,pmemory"))
-		return (sizeof(phys_addr_t) * 8 <= MAX_PHYSMEM_BITS) ?
-			(phys_addr_t) -1 : (1ULL << MAX_PHYSMEM_BITS);
-
 	for_each_node_by_type(memory, "memory") {
 		unsigned long start, size;
 		int n_mem_addr_cells, n_mem_size_cells, len;
@@ -1365,8 +1356,10 @@ static bool enable_ddw(struct pci_dev *dev, struct device_node *pdn)
 		len = order_base_2(query.largest_available_block << page_shift);
 		win_name = DMA64_PROPNAME;
 	} else {
-		direct_mapping = true;
-		win_name = DIRECT64_PROPNAME;
+		direct_mapping = !default_win_removed ||
+			(len == MAX_PHYSMEM_BITS) ||
+			(!pmem_present && (len == max_ram_len));
+		win_name = direct_mapping ? DIRECT64_PROPNAME : DMA64_PROPNAME;
 	}
 
 	ret = create_ddw(dev, ddw_avail, &create, page_shift, len);
arch/s390/include/asm/pci_io.h +4 -3
index e4dc64cc9c55..287bb88f7698 100644
@@ -14,12 +14,13 @@
 
 /* I/O Map */
 #define ZPCI_IOMAP_SHIFT		48
-#define ZPCI_IOMAP_ADDR_BASE		0x8000000000000000UL
+#define ZPCI_IOMAP_ADDR_SHIFT		62
+#define ZPCI_IOMAP_ADDR_BASE		(1UL << ZPCI_IOMAP_ADDR_SHIFT)
 #define ZPCI_IOMAP_ADDR_OFF_MASK	((1UL << ZPCI_IOMAP_SHIFT) - 1)
 #define ZPCI_IOMAP_MAX_ENTRIES							\
-	((ULONG_MAX - ZPCI_IOMAP_ADDR_BASE + 1) / (1UL << ZPCI_IOMAP_SHIFT))
+	(1UL << (ZPCI_IOMAP_ADDR_SHIFT - ZPCI_IOMAP_SHIFT))
 #define ZPCI_IOMAP_ADDR_IDX_MASK						\
-	(~ZPCI_IOMAP_ADDR_OFF_MASK - ZPCI_IOMAP_ADDR_BASE)
+	((ZPCI_IOMAP_ADDR_BASE - 1) & ~ZPCI_IOMAP_ADDR_OFF_MASK)
 
 struct zpci_iomap_entry {
 	u32 fh;
arch/s390/kernel/setup.c +0 -3
index d77269f16894..ee67215a678a 100644
@@ -816,9 +816,6 @@ static void __init setup_memory(void)
 		storage_key_init_range(start, end);
 
 	psw_set_key(PAGE_DEFAULT_KEY);
-
-	/* Only cosmetics */
-	memblock_enforce_memory_limit(memblock_end_of_DRAM());
 }
 
 static void __init relocate_amode31_section(void)
arch/x86/entry/entry_64.S +17 -18
index e38a4cf795d9..97b1f84bb53f 100644
@@ -574,6 +574,10 @@ SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL)
 	ud2
 1:
 #endif
+#ifdef CONFIG_XEN_PV
+	ALTERNATIVE "", "jmp xenpv_restore_regs_and_return_to_usermode", X86_FEATURE_XENPV
+#endif
+
 	POP_REGS pop_rdi=0
 
 	/*
@@ -890,6 +894,7 @@ SYM_CODE_START_LOCAL(paranoid_entry)
 .Lparanoid_entry_checkgs:
 	/* EBX = 1 -> kernel GSBASE active, no restore required */
 	movl	$1, %ebx
+
 	/*
 	 * The kernel-enforced convention is a negative GSBASE indicates
 	 * a kernel value. No SWAPGS needed on entry and exit.
@@ -897,21 +902,14 @@ SYM_CODE_START_LOCAL(paranoid_entry)
 	movl	$MSR_GS_BASE, %ecx
 	rdmsr
 	testl	%edx, %edx
-	jns	.Lparanoid_entry_swapgs
-	ret
+	js	.Lparanoid_kernel_gsbase
 
-.Lparanoid_entry_swapgs:
+	/* EBX = 0 -> SWAPGS required on exit */
+	xorl	%ebx, %ebx
 	swapgs
+.Lparanoid_kernel_gsbase:
 
-	/*
-	 * The above SAVE_AND_SWITCH_TO_KERNEL_CR3 macro doesn't do an
-	 * unconditional CR3 write, even in the PTI case.  So do an lfence
-	 * to prevent GS speculation, regardless of whether PTI is enabled.
-	 */
 	FENCE_SWAPGS_KERNEL_ENTRY
-
-	/* EBX = 0 -> SWAPGS required on exit */
-	xorl	%ebx, %ebx
 	ret
 SYM_CODE_END(paranoid_entry)
 
@@ -993,11 +991,6 @@ SYM_CODE_START_LOCAL(error_entry)
 	pushq	%r12
 	ret
 
-.Lerror_entry_done_lfence:
-	FENCE_SWAPGS_KERNEL_ENTRY
-.Lerror_entry_done:
-	ret
-
 	/*
 	 * There are two places in the kernel that can potentially fault with
 	 * usergs. Handle them here.  B stepping K8s sometimes report a
@@ -1020,8 +1013,14 @@ SYM_CODE_START_LOCAL(error_entry)
 	 * .Lgs_change's error handler with kernel gsbase.
 	 */
 	SWAPGS
-	FENCE_SWAPGS_USER_ENTRY
-	jmp .Lerror_entry_done
+
+	/*
+	 * Issue an LFENCE to prevent GS speculation, regardless of whether it is a
+	 * kernel or user gsbase.
+	 */
+.Lerror_entry_done_lfence:
+	FENCE_SWAPGS_KERNEL_ENTRY
+	ret
 
 .Lbstep_iret:
 	/* Fix truncated RIP */
arch/x86/hyperv/hv_init.c +1 -8
index d20eef3d452a..b6d48ca5b0f1 100644
@@ -348,20 +348,13 @@ static void __init hv_get_partition_id(void)
  */
 void __init hyperv_init(void)
 {
-	u64 guest_id, required_msrs;
+	u64 guest_id;
 	union hv_x64_msr_hypercall_contents hypercall_msr;
 	int cpuhp;
 
 	if (x86_hyper_type != X86_HYPER_MS_HYPERV)
 		return;
 
-	/* Absolutely required MSRs */
-	required_msrs = HV_MSR_HYPERCALL_AVAILABLE |
-		HV_MSR_VP_INDEX_AVAILABLE;
-
-	if ((ms_hyperv.features & required_msrs) != required_msrs)
-		return;
-
 	if (hv_common_init())
 		return;
 
arch/x86/kernel/cpu/mshyperv.c +15 -5
index e095c28d27ae..ef6316fef99f 100644
@@ -163,12 +163,22 @@ static uint32_t  __init ms_hyperv_platform(void)
 	cpuid(HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS,
 	      &eax, &hyp_signature[0], &hyp_signature[1], &hyp_signature[2]);
 
-	if (eax >= HYPERV_CPUID_MIN &&
-	    eax <= HYPERV_CPUID_MAX &&
-	    !memcmp("Microsoft Hv", hyp_signature, 12))
-		return HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS;
+	if (eax < HYPERV_CPUID_MIN || eax > HYPERV_CPUID_MAX ||
+	    memcmp("Microsoft Hv", hyp_signature, 12))
+		return 0;
 
-	return 0;
+	/* HYPERCALL and VP_INDEX MSRs are mandatory for all features. */
+	eax = cpuid_eax(HYPERV_CPUID_FEATURES);
+	if (!(eax & HV_MSR_HYPERCALL_AVAILABLE)) {
+		pr_warn("x86/hyperv: HYPERCALL MSR not available.\n");
+		return 0;
+	}
+	if (!(eax & HV_MSR_VP_INDEX_AVAILABLE)) {
+		pr_warn("x86/hyperv: VP_INDEX MSR not available.\n");
+		return 0;
+	}
+
+	return HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS;
 }
 
 static unsigned char hv_get_nmi_reason(void)
arch/x86/kernel/sev.c +39 -18

113 lines not on this page · raw message

arch/x86/kernel/tsc.c +24 -4
index 2e076a459a0c..a698196377be 100644
@@ -1180,6 +1180,12 @@ void mark_tsc_unstable(char *reason)
 
 EXPORT_SYMBOL_GPL(mark_tsc_unstable);
 
+static void __init tsc_disable_clocksource_watchdog(void)
+{
+	clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
+	clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
+}
+
 static void __init check_system_tsc_reliable(void)
 {
 #if defined(CONFIG_MGEODEGX1) || defined(CONFIG_MGEODE_LX) || defined(CONFIG_X86_GENERIC)
@@ -1196,6 +1202,23 @@ static void __init check_system_tsc_reliable(void)
 #endif
 	if (boot_cpu_has(X86_FEATURE_TSC_RELIABLE))
 		tsc_clocksource_reliable = 1;
+
+	/*
+	 * Disable the clocksource watchdog when the system has:
+	 *  - TSC running at constant frequency
+	 *  - TSC which does not stop in C-States
+	 *  - the TSC_ADJUST register which allows to detect even minimal
+	 *    modifications
+	 *  - not more than two sockets. As the number of sockets cannot be
+	 *    evaluated at the early boot stage where this has to be
+	 *    invoked, check the number of online memory nodes as a
+	 *    fallback solution which is an reasonable estimate.
+	 */
+	if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC) &&
+	    boot_cpu_has(X86_FEATURE_NONSTOP_TSC) &&
+	    boot_cpu_has(X86_FEATURE_TSC_ADJUST) &&
+	    nr_online_nodes <= 2)
+		tsc_disable_clocksource_watchdog();
 }
 
 /*
@@ -1387,9 +1410,6 @@ static int __init init_tsc_clocksource(void)
 	if (tsc_unstable)
 		goto unreg;
 
-	if (tsc_clocksource_reliable || no_tsc_watchdog)
-		clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
-
 	if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC_S3))
 		clocksource_tsc.flags |= CLOCK_SOURCE_SUSPEND_NONSTOP;
 
@@ -1527,7 +1547,7 @@ void __init tsc_init(void)
 	}
 
 	if (tsc_clocksource_reliable || no_tsc_watchdog)
-		clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
+		tsc_disable_clocksource_watchdog();
 
 	clocksource_register_khz(&clocksource_tsc_early, tsc_khz);
 	detect_art();
arch/x86/kernel/tsc_sync.c +41 -0

53 lines not on this page · raw message

arch/x86/kvm/lapic.c +1 -1
index d6ac32f3f650..95f5527646e4 100644
@@ -707,7 +707,7 @@ static void pv_eoi_clr_pending(struct kvm_vcpu *vcpu)
 static int apic_has_interrupt_for_ppr(struct kvm_lapic *apic, u32 ppr)
 {
 	int highest_irr;
-	if (apic->vcpu->arch.apicv_active)
+	if (kvm_x86_ops.sync_pir_to_irr)
 		highest_irr = static_call(kvm_x86_sync_pir_to_irr)(apic->vcpu);
 	else
 		highest_irr = apic_find_highest_irr(apic);
arch/x86/kvm/mmu/mmu.c +20 -17
index 0e0f960a0bf8..0a88cb4f731f 100644
@@ -1592,7 +1592,7 @@ bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range)
 		flush = kvm_handle_gfn_range(kvm, range, kvm_unmap_rmapp);
 
 	if (is_tdp_mmu_enabled(kvm))
-		flush |= kvm_tdp_mmu_unmap_gfn_range(kvm, range, flush);
+		flush = kvm_tdp_mmu_unmap_gfn_range(kvm, range, flush);
 
 	return flush;
 }
@@ -2188,10 +2188,10 @@ static void shadow_walk_init_using_root(struct kvm_shadow_walk_iterator *iterato
 	iterator->shadow_addr = root;
 	iterator->level = vcpu->arch.mmu->shadow_root_level;
 
-	if (iterator->level == PT64_ROOT_4LEVEL &&
+	if (iterator->level >= PT64_ROOT_4LEVEL &&
 	    vcpu->arch.mmu->root_level < PT64_ROOT_4LEVEL &&
 	    !vcpu->arch.mmu->direct_map)
-		--iterator->level;
+		iterator->level = PT32E_ROOT_LEVEL;
 
 	if (iterator->level == PT32E_ROOT_LEVEL) {
 		/*
@@ -4852,7 +4852,7 @@ void kvm_init_shadow_npt_mmu(struct kvm_vcpu *vcpu, unsigned long cr0,
 	struct kvm_mmu *context = &vcpu->arch.guest_mmu;
 	struct kvm_mmu_role_regs regs = {
 		.cr0 = cr0,
-		.cr4 = cr4,
+		.cr4 = cr4 & ~X86_CR4_PKE,
 		.efer = efer,
 	};
 	union kvm_mmu_role new_role;
@@ -4916,7 +4916,7 @@ void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
 	context->direct_map = false;
 
 	update_permission_bitmask(context, true);
-	update_pkru_bitmask(context);
+	context->pkru_mask = 0;
 	reset_rsvds_bits_mask_ept(vcpu, context, execonly);
 	reset_ept_shadow_zero_bits_mask(vcpu, context, execonly);
 }
@@ -5369,7 +5369,7 @@ void kvm_mmu_invalidate_gva(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
 
 void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva)
 {
-	kvm_mmu_invalidate_gva(vcpu, vcpu->arch.mmu, gva, INVALID_PAGE);
+	kvm_mmu_invalidate_gva(vcpu, vcpu->arch.walk_mmu, gva, INVALID_PAGE);
 	++vcpu->stat.invlpg;
 }
 EXPORT_SYMBOL_GPL(kvm_mmu_invlpg);
@@ -5474,8 +5474,8 @@ slot_handle_level(struct kvm *kvm, const struct kvm_memory_slot *memslot,
 }
 
 static __always_inline bool
-slot_handle_leaf(struct kvm *kvm, const struct kvm_memory_slot *memslot,
-		 slot_level_handler fn, bool flush_on_yield)
+slot_handle_level_4k(struct kvm *kvm, const struct kvm_memory_slot *memslot,
+		     slot_level_handler fn, bool flush_on_yield)
 {
 	return slot_handle_level(kvm, memslot, fn, PG_LEVEL_4K,
 				 PG_LEVEL_4K, flush_on_yield);
@@ -5855,21 +5855,21 @@ static bool kvm_mmu_zap_collapsible_spte(struct kvm *kvm,
 void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm,
 				   const struct kvm_memory_slot *slot)
 {
-	bool flush = false;
-
 	if (kvm_memslots_have_rmaps(kvm)) {
 		write_lock(&kvm->mmu_lock);
-		flush = slot_handle_leaf(kvm, slot, kvm_mmu_zap_collapsible_spte, true);
-		if (flush)
+		/*
+		 * Zap only 4k SPTEs since the legacy MMU only supports dirty
+		 * logging at a 4k granularity and never creates collapsible
+		 * 2m SPTEs during dirty logging.
+		 */
+		if (slot_handle_level_4k(kvm, slot, kvm_mmu_zap_collapsible_spte, true))
 			kvm_arch_flush_remote_tlbs_memslot(kvm, slot);
 		write_unlock(&kvm->mmu_lock);
 	}
 
 	if (is_tdp_mmu_enabled(kvm)) {
 		read_lock(&kvm->mmu_lock);
-		flush = kvm_tdp_mmu_zap_collapsible_sptes(kvm, slot, flush);
-		if (flush)
-			kvm_arch_flush_remote_tlbs_memslot(kvm, slot);
+		kvm_tdp_mmu_zap_collapsible_sptes(kvm, slot);
 		read_unlock(&kvm->mmu_lock);
 	}
 }
@@ -5896,8 +5896,11 @@ void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm,
 
 	if (kvm_memslots_have_rmaps(kvm)) {
 		write_lock(&kvm->mmu_lock);
-		flush = slot_handle_leaf(kvm, memslot, __rmap_clear_dirty,
-					 false);
+		/*
+		 * Clear dirty bits only on 4k SPTEs since the legacy MMU only
+		 * support dirty logging at a 4k granularity.
+		 */
+		flush = slot_handle_level_4k(kvm, memslot, __rmap_clear_dirty, false);
 		write_unlock(&kvm->mmu_lock);
 	}
 
arch/x86/kvm/mmu/tdp_mmu.c +13 -23
index 64ccfc1fa553..0e4227b59d7b 100644
@@ -316,9 +316,6 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,
 	struct kvm_mmu_page *sp = sptep_to_sp(rcu_dereference(pt));
 	int level = sp->role.level;
 	gfn_t base_gfn = sp->gfn;
-	u64 old_child_spte;
-	u64 *sptep;
-	gfn_t gfn;
 	int i;
 
 	trace_kvm_mmu_prepare_zap_page(sp);
@@ -326,8 +323,9 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,
 	tdp_mmu_unlink_page(kvm, sp, shared);
 
 	for (i = 0; i < PT64_ENT_PER_PAGE; i++) {
-		sptep = rcu_dereference(pt) + i;
-		gfn = base_gfn + i * KVM_PAGES_PER_HPAGE(level);
+		u64 *sptep = rcu_dereference(pt) + i;
+		gfn_t gfn = base_gfn + i * KVM_PAGES_PER_HPAGE(level);
+		u64 old_child_spte;
 
 		if (shared) {
 			/*
@@ -373,7 +371,7 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, tdp_ptep_t pt,
 				    shared);
 	}
 
-	kvm_flush_remote_tlbs_with_address(kvm, gfn,
+	kvm_flush_remote_tlbs_with_address(kvm, base_gfn,
 					   KVM_PAGES_PER_HPAGE(level + 1));
 
 	call_rcu(&sp->rcu_head, tdp_mmu_free_sp_rcu_callback);
@@ -1083,8 +1081,8 @@ bool kvm_tdp_mmu_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range,
 	struct kvm_mmu_page *root;
 
 	for_each_tdp_mmu_root(kvm, root, range->slot->as_id)
-		flush |= zap_gfn_range(kvm, root, range->start, range->end,
-				       range->may_block, flush, false);
+		flush = zap_gfn_range(kvm, root, range->start, range->end,
+				      range->may_block, flush, false);
 
 	return flush;
 }
@@ -1415,10 +1413,9 @@ void kvm_tdp_mmu_clear_dirty_pt_masked(struct kvm *kvm,
  * Clear leaf entries which could be replaced by large mappings, for
  * GFNs within the slot.
  */
-static bool zap_collapsible_spte_range(struct kvm *kvm,
+static void zap_collapsible_spte_range(struct kvm *kvm,
 				       struct kvm_mmu_page *root,
-				       const struct kvm_memory_slot *slot,
-				       bool flush)
+				       const struct kvm_memory_slot *slot)
 {
 	gfn_t start = slot->base_gfn;
 	gfn_t end = start + slot->npages;
@@ -1429,10 +1426,8 @@ static bool zap_collapsible_spte_range(struct kvm *kvm,
 
 	tdp_root_for_each_pte(iter, root, start, end) {
 retry:
-		if (tdp_mmu_iter_cond_resched(kvm, &iter, flush, true)) {
-			flush = false;
+		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, true))
 			continue;
-		}
 
 		if (!is_shadow_present_pte(iter.old_spte) ||
 		    !is_last_spte(iter.old_spte, iter.level))
@@ -1444,6 +1439,7 @@ static bool zap_collapsible_spte_range(struct kvm *kvm,
 							    pfn, PG_LEVEL_NUM))
 			continue;
 
+		/* Note, a successful atomic zap also does a remote TLB flush. */
 		if (!tdp_mmu_zap_spte_atomic(kvm, &iter)) {
 			/*
 			 * The iter must explicitly re-read the SPTE because
@@ -1452,30 +1448,24 @@ static bool zap_collapsible_spte_range(struct kvm *kvm,
 			iter.old_spte = READ_ONCE(*rcu_dereference(iter.sptep));
 			goto retry;
 		}
-		flush = true;
 	}
 
 	rcu_read_unlock();
-
-	return flush;
 }
 
 /*
  * Clear non-leaf entries (and free associated page tables) which could
  * be replaced by large mappings, for GFNs within the slot.
  */
-bool kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,
-				       const struct kvm_memory_slot *slot,
-				       bool flush)
+void kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,
+				       const struct kvm_memory_slot *slot)
 {
 	struct kvm_mmu_page *root;
 
 	lockdep_assert_held_read(&kvm->mmu_lock);
 
 	for_each_tdp_mmu_root_yield_safe(kvm, root, slot->as_id, true)
-		flush = zap_collapsible_spte_range(kvm, root, slot, flush);
-
-	return flush;
+		zap_collapsible_spte_range(kvm, root, slot);
 }
 
 /*
arch/x86/kvm/mmu/tdp_mmu.h +2 -3
index 358f447d4012..ba3681cd38ab 100644
@@ -66,9 +66,8 @@ void kvm_tdp_mmu_clear_dirty_pt_masked(struct kvm *kvm,
 				       struct kvm_memory_slot *slot,
 				       gfn_t gfn, unsigned long mask,
 				       bool wrprot);
-bool kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,
-				       const struct kvm_memory_slot *slot,
-				       bool flush);
+void kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,
+				       const struct kvm_memory_slot *slot);
 
 bool kvm_tdp_mmu_write_protect_gfn(struct kvm *kvm,
 				   struct kvm_memory_slot *slot, gfn_t gfn,
arch/x86/kvm/svm/avic.c +9 -7
index 8052d92069e0..2fb6a6f00290 100644
@@ -988,16 +988,18 @@ void avic_vcpu_put(struct kvm_vcpu *vcpu)
 static void avic_set_running(struct kvm_vcpu *vcpu, bool is_run)
 {
 	struct vcpu_svm *svm = to_svm(vcpu);
+	int cpu = get_cpu();
 
+	WARN_ON(cpu != vcpu->cpu);
 	svm->avic_is_running = is_run;
 
-	if (!kvm_vcpu_apicv_active(vcpu))
-		return;
-
-	if (is_run)
-		avic_vcpu_load(vcpu, vcpu->cpu);
-	else
-		avic_vcpu_put(vcpu);
+	if (kvm_vcpu_apicv_active(vcpu)) {
+		if (is_run)
+			avic_vcpu_load(vcpu, cpu);
+		else
+			avic_vcpu_put(vcpu);
+	}
+	put_cpu();
 }
 
 void svm_vcpu_blocking(struct kvm_vcpu *vcpu)
arch/x86/kvm/svm/pmu.c +1 -1
index fdf587f19c5f..e152241d1d70 100644
@@ -282,7 +282,7 @@ static void amd_pmu_refresh(struct kvm_vcpu *vcpu)
 		pmu->nr_arch_gp_counters = AMD64_NUM_COUNTERS;
 
 	pmu->counter_bitmask[KVM_PMC_GP] = ((u64)1 << 48) - 1;
-	pmu->reserved_bits = 0xffffffff00200000ull;
+	pmu->reserved_bits = 0xfffffff000280000ull;
 	pmu->version = 1;
 	/* not applicable to AMD; but clean them to prevent any fall out */
 	pmu->counter_bitmask[KVM_PMC_FIXED] = 0;
arch/x86/kvm/svm/sev.c +18 -13
index ff19ce0780fe..134c4ea5e6ad 100644
@@ -1805,6 +1805,7 @@ int svm_vm_copy_asid_from(struct kvm *kvm, unsigned int source_fd)
 	mirror_sev->fd = source_sev.fd;
 	mirror_sev->es_active = source_sev.es_active;
 	mirror_sev->handle = source_sev.handle;
+	INIT_LIST_HEAD(&mirror_sev->regions_list);
 	/*
 	 * Do not copy ap_jump_table. Since the mirror does not share the same
 	 * KVM contexts as the original, and they may have different
@@ -2316,7 +2317,7 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu)
 }
 
 #define GHCB_SCRATCH_AREA_LIMIT		(16ULL * PAGE_SIZE)
-static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
+static int setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
 {
 	struct vmcb_control_area *control = &svm->vmcb->control;
 	struct ghcb *ghcb = svm->ghcb;
@@ -2327,14 +2328,14 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
 	scratch_gpa_beg = ghcb_get_sw_scratch(ghcb);
 	if (!scratch_gpa_beg) {
 		pr_err("vmgexit: scratch gpa not provided\n");
-		return false;
+		return -EINVAL;
 	}
 
 	scratch_gpa_end = scratch_gpa_beg + len;
 	if (scratch_gpa_end < scratch_gpa_beg) {
 		pr_err("vmgexit: scratch length (%#llx) not valid for scratch address (%#llx)\n",
 		       len, scratch_gpa_beg);
-		return false;
+		return -EINVAL;
 	}
 
 	if ((scratch_gpa_beg & PAGE_MASK) == control->ghcb_gpa) {
@@ -2352,7 +2353,7 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
 		    scratch_gpa_end > ghcb_scratch_end) {
 			pr_err("vmgexit: scratch area is outside of GHCB shared buffer area (%#llx - %#llx)\n",
 			       scratch_gpa_beg, scratch_gpa_end);
-			return false;
+			return -EINVAL;
 		}
 
 		scratch_va = (void *)svm->ghcb;
@@ -2365,18 +2366,18 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
 		if (len > GHCB_SCRATCH_AREA_LIMIT) {
 			pr_err("vmgexit: scratch area exceeds KVM limits (%#llx requested, %#llx limit)\n",
 			       len, GHCB_SCRATCH_AREA_LIMIT);
-			return false;
+			return -EINVAL;
 		}
 		scratch_va = kzalloc(len, GFP_KERNEL_ACCOUNT);
 		if (!scratch_va)
-			return false;
+			return -ENOMEM;
 
 		if (kvm_read_guest(svm->vcpu.kvm, scratch_gpa_beg, scratch_va, len)) {
 			/* Unable to copy scratch area from guest */
 			pr_err("vmgexit: kvm_read_guest for scratch area failed\n");
 
 			kfree(scratch_va);
-			return false;
+			return -EFAULT;
 		}
 
 		/*
@@ -2392,7 +2393,7 @@ static bool setup_vmgexit_scratch(struct vcpu_svm *svm, bool sync, u64 len)
 	svm->ghcb_sa = scratch_va;
 	svm->ghcb_sa_len = len;
 
-	return true;
+	return 0;
 }
 
 static void set_ghcb_msr_bits(struct vcpu_svm *svm, u64 value, u64 mask,
@@ -2531,10 +2532,10 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
 	ghcb_set_sw_exit_info_1(ghcb, 0);
 	ghcb_set_sw_exit_info_2(ghcb, 0);
 
-	ret = -EINVAL;
 	switch (exit_code) {
 	case SVM_VMGEXIT_MMIO_READ:
-		if (!setup_vmgexit_scratch(svm, true, control->exit_info_2))
+		ret = setup_vmgexit_scratch(svm, true, control->exit_info_2);
+		if (ret)
 			break;
 
 		ret = kvm_sev_es_mmio_read(vcpu,
@@ -2543,7 +2544,8 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
 					   svm->ghcb_sa);
 		break;
 	case SVM_VMGEXIT_MMIO_WRITE:
-		if (!setup_vmgexit_scratch(svm, false, control->exit_info_2))
+		ret = setup_vmgexit_scratch(svm, false, control->exit_info_2);
+		if (ret)
 			break;
 
 		ret = kvm_sev_es_mmio_write(vcpu,
@@ -2586,6 +2588,7 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
 		vcpu_unimpl(vcpu,
 			    "vmgexit: unsupported event - exit_info_1=%#llx, exit_info_2=%#llx\n",
 			    control->exit_info_1, control->exit_info_2);
+		ret = -EINVAL;
 		break;
 	default:
 		ret = svm_invoke_exit_handler(vcpu, exit_code);
@@ -2598,6 +2601,7 @@ int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in)
 {
 	int count;
 	int bytes;
+	int r;
 
 	if (svm->vmcb->control.exit_info_2 > INT_MAX)
 		return -EINVAL;
@@ -2606,8 +2610,9 @@ int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in)
 	if (unlikely(check_mul_overflow(count, size, &bytes)))
 		return -EINVAL;
 
-	if (!setup_vmgexit_scratch(svm, in, bytes))
-		return -EINVAL;
+	r = setup_vmgexit_scratch(svm, in, bytes);
+	if (r)
+		return r;
 
 	return kvm_sev_es_string_io(&svm->vcpu, size, port, svm->ghcb_sa, count, in);
 }
arch/x86/kvm/svm/svm.c +0 -1
index 989685098b3e..1fce044beebe 100644
@@ -4592,7 +4592,6 @@ static struct kvm_x86_ops svm_x86_ops __initdata = {
 	.load_eoi_exitmap = svm_load_eoi_exitmap,
 	.hwapic_irr_update = svm_hwapic_irr_update,
 	.hwapic_isr_update = svm_hwapic_isr_update,
-	.sync_pir_to_irr = kvm_lapic_find_highest_irr,
 	.apicv_post_state_restore = avic_post_state_restore,
 
 	.set_tss_addr = svm_set_tss_addr,
arch/x86/kvm/vmx/nested.c +23 -26

77 lines not on this page · raw message

arch/x86/kvm/vmx/posted_intr.c +11 -9
index 5f81ef092bd4..1c94783b5a54 100644
@@ -5,6 +5,7 @@
 #include <asm/cpu.h>
 
 #include "lapic.h"
+#include "irq.h"
 #include "posted_intr.h"
 #include "trace.h"
 #include "vmx.h"
@@ -77,13 +78,18 @@ void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu)
 		pi_set_on(pi_desc);
 }
 
+static bool vmx_can_use_vtd_pi(struct kvm *kvm)
+{
+	return irqchip_in_kernel(kvm) && enable_apicv &&
+		kvm_arch_has_assigned_device(kvm) &&
+		irq_remapping_cap(IRQ_POSTING_CAP);
+}
+
 void vmx_vcpu_pi_put(struct kvm_vcpu *vcpu)
 {
 	struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
 
-	if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-		!irq_remapping_cap(IRQ_POSTING_CAP)  ||
-		!kvm_vcpu_apicv_active(vcpu))
+	if (!vmx_can_use_vtd_pi(vcpu->kvm))
 		return;
 
 	/* Set SN when the vCPU is preempted */
@@ -141,9 +147,7 @@ int pi_pre_block(struct kvm_vcpu *vcpu)
 	struct pi_desc old, new;
 	struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
 
-	if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-		!irq_remapping_cap(IRQ_POSTING_CAP)  ||
-		!kvm_vcpu_apicv_active(vcpu))
+	if (!vmx_can_use_vtd_pi(vcpu->kvm))
 		return 0;
 
 	WARN_ON(irqs_disabled());
@@ -270,9 +274,7 @@ int pi_update_irte(struct kvm *kvm, unsigned int host_irq, uint32_t guest_irq,
 	struct vcpu_data vcpu_info;
 	int idx, ret = 0;
 
-	if (!kvm_arch_has_assigned_device(kvm) ||
-	    !irq_remapping_cap(IRQ_POSTING_CAP) ||
-	    !kvm_vcpu_apicv_active(kvm->vcpus[0]))
+	if (!vmx_can_use_vtd_pi(kvm))
 		return 0;
 
 	idx = srcu_read_lock(&kvm->irq_srcu);
arch/x86/kvm/vmx/vmx.c +39 -23

107 lines not on this page · raw message

arch/x86/kvm/x86.c +33 -13

83 lines not on this page · raw message

arch/x86/kvm/x86.h +1 -6
index 9776a1db8ea8..bc7ef6820ac8 100644
@@ -103,6 +103,7 @@ static inline unsigned int __shrink_ple_window(unsigned int val,
 
 #define MSR_IA32_CR_PAT_DEFAULT  0x0007040600070406ULL
 
+void kvm_service_local_tlb_flush_requests(struct kvm_vcpu *vcpu);
 int kvm_check_nested_events(struct kvm_vcpu *vcpu);
 
 static inline void kvm_clear_exception_queue(struct kvm_vcpu *vcpu)
@@ -185,12 +186,6 @@ static inline bool mmu_is_nested(struct kvm_vcpu *vcpu)
 	return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu;
 }
 
-static inline void kvm_vcpu_flush_tlb_current(struct kvm_vcpu *vcpu)
-{
-	++vcpu->stat.tlb_flush;
-	static_call(kvm_x86_tlb_flush_current)(vcpu);
-}
-
 static inline int is_pae(struct kvm_vcpu *vcpu)
 {
 	return kvm_read_cr4_bits(vcpu, X86_CR4_PAE);
arch/x86/realmode/init.c +11 -1
index 31b5856010cb..d3eee1ebcf1d 100644
@@ -72,6 +72,7 @@ static void __init setup_real_mode(void)
 #ifdef CONFIG_X86_64
 	u64 *trampoline_pgd;
 	u64 efer;
+	int i;
 #endif
 
 	base = (unsigned char *)real_mode_header;
@@ -128,8 +129,17 @@ static void __init setup_real_mode(void)
 	trampoline_header->flags = 0;
 
 	trampoline_pgd = (u64 *) __va(real_mode_header->trampoline_pgd);
+
+	/* Map the real mode stub as virtual == physical */
 	trampoline_pgd[0] = trampoline_pgd_entry.pgd;
-	trampoline_pgd[511] = init_top_pgt[511].pgd;
+
+	/*
+	 * Include the entirety of the kernel mapping into the trampoline
+	 * PGD.  This way, all mappings present in the normal kernel page
+	 * tables are usable while running on trampoline_pgd.
+	 */
+	for (i = pgd_index(__PAGE_OFFSET); i < PTRS_PER_PGD; i++)
+		trampoline_pgd[i] = init_top_pgt[i].pgd;
 #endif
 
 	sme_sev_setup_real_mode(trampoline_header);
arch/x86/xen/xen-asm.S +20 -0
index 1e626444712b..3bebf66569b4 100644
@@ -20,6 +20,7 @@
 
 #include <linux/init.h>
 #include <linux/linkage.h>
+#include <../entry/calling.h>
 
 /*
  * Enable events.  This clears the event mask and tests the pending
@@ -191,6 +192,25 @@ SYM_CODE_START(xen_iret)
 	jmp hypercall_iret
 SYM_CODE_END(xen_iret)
 
+/*
+ * XEN pv doesn't use trampoline stack, PER_CPU_VAR(cpu_tss_rw + TSS_sp0) is
+ * also the kernel stack.  Reusing swapgs_restore_regs_and_return_to_usermode()
+ * in XEN pv would cause %rsp to move up to the top of the kernel stack and
+ * leave the IRET frame below %rsp, which is dangerous to be corrupted if #NMI
+ * interrupts. And swapgs_restore_regs_and_return_to_usermode() pushing the IRET
+ * frame at the same address is useless.
+ */
+SYM_CODE_START(xenpv_restore_regs_and_return_to_usermode)
+	UNWIND_HINT_REGS
+	POP_REGS
+
+	/* stackleak_erase() can work safely on the kernel stack. */
+	STACKLEAK_ERASE_NOCLOBBER
+
+	addq	$8, %rsp	/* skip regs->orig_ax */
+	jmp xen_iret
+SYM_CODE_END(xenpv_restore_regs_and_return_to_usermode)
+
 /*
  * Xen handles syscall callbacks much like ordinary exceptions, which
  * means we have:
drivers/ata/ahci.c +1 -0
index 186cbf90c8ea..812731e80f8e 100644
@@ -442,6 +442,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
 	/* AMD */
 	{ PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */
 	{ PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */
+	{ PCI_VDEVICE(AMD, 0x7901), board_ahci_mobile }, /* AMD Green Sardine */
 	/* AMD is using RAID class only for ahci controllers */
 	{ PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
 	  PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
drivers/ata/libahci.c +15 -0
index 5b3fa2cbe722..395772fa3943 100644
@@ -2305,6 +2305,18 @@ int ahci_port_resume(struct ata_port *ap)
 EXPORT_SYMBOL_GPL(ahci_port_resume);
 
 #ifdef CONFIG_PM
+static void ahci_handle_s2idle(struct ata_port *ap)
+{
+	void __iomem *port_mmio = ahci_port_base(ap);
+	u32 devslp;
+
+	if (pm_suspend_via_firmware())
+		return;
+	devslp = readl(port_mmio + PORT_DEVSLP);
+	if ((devslp & PORT_DEVSLP_ADSE))
+		ata_msleep(ap, devslp_idle_timeout);
+}
+
 static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
 {
 	const char *emsg = NULL;
@@ -2318,6 +2330,9 @@ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
 		ata_port_freeze(ap);
 	}
 
+	if (acpi_storage_d3(ap->host->dev))
+		ahci_handle_s2idle(ap);
+
 	ahci_rpm_put_port(ap);
 	return rc;
 }
drivers/ata/sata_fsl.c +13 -7
index e5838b23c9e0..3b31a4f596d8 100644
@@ -1394,6 +1394,14 @@ static int sata_fsl_init_controller(struct ata_host *host)
 	return 0;
 }
 
+static void sata_fsl_host_stop(struct ata_host *host)
+{
+        struct sata_fsl_host_priv *host_priv = host->private_data;
+
+        iounmap(host_priv->hcr_base);
+        kfree(host_priv);
+}
+
 /*
  * scsi mid-layer and libata interface structures
  */
@@ -1426,6 +1434,8 @@ static struct ata_port_operations sata_fsl_ops = {
 	.port_start = sata_fsl_port_start,
 	.port_stop = sata_fsl_port_stop,
 
+	.host_stop      = sata_fsl_host_stop,
+
 	.pmp_attach = sata_fsl_pmp_attach,
 	.pmp_detach = sata_fsl_pmp_detach,
 };
@@ -1480,9 +1490,9 @@ static int sata_fsl_probe(struct platform_device *ofdev)
 	host_priv->ssr_base = ssr_base;
 	host_priv->csr_base = csr_base;
 
-	irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
-	if (!irq) {
-		dev_err(&ofdev->dev, "invalid irq from platform\n");
+	irq = platform_get_irq(ofdev, 0);
+	if (irq < 0) {
+		retval = irq;
 		goto error_exit_with_cleanup;
 	}
 	host_priv->irq = irq;
@@ -1557,10 +1567,6 @@ static int sata_fsl_remove(struct platform_device *ofdev)
 
 	ata_host_detach(host);
 
-	irq_dispose_mapping(host_priv->irq);
-	iounmap(host_priv->hcr_base);
-	kfree(host_priv);
-
 	return 0;
 }
 
drivers/char/ipmi/ipmi_msghandler.c +12 -1
index a08f53f208bf..b404cc46cbda 100644
@@ -191,6 +191,8 @@ struct ipmi_user {
 	struct work_struct remove_work;
 };
 
+static struct workqueue_struct *remove_work_wq;
+
 static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user, int *index)
 	__acquires(user->release_barrier)
 {
@@ -1261,7 +1263,7 @@ static void free_user(struct kref *ref)
 	struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);
 
 	/* SRCU cleanup must happen in task context. */
-	schedule_work(&user->remove_work);
+	queue_work(remove_work_wq, &user->remove_work);
 }
 
 static void _ipmi_destroy_user(struct ipmi_user *user)
@@ -5153,6 +5155,13 @@ static int ipmi_init_msghandler(void)
 
 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
 
+	remove_work_wq = create_singlethread_workqueue("ipmi-msghandler-remove-wq");
+	if (!remove_work_wq) {
+		pr_err("unable to create ipmi-msghandler-remove-wq workqueue");
+		rv = -ENOMEM;
+		goto out;
+	}
+
 	initialized = true;
 
 out:
@@ -5178,6 +5187,8 @@ static void __exit cleanup_ipmi(void)
 	int count;
 
 	if (initialized) {
+		destroy_workqueue(remove_work_wq);
+
 		atomic_notifier_chain_unregister(&panic_notifier_list,
 						 &panic_block);
 
drivers/cpufreq/cpufreq.c +4 -5
index 284e940084c6..fcb44352623e 100644
@@ -1004,10 +1004,9 @@ static struct kobj_type ktype_cpufreq = {
 	.release	= cpufreq_sysfs_release,
 };
 
-static void add_cpu_dev_symlink(struct cpufreq_policy *policy, unsigned int cpu)
+static void add_cpu_dev_symlink(struct cpufreq_policy *policy, unsigned int cpu,
+				struct device *dev)
 {
-	struct device *dev = get_cpu_device(cpu);
-
 	if (unlikely(!dev))
 		return;
 
@@ -1391,7 +1390,7 @@ static int cpufreq_online(unsigned int cpu)
 	if (new_policy) {
 		for_each_cpu(j, policy->related_cpus) {
 			per_cpu(cpufreq_cpu_data, j) = policy;
-			add_cpu_dev_symlink(policy, j);
+			add_cpu_dev_symlink(policy, j, get_cpu_device(j));
 		}
 
 		policy->min_freq_req = kzalloc(2 * sizeof(*policy->min_freq_req),
@@ -1565,7 +1564,7 @@ static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
 	/* Create sysfs link on CPU registration */
 	policy = per_cpu(cpufreq_cpu_data, cpu);
 	if (policy)
-		add_cpu_dev_symlink(policy, cpu);
+		add_cpu_dev_symlink(policy, cpu, dev);
 
 	return 0;
 }
drivers/dma-buf/heaps/system_heap.c +1 -1
index 23a7e74ef966..8660508f3684 100644
@@ -289,7 +289,7 @@ static void system_heap_dma_buf_release(struct dma_buf *dmabuf)
 	int i;
 
 	table = &buffer->sg_table;
-	for_each_sg(table->sgl, sg, table->nents, i) {
+	for_each_sgtable_sg(table, sg, i) {
 		struct page *page = sg_page(sg);
 
 		__free_pages(page, compound_order(page));
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +1 -0
index 978ac927ac11..a799e0b1ff73 100644
@@ -386,6 +386,7 @@ struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev)
 			"%s", "xgmi_hive_info");
 	if (ret) {
 		dev_err(adev->dev, "XGMI: failed initializing kobject for xgmi hive\n");
+		kobject_put(&hive->kobj);
 		kfree(hive);
 		hive = NULL;
 		goto pro_end;
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +5 -0
index f8fce9d05f50..4f2e0cc8a51a 100644
@@ -1225,6 +1225,11 @@ static int stop_cpsch(struct device_queue_manager *dqm)
 	bool hanging;
 
 	dqm_lock(dqm);
+	if (!dqm->sched_running) {
+		dqm_unlock(dqm);
+		return 0;
+	}
+
 	if (!dqm->is_hws_hang)
 		unmap_queues_cpsch(dqm, KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES, 0);
 	hanging = dqm->is_hws_hang || dqm->is_resetting;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +16 -4
index 7af0d58c231b..74885ff77f96 100644
@@ -36,6 +36,8 @@
 #include "dm_helpers.h"
 
 #include "dc_link_ddc.h"
+#include "ddc_service_types.h"
+#include "dpcd_defs.h"
 
 #include "i2caux_interface.h"
 #include "dmub_cmd.h"
@@ -155,6 +157,16 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
 };
 
 #if defined(CONFIG_DRM_AMD_DC_DCN)
+static bool needs_dsc_aux_workaround(struct dc_link *link)
+{
+	if (link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 &&
+	    (link->dpcd_caps.dpcd_rev.raw == DPCD_REV_14 || link->dpcd_caps.dpcd_rev.raw == DPCD_REV_12) &&
+	    link->dpcd_caps.sink_count.bits.SINK_COUNT >= 2)
+		return true;
+
+	return false;
+}
+
 static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnector)
 {
 	struct dc_sink *dc_sink = aconnector->dc_sink;
@@ -164,7 +176,7 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto
 	u8 *dsc_branch_dec_caps = NULL;
 
 	aconnector->dsc_aux = drm_dp_mst_dsc_aux_for_port(port);
-#if defined(CONFIG_HP_HOOK_WORKAROUND)
+
 	/*
 	 * drm_dp_mst_dsc_aux_for_port() will return NULL for certain configs
 	 * because it only check the dsc/fec caps of the "port variable" and not the dock
@@ -174,10 +186,10 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto
 	 * Workaround: explicitly check the use case above and use the mst dock's aux as dsc_aux
 	 *
 	 */
-
-	if (!aconnector->dsc_aux && !port->parent->port_parent)
+	if (!aconnector->dsc_aux && !port->parent->port_parent &&
+	    needs_dsc_aux_workaround(aconnector->dc_link))
 		aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux;
-#endif
+
 	if (!aconnector->dsc_aux)
 		return false;
 
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +8 -5
index b1ad451af06b..dfba0bc73207 100644
@@ -1265,7 +1265,7 @@ static int navi10_print_clk_levels(struct smu_context *smu,
 			enum smu_clk_type clk_type, char *buf)
 {
 	uint16_t *curve_settings;
-	int i, size = 0, ret = 0;
+	int i, levels, size = 0, ret = 0;
 	uint32_t cur_value = 0, value = 0, count = 0;
 	uint32_t freq_values[3] = {0};
 	uint32_t mark_index = 0;
@@ -1319,14 +1319,17 @@ static int navi10_print_clk_levels(struct smu_context *smu,
 			freq_values[1] = cur_value;
 			mark_index = cur_value == freq_values[0] ? 0 :
 				     cur_value == freq_values[2] ? 2 : 1;
-			if (mark_index != 1)
-				freq_values[1] = (freq_values[0] + freq_values[2]) / 2;
 
-			for (i = 0; i < 3; i++) {
+			levels = 3;
+			if (mark_index != 1) {
+				levels = 2;
+				freq_values[1] = freq_values[2];
+			}
+
+			for (i = 0; i < levels; i++) {
 				size += sysfs_emit_at(buf, size, "%d: %uMhz %s\n", i, freq_values[i],
 						i == mark_index ? "*" : "");
 			}
-
 		}
 		break;
 	case SMU_PCIE:
drivers/gpu/drm/i915/display/intel_display_types.h +3 -0
index 6beeeeba1bed..b56850d96491 100644
@@ -1639,6 +1639,9 @@ struct intel_dp {
 	struct intel_dp_pcon_frl frl;
 
 	struct intel_psr psr;
+
+	/* When we last wrote the OUI for eDP */
+	unsigned long last_oui_write;
 };
 
 enum lspcon_vendor {
drivers/gpu/drm/i915/display/intel_dp.c +11 -0
index b4c7355f89b6..d55363f1fa10 100644
@@ -29,6 +29,7 @@
 #include <linux/i2c.h>
 #include <linux/notifier.h>
 #include <linux/slab.h>
+#include <linux/timekeeping.h>
 #include <linux/types.h>
 
 #include <asm/byteorder.h>
@@ -1864,6 +1865,16 @@ intel_edp_init_source_oui(struct intel_dp *intel_dp, bool careful)
 
 	if (drm_dp_dpcd_write(&intel_dp->aux, DP_SOURCE_OUI, oui, sizeof(oui)) < 0)
 		drm_err(&i915->drm, "Failed to write source OUI\n");
+
+	intel_dp->last_oui_write = jiffies;
+}
+
+void intel_dp_wait_source_oui(struct intel_dp *intel_dp)
+{
+	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+
+	drm_dbg_kms(&i915->drm, "Performing OUI wait\n");
+	wait_remaining_ms_from_jiffies(intel_dp->last_oui_write, 30);
 }
 
 /* If the device supports it, try to set the power state appropriately */
drivers/gpu/drm/i915/display/intel_dp.h +2 -0
index 680631b5b437..2121aaa9b8db 100644
@@ -129,4 +129,6 @@ void intel_dp_pcon_dsc_configure(struct intel_dp *intel_dp,
 				 const struct intel_crtc_state *crtc_state);
 void intel_dp_phy_test(struct intel_encoder *encoder);
 
+void intel_dp_wait_source_oui(struct intel_dp *intel_dp);
+
 #endif /* __INTEL_DP_H__ */
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +5 -0
index 6ac568617ef3..c82f8febe730 100644
@@ -35,6 +35,7 @@
  */
 
 #include "intel_display_types.h"
+#include "intel_dp.h"
 #include "intel_dp_aux_backlight.h"
 #include "intel_panel.h"
 
@@ -106,6 +107,8 @@ intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector)
 	int ret;
 	u8 tcon_cap[4];
 
+	intel_dp_wait_source_oui(intel_dp);
+
 	ret = drm_dp_dpcd_read(aux, INTEL_EDP_HDR_TCON_CAP0, tcon_cap, sizeof(tcon_cap));
 	if (ret != sizeof(tcon_cap))
 		return false;
@@ -204,6 +207,8 @@ intel_dp_aux_hdr_enable_backlight(const struct intel_crtc_state *crtc_state,
 	int ret;
 	u8 old_ctrl, ctrl;
 
+	intel_dp_wait_source_oui(intel_dp);
+
 	ret = drm_dp_dpcd_readb(&intel_dp->aux, INTEL_EDP_HDR_GETSET_CTRL_PARAMS, &old_ctrl);
 	if (ret != 1) {
 		drm_err(&i915->drm, "Failed to read current backlight control mode: %d\n", ret);
drivers/gpu/drm/i915/gt/intel_workarounds.c +0 -7
index aae609d7d85d..6b5ab19a2ada 100644
@@ -621,13 +621,6 @@ static void gen12_ctx_workarounds_init(struct intel_engine_cs *engine,
 	       FF_MODE2_GS_TIMER_MASK,
 	       FF_MODE2_GS_TIMER_224,
 	       0, false);
-
-	/*
-	 * Wa_14012131227:dg1
-	 * Wa_1508744258:tgl,rkl,dg1,adl-s,adl-p
-	 */
-	wa_masked_en(wal, GEN7_COMMON_SLICE_CHICKEN1,
-		     GEN9_RHWO_OPTIMIZATION_DISABLE);
 }
 
 static void dg1_ctx_workarounds_init(struct intel_engine_cs *engine,
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +2 -2
index e8f65cd8eca6..bfac7e47cb39 100644
@@ -777,12 +777,12 @@ static void a6xx_get_gmu_registers(struct msm_gpu *gpu,
 	struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
 
 	a6xx_state->gmu_registers = state_kcalloc(a6xx_state,
-		2, sizeof(*a6xx_state->gmu_registers));
+		3, sizeof(*a6xx_state->gmu_registers));
 
 	if (!a6xx_state->gmu_registers)
 		return;
 
-	a6xx_state->nr_gmu_registers = 2;
+	a6xx_state->nr_gmu_registers = 3;
 
 	/* Get the CX GMU registers from AHB */
 	_a6xx_get_gmu_registers(gpu, a6xx_state, &a6xx_gmu_reglist[0],
drivers/gpu/drm/msm/msm_debugfs.c +1 -0
index 09d2d279c30a..dee13fedee3b 100644
@@ -77,6 +77,7 @@ static int msm_gpu_open(struct inode *inode, struct file *file)
 		goto free_priv;
 
 	pm_runtime_get_sync(&gpu->pdev->dev);
+	msm_gpu_hw_init(gpu);
 	show_priv->state = gpu->funcs->gpu_state_get(gpu);
 	pm_runtime_put_sync(&gpu->pdev->dev);
 
drivers/gpu/drm/msm/msm_drv.c +32 -17

74 lines not on this page · raw message

drivers/gpu/drm/msm/msm_gem.c +1 -2
index bd6ec04f345e..cb52ac01e512 100644
@@ -1055,8 +1055,7 @@ static int msm_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct
 {
 	struct msm_gem_object *msm_obj = to_msm_bo(obj);
 
-	vma->vm_flags &= ~VM_PFNMAP;
-	vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
+	vma->vm_flags |= VM_IO | VM_MIXEDMAP | VM_DONTEXPAND | VM_DONTDUMP;
 	vma->vm_page_prot = msm_gem_pgprot(msm_obj, vm_get_page_prot(vma->vm_flags));
 
 	return 0;
drivers/gpu/drm/msm/msm_gem_submit.c +1 -0
index 151d19e4453c..a38f23be497d 100644
@@ -911,6 +911,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 	drm_sched_entity_push_job(&submit->base, queue->entity);
 
 	args->fence = submit->fence_id;
+	queue->last_fence = submit->fence_id;
 
 	msm_reset_syncobjs(syncobjs_to_reset, args->nr_in_syncobjs);
 	msm_process_post_deps(post_deps, args->nr_out_syncobjs,
drivers/gpu/drm/msm/msm_gpu.h +3 -0
index ee25d556c8a1..2e2424066e70 100644
@@ -352,6 +352,8 @@ static inline int msm_gpu_convert_priority(struct msm_gpu *gpu, int prio,
  * @ring_nr:   the ringbuffer used by this submitqueue, which is determined
  *             by the submitqueue's priority
  * @faults:    the number of GPU hangs associated with this submitqueue
+ * @last_fence: the sequence number of the last allocated fence (for error
+ *             checking)
  * @ctx:       the per-drm_file context associated with the submitqueue (ie.
  *             which set of pgtables do submits jobs associated with the
  *             submitqueue use)
@@ -367,6 +369,7 @@ struct msm_gpu_submitqueue {
 	u32 flags;
 	u32 ring_nr;
 	int faults;
+	uint32_t last_fence;
 	struct msm_file_private *ctx;
 	struct list_head node;
 	struct idr fence_idr;
drivers/gpu/drm/msm/msm_gpu_devfreq.c +5 -0
index 20006d060b5b..4ac2a4eb984d 100644
@@ -20,6 +20,10 @@ static int msm_devfreq_target(struct device *dev, unsigned long *freq,
 	struct msm_gpu *gpu = dev_to_gpu(dev);
 	struct dev_pm_opp *opp;
 
+	/*
+	 * Note that devfreq_recommended_opp() can modify the freq
+	 * to something that actually is in the opp table:
+	 */
 	opp = devfreq_recommended_opp(dev, freq, flags);
 
 	/*
@@ -28,6 +32,7 @@ static int msm_devfreq_target(struct device *dev, unsigned long *freq,
 	 */
 	if (gpu->devfreq.idle_freq) {
 		gpu->devfreq.idle_freq = *freq;
+		dev_pm_opp_put(opp);
 		return 0;
 	}
 
drivers/gpu/drm/sun4i/Kconfig +1 -0
index 5755f0432e77..8c796de53222 100644
@@ -46,6 +46,7 @@ config DRM_SUN6I_DSI
 	default MACH_SUN8I
 	select CRC_CCITT
 	select DRM_MIPI_DSI
+	select RESET_CONTROLLER
 	select PHY_SUN6I_MIPI_DPHY
 	help
 	  Choose this option if you want have an Allwinner SoC with
drivers/gpu/drm/vc4/vc4_kms.c +18 -22
index f0b3e4cf5bce..b61792d2aa65 100644
@@ -337,10 +337,10 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)
 	struct drm_device *dev = state->dev;
 	struct vc4_dev *vc4 = to_vc4_dev(dev);
 	struct vc4_hvs *hvs = vc4->hvs;
-	struct drm_crtc_state *old_crtc_state;
 	struct drm_crtc_state *new_crtc_state;
 	struct drm_crtc *crtc;
 	struct vc4_hvs_state *old_hvs_state;
+	unsigned int channel;
 	int i;
 
 	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
@@ -353,30 +353,32 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)
 		vc4_hvs_mask_underrun(dev, vc4_crtc_state->assigned_channel);
 	}
 
-	if (vc4->hvs->hvs5)
-		clk_set_min_rate(hvs->core_clk, 500000000);
-
 	old_hvs_state = vc4_hvs_get_old_global_state(state);
-	if (!old_hvs_state)
+	if (IS_ERR(old_hvs_state))
 		return;
 
-	for_each_old_crtc_in_state(state, crtc, old_crtc_state, i) {
-		struct vc4_crtc_state *vc4_crtc_state =
-			to_vc4_crtc_state(old_crtc_state);
-		unsigned int channel = vc4_crtc_state->assigned_channel;
+	for (channel = 0; channel < HVS_NUM_CHANNELS; channel++) {
+		struct drm_crtc_commit *commit;
 		int ret;
 
-		if (channel == VC4_HVS_CHANNEL_DISABLED)
+		if (!old_hvs_state->fifo_state[channel].in_use)
 			continue;
 
-		if (!old_hvs_state->fifo_state[channel].in_use)
+		commit = old_hvs_state->fifo_state[channel].pending_commit;
+		if (!commit)
 			continue;
 
-		ret = drm_crtc_commit_wait(old_hvs_state->fifo_state[channel].pending_commit);
+		ret = drm_crtc_commit_wait(commit);
 		if (ret)
 			drm_err(dev, "Timed out waiting for commit\n");
+
+		drm_crtc_commit_put(commit);
+		old_hvs_state->fifo_state[channel].pending_commit = NULL;
 	}
 
+	if (vc4->hvs->hvs5)
+		clk_set_min_rate(hvs->core_clk, 500000000);
+
 	drm_atomic_helper_commit_modeset_disables(dev, state);
 
 	vc4_ctm_commit(vc4, state);
@@ -410,8 +412,8 @@ static int vc4_atomic_commit_setup(struct drm_atomic_state *state)
 	unsigned int i;
 
 	hvs_state = vc4_hvs_get_new_global_state(state);
-	if (!hvs_state)
-		return -EINVAL;
+	if (WARN_ON(IS_ERR(hvs_state)))
+		return PTR_ERR(hvs_state);
 
 	for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
 		struct vc4_crtc_state *vc4_crtc_state =
@@ -668,12 +670,6 @@ vc4_hvs_channels_duplicate_state(struct drm_private_obj *obj)
 
 	for (i = 0; i < HVS_NUM_CHANNELS; i++) {
 		state->fifo_state[i].in_use = old_state->fifo_state[i].in_use;
-
-		if (!old_state->fifo_state[i].pending_commit)
-			continue;
-
-		state->fifo_state[i].pending_commit =
-			drm_crtc_commit_get(old_state->fifo_state[i].pending_commit);
 	}
 
 	return &state->base;
@@ -762,8 +758,8 @@ static int vc4_pv_muxing_atomic_check(struct drm_device *dev,
 	unsigned int i;
 
 	hvs_new_state = vc4_hvs_get_global_state(state);
-	if (!hvs_new_state)
-		return -EINVAL;
+	if (IS_ERR(hvs_new_state))
+		return PTR_ERR(hvs_new_state);
 
 	for (i = 0; i < ARRAY_SIZE(hvs_new_state->fifo_state); i++)
 		if (!hvs_new_state->fifo_state[i].in_use)
drivers/i2c/busses/i2c-cbus-gpio.c +3 -2
index 72df563477b1..f8639a4457d2 100644
@@ -195,8 +195,9 @@ static u32 cbus_i2c_func(struct i2c_adapter *adapter)
 }
 
 static const struct i2c_algorithm cbus_i2c_algo = {
-	.smbus_xfer	= cbus_i2c_smbus_xfer,
-	.functionality	= cbus_i2c_func,
+	.smbus_xfer		= cbus_i2c_smbus_xfer,
+	.smbus_xfer_atomic	= cbus_i2c_smbus_xfer,
+	.functionality		= cbus_i2c_func,
 };
 
 static int cbus_i2c_remove(struct platform_device *pdev)
drivers/i2c/busses/i2c-stm32f7.c +28 -3
index b9b19a2a2ffa..50d5ae81d227 100644
@@ -1493,6 +1493,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
 {
 	struct stm32f7_i2c_dev *i2c_dev = data;
 	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+	struct stm32_i2c_dma *dma = i2c_dev->dma;
 	void __iomem *base = i2c_dev->base;
 	u32 status, mask;
 	int ret = IRQ_HANDLED;
@@ -1518,6 +1519,10 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
 		dev_dbg(i2c_dev->dev, "<%s>: Receive NACK (addr %x)\n",
 			__func__, f7_msg->addr);
 		writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
+		if (i2c_dev->use_dma) {
+			stm32f7_i2c_disable_dma_req(i2c_dev);
+			dmaengine_terminate_all(dma->chan_using);
+		}
 		f7_msg->result = -ENXIO;
 	}
 
@@ -1533,7 +1538,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
 		/* Clear STOP flag */
 		writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
 
-		if (i2c_dev->use_dma) {
+		if (i2c_dev->use_dma && !f7_msg->result) {
 			ret = IRQ_WAKE_THREAD;
 		} else {
 			i2c_dev->master_mode = false;
@@ -1546,7 +1551,7 @@ static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
 		if (f7_msg->stop) {
 			mask = STM32F7_I2C_CR2_STOP;
 			stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
-		} else if (i2c_dev->use_dma) {
+		} else if (i2c_dev->use_dma && !f7_msg->result) {
 			ret = IRQ_WAKE_THREAD;
 		} else if (f7_msg->smbus) {
 			stm32f7_i2c_smbus_rep_start(i2c_dev);
@@ -1696,12 +1701,23 @@ static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
 	time_left = wait_for_completion_timeout(&i2c_dev->complete,
 						i2c_dev->adap.timeout);
 	ret = f7_msg->result;
+	if (ret) {
+		/*
+		 * It is possible that some unsent data have already been
+		 * written into TXDR. To avoid sending old data in a
+		 * further transfer, flush TXDR in case of any error
+		 */
+		writel_relaxed(STM32F7_I2C_ISR_TXE,
+			       i2c_dev->base + STM32F7_I2C_ISR);
+		goto pm_free;
+	}
 
 	if (!time_left) {
 		dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
 			i2c_dev->msg->addr);
 		if (i2c_dev->use_dma)
 			dmaengine_terminate_all(dma->chan_using);
+		stm32f7_i2c_wait_free_bus(i2c_dev);
 		ret = -ETIMEDOUT;
 	}
 
@@ -1744,13 +1760,22 @@ static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
 	timeout = wait_for_completion_timeout(&i2c_dev->complete,
 					      i2c_dev->adap.timeout);
 	ret = f7_msg->result;
-	if (ret)
+	if (ret) {
+		/*
+		 * It is possible that some unsent data have already been
+		 * written into TXDR. To avoid sending old data in a
+		 * further transfer, flush TXDR in case of any error
+		 */
+		writel_relaxed(STM32F7_I2C_ISR_TXE,
+			       i2c_dev->base + STM32F7_I2C_ISR);
 		goto pm_free;
+	}
 
 	if (!timeout) {
 		dev_dbg(dev, "Access to slave 0x%x timed out\n", f7_msg->addr);
 		if (i2c_dev->use_dma)
 			dmaengine_terminate_all(dma->chan_using);
+		stm32f7_i2c_wait_free_bus(i2c_dev);
 		ret = -ETIMEDOUT;
 		goto pm_free;
 	}
drivers/net/dsa/b53/b53_spi.c +14 -0
index 01e37b75471e..2b88f03e5252 100644
@@ -349,6 +349,19 @@ static const struct of_device_id b53_spi_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, b53_spi_of_match);
 
+static const struct spi_device_id b53_spi_ids[] = {
+	{ .name = "bcm5325" },
+	{ .name = "bcm5365" },
+	{ .name = "bcm5395" },
+	{ .name = "bcm5397" },
+	{ .name = "bcm5398" },
+	{ .name = "bcm53115" },
+	{ .name = "bcm53125" },
+	{ .name = "bcm53128" },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(spi, b53_spi_ids);
+
 static struct spi_driver b53_spi_driver = {
 	.driver = {
 		.name	= "b53-switch",
@@ -357,6 +370,7 @@ static struct spi_driver b53_spi_driver = {
 	.probe	= b53_spi_probe,
 	.remove	= b53_spi_remove,
 	.shutdown = b53_spi_shutdown,
+	.id_table = b53_spi_ids,
 };
 
 module_spi_driver(b53_spi_driver);
drivers/net/dsa/mv88e6xxx/serdes.c +220 -32

342 lines not on this page · raw message

drivers/net/dsa/mv88e6xxx/serdes.h +4 -0
index cbb3ba30caea..8dd8ed225b45 100644
@@ -93,6 +93,10 @@
 #define MV88E6393X_SERDES_POC_PCS_MASK		0x0007
 #define MV88E6393X_SERDES_POC_RESET		BIT(15)
 #define MV88E6393X_SERDES_POC_PDOWN		BIT(5)
+#define MV88E6393X_SERDES_POC_AN		BIT(3)
+#define MV88E6393X_SERDES_CTRL1			0xf003
+#define MV88E6393X_SERDES_CTRL1_TX_PDOWN	BIT(9)
+#define MV88E6393X_SERDES_CTRL1_RX_PDOWN	BIT(8)
 
 #define MV88E6393X_ERRATA_4_8_REG		0xF074
 #define MV88E6393X_ERRATA_4_8_BIT		BIT(14)
drivers/net/ethernet/aquantia/atlantic/aq_common.h +14 -13
index 23b2d390fcdd..ace691d7cd75 100644
@@ -40,10 +40,12 @@
 
 #define AQ_DEVICE_ID_AQC113DEV	0x00C0
 #define AQ_DEVICE_ID_AQC113CS	0x94C0
+#define AQ_DEVICE_ID_AQC113CA	0x34C0
 #define AQ_DEVICE_ID_AQC114CS	0x93C0
 #define AQ_DEVICE_ID_AQC113	0x04C0
 #define AQ_DEVICE_ID_AQC113C	0x14C0
 #define AQ_DEVICE_ID_AQC115C	0x12C0
+#define AQ_DEVICE_ID_AQC116C	0x11C0
 
 #define HW_ATL_NIC_NAME "Marvell (aQuantia) AQtion 10Gbit Network Adapter"
 
@@ -53,20 +55,19 @@
 
 #define AQ_NIC_RATE_10G		BIT(0)
 #define AQ_NIC_RATE_5G		BIT(1)
-#define AQ_NIC_RATE_5GSR	BIT(2)
-#define AQ_NIC_RATE_2G5		BIT(3)
-#define AQ_NIC_RATE_1G		BIT(4)
-#define AQ_NIC_RATE_100M	BIT(5)
-#define AQ_NIC_RATE_10M		BIT(6)
-#define AQ_NIC_RATE_1G_HALF	BIT(7)
-#define AQ_NIC_RATE_100M_HALF	BIT(8)
-#define AQ_NIC_RATE_10M_HALF	BIT(9)
+#define AQ_NIC_RATE_2G5		BIT(2)
+#define AQ_NIC_RATE_1G		BIT(3)
+#define AQ_NIC_RATE_100M	BIT(4)
+#define AQ_NIC_RATE_10M		BIT(5)
+#define AQ_NIC_RATE_1G_HALF	BIT(6)
+#define AQ_NIC_RATE_100M_HALF	BIT(7)
+#define AQ_NIC_RATE_10M_HALF	BIT(8)
 
-#define AQ_NIC_RATE_EEE_10G	BIT(10)
-#define AQ_NIC_RATE_EEE_5G	BIT(11)
-#define AQ_NIC_RATE_EEE_2G5	BIT(12)
-#define AQ_NIC_RATE_EEE_1G	BIT(13)
-#define AQ_NIC_RATE_EEE_100M	BIT(14)
+#define AQ_NIC_RATE_EEE_10G	BIT(9)
+#define AQ_NIC_RATE_EEE_5G	BIT(10)
+#define AQ_NIC_RATE_EEE_2G5	BIT(11)
+#define AQ_NIC_RATE_EEE_1G	BIT(12)
+#define AQ_NIC_RATE_EEE_100M	BIT(13)
 #define AQ_NIC_RATE_EEE_MSK     (AQ_NIC_RATE_EEE_10G |\
 				 AQ_NIC_RATE_EEE_5G |\
 				 AQ_NIC_RATE_EEE_2G5 |\
drivers/net/ethernet/aquantia/atlantic/aq_hw.h +2 -0
index bed481816ea3..7442850ca95f 100644
@@ -80,6 +80,8 @@ struct aq_hw_link_status_s {
 };
 
 struct aq_stats_s {
+	u64 brc;
+	u64 btc;
 	u64 uprc;
 	u64 mprc;
 	u64 bprc;
drivers/net/ethernet/aquantia/atlantic/aq_nic.c +8 -2
index 6c049864dac0..9de0065f89b9 100644
@@ -903,8 +903,14 @@ u64 *aq_nic_get_stats(struct aq_nic_s *self, u64 *data)
 	data[++i] = stats->mbtc;
 	data[++i] = stats->bbrc;
 	data[++i] = stats->bbtc;
-	data[++i] = stats->ubrc + stats->mbrc + stats->bbrc;
-	data[++i] = stats->ubtc + stats->mbtc + stats->bbtc;
+	if (stats->brc)
+		data[++i] = stats->brc;
+	else
+		data[++i] = stats->ubrc + stats->mbrc + stats->bbrc;
+	if (stats->btc)
+		data[++i] = stats->btc;
+	else
+		data[++i] = stats->ubtc + stats->mbtc + stats->bbtc;
 	data[++i] = stats->dma_pkt_rc;
 	data[++i] = stats->dma_pkt_tc;
 	data[++i] = stats->dma_oct_rc;
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +6 -1
index d4b1976ee69b..797a95142d1f 100644
@@ -49,6 +49,8 @@ static const struct pci_device_id aq_pci_tbl[] = {
 	{ PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113), },
 	{ PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113C), },
 	{ PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC115C), },
+	{ PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113CA), },
+	{ PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC116C), },
 
 	{}
 };
@@ -85,7 +87,10 @@ static const struct aq_board_revision_s hw_atl_boards[] = {
 	{ AQ_DEVICE_ID_AQC113CS,	AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc113, },
 	{ AQ_DEVICE_ID_AQC114CS,	AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc113, },
 	{ AQ_DEVICE_ID_AQC113C,		AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc113, },
-	{ AQ_DEVICE_ID_AQC115C,		AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc113, },
+	{ AQ_DEVICE_ID_AQC115C,		AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc115c, },
+	{ AQ_DEVICE_ID_AQC113CA,	AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc113, },
+	{ AQ_DEVICE_ID_AQC116C,		AQ_HWREV_ANY,	&hw_atl2_ops, &hw_atl2_caps_aqc116c, },
+
 };
 
 MODULE_DEVICE_TABLE(pci, aq_pci_tbl);
drivers/net/ethernet/aquantia/atlantic/aq_vec.c +0 -3
index d281322d7dd2..f4774cf051c9 100644
@@ -362,9 +362,6 @@ unsigned int aq_vec_get_sw_stats(struct aq_vec_s *self, const unsigned int tc, u
 {
 	unsigned int count;
 
-	WARN_ONCE(!aq_vec_is_valid_tc(self, tc),
-		  "Invalid tc %u (#rx=%u, #tx=%u)\n",
-		  tc, self->rx_rings, self->tx_rings);
 	if (!aq_vec_is_valid_tc(self, tc))
 		return 0;
 
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +23 -2
index 404cbf60d3f2..65b9e5846be4 100644
@@ -559,6 +559,11 @@ int hw_atl_utils_fw_rpc_wait(struct aq_hw_s *self,
 			goto err_exit;
 
 		if (fw.len == 0xFFFFU) {
+			if (sw.len > sizeof(self->rpc)) {
+				printk(KERN_INFO "Invalid sw len: %x\n", sw.len);
+				err = -EINVAL;
+				goto err_exit;
+			}
 			err = hw_atl_utils_fw_rpc_call(self, sw.len);
 			if (err < 0)
 				goto err_exit;
@@ -567,6 +572,11 @@ int hw_atl_utils_fw_rpc_wait(struct aq_hw_s *self,
 
 	if (rpc) {
 		if (fw.len) {
+			if (fw.len > sizeof(self->rpc)) {
+				printk(KERN_INFO "Invalid fw len: %x\n", fw.len);
+				err = -EINVAL;
+				goto err_exit;
+			}
 			err =
 			hw_atl_utils_fw_downld_dwords(self,
 						      self->rpc_addr,
@@ -857,12 +867,20 @@ static int hw_atl_fw1x_deinit(struct aq_hw_s *self)
 int hw_atl_utils_update_stats(struct aq_hw_s *self)
 {
 	struct aq_stats_s *cs = &self->curr_stats;
+	struct aq_stats_s curr_stats = *cs;
 	struct hw_atl_utils_mbox mbox;
+	bool corrupted_stats = false;
 
 	hw_atl_utils_mpi_read_stats(self, &mbox);
 
-#define AQ_SDELTA(_N_) (self->curr_stats._N_ += \
-			mbox.stats._N_ - self->last_stats._N_)
+#define AQ_SDELTA(_N_)  \
+do { \
+	if (!corrupted_stats && \
+	    ((s64)(mbox.stats._N_ - self->last_stats._N_)) >= 0) \
+		curr_stats._N_ += mbox.stats._N_ - self->last_stats._N_; \
+	else \
+		corrupted_stats = true; \
+} while (0)
 
 	if (self->aq_link_status.mbps) {
 		AQ_SDELTA(uprc);
@@ -882,6 +900,9 @@ int hw_atl_utils_update_stats(struct aq_hw_s *self)
 		AQ_SDELTA(bbrc);
 		AQ_SDELTA(bbtc);
 		AQ_SDELTA(dpc);
+
+		if (!corrupted_stats)
+			*cs = curr_stats;
 	}
 #undef AQ_SDELTA
 
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c +0 -3
index ee0c22d04935..05086f0040fd 100644
@@ -132,9 +132,6 @@ static enum hw_atl_fw2x_rate link_speed_mask_2fw2x_ratemask(u32 speed)
 	if (speed & AQ_NIC_RATE_5G)
 		rate |= FW2X_RATE_5G;
 
-	if (speed & AQ_NIC_RATE_5GSR)
-		rate |= FW2X_RATE_5G;
-
 	if (speed & AQ_NIC_RATE_2G5)
 		rate |= FW2X_RATE_2G5;
 
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c +18 -4
index 92f64048bf69..c76ccdc77ba6 100644
@@ -65,11 +65,25 @@ const struct aq_hw_caps_s hw_atl2_caps_aqc113 = {
 			  AQ_NIC_RATE_5G  |
 			  AQ_NIC_RATE_2G5 |
 			  AQ_NIC_RATE_1G  |
-			  AQ_NIC_RATE_1G_HALF   |
 			  AQ_NIC_RATE_100M      |
-			  AQ_NIC_RATE_100M_HALF |
-			  AQ_NIC_RATE_10M       |
-			  AQ_NIC_RATE_10M_HALF,
+			  AQ_NIC_RATE_10M,
+};
+
+const struct aq_hw_caps_s hw_atl2_caps_aqc115c = {
+	DEFAULT_BOARD_BASIC_CAPABILITIES,
+	.media_type = AQ_HW_MEDIA_TYPE_TP,
+	.link_speed_msk = AQ_NIC_RATE_2G5 |
+			  AQ_NIC_RATE_1G  |
+			  AQ_NIC_RATE_100M      |
+			  AQ_NIC_RATE_10M,
+};
+
+const struct aq_hw_caps_s hw_atl2_caps_aqc116c = {
+	DEFAULT_BOARD_BASIC_CAPABILITIES,
+	.media_type = AQ_HW_MEDIA_TYPE_TP,
+	.link_speed_msk = AQ_NIC_RATE_1G  |
+			  AQ_NIC_RATE_100M      |
+			  AQ_NIC_RATE_10M,
 };
 
 static u32 hw_atl2_sem_act_rslvr_get(struct aq_hw_s *self)
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h +2 -0
index de8723f1c28a..346f0dc9912e 100644
@@ -9,6 +9,8 @@
 #include "aq_common.h"
 
 extern const struct aq_hw_caps_s hw_atl2_caps_aqc113;
+extern const struct aq_hw_caps_s hw_atl2_caps_aqc115c;
+extern const struct aq_hw_caps_s hw_atl2_caps_aqc116c;
 extern const struct aq_hw_ops hw_atl2_ops;
 
 #endif /* HW_ATL2_H */
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h +34 -4
index b66fa346581c..6bad64c77b87 100644
@@ -239,7 +239,8 @@ struct version_s {
 		u8 minor;
 		u16 build;
 	} phy;
-	u32 rsvd;
+	u32 drv_iface_ver:4;
+	u32 rsvd:28;
 };
 
 struct link_status_s {
@@ -424,7 +425,7 @@ struct cable_diag_status_s {
 	u16 rsvd2;
 };
 
-struct statistics_s {
+struct statistics_a0_s {
 	struct {
 		u32 link_up;
 		u32 link_down;
@@ -457,6 +458,33 @@ struct statistics_s {
 	u32 reserve_fw_gap;
 };
 
+struct __packed statistics_b0_s {
+	u64 rx_good_octets;
+	u64 rx_pause_frames;
+	u64 rx_good_frames;
+	u64 rx_errors;
+	u64 rx_unicast_frames;
+	u64 rx_multicast_frames;
+	u64 rx_broadcast_frames;
+
+	u64 tx_good_octets;
+	u64 tx_pause_frames;
+	u64 tx_good_frames;
+	u64 tx_errors;
+	u64 tx_unicast_frames;
+	u64 tx_multicast_frames;
+	u64 tx_broadcast_frames;
+
+	u32 main_loop_cycles;
+};
+
+struct __packed statistics_s {
+	union __packed {
+		struct statistics_a0_s a0;
+		struct statistics_b0_s b0;
+	};
+};
+
 struct filter_caps_s {
 	u8 l2_filters_base_index:6;
 	u8 flexible_filter_mask:2;
@@ -545,7 +573,7 @@ struct management_status_s {
 	u32 rsvd5;
 };
 
-struct fw_interface_out {
+struct __packed fw_interface_out {
 	struct transaction_counter_s transaction_id;
 	struct version_s version;
 	struct link_status_s link_status;
@@ -569,7 +597,6 @@ struct fw_interface_out {
 	struct core_dump_s core_dump;
 	u32 rsvd11;
 	struct statistics_s stats;
-	u32 rsvd12;
 	struct filter_caps_s filter_caps;
 	struct device_caps_s device_caps;
 	u32 rsvd13;
@@ -592,6 +619,9 @@ struct fw_interface_out {
 #define  AQ_HOST_MODE_LOW_POWER    3U
 #define  AQ_HOST_MODE_SHUTDOWN     4U
 
+#define  AQ_A2_FW_INTERFACE_A0     0
+#define  AQ_A2_FW_INTERFACE_B0     1
+
 int hw_atl2_utils_initfw(struct aq_hw_s *self, const struct aq_fw_ops **fw_ops);
 
 int hw_atl2_utils_soft_reset(struct aq_hw_s *self);
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +87 -23

150 lines not on this page · raw message

drivers/net/ethernet/dec/tulip/de4x5.c +21 -13
index 36ab4cbf2ad0..b9d967e41938 100644
@@ -4708,6 +4708,10 @@ type3_infoblock(struct net_device *dev, u_char count, u_char *p)
         lp->ibn = 3;
         lp->active = *p++;
 	if (MOTO_SROM_BUG) lp->active = 0;
+	/* if (MOTO_SROM_BUG) statement indicates lp->active could
+	 * be 8 (i.e. the size of array lp->phy) */
+	if (WARN_ON(lp->active >= ARRAY_SIZE(lp->phy)))
+		return -EINVAL;
 	lp->phy[lp->active].gep = (*p ? p : NULL); p += (2 * (*p) + 1);
 	lp->phy[lp->active].rst = (*p ? p : NULL); p += (2 * (*p) + 1);
 	lp->phy[lp->active].mc  = get_unaligned_le16(p); p += 2;
@@ -4999,19 +5003,23 @@ mii_get_phy(struct net_device *dev)
 	}
 	if ((j == limit) && (i < DE4X5_MAX_MII)) {
 	    for (k=0; k < DE4X5_MAX_PHY && lp->phy[k].id; k++);
-	    lp->phy[k].addr = i;
-	    lp->phy[k].id = id;
-	    lp->phy[k].spd.reg = GENERIC_REG;      /* ANLPA register         */
-	    lp->phy[k].spd.mask = GENERIC_MASK;    /* 100Mb/s technologies   */
-	    lp->phy[k].spd.value = GENERIC_VALUE;  /* TX & T4, H/F Duplex    */
-	    lp->mii_cnt++;
-	    lp->active++;
-	    printk("%s: Using generic MII device control. If the board doesn't operate,\nplease mail the following dump to the author:\n", dev->name);
-	    j = de4x5_debug;
-	    de4x5_debug |= DEBUG_MII;
-	    de4x5_dbg_mii(dev, k);
-	    de4x5_debug = j;
-	    printk("\n");
+	    if (k < DE4X5_MAX_PHY) {
+		lp->phy[k].addr = i;
+		lp->phy[k].id = id;
+		lp->phy[k].spd.reg = GENERIC_REG;      /* ANLPA register         */
+		lp->phy[k].spd.mask = GENERIC_MASK;    /* 100Mb/s technologies   */
+		lp->phy[k].spd.value = GENERIC_VALUE;  /* TX & T4, H/F Duplex    */
+		lp->mii_cnt++;
+		lp->active++;
+		printk("%s: Using generic MII device control. If the board doesn't operate,\nplease mail the following dump to the author:\n", dev->name);
+		j = de4x5_debug;
+		de4x5_debug |= DEBUG_MII;
+		de4x5_dbg_mii(dev, k);
+		de4x5_debug = j;
+		printk("\n");
+	    } else {
+		goto purgatory;
+	    }
 	}
     }
   purgatory:
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +2 -0
index f3e443f2d9cf..1108e1730841 100644
@@ -4538,6 +4538,8 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
 
 	fsl_mc_portal_free(priv->mc_io);
 
+	destroy_workqueue(priv->dpaa2_ptp_wq);
+
 	dev_dbg(net_dev->dev.parent, "Removed interface %s\n", net_dev->name);
 
 	free_netdev(net_dev);
drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +4 -0
index 23d9cbf262c3..740850b64aff 100644
@@ -400,6 +400,10 @@ static void hns_dsaf_ge_srst_by_port(struct dsaf_device *dsaf_dev, u32 port,
 		return;
 
 	if (!HNS_DSAF_IS_DEBUG(dsaf_dev)) {
+		/* DSAF_MAX_PORT_NUM is 6, but DSAF_GE_NUM is 8.
+		   We need check to prevent array overflow */
+		if (port >= DSAF_MAX_PORT_NUM)
+			return;
 		reg_val_1  = 0x1 << port;
 		port_rst_off = dsaf_dev->mac_cb[port]->port_rst_off;
 		/* there is difference between V1 and V2 in register.*/
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +1 -1
index ed6d0c019573..bbd054fcda8c 100644
@@ -7457,7 +7457,7 @@ static int mvpp2_probe(struct platform_device *pdev)
 
 	shared = num_present_cpus() - priv->nthreads;
 	if (shared > 0)
-		bitmap_fill(&priv->lock_map,
+		bitmap_set(&priv->lock_map, 0,
 			    min_t(int, shared, MVPP2_MAX_THREADS));
 
 	for (i = 0; i < MVPP2_MAX_THREADS; i++) {
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +1 -1
index 35836903b7fb..90dc5343827f 100644
@@ -2281,7 +2281,7 @@ static int rvu_mbox_init(struct rvu *rvu, struct mbox_wq_info *mw,
 			goto free_regions;
 		break;
 	default:
-		return err;
+		goto free_regions;
 	}
 
 	mw->mbox_wq = alloc_workqueue(name,
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +7 -2
index 8af7f2827322..3bd3603873e3 100644
@@ -2286,9 +2286,14 @@ int mlx4_en_try_alloc_resources(struct mlx4_en_priv *priv,
 				bool carry_xdp_prog)
 {
 	struct bpf_prog *xdp_prog;
-	int i, t;
+	int i, t, ret;
 
-	mlx4_en_copy_priv(tmp, priv, prof);
+	ret = mlx4_en_copy_priv(tmp, priv, prof);
+	if (ret) {
+		en_warn(priv, "%s: mlx4_en_copy_priv() failed, return\n",
+			__func__);
+		return ret;
+	}
 
 	if (mlx4_en_alloc_resources(tmp)) {
 		en_warn(priv,
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +1 -1
index c698e4b5381d..bea35530c2d0 100644
@@ -336,6 +336,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
 	case MLX5_CMD_OP_DEALLOC_SF:
 	case MLX5_CMD_OP_DESTROY_UCTX:
 	case MLX5_CMD_OP_DESTROY_UMEM:
+	case MLX5_CMD_OP_MODIFY_RQT:
 		return MLX5_CMD_STAT_OK;
 
 	case MLX5_CMD_OP_QUERY_HCA_CAP:
@@ -441,7 +442,6 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
 	case MLX5_CMD_OP_MODIFY_TIS:
 	case MLX5_CMD_OP_QUERY_TIS:
 	case MLX5_CMD_OP_CREATE_RQT:
-	case MLX5_CMD_OP_MODIFY_RQT:
 	case MLX5_CMD_OP_QUERY_RQT:
 
 	case MLX5_CMD_OP_CREATE_FLOW_TABLE:
drivers/net/ethernet/mellanox/mlx5/core/en.h +12 -2
index 03a7a4ce5cd5..c10a107a3ea5 100644
@@ -244,6 +244,17 @@ enum mlx5e_priv_flag {
 
 #define MLX5E_GET_PFLAG(params, pflag) (!!((params)->pflags & (BIT(pflag))))
 
+enum packet_merge {
+	MLX5E_PACKET_MERGE_NONE,
+	MLX5E_PACKET_MERGE_LRO,
+	MLX5E_PACKET_MERGE_SHAMPO,
+};
+
+struct mlx5e_packet_merge_param {
+	enum packet_merge type;
+	u32 timeout;
+};
+
 struct mlx5e_params {
 	u8  log_sq_size;
 	u8  rq_wq_type;
@@ -258,13 +269,12 @@ struct mlx5e_params {
 	bool tunneled_offload_en;
 	struct dim_cq_moder rx_cq_moderation;
 	struct dim_cq_moder tx_cq_moderation;
-	bool lro_en;
+	struct mlx5e_packet_merge_param packet_merge;
 	u8  tx_min_inline_mode;
 	bool vlan_strip_disable;
 	bool scatter_fcs_en;
 	bool rx_dim_enabled;
 	bool tx_dim_enabled;
-	u32 lro_timeout;
 	u32 pflags;
 	struct bpf_prog *xdp_prog;
 	struct mlx5e_xsk *xsk;
drivers/net/ethernet/mellanox/mlx5/core/en/params.c +6 -15
index 3cbb596821e8..15f441a1b80c 100644
@@ -87,7 +87,8 @@ bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params,
 	u32 linear_frag_sz = max(mlx5e_rx_get_linear_frag_sz(params, xsk),
 				 mlx5e_rx_get_linear_frag_sz(params, NULL));
 
-	return !params->lro_en && linear_frag_sz <= PAGE_SIZE;
+	return params->packet_merge.type == MLX5E_PACKET_MERGE_NONE &&
+		linear_frag_sz <= PAGE_SIZE;
 }
 
 bool mlx5e_verify_rx_mpwqe_strides(struct mlx5_core_dev *mdev,
@@ -164,19 +165,8 @@ u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev,
 		mlx5e_rx_is_linear_skb(params, xsk) :
 		mlx5e_rx_mpwqe_is_linear_skb(mdev, params, xsk);
 
-	return is_linear_skb ? mlx5e_get_linear_rq_headroom(params, xsk) : 0;
-}
-
-struct mlx5e_lro_param mlx5e_get_lro_param(struct mlx5e_params *params)
-{
-	struct mlx5e_lro_param lro_param;
-
-	lro_param = (struct mlx5e_lro_param) {
-		.enabled = params->lro_en,
-		.timeout = params->lro_timeout,
-	};
-
-	return lro_param;
+	return is_linear_skb || params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO ?
+		mlx5e_get_linear_rq_headroom(params, xsk) : 0;
 }
 
 u16 mlx5e_calc_sq_stop_room(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
@@ -485,10 +475,11 @@ static void mlx5e_build_rx_cq_param(struct mlx5_core_dev *mdev,
 
 static u8 rq_end_pad_mode(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
 {
+	bool lro_en = params->packet_merge.type == MLX5E_PACKET_MERGE_LRO;
 	bool ro = pcie_relaxed_ordering_enabled(mdev->pdev) &&
 		MLX5_CAP_GEN(mdev, relaxed_ordering_write);
 
-	return ro && params->lro_en ?
+	return ro && lro_en ?
 		MLX5_WQ_END_PAD_MODE_NONE : MLX5_WQ_END_PAD_MODE_ALIGN;
 }
 
drivers/net/ethernet/mellanox/mlx5/core/en/params.h +0 -6
index 879ad46d754e..e9593f5f0661 100644
@@ -11,11 +11,6 @@ struct mlx5e_xsk_param {
 	u16 chunk_size;
 };
 
-struct mlx5e_lro_param {
-	bool enabled;
-	u32 timeout;
-};
-
 struct mlx5e_cq_param {
 	u32                        cqc[MLX5_ST_SZ_DW(cqc)];
 	struct mlx5_wq_param       wq;
@@ -125,7 +120,6 @@ u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev,
 u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev,
 			  struct mlx5e_params *params,
 			  struct mlx5e_xsk_param *xsk);
-struct mlx5e_lro_param mlx5e_get_lro_param(struct mlx5e_params *params);
 
 /* Build queue parameters */
 
drivers/net/ethernet/mellanox/mlx5/core/en/rss.c +12 -11
index 625cd49ef96c..7b55b14d47ef 100644
@@ -127,7 +127,7 @@ mlx5e_rss_get_tt_config(struct mlx5e_rss *rss, enum mlx5_traffic_types tt)
 
 static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
 				enum mlx5_traffic_types tt,
-				const struct mlx5e_lro_param *init_lro_param,
+				const struct mlx5e_packet_merge_param *init_pkt_merge_param,
 				bool inner)
 {
 	struct mlx5e_rss_params_traffic_type rss_tt;
@@ -161,7 +161,7 @@ static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
 	rqtn = mlx5e_rqt_get_rqtn(&rss->rqt);
 	mlx5e_tir_builder_build_rqt(builder, rss->mdev->mlx5e_res.hw_objs.td.tdn,
 				    rqtn, rss->inner_ft_support);
-	mlx5e_tir_builder_build_lro(builder, init_lro_param);
+	mlx5e_tir_builder_build_packet_merge(builder, init_pkt_merge_param);
 	rss_tt = mlx5e_rss_get_tt_config(rss, tt);
 	mlx5e_tir_builder_build_rss(builder, &rss->hash, &rss_tt, inner);
 
@@ -198,14 +198,14 @@ static void mlx5e_rss_destroy_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types
 }
 
 static int mlx5e_rss_create_tirs(struct mlx5e_rss *rss,
-				 const struct mlx5e_lro_param *init_lro_param,
+				 const struct mlx5e_packet_merge_param *init_pkt_merge_param,
 				 bool inner)
 {
 	enum mlx5_traffic_types tt, max_tt;
 	int err;
 
 	for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
-		err = mlx5e_rss_create_tir(rss, tt, init_lro_param, inner);
+		err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
 		if (err)
 			goto err_destroy_tirs;
 	}
@@ -297,7 +297,7 @@ int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
 
 int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
 		   bool inner_ft_support, u32 drop_rqn,
-		   const struct mlx5e_lro_param *init_lro_param)
+		   const struct mlx5e_packet_merge_param *init_pkt_merge_param)
 {
 	int err;
 
@@ -305,12 +305,12 @@ int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
 	if (err)
 		goto err_out;
 
-	err = mlx5e_rss_create_tirs(rss, init_lro_param, false);
+	err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, false);
 	if (err)
 		goto err_destroy_rqt;
 
 	if (inner_ft_support) {
-		err = mlx5e_rss_create_tirs(rss, init_lro_param, true);
+		err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, true);
 		if (err)
 			goto err_destroy_tirs;
 	}
@@ -372,7 +372,7 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
  */
 int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
 			  enum mlx5_traffic_types tt,
-			  const struct mlx5e_lro_param *init_lro_param,
+			  const struct mlx5e_packet_merge_param *init_pkt_merge_param,
 			  bool inner, u32 *tirn)
 {
 	struct mlx5e_tir *tir;
@@ -381,7 +381,7 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
 	if (!tir) { /* TIR doesn't exist, create one */
 		int err;
 
-		err = mlx5e_rss_create_tir(rss, tt, init_lro_param, inner);
+		err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
 		if (err)
 			return err;
 		tir = rss_get_tir(rss, tt, inner);
@@ -418,7 +418,8 @@ void mlx5e_rss_disable(struct mlx5e_rss *rss)
 			       mlx5e_rqt_get_rqtn(&rss->rqt), rss->drop_rqn, err);
 }
 
-int mlx5e_rss_lro_set_param(struct mlx5e_rss *rss, struct mlx5e_lro_param *lro_param)
+int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
+				     struct mlx5e_packet_merge_param *pkt_merge_param)
 {
 	struct mlx5e_tir_builder *builder;
 	enum mlx5_traffic_types tt;
@@ -428,7 +429,7 @@ int mlx5e_rss_lro_set_param(struct mlx5e_rss *rss, struct mlx5e_lro_param *lro_p
 	if (!builder)
 		return -ENOMEM;
 
-	mlx5e_tir_builder_build_lro(builder, lro_param);
+	mlx5e_tir_builder_build_packet_merge(builder, pkt_merge_param);
 
 	final_err = 0;
 
drivers/net/ethernet/mellanox/mlx5/core/en/rss.h +4 -3
index d522a10dadf3..c6b216416344 100644
@@ -17,7 +17,7 @@ struct mlx5e_rss *mlx5e_rss_alloc(void);
 void mlx5e_rss_free(struct mlx5e_rss *rss);
 int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
 		   bool inner_ft_support, u32 drop_rqn,
-		   const struct mlx5e_lro_param *init_lro_param);
+		   const struct mlx5e_packet_merge_param *init_pkt_merge_param);
 int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
 			   bool inner_ft_support, u32 drop_rqn);
 int mlx5e_rss_cleanup(struct mlx5e_rss *rss);
@@ -30,13 +30,14 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
 		       bool inner);
 int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
 			  enum mlx5_traffic_types tt,
-			  const struct mlx5e_lro_param *init_lro_param,
+			  const struct mlx5e_packet_merge_param *init_pkt_merge_param,
 			  bool inner, u32 *tirn);
 
 void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns);
 void mlx5e_rss_disable(struct mlx5e_rss *rss);
 
-int mlx5e_rss_lro_set_param(struct mlx5e_rss *rss, struct mlx5e_lro_param *lro_param);
+int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
+				     struct mlx5e_packet_merge_param *pkt_merge_param);
 int mlx5e_rss_get_rxfh(struct mlx5e_rss *rss, u32 *indir, u8 *key, u8 *hfunc);
 int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
 		       const u8 *key, const u8 *hfunc,
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c +53 -13

3 lines not on this page · raw message

drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h +6 -5
index 4a15942d79f7..b39b20a720e0 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en/tir.c +8 -8
index de936dc4bc48..a1afb8585e37 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en/tir.h +3 -3
index e45149a78ed9..857a84bcd53a 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.c +1 -1
index fb5397324aa4..2db9573a3fe6 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c +1 -23
index a2a9f68579dd..15711814d2d2 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +2 -2
index 9d451b8ee467..dc9b8718c3c1 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c +3 -3
index 03693fa74a70..d32b70c62c94 100644

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

drivers/net/ethernet/mellanox/mlx5/core/en_main.c +26 -20

46 lines not on this page · raw message

drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +6 -3
index 0684ac6699b2..edecd149dcab 100644

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

drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c +2 -2
index c6cc67cb4f6a..d377ddc70fc7 100644

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

drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +1 -0
index 0c79e1133936..f3f23fdc2022 100644

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

drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +3 -4
index 269ebb53eda6..cfde0a45b8b8 100644

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

drivers/net/ethernet/natsemi/xtsonic.c +1 -1
index ca4686094701..0a02d8bd0a3e 100644

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

drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +8 -2
index d51bac7ba5af..bd0607680329 100644

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

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +6 -5
index 1cf94248c221..3422f0746d82 100644

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

drivers/net/usb/lan78xx.c +1 -1
index 63cd72c5f580..a0401a9dade5 100644

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

drivers/net/usb/r8152.c +3 -6
index f329e39100a7..d3da350777a4 100644

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

drivers/net/vrf.c +2 -0
index ccf677015d5b..131c745dc701 100644

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

drivers/net/wireguard/allowedips.c +1 -1
index b7197e80f226..9a4c8ff32d9d 100644

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

drivers/net/wireguard/device.c +21 -18
index 551ddaaaf540..a46067c38bf5 100644

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

drivers/net/wireguard/device.h +3 -6
index 854bc3d97150..43c7cebbf50b 100644

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

drivers/net/wireguard/queueing.c +3 -3
index 48e7b982a307..1de413b19e34 100644

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

drivers/net/wireguard/queueing.h +1 -1
index 4ef2944a68bc..e2388107f7fd 100644

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

drivers/net/wireguard/ratelimiter.c +2 -2
index 3fedd1d21f5e..dd55e5c26f46 100644

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

drivers/net/wireguard/receive.c +23 -16
index 7dc84bcca261..7b8df406c773 100644

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

drivers/net/wireguard/socket.c +1 -1
index 8c496b747108..6f07b949cb81 100644

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

drivers/net/wireless/intel/iwlwifi/fw/uefi.c +6 -0
index c875bf35533c..009dd4be597b 100644

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

drivers/net/wireless/intel/iwlwifi/iwl-drv.c +15 -7
index 77124b8b235e..94553f272d37 100644

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

drivers/net/wireless/intel/iwlwifi/iwl-drv.h +3 -0
index b6442df0c643..56f2fd3b9490 100644

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

drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +23 -1
index 3a4585222d6d..7e5ad943b20c 100644

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

drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +3 -0
index f877d86b038e..46af8dd2dc93 100644

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

drivers/net/wireless/intel/iwlwifi/mvm/ops.c +5 -0
index 77ea2d0a3091..49c32a8132a0 100644

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

drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +2 -2
index ba36d3caec8e..7440f2b443ec 100644

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

drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +3 -0
index e4473a551241..74c3d8cb3100 100644

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

drivers/pinctrl/qcom/Kconfig +2 -0
index 5ff4207df66e..f1b5176a5085 100644

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

drivers/platform/x86/dell/Kconfig +1 -1
index 2fffa57e596e..fe224a54f24c 100644

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

drivers/platform/x86/thinkpad_acpi.c +1 -12
index 27595aba214d..3dc055ce6e61 100644

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

drivers/scsi/lpfc/lpfc_els.c +2 -7
index 1a406df251cb..f7197b7161d5 100644

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

drivers/scsi/scsi_transport_iscsi.c +3 -3
index 78343d3f9385..554b6f784223 100644

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

drivers/scsi/ufs/ufshcd-pci.c +18 -0
index 51424557810d..f725248ba57f 100644

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

drivers/thermal/thermal_core.c +2 -0
index 30134f49b037..13891745a971 100644

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

drivers/tty/serial/8250/8250_bcm7271.c +13 -0
index 7f656fac503f..5163d60756b7 100644

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

drivers/tty/serial/8250/8250_pci.c +25 -14
index 726912b16a55..f7d89440076a 100644

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

drivers/tty/serial/8250/8250_port.c +0 -7
index e4dd82fd7c2a..ec88b706e882 100644

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

drivers/tty/serial/amba-pl011.c +1 -0
index d361cd84ff8c..52518a606c06 100644

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

drivers/tty/serial/liteuart.c +17 -3
index dbc0559a9157..2941659e5274 100644

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

drivers/tty/serial/msm_serial.c +3 -0
index fcef7a961430..489d19274f9a 100644

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

drivers/tty/serial/serial-tegra.c +2 -2
index 45e2e4109acd..b6223fab0687 100644

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

drivers/tty/serial/serial_core.c +17 -1
index 1e738f265eea..61e3dd0222af 100644

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

drivers/usb/cdns3/cdns3-gadget.c +4 -16
index 1f3b4a142212..f9af7ebe003d 100644

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

drivers/usb/cdns3/cdnsp-mem.c +3 -0
index ad9aee3f1e39..97866bfb2da9 100644

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

drivers/usb/core/quirks.c +3 -0
index 8239fe7129dd..019351c0b52c 100644

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

drivers/usb/host/xhci-ring.c +14 -7
index 311597bba80e..eaa49aef2935 100644

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

drivers/usb/typec/tcpm/tcpm.c +0 -4
index 7f2f3ff1b391..6010b9901126 100644

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

drivers/video/console/vgacon.c +9 -5
index ef9c57ce0906..9a49ea6b5112 100644

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

fs/btrfs/disk-io.c +13 -1
index e00c4c1f622f..c37239c8ac0c 100644

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

fs/btrfs/volumes.c +13 -5
index bc2e4683e856..7bf09ca82137 100644

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

fs/file.c +4 -0
index 8627dacfc424..ad4a8bf3cf10 100644

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

fs/gfs2/bmap.c +1 -1
index 5414c2c33580..fba32141a651 100644

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

fs/gfs2/super.c +7 -7
index 6e00d15ef0a8..cc51b5f5f52d 100644

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

fs/io-wq.c +7 -0
index 8c6131565754..e8f77903d775 100644

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

include/linux/acpi.h +9 -0
index 974d497a897d..6224b1e32681 100644

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

include/linux/kprobes.h +2 -0
index e4f3bfe08757..ef8c7accbc68 100644

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

include/linux/mlx5/mlx5_ifc.h +4 -4
index 993204a6c1a1..25d775764a5a 100644

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

include/linux/netdevice.h +13 -6
index d79163208dfd..ce81cc96a98d 100644

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

include/linux/siphash.h +4 -10
index bf21591a9e5e..0cda61855d90 100644

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

include/net/dst_cache.h +11 -0
index 67634675e919..df6622a5fe98 100644

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

include/net/fib_rules.h +3 -1
index 4b10676c69d1..bd07484ab9dd 100644

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

include/net/ip_fib.h +1 -1
index ab5348e57db1..3417ba2d27ad 100644

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

include/net/netns/ipv4.h +1 -1
index 2f65701a43c9..6c5b2efc4f17 100644

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

include/net/sock.h +8 -5
index 7b0c7f5aab67..7ac5075f9c18 100644

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

kernel/kprobes.c +3 -0
index 1cf8bca1ea86..2ef90d15699f 100644

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

kernel/sched/core.c +3 -3
index 6f4625f8276f..0d12ec7be301 100644

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

kernel/trace/trace.c +12 -0
index 5e452dd57af0..18db461f77cd 100644

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

kernel/trace/trace_events_hist.c +1 -1
index d860351b9dea..12a735bd90a5 100644

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

lib/siphash.c +6 -6
index a90112ee72a1..72b9068ab57b 100644

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

net/core/dev.c +4 -1
index aa7a98fd2d64..91f53eeb0e79 100644

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

net/core/dst_cache.c +19 -0
index be74ab4551c2..0ccfd5fa5cb9 100644

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

net/core/fib_rules.c +1 -1
index 79df7cd9dbc1..1bb567a3b329 100644

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

net/ipv4/devinet.c +1 -1
index f4468980b675..4744c7839de5 100644

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

net/ipv4/fib_frontend.c +1 -1
index 9fe13e4f5d08..4d61ddd8a0ec 100644

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

net/ipv4/fib_rules.c +3 -2
index ce54a30c2ef1..d279cb8ac158 100644

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

net/ipv4/fib_semantics.c +2 -2
index 3364cb9c67e0..fde7797b5806 100644

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

net/ipv6/esp6.c +6 -0
index ed2f061b8768..f0bac6f7ab6b 100644

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

net/ipv6/fib6_rules.c +2 -2
index 40f3e4f9f33a..dcedfe29d9d9 100644

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

net/mac80211/led.h +4 -4
index fb3aaa3c5606..b71a1428d883 100644

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

net/mac80211/rx.c +6 -4
index 419f06ef8c98..1958e4d59b52 100644

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

net/mac80211/tx.c +15 -19
index 8921088a5df6..0527bf41a32c 100644

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

net/mctp/route.c +5 -4
index 5ca186d53cb0..fb1bf4ec8529 100644

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

net/mpls/af_mpls.c +52 -16

68 lines not on this page · raw message

net/rds/tcp.c +1 -1
index abf19c0e3ba0..5327d130c4b5 100644

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

net/rxrpc/conn_client.c +9 -5
index dbea0bfee48e..8120138dac01 100644

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

net/rxrpc/peer_object.c +9 -5
index 68396d052052..0298fe2ad6d3 100644

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

net/smc/af_smc.c +14 -0
index 3d8219e3b026..06e4a07bdcdc 100644

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

net/smc/smc_close.c +6 -2
index 04620b53b74a..84102db5bb31 100644

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

net/smc/smc_core.c +3 -4
index 508a14fc4f58..5a9c22ee75fa 100644

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

net/tls/tls_sw.c +2 -2
index b0cdcea10180..bd96ec26f4f9 100644

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

sound/hda/intel-dsp-config.c +10 -0
index 10a0bffc3cf6..4208fa8a4db5 100644

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

sound/pci/hda/hda_local.h +9 -0
index ea8ab8b43337..d22c96eb2f8f 100644

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

sound/pci/hda/patch_cs8409.c +5 -0
index 31ff11ab868e..039b9f2f8e94 100644

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

sound/soc/codecs/rk817_codec.c +1 -0
index 943d7d933e81..03f24edfe4f6 100644

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

sound/soc/tegra/tegra186_dspk.c +147 -34

181 lines not on this page · raw message

sound/soc/tegra/tegra210_admaif.c +110 -30

140 lines not on this page · raw message

sound/soc/tegra/tegra210_ahub.c +7 -4
index 66287a7c9865..1b2f7cb8c6ad 100644

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

sound/soc/tegra/tegra210_dmic.c +149 -35

184 lines not on this page · raw message

sound/soc/tegra/tegra210_i2s.c +226 -70

296 lines not on this page · raw message

sound/usb/card.h +6 -4
index 860faaf249ea..87f042d06ce0 100644

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

sound/usb/endpoint.c +161 -62

223 lines not on this page · raw message

sound/usb/endpoint.h +9 -4
index a668f675b52b..6a9af04cf175 100644

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

sound/usb/pcm.c +130 -35

165 lines not on this page · raw message

tools/perf/builtin-report.c +9 -6
index a0316ce910db..997e0a4b0902 100644

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

tools/perf/ui/hist.c +14 -14
index c1f24d004852..5075ecead5f3 100644

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

tools/perf/util/arm-spe.c +15 -0
index 58b7069c5a5f..7054f23150e1 100644

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

tools/perf/util/hist.c +6 -17
index 65fe65ba03c2..b776465e04ef 100644

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

tools/perf/util/hist.h +0 -1
index 5343b62476e6..621f35ae1efa 100644

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

tools/perf/util/sort.c +16 -36

52 lines not on this page · raw message

tools/perf/util/sort.h +3 -3
index b67c469aba79..7b7145501933 100644

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

tools/perf/util/util.c +7 -7
index 37a9492edb3e..df3c4671be72 100644

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

tools/perf/util/util.h +1 -1
index ad737052e597..9f0d36ba77f2 100644

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

tools/testing/selftests/net/fcnal-test.sh +2 -2
index 3313566ce906..7f5b265fcb90 100755

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

tools/testing/selftests/wireguard/netns.sh +28 -2
index ebc4ee0fe179..8a9461aa0878 100755

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

tools/testing/selftests/wireguard/qemu/debug.config +1 -1
index fe07d97df9fa..2b321b8a96cf 100644

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

tools/testing/selftests/wireguard/qemu/kernel.config +1 -0
index 74db83a0aedd..a9b5a520a1d2 100644

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

virt/kvm/kvm_main.c +33 -17

50 lines not on this page · raw message

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

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