Linux 6.0.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.0.9 kernel.
All users of the 6.0 kernel series must upgrade.
The updated 6.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.0.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/net/engleder,tsnep.yaml | 2 Documentation/virt/kvm/devices/vm.rst | 3 Makefile | 2 arch/arm64/kernel/efi.c | 52 ++- arch/m68k/include/uapi/asm/bootinfo-virt.h | 9 arch/m68k/include/uapi/asm/bootinfo.h | 7 arch/m68k/kernel/setup_mm.c | 12 arch/m68k/virt/config.c | 11 arch/mips/kernel/jump_label.c | 2 arch/riscv/kernel/process.c | 2 arch/riscv/kernel/setup.c | 1 arch/riscv/kernel/vdso/Makefile | 2 arch/riscv/mm/init.c | 1 arch/s390/kvm/kvm-s390.c | 26 + arch/s390/kvm/kvm-s390.h | 1 arch/s390/kvm/pci.c | 2 arch/x86/include/asm/msr-index.h | 8 arch/x86/kernel/asm-offsets.c | 6 arch/x86/kernel/cpu/amd.c | 6 arch/x86/kernel/cpu/hygon.c | 4 arch/x86/kvm/.gitignore | 2 arch/x86/kvm/Makefile | 12 arch/x86/kvm/kvm-asm-offsets.c | 27 + arch/x86/kvm/mmu/mmu.c | 4 arch/x86/kvm/svm/sev.c | 2 arch/x86/kvm/svm/svm.c | 24 - arch/x86/kvm/svm/svm.h | 4 arch/x86/kvm/svm/vmenter.S | 134 +++++--- arch/x86/kvm/vmx/vmenter.S | 2 arch/x86/kvm/x86.c | 16 - arch/x86/mm/hugetlbpage.c | 4 arch/x86/power/cpu.c | 1 drivers/ata/libata-scsi.c | 3 drivers/cxl/core/region.c | 20 + drivers/dma/apple-admac.c | 2 drivers/dma/at_hdmac.c | 153 +++------- drivers/dma/at_hdmac_regs.h | 10 drivers/dma/idxd/cdev.c | 18 + drivers/dma/idxd/device.c | 26 + drivers/dma/idxd/idxd.h | 34 ++ drivers/dma/idxd/init.c | 24 + drivers/dma/idxd/registers.h | 2 drivers/dma/idxd/sysfs.c | 11 drivers/dma/mv_xor_v2.c | 1 drivers/dma/pxa_dma.c | 4 drivers/dma/stm32-dma.c | 14 drivers/dma/ti/k3-udma-glue.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 15 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 34 -- drivers/gpu/drm/amd/amdkfd/kfd_events.c | 3 drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 49 ++- drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c | 32 +- drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c | 52 ++- drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c | 24 + drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c | 4 drivers/gpu/drm/amd/display/dc/inc/hw/clk_mgr.h | 15 drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h | 15 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 4 drivers/gpu/drm/i915/display/intel_dp.c | 2 drivers/gpu/drm/i915/display/intel_lvds.c | 3 drivers/gpu/drm/i915/display/intel_panel.c | 29 - drivers/gpu/drm/i915/display/intel_panel.h | 2 drivers/gpu/drm/i915/display/intel_psr.c | 5 drivers/gpu/drm/i915/display/intel_sdvo.c | 6 drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 4 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 4 drivers/gpu/drm/i915/gvt/kvmgt.c | 3 drivers/gpu/drm/vc4/vc4_drv.c | 7 drivers/gpu/drm/vc4/vc4_hdmi.c | 21 + drivers/gpu/drm/vc4/vc4_hdmi.h | 1 drivers/hid/hid-hyperv.c | 2 drivers/hid/wacom_wac.c | 11 drivers/hwspinlock/qcom_hwspinlock.c | 2 drivers/mmc/host/sdhci-brcmstb.c | 3 drivers/mmc/host/sdhci-cqhci.h | 24 + drivers/mmc/host/sdhci-esdhc-imx.c | 7 drivers/mmc/host/sdhci-of-arasan.c | 3 drivers/mmc/host/sdhci-tegra.c | 3 drivers/mmc/host/sdhci_am654.c | 7 drivers/net/can/at91_can.c | 2 drivers/net/can/c_can/c_can_main.c | 2 drivers/net/can/can327.c | 2 drivers/net/can/cc770/cc770.c | 2 drivers/net/can/ctucanfd/ctucanfd_base.c | 2 drivers/net/can/dev/skb.c | 9 drivers/net/can/flexcan/flexcan-core.c | 2 drivers/net/can/grcan.c | 2 drivers/net/can/ifi_canfd/ifi_canfd.c | 2 drivers/net/can/janz-ican3.c | 2 drivers/net/can/kvaser_pciefd.c | 2 drivers/net/can/m_can/m_can.c | 2 drivers/net/can/mscan/mscan.c | 2 drivers/net/can/pch_can.c | 2 drivers/net/can/peak_canfd/peak_canfd.c | 2 drivers/net/can/rcar/rcar_can.c | 2 drivers/net/can/rcar/rcar_canfd.c | 15 drivers/net/can/sja1000/sja1000.c | 2 drivers/net/can/slcan/slcan-core.c | 2 drivers/net/can/softing/softing_main.c | 2 drivers/net/can/spi/hi311x.c | 2 drivers/net/can/spi/mcp251x.c | 2 drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c | 2 drivers/net/can/sun4i_can.c | 2 drivers/net/can/ti_hecc.c | 2 drivers/net/can/usb/ems_usb.c | 2 drivers/net/can/usb/esd_usb.c | 2 drivers/net/can/usb/etas_es58x/es58x_core.c | 2 drivers/net/can/usb/gs_usb.c | 2 drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 2 drivers/net/can/usb/mcba_usb.c | 2 drivers/net/can/usb/peak_usb/pcan_usb_core.c | 2 drivers/net/can/usb/ucan.c | 2 drivers/net/can/usb/usb_8dev.c | 2 drivers/net/can/xilinx_can.c | 2 drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 4 drivers/net/ethernet/aquantia/atlantic/aq_macsec.c | 2 drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c | 18 - drivers/net/ethernet/broadcom/Kconfig | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 1 drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 2 drivers/net/ethernet/freescale/fman/mac.c | 9 drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 2 drivers/net/ethernet/intel/ice/ice_base.c | 2 drivers/net/ethernet/intel/ice/ice_lib.c | 25 + drivers/net/ethernet/intel/ice/ice_lib.h | 1 drivers/net/ethernet/intel/ice/ice_vf_lib.c | 5 drivers/net/ethernet/marvell/mv643xx_eth.c | 1 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c | 1 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 135 ++++++-- drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h | 57 +++ drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 32 +- drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h | 1 drivers/net/ethernet/marvell/prestera/prestera_rxtx.c | 7 drivers/net/ethernet/mediatek/mtk_star_emac.c | 2 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 11 drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c | 31 ++ drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c | 92 ++---- drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h | 24 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 7 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 5 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 14 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 18 - drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c | 14 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 3 drivers/net/ethernet/neterion/s2io.c | 29 + drivers/net/ethernet/ni/nixge.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 11 drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 39 ++ drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 8 drivers/net/ethernet/sunplus/spl2sw_driver.c | 1 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 drivers/net/ethernet/ti/cpsw.c | 2 drivers/net/ethernet/tundra/tsi108_eth.c | 5 drivers/net/hamradio/bpqether.c | 2 drivers/net/macsec.c | 23 - drivers/net/macvlan.c | 4 drivers/net/phy/mscc/mscc_macsec.c | 1 drivers/net/tun.c | 18 - drivers/net/wan/lapbether.c | 3 drivers/net/wireless/ath/ath11k/reg.c | 6 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c | 8 drivers/net/wwan/iosm/iosm_ipc_mux.h | 1 drivers/net/wwan/iosm/iosm_ipc_pcie.c | 11 drivers/net/wwan/iosm/iosm_ipc_wwan.c | 1 drivers/net/wwan/mhi_wwan_mbim.c | 1 drivers/pci/controller/pci-hyperv.c | 22 + drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 2 drivers/phy/ralink/phy-mt7621-pci.c | 3 drivers/phy/st/phy-stm32-usbphyc.c | 2 drivers/platform/x86/hp-wmi.c | 12 drivers/platform/x86/p2sb.c | 15 drivers/soundwire/qcom.c | 9 drivers/spi/spi-intel.c | 8 drivers/spi/spi-mt65xx.c | 23 - drivers/thunderbolt/tb.c | 28 + fs/btrfs/disk-io.c | 4 fs/btrfs/tests/btrfs-tests.c | 2 fs/btrfs/volumes.c | 39 +- fs/btrfs/volumes.h | 2 fs/btrfs/zoned.c | 40 ++ fs/btrfs/zoned.h | 11 fs/nilfs2/segment.c | 15 fs/nilfs2/super.c | 2 fs/nilfs2/the_nilfs.c | 2 fs/udf/namei.c | 2 include/asm-generic/vmlinux.lds.h | 2 include/linux/bpf_verifier.h | 21 + include/linux/can/dev.h | 16 + include/linux/skmsg.h | 2 include/uapi/linux/capability.h | 2 include/uapi/linux/idxd.h | 1 io_uring/kbuf.c | 2 kernel/bpf/verifier.c | 148 ++------- mm/damon/dbgfs.c | 7 mm/hugetlb_vmemmap.c | 1 mm/memremap.c | 1 mm/userfaultfd.c | 2 net/can/af_can.c | 2 net/can/isotp.c | 71 ++-- net/can/j1939/main.c | 3 net/core/skbuff.c | 36 +- net/core/skmsg.c | 7 net/core/sock_map.c | 7 net/ipv4/tcp.c | 2 net/ipv4/tcp_bpf.c | 8 net/ipv6/addrlabel.c | 1 net/mac80211/s1g.c | 3 net/mac80211/tx.c | 5 net/mctp/af_mctp.c | 4 net/mctp/route.c | 2 net/netfilter/nf_tables_api.c | 3 net/netfilter/nfnetlink.c | 1 net/tipc/netlink_compat.c | 2 net/wireless/reg.c | 12 net/wireless/scan.c | 4 sound/arm/pxa2xx-ac97-lib.c | 4 sound/core/memalloc.c | 15 sound/hda/hdac_sysfs.c | 4 sound/pci/hda/hda_intel.c | 3 sound/pci/hda/patch_ca0132.c | 1 sound/pci/hda/patch_realtek.c | 2 sound/usb/card.c | 29 + sound/usb/quirks-table.h | 4 sound/usb/quirks.c | 1 tools/arch/x86/include/asm/msr-index.h | 8 tools/bpf/bpftool/common.c | 3 tools/perf/.gitignore | 1 tools/perf/tests/shell/test_brstack.sh | 5 tools/perf/util/parse-branch-options.c | 4 tools/perf/util/stat-display.c | 6 virt/kvm/kvm_main.c | 13 235 files changed, 1682 insertions(+), 961 deletions(-)
Alex Barba (1):
bnxt_en: fix potentially incorrect return value for ndo_rx_flow_steer
Alexander Potapenko (1):
ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network
Amelie Delaunay (1):
dmaengine: stm32-dma: fix potential race between pause and resume
Andy Shevchenko (1):
platform/x86: p2sb: Don't fail if unknown CPU is found
Antoine Tenart (2):
net: phy: mscc: macsec: clear encryption keys when freeing a flow
net: atlantic: macsec: clear encryption keys from the stack
Ard Biesheuvel (1):
arm64: efi: Fix handling of misaligned runtime regions and drop warning
Arend van Spriel (1):
wifi: cfg80211: fix memory leak in query_regdb_file()
Athira Rajeev (1):
perf stat: Fix printing os->prefix in CSV metrics output
Borislav Petkov (1):
x86/cpu: Restore AMD's DE_CFG MSR after resume
Brian Norris (6):
mmc: cqhci: Provide helper for resetting both SDHCI and CQHCI
mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI
mmc: sdhci-brcmstb: Fix SDHCI_RESET_ALL for CQHCI
mmc: sdhci_am654: Fix SDHCI_RESET_ALL for CQHCI
mmc: sdhci-tegra: Fix SDHCI_RESET_ALL for CQHCI
mms: sdhci-esdhc-imx: Fix SDHCI_RESET_ALL for CQHCI
Chris Mi (1):
net/mlx5: E-switch, Set to legacy mode if failed to change switchdev mode
Christian König (1):
drm/amdgpu: workaround for TLB seq race
Christophe JAILLET (1):
dmaengine: mv_xor_v2: Fix a resource leak in mv_xor_v2_remove()
Chuang Wang (1):
net: macvlan: fix memory leaks of macvlan_common_newlink
Cong Wang (1):
bpf, sock_map: Move cancel_work_sync() out of sock lock
Conor Dooley (1):
riscv: fix reserved memory setup
Dan Carpenter (1):
phy: stm32: fix an error code in probe
Dan Williams (1):
cxl/region: Recycle region ids
Dave Jiang (1):
dmanegine: idxd: reformat opcap output to match bitmap_parse() input
Dexuan Cui (1):
PCI: hv: Fix the definition of vector in hv_compose_msi_msg()
Dillon Varone (2):
drm/amd/display: Acquire FCLK DPM levels on DCN32 drm/amd/display: Set memclk levels to be at least 1 for dcn32
Donglin Peng (1):
perf tools: Add the include/perf/ directory to .gitignore
Doug Brown (1):
dmaengine: pxa_dma: use platform_get_irq_optional
Edson Juliano Drosdeck (1):
ALSA: hda/realtek: Add Positivo C6300 model quirk
Eric Dumazet (1):
net: tun: call napi_schedule_prep() to ensure we own a napi
Evan Quan (1):
ALSA: hda/hdmi - enable runtime pm for more AMD display audio
Felix Kuehling (2):
drm/amdkfd: Fix error handling in criu_checkpoint drm/amdkfd: Fix error handling in kfd_criu_restore_events
Fenghua Yu (1):
dmaengine: idxd: Do not enable user type Work Queue without Shared Virtual Addressing
Fengqian Gao (1):
dmaengine: idxd: fix RO device state error after been disabled/reset
Gaosheng Cui (1):
capabilities: fix undefined behavior in bit shift for CAP_TO_MASK
Geert Uytterhoeven (1):
can: rcar_canfd: Add missing ECC error checks for channels 2-7
Greg Kroah-Hartman (1):
Linux 6.0.9
Guchun Chen (1):
drm/amdgpu: disable BACO on special BEIGE_GOBY card
HW He (2):
net: wwan: iosm: fix memory leak in ipc_wwan_dellink
net: wwan: mhi: fix memory leak in mhi_mbim_dellink
Haibo Chen (1):
mmc: sdhci-esdhc-imx: use the correct host caps for MMC_CAP_8_BIT_DATA
Hou Wenlong (1):
KVM: debugfs: Return retval of simple_attr_open() if it fails
Howard Hsu (1):
wifi: mac80211: Set TWT Information Frame Disabled bit as 1
James Clark (1):
perf test: Fix skipping branch stack sampling test
Jason A. Donenfeld (1):
m68k: Rework BI_VIRT_RNG_SEED as BI_RNG_SEED
Jason Gerecke (1):
HID: wacom: Fix logic used for 3rd barrel switch emulation
Jason Gunthorpe (1):
drm/i915/gvt: Add missing vfio_unregister_group_dev() call
Jens Axboe (1):
io_uring: check for rollover of buffer ID when providing buffers
Jianbo Liu (1):
net/mlx5e: TC, Fix wrong rejection of packet-per-second policing
Jiaxun Yang (1):
MIPS: jump_label: Fix compat branch range check
Jiri Benc (1):
net: gso: fix panic on frag_list with mixed head alloc types
Jisheng Zhang (2):
riscv: process: fix kernel info leakage
riscv: vdso: fix build with llvm
Johan Hovold (1):
phy: qcom-qmp-combo: fix NULL-deref on runtime resume
Johannes Berg (1):
wifi: cfg80211: silence a sparse RCU warning
Johannes Thumshirn (2):
btrfs: zoned: clone zoned device info when cloning a device
btrfs: zoned: initialize device's zone info for seeding
John Thomson (1):
phy: ralink: mt7621-pci: add sentinel to quirks table
Jorge Lopez (1):
platform/x86: hp_wmi: Fix rfkill causing soft blocked wifi
Jouni Högander (1):
drm/i915/psr: Send update also on invalidate
Jun Lei (1):
drm/amd/display: Limit dcn32 to 1950Mhz display clock
Jussi Laako (1):
ALSA: usb-audio: Add DSD support for Accuphase DAC-60
Kees Cook (1):
bpf, verifier: Fix memory leak in array reallocation for stack state
Krzysztof Kozlowski (1):
hwspinlock: qcom: correct MMIO max register for newer SoCs
Kumar Kartikeya Dwivedi (1):
bpf: Add helper macro bpf_for_each_reg_in_vstate
Like Xu (1):
KVM: x86/pmu: Do not speculatively query Intel GP PMCs that don't exist yet
Liu Shixin (1):
btrfs: fix match incorrectly in dev_args_match_device
Lu Wei (1):
tcp: prohibit TCP_REPAIR_OPTIONS if data was already sent
M Chetan Kumar (2):
net: wwan: iosm: fix memory leak in ipc_pcie_read_bios_cfg
net: wwan: iosm: fix invalid mux header type
Ma Jun (1):
drm/amdgpu: Fix the lpfn checking condition in drm buddy
Martin Povišer (1):
dmaengine: apple-admac: Fix grabbing of channels in of_xlate
Matthew Auld (1):
drm/i915/dmabuf: fix sg_table handling in map_dma_buf
Maxim Mikityanskiy (1):
net/mlx5e: Add missing sanity checks for max TX WQE size
Michael Chan (1):
bnxt_en: Fix possible crash in bnxt_hwrm_set_coal()
Michal Jaron (1):
iavf: Fix VF driver counting VLAN 0 filters
Mika Westerberg (1):
spi: intel: Use correct mask for flash and protected regions
Miquel Raynal (1):
dt-bindings: net: tsnep: Fix typo on generic nvmem property
Namhyung Kim (1):
perf stat: Fix crash with --per-node --metric-only in CSV mode
Naoya Horiguchi (1):
arch/x86/mm/hugetlbpage.c: pud_huge() returns 0 when using 2-level paging
Nathan Chancellor (1):
vmlinux.lds.h: Fix placement of '.data..decrypted' section
Nicholas Kazlauskas (2):
drm/amd/display: Fix reg timeout in enc314_enable_fifo drm/amd/display: Update SR watermarks for DCN314
Nico Boehr (1):
KVM: s390: pv: don't allow userspace to set the clock under PV
Niranjana Vishwanathapura (1):
drm/i915: Do not set cache_dirty for DGFX
Norbert Zulinski (1):
ice: Fix spurious interrupt during removal of trusted VF
Oliver Hartkopp (3):
can: j1939: j1939_send_one(): fix missing CAN header initialization
can: isotp: fix tx state handling for echo tx processing
can: dev: fix skb drop check
Pankaj Gupta (1):
mm/memremap.c: map FS_DAX device memory as decrypted
Paolo Bonzini (5):
KVM: x86: use a separate asm-offsets.c file
KVM: SVM: replace regs argument of __svm_vcpu_run() with vcpu_svm
KVM: SVM: adjust register allocation for __svm_vcpu_run()
KVM: SVM: retrieve VMCB from assembly
KVM: SVM: move guest vmsave/vmload back to assembly
Peter Gonda (1):
KVM: SVM: Only dump VMSA to klog at KERN_DEBUG level
Peter Xu (1):
mm/shmem: use page_mapping() to detect page cache for uffd continue
Philip Yang (2):
drm/amdkfd: handle CPU fault on COW mapping drm/amdkfd: Migrate in CPU page fault use current mm
Pu Lehui (1):
bpftool: Fix NULL pointer dereference when pin {PROG, MAP, LINK} without FILE
Rafael Mendonca (1):
KVM: s390: pci: Fix allocation size of aift kzdev elements
Rasmus Villemoes (1):
net: stmmac: dwmac-meson8b: fix meson8b_devm_clk_prepare_enable()
Ratheesh Kannoth (2):
octeontx2-pf: NIX TX overwrites SQ_CTX_HW_S[SQ_INT]
octeontx2-pf: Fix SQE threshold checking
Roger Quadros (1):
net: ethernet: ti: am65-cpsw: Fix segmentation fault at module unload
Roi Dayan (2):
net/mlx5e: Fix tc acts array not to be dependent on enum order net/mlx5e: E-Switch, Fix comparing termination table instance
Roy Novich (1):
net/mlx5: Allow async trigger completion execution on single CPU systems
Ryusuke Konishi (2):
nilfs2: fix deadlock in nilfs_count_free_blocks()
nilfs2: fix use-after-free bug of ns_writer on remount
Sabrina Dubroca (4):
macsec: delete new rxsc when offload fails
macsec: fix secy->n_rx_sc accounting
macsec: fix detection of RXSCs when toggling offloading
macsec: clear encryption keys from the stack after setting up offload
Sanjay R Mehta (1):
thunderbolt: Add DP OUT resource when DP tunnel is discovered
Sean Anderson (1):
net: fman: Unregister ethernet device on removal
Sean Christopherson (1):
KVM: x86/mmu: Block all page faults during kvm_zap_gfn_range()
SeongJae Park (1):
mm/damon/dbgfs: check if rm_contexts input is for a real context
Shay Drory (1):
net/mlx5: fw_reset: Don't try to load device in case PCI isn't working
Shigeru Yoshida (1):
netfilter: Cleanup nft_net->module_list from nf_tables_exit_net()
Shin'ichiro Kawasaki (1):
ata: libata-scsi: fix SYNCHRONIZE CACHE (16) command failure
Srinivas Kandagatla (2):
soundwire: qcom: reinit broadcast completion
soundwire: qcom: check for outanding writes before doing a read
Stefan Binding (1):
ALSA: hda/realtek: Add quirk for ASUS Zenbook using CS35L41
Takashi Iwai (4):
ALSA: memalloc: Don't fall back for SG-buffer with IOMMU
ALSA: usb-audio: Yet more regression for for the delayed card registration
ALSA: usb-audio: Add quirk entry for M-Audio Micro
ALSA: memalloc: Try dma_alloc_noncontiguous() at first
Tan, Tee Min (1):
stmmac: intel: Update PCH PTP clock rate from 200MHz to 204.8MHz
Tim Huang (1):
drm/amd/pm: update SMU IP v13.0.4 msg interface header
Tudor Ambarus (15):
dmaengine: at_hdmac: Fix at_lli struct definition
dmaengine: at_hdmac: Don't start transactions at tx_submit level
dmaengine: at_hdmac: Start transfer for cyclic channels in issue_pending
dmaengine: at_hdmac: Fix premature completion of desc in issue_pending
dmaengine: at_hdmac: Do not call the complete callback on device_terminate_all
dmaengine: at_hdmac: Protect atchan->status with the channel lock
dmaengine: at_hdmac: Fix concurrency problems by removing atc_complete_all()
dmaengine: at_hdmac: Fix concurrency over descriptor
dmaengine: at_hdmac: Free the memset buf without holding the chan lock
dmaengine: at_hdmac: Fix concurrency over the active list
dmaengine: at_hdmac: Fix descriptor handling when issuing it to hardware
dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors
dmaengine: at_hdmac: Don't allow CPU to reorder channel enable
dmaengine: at_hdmac: Fix impossible condition
dmaengine: at_hdmac: Check return code of dma_async_device_register
Vasily Gorbik (1):
mm: hugetlb_vmemmap: include missing linux/moduleparam.h
Ville Syrjälä (3):
drm/i915: Allow more varied alternate fixed modes for panels drm/i915: Simplify intel_panel_add_edid_alt_fixed_modes() drm/i915/sdvo: Grab mode_config.mutex during LVDS init to avoid WARNs
Vlad Buslov (1):
net/mlx5: Bridge, verify LAG state when adding bond to bridge
Wang Yufen (2):
bpf, sockmap: Fix the sk->sk_forward_alloc warning of sk_stream_kill_queues
net: tun: Fix memory leaks of napi_get_frags
Wei Yongjun (2):
mctp: Fix an error handling path in mctp_init()
eth: sp7021: drop free_netdev() from spl2sw_init_netdev()
Wen Gong (1):
wifi: ath11k: avoid deadlock during regulatory update in ath11k_regd_update()
Xian Wang (1):
ALSA: hda/ca0132: add quirk for EVGA Z390 DARK
Xiaochen Shen (1):
dmaengine: idxd: Fix max batch size for Intel IAA
Xin Long (1):
tipc: fix the msg->req tlv len check in tipc_nl_compat_name_table_dump_header
Yang Li (1):
drm/amdkfd: Fix NULL pointer dereference in svm_migrate_to_ram()
Yang Yingliang (6):
ALSA: arm: pxa: pxa2xx-ac97-lib: fix return value check of platform_get_irq()
HID: hyperv: fix possible memory leak in mousevsc_probe()
dmaengine: ti: k3-udma-glue: fix memory leak when register device fail
stmmac: dwmac-loongson: fix missing pci_disable_msi() while module exiting
stmmac: dwmac-loongson: fix missing pci_disable_device() in loongson_dwmac_probe()
stmmac: dwmac-loongson: fix missing of_node_put() while module exiting
Ye Bin (1):
ALSA: hda: fix potential memleak in 'add_widget_node'
Youlin Li (1):
bpf: Fix wrong reg type conversion in release_reference()
Yuan Can (1):
drm/vc4: Fix missing platform_unregister_drivers() call in vc4_drm_register()
YueHaibing (1):
net: broadcom: Fix BCMGENET Kconfig
Zhang Xiaoxu (1):
btrfs: selftests: fix wrong error check in btrfs_free_dummy_root()
ZhangPeng (1):
udf: Fix a slab-out-of-bounds write bug in udf_find_entry()
Zhengchao Shao (15):
wifi: mac80211: fix general-protection-fault in ieee80211_subif_start_xmit()
net: lapbether: fix issue of dev reference count leakage in lapbeth_device_event()
hamradio: fix issue of dev reference count leakage in bpq_device_event()
can: af_can: fix NULL pointer dereference in can_rx_register()
net: lapbether: fix issue of invalid opcode in lapbeth_open()
net: ethernet: mtk-star-emac: disable napi when connect and start PHY failed in mtk_star_enable()
drivers: net: xgene: disable napi when register irq failed in xgene_enet_open()
net: marvell: prestera: fix memory leak in prestera_rxtx_switch_init()
net: nixge: disable napi when enable interrupts failed in nixge_open()
net: cpsw: disable napi in cpsw_ndo_open()
net: cxgb3_main: disable napi when bind qsets failed in cxgb_up()
cxgb4vf: shut down the adapter when t4vf_update_port_info() failed in cxgb4vf_open()
ethernet: s2io: disable napi when start nic failed in s2io_card_up()
net: mv643xx_eth: disable napi when init rxq or txq failed in mv643xx_eth_open()
ethernet: tundra: free irq when alloc ring failed in tsi108_open()
Ziyang Xuan (1):
netfilter: nfnetlink: fix potential dead lock in nfnetlink_rcv_msg()
[email protected] (1):
drm/vc4: hdmi: Fix HSM clock too low on Pi4
zhichao.liu (1):
spi: mediatek: Fix package division error
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/engleder,tsnep.yaml +1 -1
@@ -28,7 +28,7 @@ properties: nvmem-cells: true - nvmem-cells-names: true + nvmem-cell-names: true phy-connection-type: enum:
Documentation/virt/kvm/devices/vm.rst +3 -0
@@ -215,6 +215,7 @@ KVM_S390_VM_TOD_EXT). :Parameters: address of a buffer in user space to store the data (u8) to :Returns: -EFAULT if the given address is not accessible from kernel space; -EINVAL if setting the TOD clock extension to != 0 is not supported + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 3.2. ATTRIBUTE: KVM_S390_VM_TOD_LOW -----------------------------------
@@ -224,6 +225,7 @@ the POP (u64). :Parameters: address of a buffer in user space to store the data (u64) to :Returns: -EFAULT if the given address is not accessible from kernel space + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 3.3. ATTRIBUTE: KVM_S390_VM_TOD_EXT -----------------------------------
@@ -237,6 +239,7 @@ it, it is stored as 0 and not allowed to be set to a value != 0. (kvm_s390_vm_tod_clock) to :Returns: -EFAULT if the given address is not accessible from kernel space; -EINVAL if setting the TOD clock extension to != 0 is not supported + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 4. GROUP: KVM_S390_VM_CRYPTO ============================
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 0 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm64/kernel/efi.c +34 -18
79 lines not on this page · raw message
arch/m68k/include/uapi/asm/bootinfo-virt.h +2 -7
@@ -13,13 +13,8 @@#define BI_VIRT_VIRTIO_BASE 0x8004#define BI_VIRT_CTRL_BASE 0x8005 -/* -* A random seed used to initialize the RNG. Record format: -* -* - length [ 2 bytes, 16-bit big endian ] -* - seed data [ `length` bytes, padded to preserve 2-byte alignment ] -*/ -#define BI_VIRT_RNG_SEED 0x8006 +/* No longer used -- replaced with BI_RNG_SEED -- but don't reuse this index: +* #define BI_VIRT_RNG_SEED 0x8006 */ #define VIRT_BOOTI_VERSION MK_BI_VERSION(2, 0)
arch/m68k/include/uapi/asm/bootinfo.h +7 -0
@@ -64,6 +64,13 @@ struct mem_info {/* (struct mem_info) */ #define BI_COMMAND_LINE 0x0007/* kernel command line parameters */ /* (string) */ +/* +* A random seed used to initialize the RNG. Record format: +* +* - length [ 2 bytes, 16-bit big endian ] +* - seed data [ `length` bytes, padded to preserve 4-byte struct alignment ] +*/ +#define BI_RNG_SEED 0x0008/*
arch/m68k/kernel/setup_mm.c +12 -0
@@ -25,6 +25,7 @@#include <linux/module.h> #include <linux/nvram.h> #include <linux/initrd.h> +#include <linux/random.h> #include <asm/bootinfo.h> #include <asm/byteorder.h>
@@ -151,6 +152,17 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record) sizeof(m68k_command_line));break ; +case BI_RNG_SEED : { +u16 len =be16_to_cpup (data); +add_bootloader_randomness (data +2 , len); +/* +* Zero the data to preserve forward secrecy, and zero the +* length to prevent kexec from using it. +*/ +memzero_explicit ((void *)data, len +2 ); +break ; + } +default :if (MACH_IS_AMIGA ) unknown =amiga_parse_bootinfo (record);
arch/m68k/virt/config.c +0 -11
@@ -2,7 +2,6 @@#include <linux/reboot.h> #include <linux/serial_core.h> -#include <linux/random.h> #include <clocksource/timer-goldfish.h> #include <asm/bootinfo.h>
@@ -93,16 +92,6 @@ int __init virt_parse_bootinfo(const struct bi_record *record) data +=4 ; virt_bi_data.virtio.irq =be32_to_cpup (data);break ; -case BI_VIRT_RNG_SEED : { -u16 len =be16_to_cpup (data); -add_bootloader_randomness (data +2 , len); -/* -* Zero the data to preserve forward secrecy, and zero the -* length to prevent kexec from using it. -*/ -memzero_explicit ((void *)data, len +2 ); -break ; - }default : unknown =1 ;break ;
arch/mips/kernel/jump_label.c +1 -1
@@ -56,7 +56,7 @@ void arch_jump_label_transform(struct jump_entry *e,* The branch offset must fit in the instruction's 26 * bit field. */ -WARN_ON ((offset >=BIT (25 )) || +WARN_ON ((offset >= (long )BIT (25 )) || (offset < -(long )BIT (25 ))); insn.j_format.opcode = bc6_op;
arch/riscv/kernel/process.c +2 -0
@@ -164,6 +164,8 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)unsigned long tls = args->tls;struct pt_regs *childregs =task_pt_regs (p); +memset (&p->thread.s,0 ,sizeof (p->thread.s)); +/* p->thread holds context to be restored by __switch_to() */ if (unlikely (args->fn)) {/* Kernel thread */
arch/riscv/kernel/setup.c +1 -0
@@ -283,6 +283,7 @@ void __init setup_arch(char **cmdline_p) else pr_err("No DTB found in kernel mappings\n");#endif +early_init_fdt_scan_reserved_mem ();misc_mem_init ();init_resources ();
arch/riscv/kernel/vdso/Makefile +1 -1
@@ -30,7 +30,7 @@ obj-y += vdso.o CPPFLAGS_vdso.lds += -P -C -U$(ARCH) # Disable -pg to prevent insert call site -CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os +CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) # Disable profiling and instrumentation for VDSO code GCOV_PROFILE := n
arch/riscv/mm/init.c +0 -1
@@ -262,7 +262,6 @@ static void __init setup_bootmem(void)memblock_reserve (dtb_early_pa,fdt_totalsize (dtb_early_va)); } -early_init_fdt_scan_reserved_mem ();dma_contiguous_reserve (dma32_phys_limit);if (IS_ENABLED (CONFIG_64BIT ))hugetlb_cma_reserve (PUD_SHIFT -PAGE_SHIFT );
arch/s390/kvm/kvm-s390.c +17 -9
@@ -1207,6 +1207,8 @@ static int kvm_s390_vm_get_migration(struct kvm *kvm,return 0 ; } +static void __kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod); +static int kvm_s390_set_tod_ext (struct kvm *kvm,struct kvm_device_attr *attr) {struct kvm_s390_vm_tod_clock gtod;
@@ -1216,7 +1218,7 @@ static int kvm_s390_set_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr)if (!test_kvm_facility (kvm,139 ) && gtod.epoch_idx)return -EINVAL ; -kvm_s390_set_tod_clock (kvm, >od); +__kvm_s390_set_tod_clock (kvm, >od);VM_EVENT (kvm,3 ,"SET: TOD extension: 0x%x, TOD base: 0x%llx" , gtod.epoch_idx, gtod.tod);
@@ -1247,7 +1249,7 @@ static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr) sizeof(gtod.tod)))return -EFAULT ; -kvm_s390_set_tod_clock (kvm, >od); +__kvm_s390_set_tod_clock (kvm, >od);VM_EVENT (kvm,3 ,"SET: TOD base: 0x%llx" , gtod.tod);return 0 ; }
@@ -1259,6 +1261,16 @@ static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)if (attr->flags)return -EINVAL ; +mutex_lock (&kvm->lock); +/* +* For protected guests, the TOD is managed by the ultravisor, so trying +* to change it will never bring the expected results. +*/ +if (kvm_s390_pv_is_protected (kvm)) { + ret = -EOPNOTSUPP ; + goto out_unlock; + } +switch (attr->attr) {case KVM_S390_VM_TOD_EXT : ret =kvm_s390_set_tod_ext (kvm, attr);
@@ -1273,6 +1285,9 @@ static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr) ret = -ENXIO ;break ; } + +out_unlock: +mutex_unlock (&kvm->lock);return ret; }
@@ -4379,13 +4394,6 @@ static void __kvm_s390_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tpreempt_enable (); } -void kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod) -{ -mutex_lock (&kvm->lock); -__kvm_s390_set_tod_clock (kvm, gtod); -mutex_unlock (&kvm->lock); -} -int kvm_s390_try_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod) {if (!mutex_trylock (&kvm->lock))
arch/s390/kvm/kvm-s390.h +0 -1
@@ -363,7 +363,6 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu);int kvm_s390_handle_sigp_pei (struct kvm_vcpu *vcpu);/* implemented in kvm-s390.c */ -void kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod);int kvm_s390_try_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod);long kvm_arch_fault_in_page (struct kvm_vcpu *vcpu,gpa_t gpa,int writable);int kvm_s390_store_status_unloaded (struct kvm_vcpu *vcpu,unsigned long addr);
arch/s390/kvm/pci.c +1 -1
@@ -126,7 +126,7 @@ int kvm_s390_pci_aen_init(u8 nisc)return -EPERM ;mutex_lock (&aift->aift_lock); - aift->kzdev =kcalloc (ZPCI_NR_DEVICES ,sizeof (struct kvm_zdev ), + aift->kzdev =kcalloc (ZPCI_NR_DEVICES ,sizeof (struct kvm_zdev *),GFP_KERNEL );if (!aift->kzdev) { rc = -ENOMEM ;
arch/x86/include/asm/msr-index.h +5 -3
@@ -535,6 +535,11 @@#define MSR_AMD64_CPUID_FN_1 0xc0011004#define MSR_AMD64_LS_CFG 0xc0011020#define MSR_AMD64_DC_CFG 0xc0011022 + +#define MSR_AMD64_DE_CFG 0xc0011029 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT 1 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT) +#define MSR_AMD64_BU_CFG2 0xc001102a#define MSR_AMD64_IBSFETCHCTL 0xc0011030#define MSR_AMD64_IBSFETCHLINAD 0xc0011031
@@ -637,9 +642,6 @@#define FAM10H_MMIO_CONF_BASE_MASK 0xfffffffULL#define FAM10H_MMIO_CONF_BASE_SHIFT 20#define MSR_FAM10H_NODE_ID 0xc001100c -#define MSR_F10H_DECFG 0xc0011029 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT 1 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE BIT_ULL(MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT)/* K8 MSRs */ #define MSR_K8_TOP_MEM1 0xc001001a
arch/x86/kernel/asm-offsets.c +0 -6
@@ -19,7 +19,6 @@#include <asm/suspend.h> #include <asm/tlbflush.h> #include <asm/tdx.h> -#include "../kvm/vmx/vmx.h" #ifdef CONFIG_XEN #include <xen/interface/xen.h>
@@ -108,9 +107,4 @@ static void __used common(void)OFFSET (TSS_sp0, tss_struct, x86_tss.sp0);OFFSET (TSS_sp1, tss_struct, x86_tss.sp1);OFFSET (TSS_sp2, tss_struct, x86_tss.sp2); - -if (IS_ENABLED (CONFIG_KVM_INTEL )) { -BLANK (); -OFFSET (VMX_spec_ctrl, vcpu_vmx, spec_ctrl); - } }
arch/x86/kernel/cpu/amd.c +2 -4
@@ -770,8 +770,6 @@ static void init_amd_gh(struct cpuinfo_x86 *c)set_cpu_bug (c,X86_BUG_AMD_TLB_MMATCH ); } -#define MSR_AMD64_DE_CFG 0xC0011029 -static void init_amd_ln (struct cpuinfo_x86 *c) {/*
@@ -965,8 +963,8 @@ static void init_amd(struct cpuinfo_x86 *c)* msr_set_bit() uses the safe accessors, too, even if the MSR * is not present. */ -msr_set_bit (MSR_F10H_DECFG , -MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT ); +msr_set_bit (MSR_AMD64_DE_CFG , +MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT );/* A serializing LFENCE stops RDTSC speculation */ set_cpu_cap (c,X86_FEATURE_LFENCE_RDTSC );
arch/x86/kernel/cpu/hygon.c +2 -2
@@ -326,8 +326,8 @@ static void init_hygon(struct cpuinfo_x86 *c)* msr_set_bit() uses the safe accessors, too, even if the MSR * is not present. */ -msr_set_bit (MSR_F10H_DECFG , -MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT ); +msr_set_bit (MSR_AMD64_DE_CFG , +MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT );/* A serializing LFENCE stops RDTSC speculation */ set_cpu_cap (c,X86_FEATURE_LFENCE_RDTSC );
arch/x86/kvm/.gitignore new file +2 -0
@@ -0,0 +1,2 @@ +/kvm-asm-offsets.s +/kvm-asm-offsets.h
arch/x86/kvm/Makefile +12 -0
@@ -34,3 +34,15 @@ endif obj-$(CONFIG_KVM) += kvm.o obj-$(CONFIG_KVM_INTEL) += kvm-intel.o obj-$(CONFIG_KVM_AMD) += kvm-amd.o + +AFLAGS_svm/vmenter.o := -iquote $(obj) +$(obj)/svm/vmenter.o: $(obj)/kvm-asm-offsets.h + +AFLAGS_vmx/vmenter.o := -iquote $(obj) +$(obj)/vmx/vmenter.o: $(obj)/kvm-asm-offsets.h + +$(obj)/kvm-asm-offsets.h: $(obj)/kvm-asm-offsets.s FORCE + $(call filechk,offsets,__KVM_ASM_OFFSETS_H__) + +targets += kvm-asm-offsets.s +clean-files += kvm-asm-offsets.h
arch/x86/kvm/kvm-asm-offsets.c new file +27 -0
@@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Generate definitions needed by assembly language modules. +* This code generates raw asm output which is post-processed to extract +* and format the required data. +*/ +#define COMPILE_OFFSETS + +#include <linux/kbuild.h> +#include "vmx/vmx.h" +#include "svm/svm.h" + +static void __used common (void ) +{ +if (IS_ENABLED (CONFIG_KVM_AMD )) { +BLANK (); +OFFSET (SVM_vcpu_arch_regs, vcpu_svm, vcpu.arch.regs); +OFFSET (SVM_current_vmcb, vcpu_svm, current_vmcb); +OFFSET (SVM_vmcb01, vcpu_svm, vmcb01); +OFFSET (KVM_VMCB_pa, kvm_vmcb_info, pa); + } + +if (IS_ENABLED (CONFIG_KVM_INTEL )) { +BLANK (); +OFFSET (VMX_spec_ctrl, vcpu_vmx, spec_ctrl); + } +}
arch/x86/kvm/mmu/mmu.c +2 -2
@@ -6044,7 +6044,7 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end)write_lock (&kvm->mmu_lock); -kvm_mmu_invalidate_begin (kvm, gfn_start, gfn_end); +kvm_mmu_invalidate_begin (kvm,0 ,-1ul ); flush =kvm_rmap_zap_gfn_range (kvm, gfn_start, gfn_end);
@@ -6058,7 +6058,7 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end)kvm_flush_remote_tlbs_with_address (kvm, gfn_start, gfn_end - gfn_start); -kvm_mmu_invalidate_end (kvm, gfn_start, gfn_end); +kvm_mmu_invalidate_end (kvm,0 ,-1ul );write_unlock (&kvm->mmu_lock); }
arch/x86/kvm/svm/sev.c +1 -1
@@ -605,7 +605,7 @@ static int sev_es_sync_vmsa(struct vcpu_svm *svm) save->dr6 = svm->vcpu.arch.dr6;pr_debug ("Virtual Machine Save Area (VMSA):\n" ); -print_hex_dump (KERN_CONT ,"" ,DUMP_PREFIX_NONE ,16 ,1 , save,sizeof (*save), false); +print_hex_dump_debug ("" ,DUMP_PREFIX_NONE ,16 ,1 , save,sizeof (*save), false);return 0 ; }
arch/x86/kvm/svm/svm.c +7 -17
@@ -2711,9 +2711,9 @@ static int svm_get_msr_feature(struct kvm_msr_entry *msr) msr->data =0 ;switch (msr->index) { -case MSR_F10H_DECFG : -if (boot_cpu_has (X86_FEATURE_LFENCE_RDTSC )) - msr->data |=MSR_F10H_DECFG_LFENCE_SERIALIZE ; +case MSR_AMD64_DE_CFG : +if (cpu_feature_enabled (X86_FEATURE_LFENCE_RDTSC )) + msr->data |=MSR_AMD64_DE_CFG_LFENCE_SERIALIZE ;break ;case MSR_IA32_PERF_CAPABILITIES :return 0 ;
@@ -2814,7 +2814,7 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) msr_info->data =0x1E ; }break ; -case MSR_F10H_DECFG : +case MSR_AMD64_DE_CFG : msr_info->data = svm->msr_decfg;break ;default :
@@ -3043,7 +3043,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)case MSR_VM_IGNNE :vcpu_unimpl (vcpu,"unimplemented wrmsr: 0x%x data 0x%llx\n" , ecx, data);break ; -case MSR_F10H_DECFG : { +case MSR_AMD64_DE_CFG : {struct kvm_msr_entry msr_entry; msr_entry.index = msr->index;
@@ -3915,25 +3915,15 @@ static fastpath_t svm_exit_handlers_fastpath(struct kvm_vcpu *vcpu) static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) {struct vcpu_svm *svm =to_svm (vcpu); -unsigned long vmcb_pa = svm->current_vmcb->pa;guest_state_enter_irqoff ();if (sev_es_guest (vcpu->kvm)) { -__svm_sev_es_vcpu_run (vmcb_pa); +__svm_sev_es_vcpu_run (svm); }else {struct svm_cpu_data *sd =per_cpu (svm_data, vcpu->cpu); -/* -* Use a single vmcb (vmcb01 because it's always valid) for -* context switching guest state via VMLOAD/VMSAVE, that way -* the state doesn't need to be copied between vmcb01 and -* vmcb02 when switching vmcbs for nested virtualization. -*/ -vmload (svm->vmcb01.pa); -__svm_vcpu_run (vmcb_pa, (unsigned long *)&vcpu->arch.regs); -vmsave (svm->vmcb01.pa); - +__svm_vcpu_run (svm);vmload (__sme_page_pa (sd->save_area)); }
arch/x86/kvm/svm/svm.h +2 -2
@@ -683,7 +683,7 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm);/* vmenter.S */ -void __svm_sev_es_vcpu_run (unsigned long vmcb_pa); -void __svm_vcpu_run (unsigned long vmcb_pa,unsigned long *regs); +void __svm_sev_es_vcpu_run (struct vcpu_svm *svm); +void __svm_vcpu_run (struct vcpu_svm *svm);#endif
arch/x86/kvm/svm/vmenter.S +81 -53
196 lines not on this page · raw message
arch/x86/kvm/vmx/vmenter.S +1 -1
@@ -1,12 +1,12 @@ /* SPDX-License-Identifier: GPL-2.0 */ #include <linux/linkage.h> #include <asm/asm.h> -#include <asm/asm-offsets.h> #include <asm/bitsperlong.h> #include <asm/kvm_vcpu_regs.h> #include <asm/nospec-branch.h> #include <asm/percpu.h> #include <asm/segment.h> +#include "kvm-asm-offsets.h" #include "run_flags.h" #define WORD_SIZE (BITS_PER_LONG / 8)
arch/x86/kvm/x86.c +3 -13
@@ -1431,20 +1431,10 @@ static const u32 msrs_to_save_all[] = {MSR_ARCH_PERFMON_PERFCTR0 +2 ,MSR_ARCH_PERFMON_PERFCTR0 +3 ,MSR_ARCH_PERFMON_PERFCTR0 +4 ,MSR_ARCH_PERFMON_PERFCTR0 +5 ,MSR_ARCH_PERFMON_PERFCTR0 +6 ,MSR_ARCH_PERFMON_PERFCTR0 +7 , -MSR_ARCH_PERFMON_PERFCTR0 +8 ,MSR_ARCH_PERFMON_PERFCTR0 +9 , -MSR_ARCH_PERFMON_PERFCTR0 +10 ,MSR_ARCH_PERFMON_PERFCTR0 +11 , -MSR_ARCH_PERFMON_PERFCTR0 +12 ,MSR_ARCH_PERFMON_PERFCTR0 +13 , -MSR_ARCH_PERFMON_PERFCTR0 +14 ,MSR_ARCH_PERFMON_PERFCTR0 +15 , -MSR_ARCH_PERFMON_PERFCTR0 +16 ,MSR_ARCH_PERFMON_PERFCTR0 +17 ,MSR_ARCH_PERFMON_EVENTSEL0 ,MSR_ARCH_PERFMON_EVENTSEL1 ,MSR_ARCH_PERFMON_EVENTSEL0 +2 ,MSR_ARCH_PERFMON_EVENTSEL0 +3 ,MSR_ARCH_PERFMON_EVENTSEL0 +4 ,MSR_ARCH_PERFMON_EVENTSEL0 +5 ,MSR_ARCH_PERFMON_EVENTSEL0 +6 ,MSR_ARCH_PERFMON_EVENTSEL0 +7 , -MSR_ARCH_PERFMON_EVENTSEL0 +8 ,MSR_ARCH_PERFMON_EVENTSEL0 +9 , -MSR_ARCH_PERFMON_EVENTSEL0 +10 ,MSR_ARCH_PERFMON_EVENTSEL0 +11 , -MSR_ARCH_PERFMON_EVENTSEL0 +12 ,MSR_ARCH_PERFMON_EVENTSEL0 +13 , -MSR_ARCH_PERFMON_EVENTSEL0 +14 ,MSR_ARCH_PERFMON_EVENTSEL0 +15 , -MSR_ARCH_PERFMON_EVENTSEL0 +16 ,MSR_ARCH_PERFMON_EVENTSEL0 +17 ,MSR_IA32_PEBS_ENABLE ,MSR_IA32_DS_AREA ,MSR_PEBS_DATA_CFG , MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3,
@@ -1551,7 +1541,7 @@ static const u32 msr_based_features_all[] = {MSR_IA32_VMX_EPT_VPID_CAP ,MSR_IA32_VMX_VMFUNC , -MSR_F10H_DECFG , +MSR_AMD64_DE_CFG ,MSR_IA32_UCODE_REV ,MSR_IA32_ARCH_CAPABILITIES , MSR_IA32_PERF_CAPABILITIES,
@@ -7005,12 +6995,12 @@ static void kvm_init_msr_list(void) intel_pt_validate_hw_cap(PT_CAP_num_address_ranges) * 2)continue ;break ; - case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR0 + 17: + case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR0 + 7:if (msrs_to_save_all[i] -MSR_ARCH_PERFMON_PERFCTR0 >=min (INTEL_PMC_MAX_GENERIC , kvm_pmu_cap.num_counters_gp))continue ;break ; - case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL0 + 17: + case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL0 + 7:if (msrs_to_save_all[i] -MSR_ARCH_PERFMON_EVENTSEL0 >=min (INTEL_PMC_MAX_GENERIC , kvm_pmu_cap.num_counters_gp))continue ;
arch/x86/mm/hugetlbpage.c +4 -0
@@ -37,8 +37,12 @@ int pmd_huge(pmd_t pmd)*/ int pud_huge (pud_t pud) { +#if CONFIG_PGTABLE_LEVELS >2 return !pud_none (pud) && (pud_val (pud) & (_PAGE_PRESENT|_PAGE_PSE)) != _PAGE_PRESENT; +#else +return 0 ; +#endif }#ifdef CONFIG_HUGETLB_PAGE
arch/x86/power/cpu.c +1 -0
@@ -519,6 +519,7 @@ static void pm_save_spec_msr(void)MSR_TSX_FORCE_ABORT ,MSR_IA32_MCU_OPT_CTRL ,MSR_AMD64_LS_CFG , +MSR_AMD64_DE_CFG , };msr_build_context (spec_msr_id,ARRAY_SIZE (spec_msr_id));
drivers/ata/libata-scsi.c +3 -0
@@ -3266,6 +3266,7 @@ static unsigned int ata_scsiop_maint_in(struct ata_scsi_args *args, u8 *rbuf)case REPORT_LUNS :case REQUEST_SENSE :case SYNCHRONIZE_CACHE : +case SYNCHRONIZE_CACHE_16 :case REZERO_UNIT :case SEEK_6 :case SEEK_10 :
@@ -3924,6 +3925,7 @@ static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)return ata_scsi_write_same_xlat;case SYNCHRONIZE_CACHE : +case SYNCHRONIZE_CACHE_16 :if (ata_try_flush_cache (dev))return ata_scsi_flush_xlat;break ;
@@ -4147,6 +4149,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd)* turning this into a no-op. */ case SYNCHRONIZE_CACHE : +case SYNCHRONIZE_CACHE_16 : fallthrough;/* no-op's, complete with success */
drivers/cxl/core/region.c +20 -0
@@ -1533,9 +1533,24 @@ static const struct attribute_group *region_groups[] = {static void cxl_region_release (struct device *dev) { +struct cxl_root_decoder *cxlrd =to_cxl_root_decoder (dev->parent);struct cxl_region *cxlr =to_cxl_region (dev); +int id =atomic_read (&cxlrd->region_id); + +/* +* Try to reuse the recently idled id rather than the cached +* next id to prevent the region id space from increasing +* unnecessarily. +*/ +if (cxlr->id < id) +if (atomic_try_cmpxchg (&cxlrd->region_id, &id, cxlr->id)) { +memregion_free (id); + goto out; + }memregion_free (cxlr->id); +out: +put_device (dev->parent);kfree (cxlr); }
@@ -1597,6 +1612,11 @@ static struct cxl_region *cxl_region_alloc(struct cxl_root_decoder *cxlrd, int idevice_initialize (dev);lockdep_set_class (&dev->mutex, &cxl_region_key); dev->parent = &cxlrd->cxlsd.cxld.dev; +/* +* Keep root decoder pinned through cxl_region_release to fixup +* region id allocations +*/ +get_device (dev->parent);device_set_pm_not_required (dev); dev->bus = &cxl_bus_type; dev->type = &cxl_region_type;
drivers/dma/apple-admac.c +1 -1
@@ -490,7 +490,7 @@ static struct dma_chan *admac_dma_of_xlate(struct of_phandle_args *dma_spec,return NULL ; } -return &ad->channels[index].chan; +return dma_get_slave_channel (&ad->channels[index].chan); }static int admac_drain_reports (struct admac_data *ad,int channo)
drivers/dma/at_hdmac.c +60 -93
274 lines not on this page · raw message
drivers/dma/at_hdmac_regs.h +5 -5
@@ -186,13 +186,13 @@/* LLI == Linked List Item; aka DMA buffer descriptor */ struct at_lli {/* values that are not changed by hardware */ -dma_addr_t saddr; -dma_addr_t daddr; +u32 saddr; +u32 daddr;/* value that may get written back: */ -u32 ctrla; +u32 ctrla;/* more values that are not changed by hardware */ -u32 ctrlb; -dma_addr_t dscr;/* chain to next lli */ +u32 ctrlb; +u32 dscr;/* chain to next lli */ };/**
drivers/dma/idxd/cdev.c +18 -0
@@ -312,6 +312,24 @@ static int idxd_user_drv_probe(struct idxd_dev *idxd_dev)if (idxd->state !=IDXD_DEV_ENABLED )return -ENXIO ; +/* +* User type WQ is enabled only when SVA is enabled for two reasons: +* - If no IOMMU or IOMMU Passthrough without SVA, userspace +* can directly access physical address through the WQ. +* - The IDXD cdev driver does not provide any ways to pin +* user pages and translate the address from user VA to IOVA or +* PA without IOMMU SVA. Therefore the application has no way +* to instruct the device to perform DMA function. This makes +* the cdev not usable for normal application usage. +*/ +if (!device_user_pasid_enabled (idxd)) { + idxd->cmd_status =IDXD_SCMD_WQ_USER_NO_IOMMU ; +dev_dbg (&idxd->pdev->dev, +"User type WQ cannot be enabled without SVA.\n" ); + +return -EOPNOTSUPP ; + } +mutex_lock (&wq->wq_lock); wq->type =IDXD_WQT_USER ; rc =drv_enable_wq (wq);
drivers/dma/idxd/device.c +17 -9
@@ -388,7 +388,7 @@ static void idxd_wq_disable_cleanup(struct idxd_wq *wq)clear_bit (WQ_FLAG_BLOCK_ON_FAULT , &wq->flags);memset (wq->name,0 ,WQ_NAME_SIZE ); wq->max_xfer_bytes =WQ_DEFAULT_MAX_XFER ; - wq->max_batch_size =WQ_DEFAULT_MAX_BATCH ; +idxd_wq_set_max_batch_size (idxd->data->type, wq,WQ_DEFAULT_MAX_BATCH ); }static void idxd_wq_device_reset_cleanup (struct idxd_wq *wq)
@@ -724,13 +724,21 @@ static void idxd_device_wqs_clear_state(struct idxd_device *idxd)void idxd_device_clear_state (struct idxd_device *idxd) { -if (!test_bit (IDXD_FLAG_CONFIGURABLE , &idxd->flags)) -return ; +/* IDXD is always disabled. Other states are cleared only when IDXD is configurable. */ +if (test_bit (IDXD_FLAG_CONFIGURABLE , &idxd->flags)) { +/* +* Clearing wq state is protected by wq lock. +* So no need to be protected by device lock. +*/ +idxd_device_wqs_clear_state (idxd); + +spin_lock (&idxd->dev_lock); +idxd_groups_clear_state (idxd); +idxd_engines_clear_state (idxd); + }else { +spin_lock (&idxd->dev_lock); + } -idxd_device_wqs_clear_state (idxd); -spin_lock (&idxd->dev_lock); -idxd_groups_clear_state (idxd); -idxd_engines_clear_state (idxd); idxd->state =IDXD_DEV_DISABLED ;spin_unlock (&idxd->dev_lock); }
@@ -863,7 +871,7 @@ static int idxd_wq_config_write(struct idxd_wq *wq)/* bytes 12-15 */ wq->wqcfg->max_xfer_shift =ilog2 (wq->max_xfer_bytes); - wq->wqcfg->max_batch_shift =ilog2 (wq->max_batch_size); +idxd_wqcfg_set_max_batch_shift (idxd->data->type, wq->wqcfg,ilog2 (wq->max_batch_size));dev_dbg (dev,"WQ %d CFGs\n" , wq->id);for (i =0 ; i <WQCFG_STRIDES (idxd); i++) {
@@ -1031,7 +1039,7 @@ static int idxd_wq_load_config(struct idxd_wq *wq) wq->priority = wq->wqcfg->priority; wq->max_xfer_bytes =1ULL << wq->wqcfg->max_xfer_shift; - wq->max_batch_size =1ULL << wq->wqcfg->max_batch_shift; +idxd_wq_set_max_batch_size (idxd->data->type, wq,1U << wq->wqcfg->max_batch_shift);for (i =0 ; i <WQCFG_STRIDES (idxd); i++) { wqcfg_offset =WQCFG_OFFSET (idxd, wq->id, i);
drivers/dma/idxd/idxd.h +34 -0
@@ -308,6 +308,8 @@ struct idxd_device {struct work_struct work;struct idxd_pmu *idxd_pmu; + +unsigned long *opcap_bmap; };/* IDXD software descriptor */
@@ -540,6 +542,38 @@ static inline int idxd_wq_refcount(struct idxd_wq *wq)return wq->client_count; }; +/* +* Intel IAA does not support batch processing. +* The max batch size of device, max batch size of wq and +* max batch shift of wqcfg should be always 0 on IAA. +*/ +static inline void idxd_set_max_batch_size (int idxd_type,struct idxd_device *idxd, +u32 max_batch_size) +{ +if (idxd_type ==IDXD_TYPE_IAX ) + idxd->max_batch_size =0 ; +else + idxd->max_batch_size = max_batch_size; +} + +static inline void idxd_wq_set_max_batch_size (int idxd_type,struct idxd_wq *wq, +u32 max_batch_size) +{ +if (idxd_type ==IDXD_TYPE_IAX ) + wq->max_batch_size =0 ; +else + wq->max_batch_size = max_batch_size; +} + +static inline void idxd_wqcfg_set_max_batch_shift (int idxd_type,union wqcfg *wqcfg, +u32 max_batch_shift) +{ +if (idxd_type ==IDXD_TYPE_IAX ) + wqcfg->max_batch_shift =0 ; +else + wqcfg->max_batch_shift = max_batch_shift; +} +int __must_check __idxd_driver_register (struct idxd_device_driver *idxd_drv,struct module *module,const char *mod_name);#define idxd_driver_register (driver) \
drivers/dma/idxd/init.c +22 -2
@@ -177,7 +177,7 @@ static int idxd_setup_wqs(struct idxd_device *idxd)init_completion (&wq->wq_dead);init_completion (&wq->wq_resurrect); wq->max_xfer_bytes =WQ_DEFAULT_MAX_XFER ; - wq->max_batch_size =WQ_DEFAULT_MAX_BATCH ; +idxd_wq_set_max_batch_size (idxd->data->type, wq,WQ_DEFAULT_MAX_BATCH ); wq->enqcmds_retries =IDXD_ENQCMDS_RETRIES ; wq->wqcfg =kzalloc_node (idxd->wqcfg_size,GFP_KERNEL ,dev_to_node (dev));if (!wq->wqcfg) {
@@ -369,6 +369,19 @@ static void idxd_read_table_offsets(struct idxd_device *idxd)dev_dbg (dev,"IDXD Perfmon Offset: %#x\n" , idxd->perfmon_offset); } +static void multi_u64_to_bmap (unsigned long *bmap,u64 *val,int count) +{ +int i, j, nr; + +for (i =0 , nr =0 ; i < count; i++) { +for (j =0 ; j <BITS_PER_LONG_LONG ; j++) { +if (val[i] &BIT (j)) +set_bit (nr, bmap); + nr++; + } + } +} +static void idxd_read_caps (struct idxd_device *idxd) {struct device *dev = &idxd->pdev->dev;
@@ -389,7 +402,7 @@ static void idxd_read_caps(struct idxd_device *idxd) idxd->max_xfer_bytes =1ULL << idxd->hw.gen_cap.max_xfer_shift;dev_dbg (dev,"max xfer size: %llu bytes\n" , idxd->max_xfer_bytes); - idxd->max_batch_size =1U << idxd->hw.gen_cap.max_batch_shift; +idxd_set_max_batch_size (idxd->data->type, idxd,1U << idxd->hw.gen_cap.max_batch_shift);dev_dbg (dev,"max batch size: %u\n" , idxd->max_batch_size);if (idxd->hw.gen_cap.config_en)set_bit (IDXD_FLAG_CONFIGURABLE , &idxd->flags);
@@ -427,6 +440,7 @@ static void idxd_read_caps(struct idxd_device *idxd) IDXD_OPCAP_OFFSET + i * sizeof(u64));dev_dbg (dev,"opcap[%d]: %#llx\n" , i, idxd->hw.opcap.bits[i]); } +multi_u64_to_bmap (idxd->opcap_bmap, &idxd->hw.opcap.bits[0 ],4 ); }static struct idxd_device *idxd_alloc (struct pci_dev *pdev,struct idxd_driver_data *data)
@@ -448,6 +462,12 @@ static struct idxd_device *idxd_alloc(struct pci_dev *pdev, struct idxd_driver_dif (idxd->id <0 )return NULL ; + idxd->opcap_bmap =bitmap_zalloc_node (IDXD_MAX_OPCAP_BITS ,GFP_KERNEL ,dev_to_node (dev)); +if (!idxd->opcap_bmap) { +ida_free (&idxd_ida, idxd->id); +return NULL ; + } +device_initialize (conf_dev); conf_dev->parent = dev; conf_dev->bus = &dsa_bus_type;
drivers/dma/idxd/registers.h +2 -0
@@ -90,6 +90,8 @@ struct opcap {u64 bits[4 ]; }; +#define IDXD_MAX_OPCAP_BITS 256U +#define IDXD_OPCAP_OFFSET 0x40#define IDXD_TABLE_OFFSET 0x60
drivers/dma/idxd/sysfs.c +3 -8
@@ -961,7 +961,7 @@ static ssize_t wq_max_batch_size_store(struct device *dev, struct device_attribuif (batch_size > idxd->max_batch_size)return -EINVAL ; - wq->max_batch_size = (u32 )batch_size; +idxd_wq_set_max_batch_size (idxd->data->type, wq, (u32 )batch_size);return count; }
@@ -1177,14 +1177,8 @@ static ssize_t op_cap_show(struct device *dev, struct device_attribute *attr, char *buf) { struct idxd_device *idxd = confdev_to_idxd(dev); -int i, rc =0 ; - -for (i =0 ; i <4 ; i++) - rc +=sysfs_emit_at (buf, rc,"%#llx " , idxd->hw.opcap.bits[i]); - rc--; - rc +=sysfs_emit_at (buf, rc,"\n" ); -return rc; +return sysfs_emit (buf,"%*pb\n" ,IDXD_MAX_OPCAP_BITS , idxd->opcap_bmap); }static DEVICE_ATTR_RO (op_cap);
@@ -1408,6 +1402,7 @@ static void idxd_conf_device_release(struct device *dev)kfree (idxd->wqs);kfree (idxd->engines);ida_free (&idxd_ida, idxd->id); +bitmap_free (idxd->opcap_bmap);kfree (idxd); }
drivers/dma/mv_xor_v2.c +1 -0
@@ -893,6 +893,7 @@ static int mv_xor_v2_remove(struct platform_device *pdev)tasklet_kill (&xor_dev->irq_tasklet);clk_disable_unprepare (xor_dev->clk); +clk_disable_unprepare (xor_dev->reg_clk);return 0 ; }
drivers/dma/pxa_dma.c +2 -2
@@ -1247,14 +1247,14 @@ static int pxad_init_phys(struct platform_device *op,return -ENOMEM ;for (i =0 ; i < nb_phy_chans; i++) -if (platform_get_irq (op, i) >0 ) +if (platform_get_irq_optional (op, i) >0 ) nr_irq++;for (i =0 ; i < nb_phy_chans; i++) { phy = &pdev->phys[i]; phy->base = pdev->base; phy->idx = i; - irq =platform_get_irq (op, i); + irq =platform_get_irq_optional (op, i);if ((nr_irq >1 ) && (irq >0 )) ret = devm_request_irq(&op->dev, irq, pxad_chan_handler,
drivers/dma/stm32-dma.c +6 -8
@@ -663,6 +663,8 @@ static void stm32_dma_handle_chan_paused(struct stm32_dma_chan *chan) chan->chan_reg.dma_sndtr =stm32_dma_read (dmadev,STM32_DMA_SNDTR (chan->id)); + chan->status =DMA_PAUSED ; +dev_dbg (chan2dev (chan),"vchan %pK: paused\n" , &chan->vchan); }
@@ -775,9 +777,7 @@ static irqreturn_t stm32_dma_chan_irq(int irq, void *devid)if (status &STM32_DMA_TCI ) {stm32_dma_irq_clear (chan,STM32_DMA_TCI );if (scr &STM32_DMA_SCR_TCIE ) { -if (chan->status ==DMA_PAUSED && !(scr &STM32_DMA_SCR_EN )) -stm32_dma_handle_chan_paused (chan); -else +if (chan->status !=DMA_PAUSED )stm32_dma_handle_chan_done (chan, scr); } status &= ~STM32_DMA_TCI ;
@@ -824,13 +824,11 @@ static int stm32_dma_pause(struct dma_chan *c)return -EPERM ;spin_lock_irqsave (&chan->vchan.lock, flags); + ret =stm32_dma_disable_chan (chan); -/* -* A transfer complete flag is set to indicate the end of transfer due to the stream -* interruption, so wait for interrupt -*/ if (!ret) - chan->status =DMA_PAUSED ; +stm32_dma_handle_chan_paused (chan); +spin_unlock_irqrestore (&chan->vchan.lock, flags);return ret;
drivers/dma/ti/k3-udma-glue.c +3 -0
@@ -299,6 +299,7 @@ struct k3_udma_glue_tx_channel *k3_udma_glue_request_tx_chn(struct device *dev, ret =device_register (&tx_chn->common.chan_dev);if (ret) {dev_err (dev,"Channel Device registration failed %d\n" , ret); +put_device (&tx_chn->common.chan_dev); tx_chn->common.chan_dev.parent =NULL ; goto err; }
@@ -917,6 +918,7 @@ k3_udma_glue_request_rx_chn_priv(struct device *dev, const char *name, ret =device_register (&rx_chn->common.chan_dev);if (ret) {dev_err (dev,"Channel Device registration failed %d\n" , ret); +put_device (&rx_chn->common.chan_dev); rx_chn->common.chan_dev.parent =NULL ; goto err; }
@@ -1048,6 +1050,7 @@ k3_udma_glue_request_remote_rx_chn(struct device *dev, const char *name, ret =device_register (&rx_chn->common.chan_dev);if (ret) {dev_err (dev,"Channel Device registration failed %d\n" , ret); +put_device (&rx_chn->common.chan_dev); rx_chn->common.chan_dev.parent =NULL ; goto err; }
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +15 -0
@@ -485,6 +485,21 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m);*/ static inline uint64_t amdgpu_vm_tlb_seq (struct amdgpu_vm *vm) { +unsigned long flags; +spinlock_t *lock; + +/* +* Workaround to stop racing between the fence signaling and handling +* the cb. The lock is static after initially setting it up, just make +* sure that the dma_fence structure isn't freed up. +*/ +rcu_read_lock (); + lock = vm->last_tlb_flush->lock; +rcu_read_unlock (); + +spin_lock_irqsave (lock, flags); +spin_unlock_irqrestore (lock, flags); +return atomic64_read (&vm->tlb_seq); }
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +1 -1
@@ -435,7 +435,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,if (place->flags &TTM_PL_FLAG_TOPDOWN ) vres->flags |=DRM_BUDDY_TOPDOWN_ALLOCATION ; -if (fpfn || lpfn != man->size) +if (fpfn || lpfn != mgr->mm.size)/* Allocate blocks in desired range */ vres->flags |=DRM_BUDDY_RANGE_ALLOCATION ;
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +15 -19
@@ -1928,7 +1928,7 @@ static int criu_checkpoint(struct file *filep, {int ret;uint32_t num_devices, num_bos, num_objects; -uint64_t priv_size, priv_offset =0 ; +uint64_t priv_size, priv_offset =0 , bo_priv_offset;if (!args->devices || !args->bos || !args->priv_data)return -EINVAL ;
@@ -1972,38 +1972,34 @@ static int criu_checkpoint(struct file *filep,if (ret) goto exit_unlock; - ret =criu_checkpoint_bos (p, num_bos, (uint8_t __user *)args->bos, - (uint8_t __user *)args->priv_data, &priv_offset); -if (ret) - goto exit_unlock; +/* Leave room for BOs in the private data. They need to be restored +* before events, but we checkpoint them last to simplify the error +* handling. +*/ + bo_priv_offset = priv_offset; + priv_offset += num_bos *sizeof (struct kfd_criu_bo_priv_data );if (num_objects) { ret =kfd_criu_checkpoint_queues (p, (uint8_t __user *)args->priv_data, &priv_offset);if (ret) - goto close_bo_fds; + goto exit_unlock; ret =kfd_criu_checkpoint_events (p, (uint8_t __user *)args->priv_data, &priv_offset);if (ret) - goto close_bo_fds; + goto exit_unlock; ret =kfd_criu_checkpoint_svm (p, (uint8_t __user *)args->priv_data, &priv_offset);if (ret) - goto close_bo_fds; + goto exit_unlock; } -close_bo_fds: -if (ret) { -/* If IOCTL returns err, user assumes all FDs opened in criu_dump_bos are closed */ -uint32_t i; -struct kfd_criu_bo_bucket *bo_buckets = (struct kfd_criu_bo_bucket *) args->bos; - -for (i =0 ; i < num_bos; i++) { -if (bo_buckets[i].alloc_flags &KFD_IOC_ALLOC_MEM_FLAGS_VRAM ) -close_fd (bo_buckets[i].dmabuf_fd); - } - } +/* This must be the last thing in this function that can fail. +* Otherwise we leak dmabuf file descriptors. +*/ + ret =criu_checkpoint_bos (p, num_bos, (uint8_t __user *)args->bos, + (uint8_t __user *)args->priv_data, &bo_priv_offset); exit_unlock:mutex_unlock (&p->mutex);
drivers/gpu/drm/amd/amdkfd/kfd_events.c +1 -2
@@ -506,6 +506,7 @@ int kfd_criu_restore_event(struct file *devkfd, ret =create_other_event (p, ev, &ev_priv->event_id);break ; } +mutex_unlock (&p->event_mutex); exit:if (ret)
@@ -513,8 +514,6 @@ int kfd_criu_restore_event(struct file *devkfd,kfree (ev_priv); -mutex_unlock (&p->event_mutex); -return ret; }
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c +32 -17
90 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c +16 -16
@@ -356,32 +356,32 @@ static struct wm_table ddr5_wm_table = { .wm_inst = WM_A, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_B, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_C, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_D, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, }
@@ -393,32 +393,32 @@ static struct wm_table lpddr5_wm_table = { .wm_inst = WM_A, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_B, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_C, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_D, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, }
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c +34 -18
119 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c +18 -6
@@ -49,18 +49,30 @@#define CTX \ enc1->base.ctx +static void enc314_reset_fifo (struct stream_encoder *enc,bool reset) +{ +struct dcn10_stream_encoder *enc1 =DCN10STRENC_FROM_STRENC (enc); +uint32_t reset_val = reset ?1 :0 ; +uint32_t is_symclk_on; + +REG_UPDATE (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET , reset_val); +REG_GET (DIG_FE_CNTL ,DIG_SYMCLK_FE_ON , &is_symclk_on); + +if (is_symclk_on) +REG_WAIT (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET_DONE , reset_val,10 ,5000 ); +else +udelay (10 ); +}static void enc314_enable_fifo (struct stream_encoder *enc) {struct dcn10_stream_encoder *enc1 =DCN10STRENC_FROM_STRENC (enc); -/* TODO: Confirm if we need to wait for DIG_SYMCLK_FE_ON */ -REG_WAIT (DIG_FE_CNTL ,DIG_SYMCLK_FE_ON ,1 ,10 ,5000 );REG_UPDATE (DIG_FIFO_CTRL0 ,DIG_FIFO_READ_START_LEVEL ,0x7 ); -REG_UPDATE (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET ,1 ); -REG_WAIT (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET_DONE ,1 ,10 ,5000 ); -REG_UPDATE (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET ,0 ); -REG_WAIT (DIG_FIFO_CTRL0 ,DIG_FIFO_RESET_DONE ,0 ,10 ,5000 ); + +enc314_reset_fifo (enc, true); +enc314_reset_fifo (enc, false); +REG_UPDATE (DIG_FIFO_CTRL0 ,DIG_FIFO_ENABLE ,1 ); }
drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c +2 -2
@@ -146,8 +146,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_14_soc = { }, }, .num_states = 5, - .sr_exit_time_us = 9.0, - .sr_enter_plus_exit_time_us = 11.0, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .sr_exit_z8_time_us = 442.0, .sr_enter_plus_exit_z8_time_us = 560.0, .writeback_latency_us = 12.0,
drivers/gpu/drm/amd/display/dc/inc/hw/clk_mgr.h +14 -1
@@ -95,10 +95,23 @@ struct clk_limit_table_entry {unsigned int wck_ratio; }; +struct clk_limit_num_entries { +unsigned int num_dcfclk_levels; +unsigned int num_fclk_levels; +unsigned int num_memclk_levels; +unsigned int num_socclk_levels; +unsigned int num_dtbclk_levels; +unsigned int num_dispclk_levels; +unsigned int num_dppclk_levels; +unsigned int num_phyclk_levels; +unsigned int num_phyclk_d18_levels; +}; +/* This table is contiguous */ struct clk_limit_table {struct clk_limit_table_entry entries[MAX_NUM_DPM_LVL ]; -unsigned int num_entries; +struct clk_limit_num_entries num_entries_per_clk; +unsigned int num_entries;/* highest populated dpm level for back compatibility */ };struct wm_range_table_entry {
drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h +7 -8
@@ -54,14 +54,14 @@#define PPSMC_MSG_TestMessage 0x01 ///< To check if PMFW is alive and responding. Requirement specified by PMFW team#define PPSMC_MSG_GetPmfwVersion 0x02 ///< Get PMFW version#define PPSMC_MSG_GetDriverIfVersion 0x03 ///< Get PMFW_DRIVER_IF version -#define PPSMC_MSG_EnableGfxOff 0x04 ///< Enable GFXOFF -#define PPSMC_MSG_DisableGfxOff 0x05 ///< Disable GFXOFF +#define PPSMC_MSG_SPARE0 0x04 ///< SPARE +#define PPSMC_MSG_SPARE1 0x05 ///< SPARE#define PPSMC_MSG_PowerDownVcn 0x06 ///< Power down VCN#define PPSMC_MSG_PowerUpVcn 0x07 ///< Power up VCN; VCN is power gated by default#define PPSMC_MSG_SetHardMinVcn 0x08 ///< For wireless display#define PPSMC_MSG_SetSoftMinGfxclk 0x09 ///< Set SoftMin for GFXCLK, argument is frequency in MHz -#define PPSMC_MSG_ActiveProcessNotify 0x0A ///< Needs update -#define PPSMC_MSG_ForcePowerDownGfx 0x0B ///< Force power down GFX, i.e. enter GFXOFF +#define PPSMC_MSG_SPARE2 0x0A ///< SPARE +#define PPSMC_MSG_SPARE3 0x0B ///< SPARE#define PPSMC_MSG_PrepareMp1ForUnload 0x0C ///< Prepare PMFW for GFX driver unload#define PPSMC_MSG_SetDriverDramAddrHigh 0x0D ///< Set high 32 bits of DRAM address for Driver table transfer#define PPSMC_MSG_SetDriverDramAddrLow 0x0E ///< Set low 32 bits of DRAM address for Driver table transfer
@@ -73,8 +73,7 @@#define PPSMC_MSG_SetSoftMinFclk 0x14 ///< Set hard min for FCLK#define PPSMC_MSG_SetSoftMinVcn 0x15 ///< Set soft min for VCN clocks (VCLK and DCLK) - -#define PPSMC_MSG_EnableGfxImu 0x16 ///< Needs update +#define PPSMC_MSG_EnableGfxImu 0x16 ///< Enable GFX IMU#define PPSMC_MSG_GetGfxclkFrequency 0x17 ///< Get GFX clock frequency#define PPSMC_MSG_GetFclkFrequency 0x18 ///< Get FCLK frequency
@@ -102,8 +101,8 @@#define PPSMC_MSG_SetHardMinIspxclkByFreq 0x2C ///< Set HardMin by frequency for ISPXCLK#define PPSMC_MSG_PowerDownUmsch 0x2D ///< Power down VCN.UMSCH (aka VSCH) scheduler#define PPSMC_MSG_PowerUpUmsch 0x2E ///< Power up VCN.UMSCH (aka VSCH) scheduler -#define PPSMC_Message_IspStutterOn_MmhubPgDis 0x2F ///< ISP StutterOn mmHub PgDis -#define PPSMC_Message_IspStutterOff_MmhubPgEn 0x30 ///< ISP StufferOff mmHub PgEn +#define PPSMC_MSG_IspStutterOn_MmhubPgDis 0x2F ///< ISP StutterOn mmHub PgDis +#define PPSMC_MSG_IspStutterOff_MmhubPgEn 0x30 ///< ISP StufferOff mmHub PgEn#define PPSMC_Message_Count 0x31 ///< Total number of PPSMC messages/** @}*/
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +3 -1
@@ -376,7 +376,9 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu)if (((adev->pdev->device ==0x73A1 ) && (adev->pdev->revision ==0x00 )) || ((adev->pdev->device ==0x73BF ) && - (adev->pdev->revision ==0xCF ))) + (adev->pdev->revision ==0xCF )) || + ((adev->pdev->device ==0x7422 ) && + (adev->pdev->revision ==0x00 ))) smu_baco->platform_support = false; }
drivers/gpu/drm/i915/display/intel_dp.c +1 -1
@@ -5233,7 +5233,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, encoder->devdata, IS_ERR(edid) ? NULL : edid);intel_panel_add_edid_fixed_modes (intel_connector, - intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE , + intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE ||intel_vrr_is_capable (intel_connector));/* MSO requires information from the EDID */
drivers/gpu/drm/i915/display/intel_lvds.c +1 -2
@@ -972,8 +972,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)/* Try EDID first */ intel_panel_add_edid_fixed_modes (intel_connector, - intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE , - false); + intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE );/* Failed to get EDID, what about VBT? */ if (!intel_panel_preferred_fixed_mode (intel_connector))
drivers/gpu/drm/i915/display/intel_panel.c +8 -21
@@ -81,15 +81,14 @@ static bool is_alt_drrs_mode(const struct drm_display_mode *mode, mode->clock != preferred_mode->clock; } -static bool is_alt_vrr_mode (const struct drm_display_mode *mode, -const struct drm_display_mode *preferred_mode) +static bool is_alt_fixed_mode (const struct drm_display_mode *mode, +const struct drm_display_mode *preferred_mode) {return drm_mode_match (mode, preferred_mode,DRM_MODE_MATCH_FLAGS |DRM_MODE_MATCH_3D_FLAGS ) && mode->hdisplay == preferred_mode->hdisplay && - mode->vdisplay == preferred_mode->vdisplay && - mode->clock != preferred_mode->clock; + mode->vdisplay == preferred_mode->vdisplay; } const struct drm_display_mode *
@@ -172,19 +171,7 @@ int intel_panel_compute_config(struct intel_connector *connector,return 0 ; } -static bool is_alt_fixed_mode (const struct drm_display_mode *mode, -const struct drm_display_mode *preferred_mode, -bool has_vrr) -{ -/* is_alt_drrs_mode() is a subset of is_alt_vrr_mode() */ -if (has_vrr) -return is_alt_vrr_mode (mode, preferred_mode); -else -return is_alt_drrs_mode (mode, preferred_mode); -} - -static void intel_panel_add_edid_alt_fixed_modes (struct intel_connector *connector, -bool has_vrr) +static void intel_panel_add_edid_alt_fixed_modes (struct intel_connector *connector) {struct drm_i915_private *dev_priv =to_i915 (connector->base.dev); const struct drm_display_mode *preferred_mode =
@@ -192,7 +179,7 @@ static void intel_panel_add_edid_alt_fixed_modes(struct intel_connector *connectstruct drm_display_mode *mode, *next;list_for_each_entry_safe (mode, next, &connector->base.probed_modes, head) { -if (!is_alt_fixed_mode (mode, preferred_mode, has_vrr)) +if (!is_alt_fixed_mode (mode, preferred_mode))continue ; drm_dbg_kms(&dev_priv->drm,
@@ -251,11 +238,11 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector) }void intel_panel_add_edid_fixed_modes (struct intel_connector *connector, -bool has_drrs,bool has_vrr) +bool use_alt_fixed_modes) {intel_panel_add_edid_preferred_mode (connector); -if (intel_panel_preferred_fixed_mode (connector) && (has_drrs || has_vrr)) -intel_panel_add_edid_alt_fixed_modes (connector, has_vrr); +if (intel_panel_preferred_fixed_mode (connector) && use_alt_fixed_modes) +intel_panel_add_edid_alt_fixed_modes (connector);intel_panel_destroy_probed_modes (connector); }
drivers/gpu/drm/i915/display/intel_panel.h +1 -1
@@ -41,7 +41,7 @@ int intel_panel_fitting(struct intel_crtc_state *crtc_state,int intel_panel_compute_config (struct intel_connector *connector,struct drm_display_mode *adjusted_mode);void intel_panel_add_edid_fixed_modes (struct intel_connector *connector, -bool has_drrs,bool has_vrr); +bool use_alt_fixed_modes);void intel_panel_add_vbt_lfp_fixed_mode (struct intel_connector *connector);void intel_panel_add_vbt_sdvo_fixed_mode (struct intel_connector *connector); void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
drivers/gpu/drm/i915/display/intel_psr.c +4 -1
@@ -2188,8 +2188,11 @@ static void _psr_invalidate_handle(struct intel_dp *intel_dp)if (intel_dp->psr.psr2_sel_fetch_enabled) {u32 val; -if (intel_dp->psr.psr2_sel_fetch_cff_enabled) +if (intel_dp->psr.psr2_sel_fetch_cff_enabled) { +/* Send one update otherwise lag is observed in screen */ +intel_de_write (dev_priv,CURSURFLIVE (intel_dp->psr.pipe),0 );return ; + } val =man_trk_ctl_enable_bit_get (dev_priv) | man_trk_ctl_partial_frame_bit_get(dev_priv) |
drivers/gpu/drm/i915/display/intel_sdvo.c +5 -1
@@ -2900,8 +2900,12 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)intel_panel_add_vbt_sdvo_fixed_mode (intel_connector);if (!intel_panel_preferred_fixed_mode (intel_connector)) { +mutex_lock (&i915->drm.mode_config.mutex); +intel_ddc_get_modes (connector, &intel_sdvo->ddc); -intel_panel_add_edid_fixed_modes (intel_connector, false, false); +intel_panel_add_edid_fixed_modes (intel_connector, false); + +mutex_unlock (&i915->drm.mode_config.mutex); }intel_panel_init (intel_connector);
drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c +2 -2
@@ -40,13 +40,13 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme goto err; } - ret =sg_alloc_table (st, obj->mm.pages->nents,GFP_KERNEL ); + ret =sg_alloc_table (st, obj->mm.pages->orig_nents,GFP_KERNEL );if (ret) goto err_free; src = obj->mm.pages->sgl; dst = st->sgl; -for (i =0 ; i < obj->mm.pages->nents; i++) { +for (i =0 ; i < obj->mm.pages->orig_nents; i++) {sg_set_page (dst,sg_page (src), src->length,0 ); dst =sg_next (dst); src =sg_next (src);
drivers/gpu/drm/i915/gem/i915_gem_shmem.c +2 -2
@@ -369,14 +369,14 @@ __i915_gem_object_release_shmem(struct drm_i915_gem_object *obj,__start_cpu_write (obj);/* -* On non-LLC platforms, force the flush-on-acquire if this is ever +* On non-LLC igfx platforms, force the flush-on-acquire if this is ever * swapped-in. Our async flush path is not trust worthy enough yet(and * happens in the wrong order), and with some tricks it's conceivable * for userspace to change the cache-level to I915_CACHE_NONE after the * pages are swapped-in, and since execbuf binds the object before doing * the async flush, we have a race window. */ -if (!HAS_LLC (i915)) +if (!HAS_LLC (i915) && !IS_DGFX (i915)) obj->cache_dirty = true; }
drivers/gpu/drm/i915/gvt/kvmgt.c +3 -0
@@ -1595,6 +1595,9 @@ static void intel_vgpu_remove(struct mdev_device *mdev)if (WARN_ON_ONCE (vgpu->attached))return ; + +vfio_unregister_group_dev (&vgpu->vfio_device); +vfio_uninit_group_dev (&vgpu->vfio_device);intel_gvt_destroy_vgpu (vgpu); }
drivers/gpu/drm/vc4/vc4_drv.c +6 -1
@@ -476,7 +476,12 @@ static int __init vc4_drm_register(void)if (ret)return ret; -return platform_driver_register (&vc4_platform_driver); + ret =platform_driver_register (&vc4_platform_driver); +if (ret) +platform_unregister_drivers (component_drivers, +ARRAY_SIZE (component_drivers)); + +return ret; } static void __exit vc4_drm_unregister(void)
drivers/gpu/drm/vc4/vc4_hdmi.c +17 -4
@@ -2712,9 +2712,16 @@ static int vc4_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi)DRM_ERROR ("Failed to get HDMI state machine clock\n" );return PTR_ERR (vc4_hdmi->hsm_clock); } + vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock; vc4_hdmi->cec_clock = vc4_hdmi->hsm_clock; + vc4_hdmi->hsm_rpm_clock =devm_clk_get (dev,"hdmi" ); +if (IS_ERR (vc4_hdmi->hsm_rpm_clock)) { +DRM_ERROR ("Failed to get HDMI state machine clock\n" ); +return PTR_ERR (vc4_hdmi->hsm_rpm_clock); + } +return 0 ; }
@@ -2796,6 +2803,12 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi)return PTR_ERR (vc4_hdmi->hsm_clock); } + vc4_hdmi->hsm_rpm_clock =devm_clk_get (dev,"hdmi" ); +if (IS_ERR (vc4_hdmi->hsm_rpm_clock)) { +DRM_ERROR ("Failed to get HDMI state machine clock\n" ); +return PTR_ERR (vc4_hdmi->hsm_rpm_clock); + } + vc4_hdmi->pixel_bvb_clock =devm_clk_get (dev,"bvb" );if (IS_ERR (vc4_hdmi->pixel_bvb_clock)) {DRM_ERROR ("Failed to get pixel bvb clock\n" );
@@ -2859,7 +2872,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) {struct vc4_hdmi *vc4_hdmi =dev_get_drvdata (dev); -clk_disable_unprepare (vc4_hdmi->hsm_clock); +clk_disable_unprepare (vc4_hdmi->hsm_rpm_clock);return 0 ; }
@@ -2877,11 +2890,11 @@ static int vc4_hdmi_runtime_resume(struct device *dev)* its frequency while the power domain is active so that it * keeps its rate. */ - ret =clk_set_min_rate (vc4_hdmi->hsm_clock,HSM_MIN_CLOCK_FREQ ); + ret =clk_set_min_rate (vc4_hdmi->hsm_rpm_clock,HSM_MIN_CLOCK_FREQ );if (ret)return ret; - ret =clk_prepare_enable (vc4_hdmi->hsm_clock); + ret =clk_prepare_enable (vc4_hdmi->hsm_rpm_clock);if (ret)return ret;
@@ -2894,7 +2907,7 @@ static int vc4_hdmi_runtime_resume(struct device *dev)* case, it will lead to a silent CPU stall. Let's make sure we * prevent such a case. */ - rate =clk_get_rate (vc4_hdmi->hsm_clock); + rate =clk_get_rate (vc4_hdmi->hsm_rpm_clock);if (!rate) { ret = -EINVAL ; goto err_disable_clk;
drivers/gpu/drm/vc4/vc4_hdmi.h +1 -0
@@ -171,6 +171,7 @@ struct vc4_hdmi {struct clk *cec_clock;struct clk *pixel_clock;struct clk *hsm_clock; +struct clk *hsm_rpm_clock;struct clk *audio_clock;struct clk *pixel_bvb_clock;
drivers/hid/hid-hyperv.c +1 -1
@@ -499,7 +499,7 @@ static int mousevsc_probe(struct hv_device *device, ret =hid_add_device (hid_dev);if (ret) - goto probe_err1; + goto probe_err2; ret =hid_parse (hid_dev);
drivers/hid/wacom_wac.c +6 -5
@@ -2522,11 +2522,12 @@ static void wacom_wac_pen_report(struct hid_device *hdev,if (!delay_pen_events (wacom_wac) && wacom_wac->tool[0 ]) {int id = wacom_wac->id[0 ]; -if (wacom_wac->features.quirks &WACOM_QUIRK_PEN_BUTTON3 && - wacom_wac->hid_data.barrelswitch & wacom_wac->hid_data.barrelswitch2) { - wacom_wac->hid_data.barrelswitch =0 ; - wacom_wac->hid_data.barrelswitch2 =0 ; - wacom_wac->hid_data.barrelswitch3 =1 ; +if (wacom_wac->features.quirks &WACOM_QUIRK_PEN_BUTTON3 ) { +int sw_state = wacom_wac->hid_data.barrelswitch | + (wacom_wac->hid_data.barrelswitch2 <<1 ); + wacom_wac->hid_data.barrelswitch = sw_state ==1 ; + wacom_wac->hid_data.barrelswitch2 = sw_state ==2 ; + wacom_wac->hid_data.barrelswitch3 = sw_state ==3 ; }input_report_key (input,BTN_STYLUS , wacom_wac->hid_data.barrelswitch);input_report_key (input,BTN_STYLUS2 , wacom_wac->hid_data.barrelswitch2);
drivers/hwspinlock/qcom_hwspinlock.c +1 -1
@@ -121,7 +121,7 @@ static const struct regmap_config tcsr_mutex_config = { .reg_bits = 32, .reg_stride = 4, .val_bits = 32, - .max_register = 0x40000, + .max_register = 0x20000, .fast_io = true, };
drivers/mmc/host/sdhci-brcmstb.c +2 -1
@@ -12,6 +12,7 @@#include <linux/bitops.h> #include <linux/delay.h> +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "cqhci.h"
@@ -55,7 +56,7 @@ static void brcmstb_reset(struct sdhci_host *host, u8 mask)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_brcmstb_priv *priv =sdhci_pltfm_priv (pltfm_host); -sdhci_reset (host, mask); +sdhci_and_cqhci_reset (host, mask);/* Reset will clear this, so re-enable it */ if (priv->flags &BRCMSTB_PRIV_FLAGS_GATE_CLOCK )
drivers/mmc/host/sdhci-cqhci.h new file +24 -0
@@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* +* Copyright 2022 The Chromium OS Authors +* +* Support that applies to the combination of SDHCI and CQHCI, while not +* expressing a dependency between the two modules. +*/ + +#ifndef __MMC_HOST_SDHCI_CQHCI_H__ +#define __MMC_HOST_SDHCI_CQHCI_H__ + +#include "cqhci.h" +#include "sdhci.h" + +static inline void sdhci_and_cqhci_reset (struct sdhci_host *host,u8 mask) +{ +if ((host->mmc->caps2 &MMC_CAP2_CQE ) && (mask &SDHCI_RESET_ALL ) && + host->mmc->cqe_private) +cqhci_deactivate (host->mmc); + +sdhci_reset (host, mask); +} + +#endif /* __MMC_HOST_SDHCI_CQHCI_H__ */
drivers/mmc/host/sdhci-esdhc-imx.c +4 -3
@@ -25,6 +25,7 @@#include <linux/of_device.h> #include <linux/pinctrl/consumer.h> #include <linux/pm_runtime.h> +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "sdhci-esdhc.h" #include "cqhci.h"
@@ -1288,7 +1289,7 @@ static void esdhc_set_uhs_signaling(struct sdhci_host *host, unsigned timing)static void esdhc_reset (struct sdhci_host *host,u8 mask) { -sdhci_reset (host, mask); +sdhci_and_cqhci_reset (host, mask);sdhci_writel (host, host->ier,SDHCI_INT_ENABLE );sdhci_writel (host, host->ier,SDHCI_SIGNAL_ENABLE );
@@ -1671,14 +1672,14 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)if (imx_data->socdata->flags &ESDHC_FLAG_ERR004536 ) host->quirks |=SDHCI_QUIRK_BROKEN_ADMA ; -if (host->caps &MMC_CAP_8_BIT_DATA && +if (host->mmc->caps &MMC_CAP_8_BIT_DATA && imx_data->socdata->flags &ESDHC_FLAG_HS400 ) host->mmc->caps2 |=MMC_CAP2_HS400 ;if (imx_data->socdata->flags &ESDHC_FLAG_BROKEN_AUTO_CMD23 ) host->quirks2 |=SDHCI_QUIRK2_ACMD23_BROKEN ; -if (host->caps &MMC_CAP_8_BIT_DATA && +if (host->mmc->caps &MMC_CAP_8_BIT_DATA && imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { host->mmc->caps2 |=MMC_CAP2_HS400_ES ; host->mmc_host_ops.hs400_enhanced_strobe =
drivers/mmc/host/sdhci-of-arasan.c +2 -1
@@ -25,6 +25,7 @@#include <linux/firmware/xlnx-zynqmp.h> #include "cqhci.h" +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #define SDHCI_ARASAN_VENDOR_REGISTER 0x78
@@ -366,7 +367,7 @@ static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_arasan_data *sdhci_arasan =sdhci_pltfm_priv (pltfm_host); -sdhci_reset (host, mask); +sdhci_and_cqhci_reset (host, mask);if (sdhci_arasan->quirks &SDHCI_ARASAN_QUIRK_FORCE_CDTEST ) { ctrl =sdhci_readb (host,SDHCI_HOST_CONTROL );
drivers/mmc/host/sdhci-tegra.c +2 -1
@@ -28,6 +28,7 @@#include <soc/tegra/common.h> +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "cqhci.h"
@@ -367,7 +368,7 @@ static void tegra_sdhci_reset(struct sdhci_host *host, u8 mask)const struct sdhci_tegra_soc_data *soc_data = tegra_host->soc_data;u32 misc_ctrl, clk_ctrl, pad_ctrl; -sdhci_reset (host, mask); +sdhci_and_cqhci_reset (host, mask);if (!(mask &SDHCI_RESET_ALL ))return ;
drivers/mmc/host/sdhci_am654.c +4 -3
@@ -15,6 +15,7 @@#include <linux/sys_soc.h> #include "cqhci.h" +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" /* CTL_CFG Registers */
@@ -378,7 +379,7 @@ static void sdhci_am654_reset(struct sdhci_host *host, u8 mask)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_am654_data *sdhci_am654 =sdhci_pltfm_priv (pltfm_host); -sdhci_reset (host, mask); +sdhci_and_cqhci_reset (host, mask);if (sdhci_am654->quirks &SDHCI_AM654_QUIRK_FORCE_CDTEST ) { ctrl =sdhci_readb (host,SDHCI_HOST_CONTROL );
@@ -464,7 +465,7 @@ static struct sdhci_ops sdhci_am654_ops = { .set_clock = sdhci_am654_set_clock, .write_b = sdhci_am654_write_b, .irq = sdhci_am654_cqhci_irq, - .reset = sdhci_reset, + .reset = sdhci_and_cqhci_reset, };static const struct sdhci_pltfm_data sdhci_am654_pdata = {
@@ -494,7 +495,7 @@ static struct sdhci_ops sdhci_j721e_8bit_ops = { .set_clock = sdhci_am654_set_clock, .write_b = sdhci_am654_write_b, .irq = sdhci_am654_cqhci_irq, - .reset = sdhci_reset, + .reset = sdhci_and_cqhci_reset, };static const struct sdhci_pltfm_data sdhci_j721e_8bit_pdata = {
drivers/net/can/at91_can.c +1 -1
@@ -452,7 +452,7 @@ static netdev_tx_t at91_start_xmit(struct sk_buff *skb, struct net_device *dev)unsigned int mb, prio;u32 reg_mid, reg_mcr; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ; mb =get_tx_next_mb (priv);
drivers/net/can/c_can/c_can_main.c +1 -1
@@ -457,7 +457,7 @@ static netdev_tx_t c_can_start_xmit(struct sk_buff *skb,struct c_can_tx_ring *tx_ring = &priv->tx;u32 idx, obj, cmd =IF_COMM_TX ; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;if (c_can_tx_busy (priv, tx_ring))
drivers/net/can/can327.c +1 -1
@@ -813,7 +813,7 @@ static netdev_tx_t can327_netdev_start_xmit(struct sk_buff *skb,struct can327 *elm =netdev_priv (dev);struct can_frame *frame = (struct can_frame *)skb->data; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;/* We shouldn't get here after a hardware fault:
drivers/net/can/cc770/cc770.c +1 -1
@@ -429,7 +429,7 @@ static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev)struct cc770_priv *priv =netdev_priv (dev);unsigned int mo =obj2msgobj (CC770_OBJ_TX ); -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;netif_stop_queue (dev);
drivers/net/can/ctucanfd/ctucanfd_base.c +1 -1
@@ -600,7 +600,7 @@ static netdev_tx_t ctucan_start_xmit(struct sk_buff *skb, struct net_device *ndebool ok;unsigned long flags; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (unlikely (!CTU_CAN_FD_TXTNF (priv))) {
drivers/net/can/dev/skb.c +1 -8
@@ -5,7 +5,6 @@*/ #include <linux/can/dev.h> -#include <linux/can/netlink.h> #include <linux/module.h> #define MOD_DESC "CAN device driver interface"
@@ -300,7 +299,6 @@ static bool can_skb_headroom_valid(struct net_device *dev, struct sk_buff *skb)bool can_dropped_invalid_skb (struct net_device *dev,struct sk_buff *skb) {const struct canfd_frame *cfd = (struct canfd_frame *)skb->data; -struct can_priv *priv =netdev_priv (dev);if (skb->protocol ==htons (ETH_P_CAN )) { if (unlikely(skb->len != CAN_MTU ||
@@ -314,13 +312,8 @@ bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) goto inval_skb; } -if (!can_skb_headroom_valid (dev, skb)) { - goto inval_skb; - }else if (priv->ctrlmode &CAN_CTRLMODE_LISTENONLY ) { -netdev_info_once (dev, -"interface in listen only mode, dropping skb\n" ); +if (!can_skb_headroom_valid (dev, skb)) goto inval_skb; - }return false;
drivers/net/can/flexcan/flexcan-core.c +1 -1
@@ -742,7 +742,7 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *deu32 ctrl =FLEXCAN_MB_CODE_TX_DATA | ((can_fd_len2dlc (cfd->len)) <<16 );int i; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;netif_stop_queue (dev);
drivers/net/can/grcan.c +1 -1
@@ -1345,7 +1345,7 @@ static netdev_tx_t grcan_start_xmit(struct sk_buff *skb,unsigned long flags;u32 oneshotmode = priv->can.ctrlmode &CAN_CTRLMODE_ONE_SHOT ; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;/* Trying to transmit in silent mode will generate error interrupts, but
drivers/net/can/ifi_canfd/ifi_canfd.c +1 -1
@@ -860,7 +860,7 @@ static netdev_tx_t ifi_canfd_start_xmit(struct sk_buff *skb,u32 txst, txid, txdlc;int i; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;/* Check if the TX buffer is full */
drivers/net/can/janz-ican3.c +1 -1
@@ -1693,7 +1693,7 @@ static netdev_tx_t ican3_xmit(struct sk_buff *skb, struct net_device *ndev)void __iomem *desc_addr;unsigned long flags; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;spin_lock_irqsave (&mod->lock, flags);
drivers/net/can/kvaser_pciefd.c +1 -1
@@ -775,7 +775,7 @@ static netdev_tx_t kvaser_pciefd_start_xmit(struct sk_buff *skb,int nwords;u8 count; -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ; nwords =kvaser_pciefd_prepare_tx_packet (&packet, can, skb);
drivers/net/can/m_can/m_can.c +1 -1
@@ -1722,7 +1722,7 @@ static netdev_tx_t m_can_start_xmit(struct sk_buff *skb, {struct m_can_classdev *cdev =netdev_priv (dev); -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;if (cdev->is_peripheral) {
drivers/net/can/mscan/mscan.c +1 -1
@@ -191,7 +191,7 @@ static netdev_tx_t mscan_start_xmit(struct sk_buff *skb, struct net_device *dev)int i, rtr, buf_id;u32 can_id; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;out_8 (®s->cantier,0 );
drivers/net/can/pch_can.c +1 -1
@@ -882,7 +882,7 @@ static netdev_tx_t pch_xmit(struct sk_buff *skb, struct net_device *ndev)int i;u32 id2; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ; tx_obj_no = priv->tx_obj;
drivers/net/can/peak_canfd/peak_canfd.c +1 -1
@@ -651,7 +651,7 @@ static netdev_tx_t peak_canfd_start_xmit(struct sk_buff *skb,int room_left;u8 len; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ; msg_size =ALIGN (sizeof (*msg) + cf->len,4 );
drivers/net/can/rcar/rcar_can.c +1 -1
@@ -590,7 +590,7 @@ static netdev_tx_t rcar_can_start_xmit(struct sk_buff *skb,struct can_frame *cf = (struct can_frame *)skb->data;u32 data, i; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (cf->can_id &CAN_EFF_FLAG )/* Extended frame format */
drivers/net/can/rcar/rcar_canfd.c +5 -10
@@ -81,8 +81,7 @@ enum rcanfd_chip_id {/* RSCFDnCFDGERFL / RSCFDnGERFL */ #define RCANFD_GERFL_EEF0_7 GENMASK(23, 16) -#define RCANFD_GERFL_EEF1 BIT(17) -#define RCANFD_GERFL_EEF0 BIT(16) +#define RCANFD_GERFL_EEF (ch) BIT(16 + (ch))#define RCANFD_GERFL_CMPOF BIT(3)/* CAN FD only */ #define RCANFD_GERFL_THLES BIT(2)#define RCANFD_GERFL_MES BIT(1)
@@ -90,7 +89,7 @@ enum rcanfd_chip_id {#define RCANFD_GERFL_ERR (gpriv, x) \ ((x) & (reg_v3u(gpriv, RCANFD_GERFL_EEF0_7, \ - RCANFD_GERFL_EEF0 | RCANFD_GERFL_EEF1) | \ + RCANFD_GERFL_EEF(0) | RCANFD_GERFL_EEF(1)) | \ RCANFD_GERFL_MES | \ ((gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0)))
@@ -936,12 +935,8 @@ static void rcar_canfd_global_error(struct net_device *ndev)u32 ridx = ch +RCANFD_RFFIFO_IDX ; gerfl =rcar_canfd_read (priv->base,RCANFD_GERFL ); -if ((gerfl &RCANFD_GERFL_EEF0 ) && (ch ==0 )) { -netdev_dbg (ndev,"Ch0: ECC Error flag\n" ); - stats->tx_dropped++; - } -if ((gerfl &RCANFD_GERFL_EEF1 ) && (ch ==1 )) { -netdev_dbg (ndev,"Ch1: ECC Error flag\n" ); +if (gerfl &RCANFD_GERFL_EEF (ch)) { +netdev_dbg (ndev,"Ch%u: ECC Error flag\n" , ch); stats->tx_dropped++; }if (gerfl &RCANFD_GERFL_MES ) {
@@ -1481,7 +1476,7 @@ static netdev_tx_t rcar_canfd_start_xmit(struct sk_buff *skb,unsigned long flags;u32 ch = priv->channel; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (cf->can_id &CAN_EFF_FLAG ) {
drivers/net/can/sja1000/sja1000.c +1 -1
@@ -291,7 +291,7 @@ static netdev_tx_t sja1000_start_xmit(struct sk_buff *skb,u8 cmd_reg_val =0x00 ;int i; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;netif_stop_queue (dev);
drivers/net/can/slcan/slcan-core.c +1 -1
@@ -594,7 +594,7 @@ static netdev_tx_t slcan_netdev_xmit(struct sk_buff *skb, {struct slcan *sl =netdev_priv (dev); -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;spin_lock (&sl->lock);
drivers/net/can/softing/softing_main.c +1 -1
@@ -60,7 +60,7 @@ static netdev_tx_t softing_netdev_start_xmit(struct sk_buff *skb,struct can_frame *cf = (struct can_frame *)skb->data;uint8_t buf[DPRAM_TX_SIZE ]; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;spin_lock (&card->spin);
drivers/net/can/spi/hi311x.c +1 -1
@@ -373,7 +373,7 @@ static netdev_tx_t hi3110_hard_start_xmit(struct sk_buff *skb,return NETDEV_TX_BUSY ; } -if (can_dropped_invalid_skb (net, skb)) +if (can_dev_dropped_skb (net, skb))return NETDEV_TX_OK ;netif_stop_queue (net);
drivers/net/can/spi/mcp251x.c +1 -1
@@ -789,7 +789,7 @@ static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb,return NETDEV_TX_BUSY ; } -if (can_dropped_invalid_skb (net, skb)) +if (can_dev_dropped_skb (net, skb))return NETDEV_TX_OK ;netif_stop_queue (net);
drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c +1 -1
@@ -172,7 +172,7 @@ netdev_tx_t mcp251xfd_start_xmit(struct sk_buff *skb,u8 tx_head;int err; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (mcp251xfd_tx_busy (priv, tx_ring))
drivers/net/can/sun4i_can.c +1 -1
@@ -429,7 +429,7 @@ static netdev_tx_t sun4ican_start_xmit(struct sk_buff *skb, struct net_device *dcanid_t id;int i; -if (can_dropped_invalid_skb (dev, skb)) +if (can_dev_dropped_skb (dev, skb))return NETDEV_TX_OK ;netif_stop_queue (dev);
drivers/net/can/ti_hecc.c +1 -1
@@ -470,7 +470,7 @@ static netdev_tx_t ti_hecc_xmit(struct sk_buff *skb, struct net_device *ndev)u32 mbxno, mbx_mask, data;unsigned long flags; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ; mbxno =get_tx_head_mb (priv);
drivers/net/can/usb/ems_usb.c +1 -1
@@ -747,7 +747,7 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *nesize_t size =CPC_HEADER_SIZE +CPC_MSG_HEADER_LEN +sizeof (struct cpc_can_msg ); -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;/* create a URB, and a buffer for it, and copy the data to the URB */
drivers/net/can/usb/esd_usb.c +1 -1
@@ -725,7 +725,7 @@ static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,int ret =NETDEV_TX_OK ;size_t size =sizeof (struct esd_usb_msg ); -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;/* create a URB, and a buffer for it, and copy the data to the URB */
drivers/net/can/usb/etas_es58x/es58x_core.c +1 -1
@@ -1913,7 +1913,7 @@ static netdev_tx_t es58x_start_xmit(struct sk_buff *skb,unsigned int frame_len;int ret; -if (can_dropped_invalid_skb (netdev, skb)) { +if (can_dev_dropped_skb (netdev, skb)) {if (priv->tx_urb) goto xmit_commit;return NETDEV_TX_OK ;
drivers/net/can/usb/gs_usb.c +1 -1
@@ -605,7 +605,7 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,unsigned int idx;struct gs_tx_context *txc; -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;/* find an empty context to keep track of transmission */
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +1 -1
@@ -570,7 +570,7 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb,unsigned int i;unsigned long flags; -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ; urb =usb_alloc_urb (0 ,GFP_ATOMIC );
drivers/net/can/usb/mcba_usb.c +1 -1
@@ -311,7 +311,7 @@ static netdev_tx_t mcba_usb_start_xmit(struct sk_buff *skb, .cmd_id = MBCA_CMD_TRANSMIT_MESSAGE_EV }; -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ; ctx =mcba_usb_get_free_ctx (priv, cf);
drivers/net/can/usb/peak_usb/pcan_usb_core.c +1 -1
@@ -351,7 +351,7 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,int i, err;size_t size = dev->adapter->tx_buffer_size; -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;for (i =0 ; i <PCAN_USB_MAX_TX_URBS ; i++)
drivers/net/can/usb/ucan.c +1 -1
@@ -1120,7 +1120,7 @@ static netdev_tx_t ucan_start_xmit(struct sk_buff *skb,struct can_frame *cf = (struct can_frame *)skb->data;/* check skb */ -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;/* allocate a context and slow down tx path, if fifo state is low */
drivers/net/can/usb/usb_8dev.c +1 -1
@@ -602,7 +602,7 @@ static netdev_tx_t usb_8dev_start_xmit(struct sk_buff *skb,int i, err;size_t size =sizeof (struct usb_8dev_tx_msg ); -if (can_dropped_invalid_skb (netdev, skb)) +if (can_dev_dropped_skb (netdev, skb))return NETDEV_TX_OK ;/* create a URB, and a buffer for it, and copy the data to the URB */
drivers/net/can/xilinx_can.c +1 -1
@@ -743,7 +743,7 @@ static netdev_tx_t xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)struct xcan_priv *priv =netdev_priv (ndev);int ret; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (priv->devtype.flags &XCAN_FLAG_TX_MAILBOXES )
drivers/net/ethernet/apm/xgene/xgene_enet_main.c +3 -1
@@ -1004,8 +1004,10 @@ static int xgene_enet_open(struct net_device *ndev)xgene_enet_napi_enable (pdata); ret =xgene_enet_register_irq (ndev); -if (ret) +if (ret) { +xgene_enet_napi_disable (pdata);return ret; + }if (ndev->phydev) {phy_start (ndev->phydev);
drivers/net/ethernet/aquantia/atlantic/aq_macsec.c +2 -0
@@ -585,6 +585,7 @@ static int aq_update_txsa(struct aq_nic_s *nic, const unsigned int sc_idx, ret =aq_mss_set_egress_sakey_record (hw, &key_rec, sa_idx); +memzero_explicit (&key_rec,sizeof (key_rec));return ret; }
@@ -932,6 +933,7 @@ static int aq_update_rxsa(struct aq_nic_s *nic, const unsigned int sc_idx, ret =aq_mss_set_ingress_sakey_record (hw, &sa_key_record, sa_idx); +memzero_explicit (&sa_key_record,sizeof (sa_key_record));return ret; }
drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c +11 -7
@@ -757,6 +757,7 @@ set_ingress_sakey_record(struct aq_hw_s *hw, u16 table_index) {u16 packed_record[18 ]; +int ret;if (table_index >=NUMROWS_INGRESSSAKEYRECORD )return -EINVAL ;
@@ -789,9 +790,12 @@ set_ingress_sakey_record(struct aq_hw_s *hw, packed_record[16 ] = rec->key_len &0x3 ; -return set_raw_ingress_record (hw, packed_record,18 ,2 , -ROWOFFSET_INGRESSSAKEYRECORD + - table_index); + ret =set_raw_ingress_record (hw, packed_record,18 ,2 , +ROWOFFSET_INGRESSSAKEYRECORD + + table_index); + +memzero_explicit (packed_record,sizeof (packed_record)); +return ret; } int aq_mss_set_ingress_sakey_record(struct aq_hw_s *hw,
@@ -1739,14 +1743,14 @@ static int set_egress_sakey_record(struct aq_hw_s *hw, ret =set_raw_egress_record (hw, packed_record,8 ,2 ,ROWOFFSET_EGRESSSAKEYRECORD + table_index);if (unlikely (ret)) -return ret; + goto clear_key; ret =set_raw_egress_record (hw, packed_record +8 ,8 ,2 ,ROWOFFSET_EGRESSSAKEYRECORD + table_index -32 ); -if (unlikely (ret)) -return ret; -return 0 ; +clear_key: +memzero_explicit (packed_record,sizeof (packed_record)); +return ret; } int aq_mss_set_egress_sakey_record(struct aq_hw_s *hw,
drivers/net/ethernet/broadcom/Kconfig +1 -1
@@ -77,7 +77,7 @@ config BCMGENET select BCM7XXX_PHY select MDIO_BCM_UNIMAC select DIMLIB - select BROADCOM_PHY if ARCH_BCM2835 + select BROADCOM_PHY if (ARCH_BCM2835 && PTP_1588_CLOCK_OPTIONAL) help This driver supports the built-in Ethernet MACs found in the Broadcom BCM7xxx Set Top Box family chipset.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +1 -1
@@ -12894,8 +12894,8 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,rcu_read_lock ();hlist_for_each_entry_rcu (fltr, head, hash) {if (bnxt_fltr_match (fltr, new_fltr)) { + rc = fltr->sw_id;rcu_read_unlock (); - rc =0 ; goto err_free; } }
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +1 -1
@@ -162,7 +162,7 @@ static int bnxt_set_coalesce(struct net_device *dev, } reset_coalesce: -if (netif_running (dev)) { +if (test_bit (BNXT_STATE_OPEN , &bp->state)) {if (update_stats) { rc =bnxt_close_nic (bp, true, false);if (!rc)
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +1 -0
@@ -1302,6 +1302,7 @@ static int cxgb_up(struct adapter *adap)if (ret <0 ) {CH_ERR (adap,"failed to bind qsets, err %d\n" , ret);t3_intr_disable (adap); +quiesce_rx (adap);free_irq_resources (adap); err = ret; goto out;
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +1 -1
@@ -858,7 +858,7 @@ static int cxgb4vf_open(struct net_device *dev)*/ err =t4vf_update_port_info (pi);if (err <0 ) -return err; + goto err_unwind;/* * Note that this interface is up and start everything up ...
drivers/net/ethernet/freescale/fman/mac.c +9 -0
@@ -882,12 +882,21 @@ static int mac_probe(struct platform_device *_of_dev)return err; } +static int mac_remove (struct platform_device *pdev) +{ +struct mac_device *mac_dev =platform_get_drvdata (pdev); + +platform_device_unregister (mac_dev->priv->eth_dev); +return 0 ; +} +static struct platform_driver mac_driver = { .driver = { .name =KBUILD_MODNAME , .of_match_table = mac_match, }, .probe = mac_probe, + .remove = mac_remove, };builtin_platform_driver (mac_driver);
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +2 -0
@@ -2438,6 +2438,8 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,list_for_each_entry (f, &adapter->vlan_filter_list, list) {if (f->is_new_vlan) { f->is_new_vlan = false; +if (!f->vlan.vid) +continue ;if (f->vlan.tpid ==ETH_P_8021Q )set_bit (f->vlan.vid, adapter->vsi.active_cvlans);
drivers/net/ethernet/intel/ice/ice_base.c +1 -1
@@ -959,7 +959,7 @@ ice_vsi_stop_tx_ring(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,* associated to the queue to schedule NAPI handler */ q_vector = ring->q_vector; -if (q_vector) +if (q_vector && !(vsi->vf &&ice_is_vf_disabled (vsi->vf)))ice_trigger_sw_intr (hw, q_vector); status = ice_dis_vsi_txq(vsi->port_info, txq_meta->vsi_idx,
drivers/net/ethernet/intel/ice/ice_lib.c +25 -0
@@ -2222,6 +2222,31 @@ int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi)return ice_vsi_stop_tx_rings (vsi,ICE_NO_RESET ,0 , vsi->xdp_rings, vsi->num_xdp_txq); } +/** +* ice_vsi_is_rx_queue_active +* @vsi: the VSI being configured +* +* Return true if at least one queue is active. +*/ +bool ice_vsi_is_rx_queue_active (struct ice_vsi *vsi) +{ +struct ice_pf *pf = vsi->back; +struct ice_hw *hw = &pf->hw; +int i; + +ice_for_each_rxq (vsi, i) { +u32 rx_reg; +int pf_q; + + pf_q = vsi->rxq_map[i]; + rx_reg =rd32 (hw,QRX_CTRL (pf_q)); +if (rx_reg &QRX_CTRL_QENA_STAT_M ) +return true; + } + +return false; +} +/** * ice_vsi_is_vlan_pruning_ena - check if VLAN pruning is enabled or not * @vsi: VSI to check whether or not VLAN pruning is enabled.
drivers/net/ethernet/intel/ice/ice_lib.h +1 -0
@@ -127,4 +127,5 @@ u16 ice_vsi_num_non_zero_vlans(struct ice_vsi *vsi);bool ice_is_feature_supported (struct ice_pf *pf,enum ice_feature f);void ice_clear_feature_support (struct ice_pf *pf,enum ice_feature f);void ice_init_feature_support (struct ice_pf *pf); +bool ice_vsi_is_rx_queue_active (struct ice_vsi *vsi);#endif /* !_ICE_LIB_H_ */
drivers/net/ethernet/intel/ice/ice_vf_lib.c +4 -1
@@ -576,7 +576,10 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)return -EINVAL ; }ice_vsi_stop_lan_tx_rings (vsi,ICE_NO_RESET , vf->vf_id); -ice_vsi_stop_all_rx_rings (vsi); + +if (ice_vsi_is_rx_queue_active (vsi)) +ice_vsi_stop_all_rx_rings (vsi); +dev_dbg (dev,"VF is already disabled, there is no need for resetting it, telling VM, all is fine %d\n" , vf->vf_id);return 0 ;
drivers/net/ethernet/marvell/mv643xx_eth.c +1 -0
@@ -2481,6 +2481,7 @@ static int mv643xx_eth_open(struct net_device *dev)for (i =0 ; i < mp->rxq_count; i++)rxq_deinit (mp->rxq + i); out: +napi_disable (&mp->napi);free_irq (dev->irq, dev);return err;
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +1 -0
@@ -863,6 +863,7 @@ static int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura) } sq->head =0 ; + sq->cons_head =0 ; sq->sqe_per_sqb = (pfvf->hw.sqb_size / sq->sqe_size) -1 ; sq->num_sqbs = (qset->sqe_cnt + sq->sqe_per_sqb) / sq->sqe_per_sqb;/* Set SQE threshold to 10% of total SQEs */
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +105 -30
146 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h +57 -0
57 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c +19 -13
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/prestera/prestera_rxtx.c +6 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mediatek/mtk_star_emac.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +8 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c +31 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c +32 -60
92 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +23 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +0 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +8 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +3 -15
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c +8 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +9 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +31 -8
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +3 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/sunplus/spl2sw_driver.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/ti/am65-cpsw-nuss.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/tundra/tsi108_eth.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/wwan/iosm/iosm_ipc_imem_ops.c +8 -0
Lines of this file are not shown. View the raw message.
drivers/phy/qualcomm/phy-qcom-qmp-combo.c +1 -1
Lines of this file are not shown. View the raw message.
kernel/bpf/verifier.c +39 -109
148 lines not on this page · raw message
net/can/isotp.c +38 -33
71 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.