Linux 6.6.29
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.29 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/admin-guide/kernel-parameters.txt | 3 MAINTAINERS | 2 Makefile | 2 arch/arm/mach-omap2/pdata-quirks.c | 10 arch/arm64/include/asm/tlbflush.h | 40 arch/arm64/kernel/head.S | 5 arch/arm64/mm/pageattr.c | 3 arch/powerpc/include/asm/ftrace.h | 10 arch/powerpc/include/asm/sections.h | 1 arch/powerpc/kernel/trace/ftrace.c | 12 arch/powerpc/kernel/trace/ftrace_64_pg.c | 5 arch/powerpc/kernel/vmlinux.lds.S | 2 arch/x86/include/asm/barrier.h | 3 arch/x86/include/asm/kvm_host.h | 1 arch/x86/kernel/cpu/bugs.c | 11 arch/x86/kernel/cpu/cpuid-deps.c | 6 arch/x86/kvm/cpuid.c | 1 arch/x86/kvm/cpuid.h | 10 arch/x86/kvm/lapic.c | 3 arch/x86/kvm/mmu/mmu.c | 2 arch/x86/kvm/mmu/tdp_mmu.c | 21 arch/x86/kvm/vmx/vmx.c | 24 arch/x86/kvm/x86.c | 2 drivers/accessibility/speakup/main.c | 2 drivers/android/binder.c | 4 drivers/char/random.c | 10 drivers/clk/clk.c | 195 drivers/clk/mediatek/clk-mtk.c | 15 drivers/comedi/drivers/vmk80xx.c | 35 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 72 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 4 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c | 3 drivers/gpu/drm/drm_panel_orientation_quirks.c | 6 drivers/gpu/drm/i915/display/intel_atomic.c | 1 drivers/gpu/drm/i915/display/intel_cdclk.c | 37 drivers/gpu/drm/i915/display/intel_crtc.c | 96 drivers/gpu/drm/i915/display/intel_crtc.h | 6 drivers/gpu/drm/i915/display/intel_display.c | 43 drivers/gpu/drm/i915/display/intel_display_device.h | 1 drivers/gpu/drm/i915/display/intel_display_types.h | 2 drivers/gpu/drm/i915/display/intel_dp.c | 13 drivers/gpu/drm/i915/display/intel_dp_mst.c | 2 drivers/gpu/drm/i915/i915_vma.c | 42 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h | 8 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h | 8 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h | 8 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 95 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 3 drivers/gpu/drm/nouveau/nouveau_bios.c | 13 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c | 7 drivers/gpu/drm/panel/panel-visionox-rm69299.c | 2 drivers/gpu/drm/radeon/radeon_atombios.c | 8 drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 35 drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 7 drivers/gpu/drm/vmwgfx/vmwgfx_bo.h | 2 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 1 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 3 drivers/gpu/drm/vmwgfx/vmwgfx_gem.c | 32 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 11 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 4 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c | 15 drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 44 drivers/infiniband/core/cm.c | 11 drivers/infiniband/hw/mlx5/mad.c | 3 drivers/infiniband/sw/rxe/rxe.c | 2 drivers/interconnect/core.c | 8 drivers/media/common/videobuf2/videobuf2-core.c | 9 drivers/misc/mei/pci-me.c | 2 drivers/net/dsa/mt7530.c | 38 drivers/net/dsa/mt7530.h | 5 drivers/net/ethernet/intel/ice/ice_tc_lib.c | 15 drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 7 drivers/net/ethernet/mediatek/mtk_wed.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c | 27 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 9 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 4 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c | 4 drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c | 61 drivers/net/ethernet/stmicro/stmmac/common.h | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 7 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 18 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 29 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 18 drivers/net/tun.c | 18 drivers/net/usb/ax88179_178a.c | 4 drivers/net/virtio_net.c | 25 drivers/pci/bus.c | 49 drivers/pci/pci.c | 78 drivers/pci/pci.h | 4 drivers/pci/pcie/aspm.c | 21 drivers/pci/pcie/dpc.c | 5 drivers/pci/quirks.c | 8 drivers/platform/x86/amd/pmc/pmc-quirks.c | 9 drivers/s390/cio/device.c | 13 drivers/s390/cio/qdio_main.c | 28 drivers/s390/net/ism_drv.c | 37 drivers/scsi/scsi_lib.c | 7 drivers/thunderbolt/domain.c | 5 drivers/thunderbolt/icm.c | 2 drivers/thunderbolt/lc.c | 45 drivers/thunderbolt/nhi.c | 19 drivers/thunderbolt/path.c | 13 drivers/thunderbolt/switch.c | 178 drivers/thunderbolt/tb.c | 38 drivers/thunderbolt/tb.h | 10 drivers/thunderbolt/tb_regs.h | 6 drivers/thunderbolt/usb4.c | 52 drivers/tty/serial/mxs-auart.c | 8 drivers/tty/serial/pmac_zilog.c | 14 drivers/tty/serial/serial_base.h | 4 drivers/tty/serial/serial_core.c | 21 drivers/tty/serial/serial_port.c | 34 drivers/tty/serial/stm32-usart.c | 13 drivers/ufs/host/ufs-qcom.c | 8 drivers/usb/class/cdc-wdm.c | 6 drivers/usb/core/hub.c | 15 drivers/usb/core/port.c | 4 drivers/usb/core/quirks.c | 7 drivers/usb/dwc2/hcd_ddma.c | 4 drivers/usb/gadget/function/f_ncm.c | 4 drivers/usb/host/xhci-mem.c | 2 drivers/usb/host/xhci-ring.c | 11 drivers/usb/host/xhci.c | 23 drivers/usb/host/xhci.h | 9 drivers/usb/serial/option.c | 40 fs/ceph/addr.c | 22 fs/ceph/cache.c | 2 fs/ceph/caps.c | 53 fs/ceph/crypto.c | 2 fs/ceph/debugfs.c | 4 fs/ceph/dir.c | 24 fs/ceph/export.c | 10 fs/ceph/file.c | 26 fs/ceph/inode.c | 14 fs/ceph/ioctl.c | 8 fs/ceph/mds_client.c | 41 fs/ceph/mds_client.h | 3 fs/ceph/mdsmap.c | 3 fs/ceph/snap.c | 18 fs/ceph/super.c | 22 fs/ceph/super.h | 13 fs/ceph/xattr.c | 12 fs/fuse/dir.c | 1 fs/nilfs2/dir.c | 2 fs/smb/client/cifs_debug.c | 6 fs/smb/client/cifsglob.h | 3 fs/smb/client/cifsproto.h | 20 fs/smb/client/connect.c | 131 fs/smb/client/dfs.c | 51 fs/smb/client/dfs.h | 33 fs/smb/client/dfs_cache.c | 53 fs/smb/client/misc.c | 7 fs/smb/common/smb2pdu.h | 2 fs/smb/server/server.c | 13 fs/smb/server/smb2pdu.c | 4 fs/smb/server/vfs.c | 5 fs/sysfs/file.c | 2 include/asm-generic/barrier.h | 8 include/linux/bootconfig.h | 7 include/linux/ceph/mdsmap.h | 5 include/linux/gpio/property.h | 1 include/linux/pci.h | 5 include/linux/shmem_fs.h | 9 include/linux/swapops.h | 65 include/linux/udp.h | 2 include/linux/usb/hcd.h | 5 include/linux/usb/quirks.h | 3 include/net/netfilter/nf_flow_table.h | 12 include/trace/events/rpcgss.h | 4 include/uapi/linux/pci_regs.h | 1 init/main.c | 2 io_uring/io_uring.c | 26 kernel/sched/sched.h | 20 lib/bootconfig.c | 19 mm/hugetlb.c | 10 mm/memory-failure.c | 18 mm/shmem.c | 6 net/bridge/br_input.c | 15 net/bridge/br_netfilter_hooks.c | 6 net/bridge/br_private.h | 1 net/bridge/netfilter/nf_conntrack_bridge.c | 14 net/netfilter/nf_flow_table_inet.c | 3 net/netfilter/nf_flow_table_ip.c | 10 net/netfilter/nf_tables_api.c | 16 net/netfilter/nft_set_pipapo.c | 14 net/unix/af_unix.c | 12 sound/core/seq/seq_ump_convert.c | 2 sound/pci/hda/patch_realtek.c | 3 sound/pci/hda/tas2781_hda_i2c.c | 4 sound/soc/ti/omap3pandora.c | 63 sound/usb/Makefile | 2 sound/usb/mixer_quirks.c | 9 sound/usb/mixer_scarlett2.c | 4391 ++++++++++ sound/usb/mixer_scarlett2.h | 7 sound/usb/mixer_scarlett_gen2.c | 4274 --------- sound/usb/mixer_scarlett_gen2.h | 7 tools/perf/util/bpf_skel/lock_contention.bpf.c | 5 tools/testing/selftests/ftrace/test.d/event/subsystem-enable.tc | 6 tools/testing/selftests/kselftest.h | 18 tools/testing/selftests/net/udpgso.c | 2 tools/testing/selftests/timers/posix_timers.c | 156 205 files changed, 6733 insertions(+), 5414 deletions(-)
Ai Chao (1):
ALSA: hda/realtek - Enable audio jacks of Haier Boyue G42 with ALC269VC
Alan Stern (1):
fs: sysfs: Fix reference leak in sysfs_break_active_protection()
Alex Deucher (1):
drm/radeon: make -fstrict-flex-arrays=3 happy
Alexander Usyskin (1):
mei: me: disable RPL-S on SPS and IGN firmwares
Alexey Izbyshev (1):
io_uring: Fix io_cqring_wait() not restoring sigmask on get_timespec64() failure
Andy Shevchenko (2):
gpiolib: swnode: Remove wrong header inclusion
serial: core: Clearing the circular buffer before NULLifying it
Ard Biesheuvel (1):
arm64/head: Disable MMU at EL2 before clearing HCR_EL2.E2H
Arınç ÜNAL (4):
net: dsa: mt7530: fix mirroring frames received on local port
net: dsa: mt7530: fix port mirroring for MT7988 SoC switch
net: dsa: mt7530: fix improper frames on all 25MHz and 40MHz XTAL MT7530
net: dsa: mt7530: fix enabling EEE on MT7531 switch on all boards
Asbjørn Sloth Tønnesen (2):
net: sparx5: flower: fix fragment flags handling
octeontx2-pf: fix FLOW_DIS_IS_FRAGMENT implementation
Bart Van Assche (1):
scsi: core: Fix handling of SCMD_FAIL_IF_RECOVERING
Bjorn Helgaas (1):
PCI/DPC: Use FIELD_GET()
Breno Leitao (1):
virtio_net: Do not send RSS key if it is not supported
Brenton Simpson (1):
drm: panel-orientation-quirks: Add quirk for Lenovo Legion Go
Carlos Llamas (1):
binder: check offset alignment in binder_get_object()
Carolina Jubran (1):
net/mlx5e: Prevent deadlock while disabling aRFS
Christian König (1):
drm/amdgpu: remove invalid resource->start check v2
Chuanhong Guo (1):
USB: serial: option: add support for Fibocom FM650/FG650
Coia Prant (1):
USB: serial: option: add Lonsung U8300/U9300 product
Daniele Palmas (1):
USB: serial: option: add Telit FN920C04 rmnet compositions
Danny Lin (1):
fuse: fix leaked ENOSYS error on first statx call
Dave Airlie (1):
nouveau: fix instmem race condition around ptr stores
David Matlack (1):
KVM: x86/mmu: Write-protect L2 SPTEs in TDP MMU when clearing dirty status
Dillon Varone (1):
drm/amd/display: Do not recursively call manual trigger programming
Dmitry Baryshkov (2):
drm/msm/dpu: populate SSPP scaler block version drm/panel: visionox-rm69299: don't unregister DSI device
Emil Kronborg (1):
serial: mxs-auart: add spinlock around changing cts state
Eric Biggers (1):
x86/cpufeatures: Fix dependencies for GFNI, VAES, and VPCLMULQDQ
Felix Fietkau (1):
net: ethernet: mtk_eth_soc: fix WED + wifi reset
Felix Kuehling (1):
drm/amdkfd: Fix memory leak in create_process failure
Finn Thain (1):
serial/pmac_zilog: Remove flawed mitigation for rx irq flood
Florian Westphal (1):
netfilter: nft_set_pipapo: do not free live element
Gavin Shan (1):
arm64: tlb: Fix TLBI RANGE operand
Geoffrey D. Bennett (7):
ALSA: scarlett2: Move USB IDs out from device_info struct
ALSA: scarlett2: Add support for Clarett 8Pre USB
ALSA: scarlett2: Default mixer driver to enabled
ALSA: scarlett2: Add correct product series name to messages
ALSA: scarlett2: Add Focusrite Clarett+ 2Pre and 4Pre support
ALSA: scarlett2: Add Focusrite Clarett 2Pre and 4Pre USB support
ALSA: scarlett2: Rename scarlett_gen2 to scarlett2
Gerd Bayer (1):
s390/ism: Properly fix receive message buffer allocation
Gil Fine (2):
thunderbolt: Avoid notify PM core about runtime PM resume
thunderbolt: Fix wake configurations after device unplug
Greg Kroah-Hartman (2):
Revert "usb: cdc-wdm: close race between read and workqueue" Linux 6.6.29
Hans Verkuil (1):
media: videobuf2: request more buffers for vb2_read
Hardik Gajjar (2):
usb: xhci: Add timeout argument in address_device USB HCD callback
usb: new quirk to reduce the SET_ADDRESS request timeout
Ilpo Järvinen (1):
PCI: Simplify pcie_capability_clear_and_set_word() to ..._clear_word()
Janusz Krzysztofik (1):
drm/i915/vma: Fix UAF on destroy against retire race
Jason A. Donenfeld (1):
random: handle creditable entropy from atomic process context
Jeongjun Park (1):
nilfs2: fix OOB in nilfs_set_de_type
Jerry Meng (1):
USB: serial: option: support Quectel EM060K sub-models
Johan Hovold (1):
PCI/ASPM: Fix deadlock when enabling ASPM
John Stultz (1):
selftests: timers: Fix posix_timers ksft_print_msg() warning
Jose Ignacio Tornos Martinez (1):
net: usb: ax88179_178a: avoid writing the mac address before first reading
Josh Poimboeuf (1):
x86/bugs: Fix BHI retpoline check
Kai-Heng Feng (1):
usb: Disable USB3 LPM at shutdown
Kuniyuki Iwashima (2):
af_unix: Call manage_oob() for every skb in unix_stream_read_generic().
af_unix: Don't peek OOB data without MSG_OOB.
Lei Chen (1):
tun: limit printing rate when illegal packet received by tun dev
Linus Walleij (1):
ASoC: ti: Convert Pandora ASoC to GPIO descriptors
Manivannan Sadhasivam (1):
scsi: ufs: qcom: Add missing interconnect bandwidth values for Gear 5
Marcin Szycik (1):
ice: Fix checking for unsupported keys on non-tunnel device
Mario Limonciello (1):
platform/x86/amd/pmc: Extend Framework 13 quirk to more BIOSes
Marios Makassikis (1):
ksmbd: clear RENAME_NOREPLACE before calling vfs_rename
Mark Brown (1):
selftests: timers: Convert posix_timers test to generate KTAP output
Mark Zhang (1):
RDMA/cm: Print the old state when cm_destroy_id gets timeout
Mathieu Desnoyers (1):
sched: Add missing memory barrier in switch_mm_cid
Mauro Carvalho Chehab (1):
ALSA: hda/realtek: Add quirks for Huawei Matebook D14 NBLB-WAX9N
Miaohe Lin (1):
mm/memory-failure: fix deadlock when hugetlb_optimize_vmemmap is enabled
Michael Guralnik (1):
RDMA/mlx5: Fix port number for counter query in multi-port configuration
Michal Swiatkowski (2):
ice: tc: check src_vsi in case of traffic from VF
ice: tc: allow zero flags in parsing tc flower
Mika Westerberg (1):
thunderbolt: Reset only non-USB4 host routers in resume
Mike Tipton (1):
interconnect: Don't access req_list while it's being manipulated
Mikhail Kobuk (1):
drm: nv04: Fix out of bounds access
Minas Harutyunyan (1):
usb: dwc2: host: Fix dereference issue in DDMA completion flow.
Namhyung Kim (1):
perf lock contention: Add a missing NULL check
Namjae Jeon (3):
ksmbd: fix slab-out-of-bounds in smb2_allocate_rsp_buf
ksmbd: validate request buffer size in smb2_allocate_rsp_buf()
ksmbd: common: use struct_group_attr instead of struct_group for network_open_info
Naveen N Rao (1):
powerpc/ftrace: Ignore ftrace locations in exit text sections
NeilBrown (1):
ceph: redirty page before returning AOP_WRITEPAGE_ACTIVATE
Nikita Zhandarovich (1):
comedi: vmk80xx: fix incomplete endpoint checking
Norihiko Hama (1):
usb: gadget: f_ncm: Fix UAF ncm object at re-bind after usb ep transport error
Oleg Nesterov (2):
selftests/timers/posix_timers: Reimplement check_timer_distribution()
selftests: kselftest: Fix build failure with NOLIBC
Oscar Salvador (1):
mm,swapops: update check in is_pfn_swap_entry for hwpoison entries
Pablo Neira Ayuso (3):
netfilter: br_netfilter: skip conntrack input hook for promisc packets
netfilter: flowtable: validate pppoe header
netfilter: flowtable: incorrect pppoe tuple
Paulo Alcantara (4):
smb: client: remove extra @chan_count check in __cifs_put_smb_ses()
smb: client: fix UAF in smb2_reconnect_server()
smb: client: guarantee refcounted children from parent session
smb: client: refresh referral without acquiring refpath_lock
Peter Oberparleiter (2):
s390/qdio: handle deferred cc1
s390/cio: fix race condition during online processing
Peter Xu (1):
mm/userfaultfd: allow hugetlb change protection upon poison entry
Pin-yen Lin (1):
clk: mediatek: Do a runtime PM get on controllers during probe
Qiang Zhang (1):
bootconfig: use memblock_free_late to free xbc memory to buddy
Ryan Roberts (1):
arm64/mm: Modify range-based tlbi to decrement scale
Samuel Thibault (1):
speakup: Avoid crash on very long word
Sanath S (4):
thunderbolt: Introduce tb_port_reset()
thunderbolt: Introduce tb_path_deactivate_hop()
thunderbolt: Make tb_switch_reset() support Thunderbolt 2, 3 and USB4 routers
thunderbolt: Reset topology created by the boot firmware
Sandipan Das (1):
KVM: x86/pmu: Do not mask LVTPC when handling a PMI on AMD platforms
Sean Christopherson (2):
KVM: x86: Snapshot if a vCPU's vendor model is AMD vs. Intel compatible
KVM: x86/pmu: Disable support for adaptive PEBS
Serge Semin (3):
net: stmmac: Apply half-duplex-less constraint for DW QoS Eth only
net: stmmac: Fix max-speed being ignored on queue re-init
net: stmmac: Fix IP-cores specific MAC capabilities
Shay Drory (2):
net/mlx5: Lag, restore buckets number to default after hash LAG deactivation net/mlx5: E-switch, store eswitch pointer before registering devlink_param
Shenghao Ding (2):
ALSA: hda/tas2781: correct the register for pow calibrated data
ALSA: hda/tas2781: Add new vendor_id and subsystem_id to support ThinkPad ICE-1
Siddharth Vadapalli (1):
net: ethernet: ti: am65-cpsw-nuss: cleanup DMA Channels before using them
Stephen Boyd (4):
clk: Remove prepare_lock hold assertion in __clk_release()
clk: Initialize struct clk_core kref earlier
clk: Get runtime PM before walking tree during disable_unused
clk: Get runtime PM before walking tree for clk_summary
Steve French (1):
smb3: show beginning time for per share stats
Steven Rostedt (Google) (1):
SUNRPC: Fix rpcgss_context trace event acceptor field
Sumanth Korikkar (1):
mm/shmem: inline shmem_is_huge() for disabled transparent hugepages
Takashi Iwai (1):
ALSA: seq: ump: Fix conversion from MIDI2 to MIDI1 UMP messages
Tony Lindgren (1):
serial: core: Fix missing shutdown and startup for serial base port
Uwe Kleine-König (2):
serial: stm32: Return IRQ_NONE in the ISR if no handling happend
serial: stm32: Reset .throttled state in .startup()
Vanillan Wang (1):
USB: serial: option: add Rolling RW101-GL and RW135-GL support
Ville Syrjälä (9):
drm/i915: Fix FEC pipe A vs. DDI A mixup
drm/i915/mst: Reject FEC+MST on ICL
drm/i915/cdclk: Fix voltage_level programming edge case drm/i915: Change intel_pipe_update_{start,end}() calling convention drm/i915: Extract intel_crtc_vblank_evade_scanlines() drm/i915: Enable VRR later during fastsets
drm/i915: Adjust seamless_m_n flag behaviour
drm/i915: Disable live M/N updates when using bigjoiner drm/i915/mst: Limit MST+DSC to TGL+
Vishal Badole (1):
clk: Show active consumers of clocks in debugfs
Xiubo Li (2):
ceph: pass the mdsc to several helpers
ceph: rename _to_client() to _to_fs_client()
Yanjun.Zhu (1):
RDMA/rxe: Fix the problem "mutex_destroy missing"
Yaxiong Tian (1):
arm64: hibernate: Fix level3 translation fault in swsusp_save()
Yuanhe Shu (1):
selftests/ftrace: Limit length in subsystem-enable tests
Yuntao Wang (1):
init/main.c: Fix potential static_command_line memory overflow
Yuri Benditovich (1):
net: change maximum number of UDP segments to 128
Zack Rusin (3):
drm/vmwgfx: Fix prime import/export
drm/vmwgfx: Sort primary plane formats by order of preference drm/vmwgfx: Fix crtc's atomic check conditional
Ziyang Xuan (2):
netfilter: nf_tables: Fix potential data-race in __nft_expr_type_get()
netfilter: nf_tables: Fix potential data-race in __nft_obj_type_get()
bolan wang (1):
USB: serial: option: add Fibocom FM135-GL variants
xinhui pan (1):
drm/amdgpu: validate the parameters of bo mapping operations more clearly
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +3 -0
@@ -6853,6 +6853,9 @@ pause after every control message); o = USB_QUIRK_HUB_SLOW_RESET (Hub needs extra delay after resetting its port); + p = USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT + (Reduce timeout of the SET_ADDRESS + request from 5000 ms to 500 ms); Example: quirks=0781:5580:bk,0a5c:5834:gij usbhid.mousepoll=
MAINTAINERS +1 -1
@@ -8142,7 +8142,7 @@ M: Geoffrey D. Bennett <[email protected]> L: [email protected] (moderated for non-subscribers) S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git -F: sound/usb/mixer_scarlett_gen2.c +F: sound/usb/mixer_scarlett2.c FORCEDETH GIGABIT ETHERNET DRIVER M: Rain River <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 28 +SUBLEVEL = 29 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/mach-omap2/pdata-quirks.c +10 -0
@@ -275,9 +275,19 @@ static struct platform_device pandora_backlight = { .id = -1, }; +static struct gpiod_lookup_table pandora_soc_audio_gpios = { + .dev_id ="soc-audio" , + .table = { +GPIO_LOOKUP ("gpio-112-127" ,6 ,"dac" ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("gpio-0-15" ,14 ,"amp" ,GPIO_ACTIVE_HIGH ), + { } + }, +}; +static void __init omap3_pandora_legacy_init (void ) {platform_device_register (&pandora_backlight); +gpiod_add_lookup_table (&pandora_soc_audio_gpios); }#endif /* CONFIG_ARCH_OMAP3 */
arch/arm64/include/asm/tlbflush.h +21 -19
@@ -152,12 +152,18 @@ static inline unsigned long get_trans_granule(void)#define MAX_TLBI_RANGE_PAGES __TLBI_RANGE_PAGES(31, 3)/* -* Generate 'num' values from -1 to 30 with -1 rejected by the -* __flush_tlb_range() loop below. +* Generate 'num' values from -1 to 31 with -1 rejected by the +* __flush_tlb_range() loop below. Its return value is only +* significant for a maximum of MAX_TLBI_RANGE_PAGES pages. If +* 'pages' is more than that, you must iterate over the overall +* range. */ -#define TLBI_RANGE_MASK GENMASK_ULL(4, 0) -#define __TLBI_RANGE_NUM (pages, scale) \ - ((((pages) >> (5 * (scale) + 1)) & TLBI_RANGE_MASK) - 1) +#define __TLBI_RANGE_NUM (pages, scale) \ + ({ \ + int __pages = min((pages), \ + __TLBI_RANGE_PAGES(31, (scale))); \ + (__pages >> (5 * (scale) + 1)) - 1; \ + })/* * TLB Invalidation
@@ -351,29 +357,25 @@ static inline void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)* entries one by one at the granularity of 'stride'. If the TLB * range ops are supported, then: * -* 1. If 'pages' is odd, flush the first page through non-range -* operations; -* -* 2. For remaining pages: the minimum range granularity is decided -* by 'scale', so multiple range TLBI operations may be required. -* Start from scale = 0, flush the corresponding number of pages -* ((num+1)*2^(5*scale+1) starting from 'addr'), then increase it -* until no pages left. +* 1. The minimum range granularity is decided by 'scale', so multiple range +* TLBI operations may be required. Start from scale = 3, flush the largest +* possible number of pages ((num+1)*2^(5*scale+1)) that fit into the +* requested range, then decrement scale and continue until one or zero pages +* are left. * -* Note that certain ranges can be represented by either num = 31 and -* scale or num = 0 and scale + 1. The loop below favours the latter -* since num is limited to 30 by the __TLBI_RANGE_NUM() macro. +* 2. If there is 1 page remaining, flush it through non-range operations. Range +* operations can only span an even number of pages. */ #define __flush_tlb_range_op (op, start, pages, stride, \ asid, tlb_level, tlbi_user) \ do { \ int num = 0; \ - int scale = 0; \ + int scale = 3; \ unsigned long addr; \ \ while (pages > 0) { \ if (!system_supports_tlb_range() || \ - pages % 2 == 1) { \ + pages == 1) { \ addr = __TLBI_VADDR(start, asid); \ __tlbi_level(op, addr, tlb_level); \ if (tlbi_user) \
@@ -393,7 +395,7 @@ do { \ start +=__TLBI_RANGE_PAGES (num, scale) <<PAGE_SHIFT ; \ pages -=__TLBI_RANGE_PAGES (num, scale); \ } \ - scale++; \ + scale--; \ } \ }while (0 )
arch/arm64/kernel/head.S +5 -0
@@ -569,6 +569,11 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL) adr_l x1, __hyp_text_end adr_l x2, dcache_clean_poc blr x2 + + mov_q x0, INIT_SCTLR_EL2_MMU_OFF + pre_disable_mmu_workaround + msr sctlr_el2, x0 + isb 0: mov_q x0, HCR_HOST_NVHE_FLAGS msr hcr_el2, x0
arch/arm64/mm/pageattr.c +0 -3
@@ -219,9 +219,6 @@ bool kernel_page_present(struct page *page)pte_t *ptep;unsigned long addr = (unsigned long )page_address (page); -if (!can_set_direct_map ()) -return true; - pgdp =pgd_offset_k (addr);if (pgd_none (READ_ONCE (*pgdp)))return false;
arch/powerpc/include/asm/ftrace.h +2 -8
@@ -20,14 +20,6 @@#ifndef __ASSEMBLY__extern void _mcount (void ); -static inline unsigned long ftrace_call_adjust (unsigned long addr) -{ -if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) - addr +=MCOUNT_INSN_SIZE ; - -return addr; -} -unsigned long prepare_ftrace_return (unsigned long parent,unsigned long ip,unsigned long sp);
@@ -142,8 +134,10 @@ static inline u8 this_cpu_get_ftrace_enabled(void) { return 1; }#ifdef CONFIG_FUNCTION_TRACER extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];void ftrace_free_init_tramp (void ); +unsigned long ftrace_call_adjust (unsigned long addr);#else static inline void ftrace_free_init_tramp (void ) { } +static inline unsigned long ftrace_call_adjust (unsigned long addr) {return addr; }#endif #endif /* !__ASSEMBLY__ */
arch/powerpc/include/asm/sections.h +1 -0
@@ -14,6 +14,7 @@ typedef struct func_desc func_desc_t;extern char __head_end[];extern char __srwx_boundary[]; +extern char __exittext_begin[], __exittext_end[];/* Patch sites */ extern s32 patch__call_flush_branch_caches1;
arch/powerpc/kernel/trace/ftrace.c +12 -0
@@ -27,10 +27,22 @@#include <asm/ftrace.h> #include <asm/syscall.h> #include <asm/inst.h> +#include <asm/sections.h> #define NUM_FTRACE_TRAMPS 2static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +if (addr >= (unsigned long )__exittext_begin && addr < (unsigned long )__exittext_end) +return 0 ; + +if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) + addr +=MCOUNT_INSN_SIZE ; + +return addr; +} +static ppc_inst_t ftrace_create_branch_inst (unsigned long ip,unsigned long addr,int link) {ppc_inst_t op;
arch/powerpc/kernel/trace/ftrace_64_pg.c +5 -0
@@ -37,6 +37,11 @@#define NUM_FTRACE_TRAMPS 8static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +return addr; +} +static ppc_inst_t ftrace_call_replace (unsigned long ip,unsigned long addr,int link) {
arch/powerpc/kernel/vmlinux.lds.S +2 -0
@@ -281,7 +281,9 @@ SECTIONS * to deal with references from __bug_table */ .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + __exittext_begin = .; EXIT_TEXT + __exittext_end = .; } . = ALIGN(PAGE_SIZE);
arch/x86/include/asm/barrier.h +3 -0
@@ -79,6 +79,9 @@ do { \#define __smp_mb__before_atomic () do { } while (0)#define __smp_mb__after_atomic () do { } while (0) +/* Writing to CR3 provides a full memory barrier in switch_mm(). */ +#define smp_mb__after_switch_mm () do { } while (0) +#include <asm-generic/barrier.h> #endif /* _ASM_X86_BARRIER_H */
arch/x86/include/asm/kvm_host.h +1 -0
@@ -828,6 +828,7 @@ struct kvm_vcpu_arch {int cpuid_nent;struct kvm_cpuid_entry2 *cpuid_entries;struct kvm_hypervisor_cpuid kvm_cpuid; +bool is_amd_compatible;/* * FIXME: Drop this macro and use KVM_NR_GOVERNED_FEATURES directly
arch/x86/kernel/cpu/bugs.c +7 -4
@@ -1651,7 +1651,8 @@ static void __init bhi_select_mitigation(void)return ;/* Retpoline mitigates against BHI unless the CPU has RRSBA behavior */ -if (cpu_feature_enabled (X86_FEATURE_RETPOLINE )) { +if (boot_cpu_has (X86_FEATURE_RETPOLINE ) && + !boot_cpu_has (X86_FEATURE_RETPOLINE_LFENCE )) {spec_ctrl_disable_kernel_rrsba ();if (rrsba_disabled)return ;
@@ -2803,11 +2804,13 @@ static const char *spectre_bhi_state(void) {if (!boot_cpu_has_bug (X86_BUG_BHI ))return "; BHI: Not affected" ; -else if (boot_cpu_has (X86_FEATURE_CLEAR_BHB_HW )) +else if (boot_cpu_has (X86_FEATURE_CLEAR_BHB_HW ))return "; BHI: BHI_DIS_S" ; -else if (boot_cpu_has (X86_FEATURE_CLEAR_BHB_LOOP )) +else if (boot_cpu_has (X86_FEATURE_CLEAR_BHB_LOOP ))return "; BHI: SW loop, KVM: SW loop" ; -else if (boot_cpu_has (X86_FEATURE_RETPOLINE ) && rrsba_disabled) +else if (boot_cpu_has (X86_FEATURE_RETPOLINE ) && + !boot_cpu_has (X86_FEATURE_RETPOLINE_LFENCE ) && + rrsba_disabled)return "; BHI: Retpoline" ;else if (boot_cpu_has (X86_FEATURE_CLEAR_BHB_LOOP_ON_VMEXIT ))return "; BHI: Vulnerable, KVM: SW loop" ;
arch/x86/kernel/cpu/cpuid-deps.c +3 -3
@@ -44,7 +44,10 @@ static const struct cpuid_dep cpuid_deps[] = { { X86_FEATURE_F16C, X86_FEATURE_XMM2, }, { X86_FEATURE_AES, X86_FEATURE_XMM2 }, { X86_FEATURE_SHA_NI, X86_FEATURE_XMM2 }, + { X86_FEATURE_GFNI, X86_FEATURE_XMM2 }, { X86_FEATURE_FMA, X86_FEATURE_AVX }, + { X86_FEATURE_VAES, X86_FEATURE_AVX }, + { X86_FEATURE_VPCLMULQDQ, X86_FEATURE_AVX }, { X86_FEATURE_AVX2, X86_FEATURE_AVX, }, { X86_FEATURE_AVX512F, X86_FEATURE_AVX, }, { X86_FEATURE_AVX512IFMA, X86_FEATURE_AVX512F },
@@ -56,9 +59,6 @@ static const struct cpuid_dep cpuid_deps[] = { { X86_FEATURE_AVX512VL, X86_FEATURE_AVX512F }, { X86_FEATURE_AVX512VBMI, X86_FEATURE_AVX512F }, { X86_FEATURE_AVX512_VBMI2, X86_FEATURE_AVX512VL }, - { X86_FEATURE_GFNI, X86_FEATURE_AVX512VL }, - { X86_FEATURE_VAES, X86_FEATURE_AVX512VL }, - { X86_FEATURE_VPCLMULQDQ, X86_FEATURE_AVX512VL }, { X86_FEATURE_AVX512_VNNI, X86_FEATURE_AVX512VL }, { X86_FEATURE_AVX512_BITALG, X86_FEATURE_AVX512VL }, { X86_FEATURE_AVX512_4VNNIW, X86_FEATURE_AVX512F },
arch/x86/kvm/cpuid.c +1 -0
@@ -362,6 +362,7 @@ static void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)kvm_update_pv_runtime (vcpu); + vcpu->arch.is_amd_compatible =guest_cpuid_is_amd_or_hygon (vcpu); vcpu->arch.maxphyaddr =cpuid_query_maxphyaddr (vcpu); vcpu->arch.reserved_gpa_bits =kvm_vcpu_reserved_gpa_bits_raw (vcpu);
arch/x86/kvm/cpuid.h +10 -0
@@ -125,6 +125,16 @@ static inline bool guest_cpuid_is_intel(struct kvm_vcpu *vcpu)return best &&is_guest_vendor_intel (best->ebx, best->ecx, best->edx); } +static inline bool guest_cpuid_is_amd_compatible (struct kvm_vcpu *vcpu) +{ +return vcpu->arch.is_amd_compatible; +} + +static inline bool guest_cpuid_is_intel_compatible (struct kvm_vcpu *vcpu) +{ +return !guest_cpuid_is_amd_compatible (vcpu); +} +static inline int guest_cpuid_family (struct kvm_vcpu *vcpu) {struct kvm_cpuid_entry2 *best;
arch/x86/kvm/lapic.c +2 -1
@@ -2772,7 +2772,8 @@ int kvm_apic_local_deliver(struct kvm_lapic *apic, int lvt_type) trig_mode = reg &APIC_LVT_LEVEL_TRIGGER ; r =__apic_accept_irq (apic, mode, vector,1 , trig_mode,NULL ); -if (r && lvt_type ==APIC_LVTPC ) +if (r && lvt_type ==APIC_LVTPC && +guest_cpuid_is_intel_compatible (apic->vcpu))kvm_lapic_set_reg (apic,APIC_LVTPC , reg |APIC_LVT_MASKED );return r; }
arch/x86/kvm/mmu/mmu.c +1 -1
@@ -4788,7 +4788,7 @@ static void reset_guest_rsvds_bits_mask(struct kvm_vcpu *vcpu, context->cpu_role.base.level,is_efer_nx (context),guest_can_use (vcpu,X86_FEATURE_GBPAGES ),is_cr4_pse (context), - guest_cpuid_is_amd_or_hygon(vcpu)); + guest_cpuid_is_amd_compatible(vcpu)); } static void __reset_rsvds_bits_mask_ept(struct rsvd_bits_validate *rsvd_check,
arch/x86/kvm/mmu/tdp_mmu.c +16 -5
@@ -1506,6 +1506,16 @@ void kvm_tdp_mmu_try_split_huge_pages(struct kvm *kvm, } } +static bool tdp_mmu_need_write_protect (struct kvm_mmu_page *sp) +{ +/* +* All TDP MMU shadow pages share the same role as their root, aside +* from level, so it is valid to key off any shadow page to determine if +* write protection is needed for an entire tree. +*/ +return kvm_mmu_page_ad_need_write_protect (sp) || !kvm_ad_enabled (); +} +/* * Clear the dirty status of all the SPTEs mapping GFNs in the memslot. If * AD bits are enabled, this will involve clearing the dirty bit on each SPTE.
@@ -1516,7 +1526,8 @@ void kvm_tdp_mmu_try_split_huge_pages(struct kvm *kvm,static bool clear_dirty_gfn_range (struct kvm *kvm,struct kvm_mmu_page *root,gfn_t start,gfn_t end) { -u64 dbit =kvm_ad_enabled () ? shadow_dirty_mask :PT_WRITABLE_MASK ; +const u64 dbit =tdp_mmu_need_write_protect (root) ?PT_WRITABLE_MASK : + shadow_dirty_mask;struct tdp_iter iter;bool spte_set = false;
@@ -1530,7 +1541,7 @@ static bool clear_dirty_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,if (!is_shadow_present_pte (iter.old_spte))continue ; -KVM_MMU_WARN_ON (kvm_ad_enabled () && +KVM_MMU_WARN_ON (dbit == shadow_dirty_mask &&spte_ad_need_write_protect (iter.old_spte));if (!(iter.old_spte & dbit))
@@ -1578,8 +1589,8 @@ bool kvm_tdp_mmu_clear_dirty_slot(struct kvm *kvm,static void clear_dirty_pt_masked (struct kvm *kvm,struct kvm_mmu_page *root,gfn_t gfn,unsigned long mask,bool wrprot) { -u64 dbit = (wrprot || !kvm_ad_enabled ()) ?PT_WRITABLE_MASK : - shadow_dirty_mask; +const u64 dbit = (wrprot ||tdp_mmu_need_write_protect (root)) ?PT_WRITABLE_MASK : + shadow_dirty_mask;struct tdp_iter iter;lockdep_assert_held_write (&kvm->mmu_lock);
@@ -1591,7 +1602,7 @@ static void clear_dirty_pt_masked(struct kvm *kvm, struct kvm_mmu_page *root,if (!mask)break ; -KVM_MMU_WARN_ON (kvm_ad_enabled () && +KVM_MMU_WARN_ON (dbit == shadow_dirty_mask &&spte_ad_need_write_protect (iter.old_spte)); if (iter.level > PG_LEVEL_4K ||
arch/x86/kvm/vmx/vmx.c +22 -2
@@ -7858,8 +7858,28 @@ static u64 vmx_get_perf_capabilities(void)if (vmx_pebs_supported ()) { perf_cap |= host_perf_cap &PERF_CAP_PEBS_MASK ; -if ((perf_cap &PERF_CAP_PEBS_FORMAT ) <4 ) - perf_cap &= ~PERF_CAP_PEBS_BASELINE ; + +/* +* Disallow adaptive PEBS as it is functionally broken, can be +* used by the guest to read *host* LBRs, and can be used to +* bypass userspace event filters. To correctly and safely +* support adaptive PEBS, KVM needs to: +* +* 1. Account for the ADAPTIVE flag when (re)programming fixed +* counters. +* +* 2. Gain support from perf (or take direct control of counter +* programming) to support events without adaptive PEBS +* enabled for the hardware counter. +* +* 3. Ensure LBR MSRs cannot hold host data on VM-Entry with +* adaptive PEBS enabled and MSR_PEBS_DATA_CFG.LBRS=1. +* +* 4. Document which PMU events are effectively exposed to the +* guest via adaptive PEBS, and make adaptive PEBS mutually +* exclusive with KVM_SET_PMU_EVENT_FILTER if necessary. +*/ + perf_cap &= ~PERF_CAP_PEBS_BASELINE ; }return perf_cap;
arch/x86/kvm/x86.c +1 -1
@@ -3317,7 +3317,7 @@ static bool is_mci_status_msr(u32 msr)static bool can_set_mci_status (struct kvm_vcpu *vcpu) {/* McStatusWrEn enabled? */ -if (guest_cpuid_is_amd_or_hygon (vcpu)) +if (guest_cpuid_is_amd_compatible (vcpu))return !!(vcpu->arch.msr_hwcr &BIT_ULL (18 ));return false;
drivers/accessibility/speakup/main.c +1 -1
@@ -574,7 +574,7 @@ static u_long get_word(struct vc_data *vc) } attr_ch =get_char (vc, (u_short *)tmp_pos, &spk_attr); buf[cnt++] = attr_ch; -while (tmpx < vc->vc_cols -1 ) { +while (tmpx < vc->vc_cols -1 && cnt <sizeof (buf) -1 ) { tmp_pos +=2 ; tmpx++; ch =get_char (vc, (u_short *)tmp_pos, &temp);
drivers/android/binder.c +3 -1
@@ -1708,8 +1708,10 @@ static size_t binder_get_object(struct binder_proc *proc,size_t object_size =0 ; read_size =min_t (size_t,sizeof (*object), buffer->data_size - offset); -if (offset > buffer->data_size || read_size <sizeof (*hdr)) +if (offset > buffer->data_size || read_size <sizeof (*hdr) || + !IS_ALIGNED (offset,sizeof (u32)))return 0 ; +if (u) {if (copy_from_user (object, u + offset, read_size))return 0 ;
drivers/char/random.c +5 -5
@@ -702,7 +702,7 @@ static void extract_entropy(void *buf, size_t len)static void __cold _credit_init_bits (size_t bits) { -static struct execute_work set_ready; + static DECLARE_WORK(set_ready, crng_set_ready);unsigned int new, orig, add;unsigned long flags;
@@ -718,8 +718,8 @@ static void __cold _credit_init_bits(size_t bits)if (orig <POOL_READY_BITS && new >=POOL_READY_BITS ) {crng_reseed (NULL );/* Sets crng_init to CRNG_READY under base_crng.lock. */ -if (static_key_initialized) -execute_in_process_context (crng_set_ready, &set_ready); +if (static_key_initialized && system_unbound_wq) +queue_work (system_unbound_wq, &set_ready);atomic_notifier_call_chain (&random_ready_notifier,0 ,NULL );wake_up_interruptible (&crng_init_wait);kill_fasync (&fasync,SIGIO ,POLL_IN );
@@ -890,8 +890,8 @@ void __init random_init(void)/* * If we were initialized by the cpu or bootloader before jump labels -* are initialized, then we should enable the static branch here, where -* it's guaranteed that jump labels have been initialized. +* or workqueues are initialized, then we should enable the static +* branch here, where it's guaranteed that these have been initialized. */ if (!static_branch_likely (&crng_is_ready) && crng_init >=CRNG_READY )crng_set_ready (NULL );
drivers/clk/clk.c +154 -41
350 lines not on this page · raw message
drivers/clk/mediatek/clk-mtk.c +15 -0
@@ -13,6 +13,7 @@#include <linux/of.h> #include <linux/of_address.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/slab.h> #include "clk-mtk.h"
@@ -494,6 +495,16 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,return IS_ERR (base) ?PTR_ERR (base) : -ENOMEM ; } + +devm_pm_runtime_enable (&pdev->dev); +/* +* Do a pm_runtime_resume_and_get() to workaround a possible +* deadlock between clk_register() and the genpd framework. +*/ + r =pm_runtime_resume_and_get (&pdev->dev); +if (r) +return r; +/* Calculate how many clk_hw_onecell_data entries to allocate */ num_clks = mcd->num_clks + mcd->num_composite_clks; num_clks += mcd->num_fixed_clks + mcd->num_factor_clks;
@@ -574,6 +585,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, goto unregister_clks; } +pm_runtime_put (&pdev->dev); +return r; unregister_clks:
@@ -604,6 +617,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, free_base:if (mcd->shared_io && base)iounmap (base); + +pm_runtime_put (&pdev->dev);return r; }
drivers/comedi/drivers/vmk80xx.c +12 -23
@@ -641,33 +641,22 @@ static int vmk80xx_find_usb_endpoints(struct comedi_device *dev)struct vmk80xx_private *devpriv = dev->private;struct usb_interface *intf =comedi_to_usb_interface (dev);struct usb_host_interface *iface_desc = intf->cur_altsetting; -struct usb_endpoint_descriptor *ep_desc; -int i; - -if (iface_desc->desc.bNumEndpoints !=2 ) -return -ENODEV ; - -for (i =0 ; i < iface_desc->desc.bNumEndpoints; i++) { - ep_desc = &iface_desc->endpoint[i].desc; - -if (usb_endpoint_is_int_in (ep_desc) || -usb_endpoint_is_bulk_in (ep_desc)) { -if (!devpriv->ep_rx) - devpriv->ep_rx = ep_desc; -continue ; - } +struct usb_endpoint_descriptor *ep_rx_desc, *ep_tx_desc; +int ret; -if (usb_endpoint_is_int_out (ep_desc) || -usb_endpoint_is_bulk_out (ep_desc)) { -if (!devpriv->ep_tx) - devpriv->ep_tx = ep_desc; -continue ; - } - } +if (devpriv->model ==VMK8061_MODEL ) + ret =usb_find_common_endpoints (iface_desc, &ep_rx_desc, + &ep_tx_desc,NULL ,NULL ); +else + ret =usb_find_common_endpoints (iface_desc,NULL ,NULL , + &ep_rx_desc, &ep_tx_desc); -if (!devpriv->ep_rx || !devpriv->ep_tx) +if (ret)return -ENODEV ; + devpriv->ep_rx = ep_rx_desc; + devpriv->ep_tx = ep_tx_desc; +if (!usb_endpoint_maxp (devpriv->ep_rx) || !usb_endpoint_maxp (devpriv->ep_tx))return -EINVAL ;
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +0 -4
@@ -562,7 +562,6 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_device *bdev, struct ttm_resource *mem) {struct amdgpu_device *adev =amdgpu_ttm_adev (bdev); -size_t bus_size = (size_t )mem->size;switch (mem->mem_type) {case TTM_PL_SYSTEM :
@@ -573,9 +572,6 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_device *bdev,break ;case TTM_PL_VRAM : mem->bus.offset = mem->start <<PAGE_SHIFT ; -/* check if it's visible */ -if ((mem->bus.offset + bus_size) > adev->gmc.visible_vram_size) -return -EINVAL ;if (adev->mman.aper_base_kaddr && mem->placement &TTM_PL_FLAG_CONTIGUOUS )
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +46 -26
107 lines not on this page · raw message
drivers/gpu/drm/amd/amdkfd/kfd_process.c +2 -2
@@ -818,9 +818,9 @@ struct kfd_process *kfd_create_process(struct task_struct *thread)mutex_lock (&kfd_processes_mutex);if (kfd_is_locked ()) { -mutex_unlock (&kfd_processes_mutex);pr_debug ("KFD is locked! Cannot create process" ); -return ERR_PTR (-EINVAL ); + process =ERR_PTR (-EINVAL ); + goto out; }/* A prior open of /dev/kfd could have already created the process. */
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c +0 -3
@@ -236,9 +236,6 @@ static void optc32_setup_manual_trigger(struct timing_generator *optc)OTG_V_TOTAL_MAX_SEL ,1 ,OTG_FORCE_LOCK_ON_EVENT ,0 , OTG_SET_V_TOTAL_MIN_MASK, (1 << 1)); /* TRIGA */ - -// Setup manual flow control for EOF via TRIG_A - optc->funcs->setup_manual_trigger (optc); } }
drivers/gpu/drm/drm_panel_orientation_quirks.c +6 -0
@@ -348,6 +348,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Duet 3 10IGL5"), }, .driver_data = (void *)&lcd1200x1920_rightside_up, + }, { /* Lenovo Legion Go 8APU1 */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Legion Go 8APU1"), + }, + .driver_data = (void *)&lcd1600x2560_leftside_up, }, { /* Lenovo Yoga Book X90F / X90L */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
drivers/gpu/drm/i915/display/intel_atomic.c +1 -0
@@ -259,6 +259,7 @@ intel_crtc_duplicate_state(struct drm_crtc *crtc)drm_property_blob_get (crtc_state->post_csc_lut); crtc_state->update_pipe = false; + crtc_state->update_m_n = false; crtc_state->disable_lp_wm = false; crtc_state->disable_cxsr = false; crtc_state->update_wm_pre = false;
drivers/gpu/drm/i915/display/intel_cdclk.c +27 -10
@@ -2453,7 +2453,8 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)intel_atomic_get_old_cdclk_state (state);const struct intel_cdclk_state *new_cdclk_state =intel_atomic_get_new_cdclk_state (state); -enum pipe pipe = new_cdclk_state->pipe; +struct intel_cdclk_config cdclk_config; +enum pipe pipe;if (!intel_cdclk_changed (&old_cdclk_state->actual, &new_cdclk_state->actual))
@@ -2462,12 +2463,25 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)if (IS_DG2 (i915))intel_cdclk_pcode_pre_notify (state); -if (new_cdclk_state->disable_pipes || - old_cdclk_state->actual.cdclk <= new_cdclk_state->actual.cdclk) { -drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed); +if (new_cdclk_state->disable_pipes) { + cdclk_config = new_cdclk_state->actual; + pipe =INVALID_PIPE ; + }else { +if (new_cdclk_state->actual.cdclk >= old_cdclk_state->actual.cdclk) { + cdclk_config = new_cdclk_state->actual; + pipe = new_cdclk_state->pipe; + }else { + cdclk_config = old_cdclk_state->actual; + pipe =INVALID_PIPE ; + } -intel_set_cdclk (i915, &new_cdclk_state->actual, pipe); + cdclk_config.voltage_level =max (new_cdclk_state->actual.voltage_level, + old_cdclk_state->actual.voltage_level); } + +drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed); + +intel_set_cdclk (i915, &cdclk_config, pipe); }/**
@@ -2485,7 +2499,7 @@ intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)intel_atomic_get_old_cdclk_state (state);const struct intel_cdclk_state *new_cdclk_state =intel_atomic_get_new_cdclk_state (state); -enum pipe pipe = new_cdclk_state->pipe; +enum pipe pipe;if (!intel_cdclk_changed (&old_cdclk_state->actual, &new_cdclk_state->actual))
@@ -2495,11 +2509,14 @@ intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)intel_cdclk_pcode_post_notify (state);if (!new_cdclk_state->disable_pipes && - old_cdclk_state->actual.cdclk > new_cdclk_state->actual.cdclk) { -drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed); + new_cdclk_state->actual.cdclk < old_cdclk_state->actual.cdclk) + pipe = new_cdclk_state->pipe; +else + pipe =INVALID_PIPE ; -intel_set_cdclk (i915, &new_cdclk_state->actual, pipe); - } +drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed); + +intel_set_cdclk (i915, &new_cdclk_state->actual, pipe); }static int intel_pixel_rate_to_cdclk (const struct intel_crtc_state *crtc_state)
drivers/gpu/drm/i915/display/intel_crtc.c +59 -37
136 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_crtc.h +4 -2
@@ -36,8 +36,10 @@ void intel_crtc_state_reset(struct intel_crtc_state *crtc_state,u32 intel_crtc_get_vblank_counter (struct intel_crtc *crtc);void intel_crtc_vblank_on (const struct intel_crtc_state *crtc_state);void intel_crtc_vblank_off (const struct intel_crtc_state *crtc_state); -void intel_pipe_update_start (struct intel_crtc_state *new_crtc_state); -void intel_pipe_update_end (struct intel_crtc_state *new_crtc_state); +void intel_pipe_update_start (struct intel_atomic_state *state, +struct intel_crtc *crtc); +void intel_pipe_update_end (struct intel_atomic_state *state, +struct intel_crtc *crtc);void intel_wait_for_vblank_workers (struct intel_atomic_state *state);struct intel_crtc *intel_first_crtc (struct drm_i915_private *i915); struct intel_crtc *intel_crtc_for_pipe(struct drm_i915_private *i915,
drivers/gpu/drm/i915/display/intel_display.c +28 -15
124 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_display_device.h +1 -0
@@ -46,6 +46,7 @@ struct drm_printer;#define HAS_DPT (i915) (DISPLAY_VER(i915) >= 13)#define HAS_DSB (i915) (DISPLAY_INFO(i915)->has_dsb)#define HAS_DSC (__i915) (DISPLAY_RUNTIME_INFO(__i915)->has_dsc) +#define HAS_DSC_MST (__i915) (DISPLAY_VER(__i915) >= 12 && HAS_DSC(__i915))#define HAS_FBC (i915) (DISPLAY_RUNTIME_INFO(i915)->fbc_mask != 0)#define HAS_FPGA_DBG_UNCLAIMED (i915) (DISPLAY_INFO(i915)->has_fpga_dbg)#define HAS_FW_BLC (i915) (DISPLAY_VER(i915) > 2)
drivers/gpu/drm/i915/display/intel_display_types.h +1 -1
@@ -1084,6 +1084,7 @@ struct intel_crtc_state {unsigned fb_bits;/* framebuffers to flip */ bool update_pipe;/* can a fast modeset be performed? */ +bool update_m_n;/* update M/N seamlessly during fastset? */ bool disable_cxsr;bool update_wm_pre, update_wm_post;/* watermarks are updated */ bool fifo_changed;/* FIFO split is changed */
@@ -1196,7 +1197,6 @@ struct intel_crtc_state {/* m2_n2 for eDP downclock */ struct intel_link_m_n dp_m2_n2;bool has_drrs; -bool seamless_m_n;/* PSR is supported but might not be enabled due the lack of enabled planes */ bool has_psr;
drivers/gpu/drm/i915/display/intel_dp.c +9 -4
@@ -1310,13 +1310,14 @@ bool intel_dp_has_hdmi_sink(struct intel_dp *intel_dp)static bool intel_dp_source_supports_fec (struct intel_dp *intel_dp,const struct intel_crtc_state *pipe_config) { +struct intel_encoder *encoder = &dp_to_dig_port (intel_dp)->base;struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp); -/* On TGL, FEC is supported on all Pipes */ if (DISPLAY_VER (dev_priv) >=12 )return true; -if (DISPLAY_VER (dev_priv) ==11 && pipe_config->cpu_transcoder !=TRANSCODER_A ) +if (DISPLAY_VER (dev_priv) ==11 && encoder->port !=PORT_A && + !intel_crtc_has_type (pipe_config,INTEL_OUTPUT_DP_MST ))return true;return false;
@@ -2147,8 +2148,12 @@ intel_dp_drrs_compute_config(struct intel_connector *connector,intel_panel_downclock_mode (connector, &pipe_config->hw.adjusted_mode);int pixel_clock; -if (has_seamless_m_n (connector)) - pipe_config->seamless_m_n = true; +/* +* FIXME all joined pipes share the same transcoder. +* Need to account for that when updating M/N live. +*/ +if (has_seamless_m_n (connector) && !pipe_config->bigjoiner_pipes) + pipe_config->update_m_n = true;if (!can_enable_drrs (connector, pipe_config, downclock_mode)) {if (intel_cpu_transcoder_has_m2_n2 (i915, pipe_config->cpu_transcoder))
drivers/gpu/drm/i915/display/intel_dp_mst.c +1 -1
@@ -964,7 +964,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,return 0 ; } -if (DISPLAY_VER (dev_priv) >=10 && +if (HAS_DSC_MST (dev_priv) &&drm_dp_sink_supports_dsc (intel_dp->dsc_dpcd)) {/* * TBD pass the connector BPC,
drivers/gpu/drm/i915/i915_vma.c +35 -7
76 lines not on this page · raw message
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h +4 -4
@@ -77,7 +77,7 @@ static const struct dpu_sspp_cfg sm8150_sspp[] = { .name = "sspp_0", .id = SSPP_VIG0, .base = 0x4000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_0, + .sblk = &sm8150_vig_sblk_0, .xin_id = 0, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG0,
@@ -85,7 +85,7 @@ static const struct dpu_sspp_cfg sm8150_sspp[] = { .name = "sspp_1", .id = SSPP_VIG1, .base = 0x6000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_1, + .sblk = &sm8150_vig_sblk_1, .xin_id = 4, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG1,
@@ -93,7 +93,7 @@ static const struct dpu_sspp_cfg sm8150_sspp[] = { .name = "sspp_2", .id = SSPP_VIG2, .base = 0x8000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_2, + .sblk = &sm8150_vig_sblk_2, .xin_id = 8, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG2,
@@ -101,7 +101,7 @@ static const struct dpu_sspp_cfg sm8150_sspp[] = { .name = "sspp_3", .id = SSPP_VIG3, .base = 0xa000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_3, + .sblk = &sm8150_vig_sblk_3, .xin_id = 12, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG3,
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h +4 -4
@@ -76,7 +76,7 @@ static const struct dpu_sspp_cfg sc8180x_sspp[] = { .name = "sspp_0", .id = SSPP_VIG0, .base = 0x4000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_0, + .sblk = &sm8150_vig_sblk_0, .xin_id = 0, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG0,
@@ -84,7 +84,7 @@ static const struct dpu_sspp_cfg sc8180x_sspp[] = { .name = "sspp_1", .id = SSPP_VIG1, .base = 0x6000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_1, + .sblk = &sm8150_vig_sblk_1, .xin_id = 4, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG1,
@@ -92,7 +92,7 @@ static const struct dpu_sspp_cfg sc8180x_sspp[] = { .name = "sspp_2", .id = SSPP_VIG2, .base = 0x8000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_2, + .sblk = &sm8150_vig_sblk_2, .xin_id = 8, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG2,
@@ -100,7 +100,7 @@ static const struct dpu_sspp_cfg sc8180x_sspp[] = { .name = "sspp_3", .id = SSPP_VIG3, .base = 0xa000, .len = 0x1f0, .features = VIG_SDM845_MASK, - .sblk = &sdm845_vig_sblk_3, + .sblk = &sm8150_vig_sblk_3, .xin_id = 12, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG3,
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h +4 -4
@@ -77,7 +77,7 @@ static const struct dpu_sspp_cfg sm8450_sspp[] = { .name = "sspp_0", .id = SSPP_VIG0, .base = 0x4000, .len = 0x32c, .features = VIG_SC7180_MASK, - .sblk = &sm8250_vig_sblk_0, + .sblk = &sm8450_vig_sblk_0, .xin_id = 0, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG0,
@@ -85,7 +85,7 @@ static const struct dpu_sspp_cfg sm8450_sspp[] = { .name = "sspp_1", .id = SSPP_VIG1, .base = 0x6000, .len = 0x32c, .features = VIG_SC7180_MASK, - .sblk = &sm8250_vig_sblk_1, + .sblk = &sm8450_vig_sblk_1, .xin_id = 4, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG1,
@@ -93,7 +93,7 @@ static const struct dpu_sspp_cfg sm8450_sspp[] = { .name = "sspp_2", .id = SSPP_VIG2, .base = 0x8000, .len = 0x32c, .features = VIG_SC7180_MASK, - .sblk = &sm8250_vig_sblk_2, + .sblk = &sm8450_vig_sblk_2, .xin_id = 8, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG2,
@@ -101,7 +101,7 @@ static const struct dpu_sspp_cfg sm8450_sspp[] = { .name = "sspp_3", .id = SSPP_VIG3, .base = 0xa000, .len = 0x32c, .features = VIG_SC7180_MASK, - .sblk = &sm8250_vig_sblk_3, + .sblk = &sm8450_vig_sblk_3, .xin_id = 12, .type = SSPP_TYPE_VIG, .clk_ctrl = DPU_CLK_CTRL_VIG3,
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c +73 -22
160 lines not on this page · raw message
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h +2 -1
@@ -269,7 +269,8 @@ enum {/** * struct dpu_scaler_blk: Scaler information * @info: HW register and features supported by this sub-blk -* @version: qseed block revision +* @version: qseed block revision, on QSEED3+ platforms this is the value of +* scaler_blk.base + QSEED3_HW_VERSION registers. */ struct dpu_scaler_blk {DPU_HW_SUBBLK_INFO ;
drivers/gpu/drm/nouveau/nouveau_bios.c +7 -6
@@ -23,6 +23,7 @@*/ #include "nouveau_drv.h" +#include "nouveau_bios.h" #include "nouveau_reg.h" #include "dispnv04/hw.h" #include "nouveau_encoder.h"
@@ -1675,7 +1676,7 @@ apply_dcb_encoder_quirks(struct drm_device *dev, int idx, u32 *conn, u32 *conf)*/ if (nv_match_device (dev,0x0201 ,0x1462 ,0x8851 )) {if (*conn ==0xf2005014 && *conf ==0xffffffff ) { -fabricate_dcb_output (dcb,DCB_OUTPUT_TMDS ,1 ,1 ,1 ); +fabricate_dcb_output (dcb,DCB_OUTPUT_TMDS ,1 ,1 ,DCB_OUTPUT_B );return false; } }
@@ -1761,26 +1762,26 @@ fabricate_dcb_encoder_table(struct drm_device *dev, struct nvbios *bios)#ifdef __powerpc__/* Apple iMac G4 NV17 */ if (of_machine_is_compatible ("PowerMac4,5" )) { -fabricate_dcb_output (dcb,DCB_OUTPUT_TMDS ,0 , all_heads,1 ); -fabricate_dcb_output (dcb,DCB_OUTPUT_ANALOG ,1 , all_heads,2 ); +fabricate_dcb_output (dcb,DCB_OUTPUT_TMDS ,0 , all_heads,DCB_OUTPUT_B ); +fabricate_dcb_output (dcb,DCB_OUTPUT_ANALOG ,1 , all_heads,DCB_OUTPUT_C );return ; }#endif /* Make up some sane defaults */ fabricate_dcb_output (dcb,DCB_OUTPUT_ANALOG , - bios->legacy.i2c_indices.crt,1 ,1 ); + bios->legacy.i2c_indices.crt,1 ,DCB_OUTPUT_B );if (nv04_tv_identify (dev, bios->legacy.i2c_indices.tv) >=0 )fabricate_dcb_output (dcb,DCB_OUTPUT_TV , bios->legacy.i2c_indices.tv, - all_heads,0 ); + all_heads,DCB_OUTPUT_A );else if (bios->tmds.output0_script_ptr || bios->tmds.output1_script_ptr)fabricate_dcb_output (dcb,DCB_OUTPUT_TMDS , bios->legacy.i2c_indices.panel, - all_heads,1 ); + all_heads,DCB_OUTPUT_B ); } static int
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c +6 -1
@@ -221,8 +221,11 @@ nv50_instobj_acquire(struct nvkm_memory *memory)void __iomem *map =NULL ;/* Already mapped? */ -if (refcount_inc_not_zero (&iobj->maps)) +if (refcount_inc_not_zero (&iobj->maps)) { +/* read barrier match the wmb on refcount set */ +smp_rmb ();return iobj->map; + }/* Take the lock, and re-check that another thread hasn't * already mapped the object in the meantime.
@@ -249,6 +252,8 @@ nv50_instobj_acquire(struct nvkm_memory *memory) iobj->base.memory.ptrs = &nv50_instobj_fast; else iobj->base.memory.ptrs = &nv50_instobj_slow; +/* barrier to ensure the ptrs are written before refcount is set */ +smp_wmb ();refcount_set (&iobj->maps,1 ); }
drivers/gpu/drm/panel/panel-visionox-rm69299.c +0 -2
@@ -261,8 +261,6 @@ static void visionox_rm69299_remove(struct mipi_dsi_device *dsi)struct visionox_rm69299 *ctx =mipi_dsi_get_drvdata (dsi);mipi_dsi_detach (ctx->dsi); -mipi_dsi_device_unregister (ctx->dsi); -drm_panel_remove (&ctx->panel); }
drivers/gpu/drm/radeon/radeon_atombios.c +6 -2
@@ -922,8 +922,12 @@ bool radeon_get_atom_connector_info_from_supported_devices_table(struct max_device =ATOM_MAX_SUPPORTED_DEVICE_INFO ;for (i =0 ; i < max_device; i++) { -ATOM_CONNECTOR_INFO_I2C ci = - supported_devices->info.asConnInfo[i]; +ATOM_CONNECTOR_INFO_I2C ci; + +if (frev >1 ) + ci = supported_devices->info_2d1.asConnInfo[i]; +else + ci = supported_devices->info.asConnInfo[i]; bios_connectors[i].valid = false;
drivers/gpu/drm/vmwgfx/vmwgfx_blit.c +32 -3
@@ -456,8 +456,10 @@ int vmw_bo_cpu_blit(struct ttm_buffer_object *dst, .no_wait_gpu = false };u32 j, initial_line = dst_offset / dst_stride; -struct vmw_bo_blit_line_data d; +struct vmw_bo_blit_line_data d = {0 };int ret =0 ; +struct page **dst_pages =NULL ; +struct page **src_pages =NULL ;/* Buffer objects need to be either pinned or reserved: */ if (!(dst->pin_count))
@@ -477,12 +479,35 @@ int vmw_bo_cpu_blit(struct ttm_buffer_object *dst,return ret; } +if (!src->ttm->pages && src->ttm->sg) { + src_pages =kvmalloc_array (src->ttm->num_pages, +sizeof (struct page *),GFP_KERNEL ); +if (!src_pages) +return -ENOMEM ; + ret =drm_prime_sg_to_page_array (src->ttm->sg, src_pages, + src->ttm->num_pages); +if (ret) + goto out; + } +if (!dst->ttm->pages && dst->ttm->sg) { + dst_pages =kvmalloc_array (dst->ttm->num_pages, +sizeof (struct page *),GFP_KERNEL ); +if (!dst_pages) { + ret = -ENOMEM ; + goto out; + } + ret =drm_prime_sg_to_page_array (dst->ttm->sg, dst_pages, + dst->ttm->num_pages); +if (ret) + goto out; + } + d.mapped_dst =0 ; d.mapped_src =0 ; d.dst_addr =NULL ; d.src_addr =NULL ; - d.dst_pages = dst->ttm->pages; - d.src_pages = src->ttm->pages; + d.dst_pages = dst->ttm->pages ? dst->ttm->pages : dst_pages; + d.src_pages = src->ttm->pages ? src->ttm->pages : src_pages; d.dst_num_pages =PFN_UP (dst->resource->size); d.src_num_pages =PFN_UP (src->resource->size); d.dst_prot =ttm_io_prot (dst, dst->resource,PAGE_KERNEL );
@@ -504,6 +529,10 @@ int vmw_bo_cpu_blit(struct ttm_buffer_object *dst,kunmap_atomic (d.src_addr);if (d.dst_addr)kunmap_atomic (d.dst_addr); +if (src_pages) +kvfree (src_pages); +if (dst_pages) +kvfree (dst_pages);return ret; }
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c +4 -3
@@ -377,7 +377,8 @@ static int vmw_bo_init(struct vmw_private *dev_priv, {struct ttm_operation_ctx ctx = { .interruptible = params->bo_type != ttm_bo_type_kernel, - .no_wait_gpu = false + .no_wait_gpu = false, + .resv = params->resv, };struct ttm_device *bdev = &dev_priv->bdev;struct drm_device *vdev = &dev_priv->drm;
@@ -394,8 +395,8 @@ static int vmw_bo_init(struct vmw_private *dev_priv,vmw_bo_placement_set (vmw_bo, params->domain, params->busy_domain); ret =ttm_bo_init_reserved (bdev, &vmw_bo->tbo, params->bo_type, - &vmw_bo->placement,0 , &ctx,NULL , -NULL , destroy); + &vmw_bo->placement,0 , &ctx, + params->sg, params->resv, destroy);if (unlikely (ret))return ret;
drivers/gpu/drm/vmwgfx/vmwgfx_bo.h +2 -0
@@ -55,6 +55,8 @@ struct vmw_bo_params {enum ttm_bo_type bo_type;size_t size;bool pin; +struct dma_resv *resv; +struct sg_table *sg; };/**
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +1 -0
@@ -1628,6 +1628,7 @@ static const struct drm_driver driver = { .prime_fd_to_handle = vmw_prime_fd_to_handle, .prime_handle_to_fd = vmw_prime_handle_to_fd, + .gem_prime_import_sg_table = vmw_prime_import_sg_table, .fops = &vmwgfx_driver_fops, .name = VMWGFX_DRIVER_NAME,
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +3 -0
@@ -1131,6 +1131,9 @@ extern int vmw_prime_handle_to_fd(struct drm_device *dev,struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); +struct drm_gem_object *vmw_prime_import_sg_table (struct drm_device *dev, +struct dma_buf_attachment *attach, +struct sg_table *table);/* * MemoryOBject management - vmwgfx_mob.c
drivers/gpu/drm/vmwgfx/vmwgfx_gem.c +32 -0
@@ -149,6 +149,38 @@ int vmw_gem_object_create_with_handle(struct vmw_private *dev_priv,return ret; } +struct drm_gem_object *vmw_prime_import_sg_table (struct drm_device *dev, +struct dma_buf_attachment *attach, +struct sg_table *table) +{ +int ret; +struct vmw_private *dev_priv =vmw_priv (dev); +struct drm_gem_object *gem =NULL ; +struct vmw_bo *vbo; +struct vmw_bo_params params = { + .domain = (dev_priv->has_mob) ?VMW_BO_DOMAIN_SYS :VMW_BO_DOMAIN_VRAM , + .busy_domain =VMW_BO_DOMAIN_SYS , + .bo_type = ttm_bo_type_sg, + .size = attach->dmabuf->size, + .pin = false, + .resv = attach->dmabuf->resv, + .sg = table, + + }; + +dma_resv_lock (params.resv,NULL ); + + ret =vmw_bo_create (dev_priv, ¶ms, &vbo); +if (ret !=0 ) + goto out_no_bo; + + vbo->tbo.base.funcs = &vmw_gem_object_funcs; + + gem = &vbo->tbo.base; +out_no_bo: +dma_resv_unlock (params.resv); +return gem; +}int vmw_gem_object_create_ioctl (struct drm_device *dev,void *data,struct drm_file *filp)
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +8 -3
@@ -926,6 +926,7 @@ int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane,int vmw_du_crtc_atomic_check (struct drm_crtc *crtc,struct drm_atomic_state *state) { +struct vmw_private *vmw =vmw_priv (crtc->dev);struct drm_crtc_state *new_state =drm_atomic_get_new_crtc_state (state, crtc);struct vmw_display_unit *du =vmw_crtc_to_du (new_state->crtc);
@@ -933,9 +934,13 @@ int vmw_du_crtc_atomic_check(struct drm_crtc *crtc,bool has_primary = new_state->plane_mask &drm_plane_mask (crtc->primary); -/* We always want to have an active plane with an active CRTC */ -if (has_primary != new_state->enable) -return -EINVAL ; +/* +* This is fine in general, but broken userspace might expect +* some actual rendering so give a clue as why it's blank. +*/ +if (new_state->enable && !has_primary) +drm_dbg_driver (&vmw->drm, +"CRTC without a primary plane will be blank.\n" ); if (new_state->connector_mask != connector_mask &&
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +2 -2
@@ -243,10 +243,10 @@ struct vmw_framebuffer_bo {static const uint32_t __maybe_unused vmw_primary_plane_formats[] = { -DRM_FORMAT_XRGB1555 , -DRM_FORMAT_RGB565 ,DRM_FORMAT_XRGB8888 ,DRM_FORMAT_ARGB8888 , +DRM_FORMAT_RGB565 , +DRM_FORMAT_XRGB1555 , };static const uint32_t __maybe_unused vmw_cursor_plane_formats[] = {
drivers/gpu/drm/vmwgfx/vmwgfx_prime.c +13 -2
@@ -75,8 +75,12 @@ int vmw_prime_fd_to_handle(struct drm_device *dev, int fd, u32 *handle) { struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; +int ret =ttm_prime_fd_to_handle (tfile, fd, handle); -return ttm_prime_fd_to_handle (tfile, fd, handle); +if (ret) + ret =drm_gem_prime_fd_to_handle (dev, file_priv, fd, handle); + +return ret; } int vmw_prime_handle_to_fd(struct drm_device *dev,
@@ -85,5 +89,12 @@ int vmw_prime_handle_to_fd(struct drm_device *dev, int *prime_fd) {struct ttm_object_file *tfile =vmw_fpriv (file_priv)->tfile; -return ttm_prime_handle_to_fd (tfile, handle, flags, prime_fd); +int ret; + +if (handle >VMWGFX_NUM_MOB ) + ret =ttm_prime_handle_to_fd (tfile, handle, flags, prime_fd); +else + ret =drm_gem_prime_handle_to_fd (dev, file_priv, handle, flags, prime_fd); + +return ret; }
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c +30 -14
85 lines not on this page · raw message
drivers/infiniband/core/cm.c +7 -4
@@ -1026,23 +1026,26 @@ static void cm_reset_to_idle(struct cm_id_private *cm_id_priv) } } -static noinline void cm_destroy_id_wait_timeout(struct ib_cm_id *cm_id) +static noinline void cm_destroy_id_wait_timeout(struct ib_cm_id *cm_id, +enum ib_cm_state old_state) {struct cm_id_private *cm_id_priv; cm_id_priv = container_of(cm_id, struct cm_id_private, id); -pr_err ("%s: cm_id=%p timed out. state=%d refcnt=%d\n" , __func__, - cm_id, cm_id->state,refcount_read (&cm_id_priv->refcount)); +pr_err ("%s: cm_id=%p timed out. state %d -> %d, refcnt=%d\n" , __func__, + cm_id, old_state, cm_id->state,refcount_read (&cm_id_priv->refcount)); }static void cm_destroy_id (struct ib_cm_id *cm_id,int err) {struct cm_id_private *cm_id_priv; +enum ib_cm_state old_state;struct cm_work *work;int ret; cm_id_priv = container_of(cm_id, struct cm_id_private, id);spin_lock_irq (&cm_id_priv->lock); + old_state = cm_id->state; retest:switch (cm_id->state) {case IB_CM_LISTEN :
@@ -1151,7 +1154,7 @@ static void cm_destroy_id(struct ib_cm_id *cm_id, int err)msecs_to_jiffies ( CM_DESTROY_ID_WAIT_TIMEOUT));if (!ret)/* timeout happened */ -cm_destroy_id_wait_timeout (cm_id); +cm_destroy_id_wait_timeout (cm_id, old_state); }while (!ret);while ((work =cm_dequeue_work (cm_id_priv)) !=NULL )
drivers/infiniband/hw/mlx5/mad.c +2 -1
@@ -188,7 +188,8 @@ static int process_pma_cmd(struct mlx5_ib_dev *dev, u32 port_num, mdev = dev->mdev; mdev_port_num =1 ; } -if (MLX5_CAP_GEN (dev->mdev, num_ports) ==1 ) { +if (MLX5_CAP_GEN (dev->mdev, num_ports) ==1 && + !mlx5_core_mp_enabled (mdev)) {/* set local port to one for Function-Per-Port HCA. */ mdev = dev->mdev; mdev_port_num =1 ;
drivers/infiniband/sw/rxe/rxe.c +2 -0
@@ -33,6 +33,8 @@ void rxe_dealloc(struct ib_device *ib_dev)if (rxe->tfm)crypto_free_shash (rxe->tfm); + +mutex_destroy (&rxe->usdev_lock); }/* initialize rxe device parameters */
drivers/interconnect/core.c +8 -0
@@ -176,6 +176,8 @@ static struct icc_path *path_init(struct device *dev, struct icc_node *dst, path->num_nodes = num_nodes; +mutex_lock (&icc_bw_lock); +for (i = num_nodes -1 ; i >=0 ; i--) { node->provider->users++;hlist_add_head (&path->reqs[i].req_node, &node->req_list);
@@ -186,6 +188,8 @@ static struct icc_path *path_init(struct device *dev, struct icc_node *dst, node = node->reverse; } +mutex_unlock (&icc_bw_lock); +return path; }
@@ -792,12 +796,16 @@ void icc_put(struct icc_path *path)pr_err ("%s: error (%d)\n" , __func__, ret);mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); +for (i =0 ; i < path->num_nodes; i++) { node = path->reqs[i].node;hlist_del (&path->reqs[i].req_node);if (!WARN_ON (!node->provider->users)) node->provider->users--; } + +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock);kfree_const (path->name);
drivers/media/common/videobuf2/videobuf2-core.c +7 -2
@@ -2648,9 +2648,14 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)return -EBUSY ;/* -* Start with count 1, driver can increase it in queue_setup() +* Start with q->min_buffers_needed + 1, driver can increase it in +* queue_setup() +* +* 'min_buffers_needed' buffers need to be queued up before you +* can start streaming, plus 1 for userspace (or in this case, +* kernelspace) processing. */ - count =1 ; + count =max (2 , q->min_buffers_needed +1 ); dprintk(q, 3, "setting up file io: mode %s, count %d, read_once %d, write_immediately %d\n", (read) ? "read" : "write", count, q->fileio_read_once,
drivers/misc/mei/pci-me.c +1 -1
@@ -116,7 +116,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_P, MEI_ME_PCH15_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_N, MEI_ME_PCH15_CFG)}, - {MEI_PCI_DEVICE(MEI_DEV_ID_RPL_S, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_RPL_S, MEI_ME_PCH15_SPS_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_MTL_M, MEI_ME_PCH15_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_ARL_S, MEI_ME_PCH15_CFG)},
drivers/net/dsa/mt7530.c +27 -11
@@ -1948,14 +1948,16 @@ mt7530_port_vlan_del(struct dsa_switch *ds, int port,static int mt753x_mirror_port_get (unsigned int id,u32 val) { -return (id ==ID_MT7531 ) ?MT7531_MIRROR_PORT_GET (val) : -MIRROR_PORT (val); +return (id ==ID_MT7531 || id ==ID_MT7988 ) ? +MT7531_MIRROR_PORT_GET (val) : +MIRROR_PORT (val); }static int mt753x_mirror_port_set (unsigned int id,u32 val) { -return (id ==ID_MT7531 ) ?MT7531_MIRROR_PORT_SET (val) : -MIRROR_PORT (val); +return (id ==ID_MT7531 || id ==ID_MT7988 ) ? +MT7531_MIRROR_PORT_SET (val) : +MIRROR_PORT (val); } static int mt753x_port_mirror_add(struct dsa_switch *ds, int port,
@@ -2470,8 +2472,6 @@ mt7530_setup(struct dsa_switch *ds)SYS_CTRL_PHY_RST |SYS_CTRL_SW_RST | SYS_CTRL_REG_RST); -mt7530_pll_setup (priv); -/* Lower Tx driving for TRGMII path */ for (i =0 ; i <NUM_TRGMII_CTRL ; i++) mt7530_write(priv, MT7530_TRGMII_TD_ODT(i),
@@ -2489,6 +2489,9 @@ mt7530_setup(struct dsa_switch *ds) priv->p6_interface =PHY_INTERFACE_MODE_NA ; +if ((val &HWTRAP_XTAL_MASK ) ==HWTRAP_XTAL_40MHZ ) +mt7530_pll_setup (priv); +mt753x_trap_frames (priv);/* Enable and reset MIB counters */
@@ -2518,6 +2521,9 @@ mt7530_setup(struct dsa_switch *ds) PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT)); } +/* Allow mirroring frames received on the local port (monitor port). */ +mt7530_set (priv,MT753X_AGC ,LOCAL_EN ); +/* Setup VLAN ID 0 for VLAN-unaware bridges */ ret =mt7530_setup_vlan0 (priv);if (ret)
@@ -2626,6 +2632,9 @@ mt7531_setup_common(struct dsa_switch *ds) PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT)); } +/* Allow mirroring frames received on the local port (monitor port). */ +mt7530_set (priv,MT753X_AGC ,LOCAL_EN ); +/* Flush the FDB table */ ret =mt7530_fdb_cmd (priv,MT7530_FDB_FLUSH ,NULL );if (ret <0 )
@@ -2704,18 +2713,25 @@ mt7531_setup(struct dsa_switch *ds) priv->p5_interface =PHY_INTERFACE_MODE_NA ; priv->p6_interface =PHY_INTERFACE_MODE_NA ; -/* Enable PHY core PLL, since phy_device has not yet been created -* provided for phy_[read,write]_mmd_indirect is called, we provide -* our own mt7531_ind_mmd_phy_[read,write] to complete this -* function. +/* Enable Energy-Efficient Ethernet (EEE) and PHY core PLL, since +* phy_device has not yet been created provided for +* phy_[read,write]_mmd_indirect is called, we provide our own +* mt7531_ind_mmd_phy_[read,write] to complete this function. */ val =mt7531_ind_c45_phy_read (priv,MT753X_CTRL_PHY_ADDR ,MDIO_MMD_VEND2 ,CORE_PLL_GROUP4 ); - val |=MT7531_PHY_PLL_BYPASS_MODE ; + val |=MT7531_RG_SYSPLL_DMY2 |MT7531_PHY_PLL_BYPASS_MODE ; val &= ~MT7531_PHY_PLL_OFF ;mt7531_ind_c45_phy_write (priv,MT753X_CTRL_PHY_ADDR ,MDIO_MMD_VEND2 ,CORE_PLL_GROUP4 , val); +/* Disable EEE advertisement on the switch PHYs. */ +for (i =MT753X_CTRL_PHY_ADDR ; + i <MT753X_CTRL_PHY_ADDR +MT7530_NUM_PHYS ; i++) { +mt7531_ind_c45_phy_write (priv, i,MDIO_MMD_AN ,MDIO_AN_EEE_ADV , +0 ); + } +mt7531_setup_common (ds);/* Setup VLAN ID 0 for VLAN-unaware bridges */
drivers/net/dsa/mt7530.h +5 -0
@@ -32,6 +32,10 @@ enum mt753x_id {#define SYSC_REG_RSTCTRL 0x34#define RESET_MCM BIT(2) +/* Register for ARL global control */ +#define MT753X_AGC 0xc +#define LOCAL_EN BIT(7) +/* Registers to mac forward control for unknown frames */ #define MT7530_MFC 0x10#define BC_FFP (x) (((x) & 0xff) << 24)
@@ -630,6 +634,7 @@ enum mt7531_clk_skew {#define RG_SYSPLL_DDSFBK_EN BIT(12)#define RG_SYSPLL_BIAS_EN BIT(11)#define RG_SYSPLL_BIAS_LPF_EN BIT(10) +#define MT7531_RG_SYSPLL_DMY2 BIT(6)#define MT7531_PHY_PLL_OFF BIT(5)#define MT7531_PHY_PLL_BYPASS_MODE BIT(4)
drivers/net/ethernet/intel/ice/ice_tc_lib.c +13 -2
@@ -28,6 +28,8 @@ ice_tc_count_lkups(u32 flags, struct ice_tc_flower_lyr_2_4_hdrs *headers,* - ICE_TC_FLWR_FIELD_VLAN_TPID (present if specified) * - Tunnel flag (present if tunnel) */ +if (fltr->direction ==ICE_ESWITCH_FLTR_EGRESS ) + lkups_cnt++;if (flags &ICE_TC_FLWR_FIELD_TENANT_ID ) lkups_cnt++;
@@ -363,6 +365,11 @@ ice_tc_fill_rules(struct ice_hw *hw, u32 flags,/* Always add direction metadata */ ice_rule_add_direction_metadata (&list[ICE_TC_METADATA_LKUP_IDX ]); +if (tc_fltr->direction ==ICE_ESWITCH_FLTR_EGRESS ) { +ice_rule_add_src_vsi_metadata (&list[i]); + i++; + } + rule_info->tun_type =ice_sw_type_from_tunnel (tc_fltr->tunnel_type);if (tc_fltr->tunnel_type !=TNL_LAST ) { i =ice_tc_fill_tunnel_outer (flags, tc_fltr, list, i);
@@ -731,7 +738,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)int ret;int i; -if (!flags || (flags &ICE_TC_FLWR_FIELD_ENC_SRC_L4_PORT )) { +if (flags &ICE_TC_FLWR_FIELD_ENC_SRC_L4_PORT ) {NL_SET_ERR_MSG_MOD (fltr->extack,"Unsupported encap field(s)" );return -EOPNOTSUPP ; }
@@ -779,6 +786,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)/* specify the cookie as filter_rule_id */ rule_info.fltr_rule_id = fltr->cookie; + rule_info.src_vsi = vsi->idx; ret =ice_add_adv_rule (hw, list, lkups_cnt, &rule_info, &rule_added);if (ret == -EEXIST ) {
@@ -1440,7 +1448,10 @@ ice_parse_cls_flower(struct net_device *filter_dev, struct ice_vsi *vsi, (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) | - BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS))) { + BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) | + BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) | + BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) | + BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL))) { NL_SET_ERR_MSG_MOD(fltr->extack, "Tunnel key used, but device isn't a tunnel"); return -EOPNOTSUPP; } else {
drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +5 -2
@@ -588,6 +588,7 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,if (flow_rule_match_key (rule,FLOW_DISSECTOR_KEY_CONTROL )) {struct flow_match_control match; +u32 val;flow_rule_match_control (rule, &match);if (match.mask->flags &FLOW_DIS_FIRST_FRAG ) {
@@ -596,12 +597,14 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, }if (match.mask->flags &FLOW_DIS_IS_FRAGMENT ) { + val = match.key->flags &FLOW_DIS_IS_FRAGMENT ;if (ntohs (flow_spec->etype) ==ETH_P_IP ) { - flow_spec->ip_flag =IPV4_FLAG_MORE ; + flow_spec->ip_flag = val ?IPV4_FLAG_MORE :0 ; flow_mask->ip_flag =IPV4_FLAG_MORE ; req->features |=BIT_ULL (NPC_IPFRAG_IPV4 ); }else if (ntohs (flow_spec->etype) ==ETH_P_IPV6 ) { - flow_spec->next_header =IPPROTO_FRAGMENT ; + flow_spec->next_header = val ? +IPPROTO_FRAGMENT :0 ; flow_mask->next_header =0xff ; req->features |=BIT_ULL (NPC_IPFRAG_IPV6 ); }else {
drivers/net/ethernet/mediatek/mtk_wed.c +1 -5
@@ -598,13 +598,13 @@ mtk_wed_dma_disable(struct mtk_wed_device *dev)static void mtk_wed_stop (struct mtk_wed_device *dev) { +mtk_wed_dma_disable (dev);mtk_wed_set_ext_int (dev, false);wed_w32 (dev,MTK_WED_WPDMA_INT_TRIGGER ,0 );wed_w32 (dev,MTK_WED_WDMA_INT_TRIGGER ,0 );wdma_w32 (dev,MTK_WDMA_INT_MASK ,0 );wdma_w32 (dev,MTK_WDMA_INT_GRP2 ,0 ); -wed_w32 (dev,MTK_WED_WPDMA_INT_MASK ,0 );if (dev->hw->version ==1 )return ;
@@ -617,7 +617,6 @@ static void mtk_wed_deinit(struct mtk_wed_device *dev) {mtk_wed_stop (dev); -mtk_wed_dma_disable (dev); wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_WDMA_INT_AGENT_EN |
@@ -1703,9 +1702,6 @@ mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)static void mtk_wed_irq_set_mask (struct mtk_wed_device *dev,u32 mask) { -if (!dev->running) -return ; -mtk_wed_set_ext_int (dev, !!mask);wed_w32 (dev,MTK_WED_INT_MASK , mask); }
drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c +16 -11
@@ -45,6 +45,10 @@ struct arfs_table {struct hlist_head rules_hash[ARFS_HASH_SIZE ]; }; +enum { +MLX5E_ARFS_STATE_ENABLED , +}; +enum arfs_type {ARFS_IPV4_TCP ,ARFS_IPV6_TCP ,
@@ -59,6 +63,7 @@ struct mlx5e_arfs_tables {spinlock_t arfs_lock;int last_filter_id;struct workqueue_struct *wq; +unsigned long state; };struct arfs_tuple {
@@ -169,6 +174,8 @@ int mlx5e_arfs_enable(struct mlx5e_flow_steering *fs)return err; } } +set_bit (MLX5E_ARFS_STATE_ENABLED , &arfs->state); +return 0 ; }
@@ -454,6 +461,8 @@ static void arfs_del_rules(struct mlx5e_flow_steering *fs)int i;int j; +clear_bit (MLX5E_ARFS_STATE_ENABLED , &arfs->state); +spin_lock_bh (&arfs->arfs_lock);mlx5e_for_each_arfs_rule (rule, htmp, arfs->arfs_tables, i, j) {hlist_del_init (&rule->hlist);
@@ -626,17 +635,8 @@ static void arfs_handle_work(struct work_struct *work)struct mlx5_flow_handle *rule; arfs =mlx5e_fs_get_arfs (priv->fs); -mutex_lock (&priv->state_lock); -if (!test_bit (MLX5E_STATE_OPENED , &priv->state)) { -spin_lock_bh (&arfs->arfs_lock); -hlist_del (&arfs_rule->hlist); -spin_unlock_bh (&arfs->arfs_lock); - -mutex_unlock (&priv->state_lock); -kfree (arfs_rule); - goto out; - } -mutex_unlock (&priv->state_lock); +if (!test_bit (MLX5E_ARFS_STATE_ENABLED , &arfs->state)) +return ;if (!arfs_rule->rule) { rule =arfs_add_rule (priv, arfs_rule);
@@ -752,6 +752,11 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,return -EPROTONOSUPPORT ;spin_lock_bh (&arfs->arfs_lock); +if (!test_bit (MLX5E_ARFS_STATE_ENABLED , &arfs->state)) { +spin_unlock_bh (&arfs->arfs_lock); +return -EPERM ; + } + arfs_rule =arfs_find_rule (arfs_t, &fk);if (arfs_rule) {if (arfs_rule->rxq == rxq_index ||work_busy (&arfs_rule->arfs_work)) {
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +3 -6
@@ -1868,6 +1868,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)if (err) goto abort; + dev->priv.eswitch = esw; err =esw_offloads_init (esw);if (err) goto reps_err;
@@ -1892,11 +1893,6 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev) esw->offloads.encap =DEVLINK_ESWITCH_ENCAP_MODE_BASIC ; else esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_NONE; -if (MLX5_ESWITCH_MANAGER (dev) && -mlx5_esw_vport_match_metadata_supported (esw)) - esw->flags |=MLX5_ESWITCH_VPORT_MATCH_METADATA ; - - dev->priv.eswitch = esw;BLOCKING_INIT_NOTIFIER_HEAD (&esw->n_head); esw_info(dev,
@@ -1908,6 +1904,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev) reps_err:mlx5_esw_vports_cleanup (esw); + dev->priv.eswitch =NULL ; abort:if (esw->work_queue)destroy_workqueue (esw->work_queue);
@@ -1926,7 +1923,6 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)esw_info (esw->dev,"cleanup\n" ); - esw->dev->priv.eswitch =NULL ;destroy_workqueue (esw->work_queue);WARN_ON (refcount_read (&esw->qos.refcnt));mutex_destroy (&esw->state_lock);
@@ -1937,6 +1933,7 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)mutex_destroy (&esw->offloads.encap_tbl_lock);mutex_destroy (&esw->offloads.decap_tbl_lock);esw_offloads_cleanup (esw); + esw->dev->priv.eswitch =NULL ;mlx5_esw_vports_cleanup (esw);debugfs_remove_recursive (esw->debugfs_root); devl_params_unregister(priv_to_devlink(esw->dev), mlx5_eswitch_params,
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +4 -0
@@ -2476,6 +2476,10 @@ int esw_offloads_init(struct mlx5_eswitch *esw)if (err)return err; +if (MLX5_ESWITCH_MANAGER (esw->dev) && +mlx5_esw_vport_match_metadata_supported (esw)) + esw->flags |=MLX5_ESWITCH_VPORT_MATCH_METADATA ; + err =devl_params_register (priv_to_devlink (esw->dev), esw_devlink_params,ARRAY_SIZE (esw_devlink_params));
drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +3 -1
@@ -703,8 +703,10 @@ int mlx5_deactivate_lag(struct mlx5_lag *ldev)return err; } -if (test_bit (MLX5_LAG_MODE_FLAG_HASH_BASED , &flags)) +if (test_bit (MLX5_LAG_MODE_FLAG_HASH_BASED , &flags)) {mlx5_lag_port_sel_destroy (ldev); + ldev->buckets =1 ; + }if (mlx5_lag_has_drop_rule (ldev))mlx5_lag_drop_rule_cleanup (ldev);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c +40 -21
75 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/common.h +1 -0
@@ -550,6 +550,7 @@ extern const struct stmmac_hwtimestamp stmmac_ptp;extern const struct stmmac_mode_ops dwmac4_ring_mode_ops;struct mac_link { +u32 caps;u32 speed_mask;u32 speed10;u32 speed100;
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +2 -0
@@ -1096,6 +1096,8 @@ static struct mac_device_info *sun8i_dwmac_setup(void *ppriv) priv->dev->priv_flags |=IFF_UNICAST_FLT ; + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_10 |MAC_100 |MAC_1000 ;/* The loopback bit seems to be re-set when link change * Simply mask it each time * Speed 10/100/1000 are set in BIT(2)/BIT(3)
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +2 -0
@@ -539,6 +539,8 @@ int dwmac1000_setup(struct stmmac_priv *priv)if (mac->multicast_filter_bins) mac->mcast_bits_log2 =ilog2 (mac->multicast_filter_bins); + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_10 |MAC_100 |MAC_1000 ; mac->link.duplex =GMAC_CONTROL_DM ; mac->link.speed10 =GMAC_CONTROL_PS ; mac->link.speed100 =GMAC_CONTROL_PS |GMAC_CONTROL_FES ;
drivers/net/ethernet/stmicro/stmmac/dwmac100_core.c +2 -0
@@ -175,6 +175,8 @@ int dwmac100_setup(struct stmmac_priv *priv)dev_info (priv->device,"\tDWMAC100\n" ); mac->pcsr = priv->ioaddr; + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_10 |MAC_100 ; mac->link.duplex =MAC_CONTROL_F ; mac->link.speed10 =0 ; mac->link.speed100 =0 ;
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +6 -1
@@ -70,7 +70,10 @@ static void dwmac4_core_init(struct mac_device_info *hw,static void dwmac4_phylink_get_caps (struct stmmac_priv *priv) { - priv->phylink_config.mac_capabilities |=MAC_2500FD ; +if (priv->plat->tx_queues_to_use >1 ) + priv->hw->link.caps &= ~(MAC_10HD |MAC_100HD |MAC_1000HD ); +else + priv->hw->link.caps |= (MAC_10HD |MAC_100HD |MAC_1000HD ); } static void dwmac4_rx_queue_enable(struct mac_device_info *hw,
@@ -1347,6 +1350,8 @@ int dwmac4_setup(struct stmmac_priv *priv)if (mac->multicast_filter_bins) mac->mcast_bits_log2 =ilog2 (mac->multicast_filter_bins); + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_10 |MAC_100 |MAC_1000 |MAC_2500FD ; mac->link.duplex =GMAC_CONFIG_DM ; mac->link.speed10 =GMAC_CONFIG_PS ; mac->link.speed100 =GMAC_CONFIG_FES |GMAC_CONFIG_PS ;
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +8 -10
@@ -47,14 +47,6 @@ static void dwxgmac2_core_init(struct mac_device_info *hw,writel (XGMAC_INT_DEFAULT_EN , ioaddr +XGMAC_INT_EN ); } -static void xgmac_phylink_get_caps (struct stmmac_priv *priv) -{ - priv->phylink_config.mac_capabilities |=MAC_2500FD |MAC_5000FD | -MAC_10000FD |MAC_25000FD | -MAC_40000FD |MAC_50000FD | -MAC_100000FD ; -} -static void dwxgmac2_set_mac (void __iomem *ioaddr,bool enable) {u32 tx =readl (ioaddr +XGMAC_TX_CONFIG );
@@ -1591,7 +1583,6 @@ static void dwxgmac3_fpe_configure(void __iomem *ioaddr, struct stmmac_fpe_cfg *const struct stmmac_ops dwxgmac210_ops = { .core_init = dwxgmac2_core_init, - .phylink_get_caps = xgmac_phylink_get_caps, .set_mac = dwxgmac2_set_mac, .rx_ipc = dwxgmac2_rx_ipc, .rx_queue_enable = dwxgmac2_rx_queue_enable,
@@ -1653,7 +1644,6 @@ static void dwxlgmac2_rx_queue_enable(struct mac_device_info *hw, u8 mode,const struct stmmac_ops dwxlgmac2_ops = { .core_init = dwxgmac2_core_init, - .phylink_get_caps = xgmac_phylink_get_caps, .set_mac = dwxgmac2_set_mac, .rx_ipc = dwxgmac2_rx_ipc, .rx_queue_enable = dwxlgmac2_rx_queue_enable,
@@ -1714,6 +1704,9 @@ int dwxgmac2_setup(struct stmmac_priv *priv)if (mac->multicast_filter_bins) mac->mcast_bits_log2 =ilog2 (mac->multicast_filter_bins); + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_1000FD |MAC_2500FD |MAC_5000FD | +MAC_10000FD ; mac->link.duplex =0 ; mac->link.speed10 =XGMAC_CONFIG_SS_10_MII ; mac->link.speed100 =XGMAC_CONFIG_SS_100_MII ;
@@ -1751,6 +1744,11 @@ int dwxlgmac2_setup(struct stmmac_priv *priv)if (mac->multicast_filter_bins) mac->mcast_bits_log2 =ilog2 (mac->multicast_filter_bins); + mac->link.caps =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_1000FD |MAC_2500FD |MAC_5000FD | +MAC_10000FD |MAC_25000FD | +MAC_40000FD |MAC_50000FD | +MAC_100000FD ; mac->link.duplex =0 ; mac->link.speed1000 =XLGMAC_CONFIG_SS_1000 ; mac->link.speed2500 =XLGMAC_CONFIG_SS_2500 ;
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +11 -18
@@ -1198,17 +1198,6 @@ static int stmmac_init_phy(struct net_device *dev)return ret; } -static void stmmac_set_half_duplex (struct stmmac_priv *priv) -{ -/* Half-Duplex can only work with single tx queue */ -if (priv->plat->tx_queues_to_use >1 ) - priv->phylink_config.mac_capabilities &= - ~(MAC_10HD |MAC_100HD |MAC_1000HD ); -else - priv->phylink_config.mac_capabilities |= - (MAC_10HD |MAC_100HD |MAC_1000HD ); -} -static int stmmac_phy_setup (struct stmmac_priv *priv) {struct stmmac_mdio_bus_data *mdio_bus_data;
@@ -1236,15 +1225,11 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)xpcs_get_interfaces (priv->hw->xpcs, priv->phylink_config.supported_interfaces); - priv->phylink_config.mac_capabilities =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | -MAC_10FD |MAC_100FD | -MAC_1000FD ; - -stmmac_set_half_duplex (priv); -/* Get the MAC specific capabilities */ stmmac_mac_phylink_get_caps (priv); + priv->phylink_config.mac_capabilities = priv->hw->link.caps; + max_speed = priv->plat->max_speed;if (max_speed)phylink_limit_mac_speed (&priv->phylink_config, max_speed);
@@ -7184,6 +7169,7 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt) {struct stmmac_priv *priv =netdev_priv (dev);int ret =0 , i; +int max_speed;if (netif_running (dev))stmmac_release (dev);
@@ -7197,7 +7183,14 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt) priv->rss.table[i] =ethtool_rxfh_indir_default (i, rx_cnt); -stmmac_set_half_duplex (priv); +stmmac_mac_phylink_get_caps (priv); + + priv->phylink_config.mac_capabilities = priv->hw->link.caps; + + max_speed = priv->plat->max_speed; +if (max_speed) +phylink_limit_mac_speed (&priv->phylink_config, max_speed); +stmmac_napi_add (dev);if (netif_running (dev))
drivers/net/ethernet/ti/am65-cpsw-nuss.c +18 -0
@@ -2716,6 +2716,8 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)static int am65_cpsw_nuss_register_ndevs (struct am65_cpsw_common *common) { +struct am65_cpsw_rx_chn *rx_chan = &common->rx_chns; +struct am65_cpsw_tx_chn *tx_chan = common->tx_chns;struct device *dev = common->dev;struct am65_cpsw_port *port;int ret =0 , i;
@@ -2728,6 +2730,22 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)if (ret)return ret; +/* The DMA Channels are not guaranteed to be in a clean state. +* Reset and disable them to ensure that they are back to the +* clean state and ready to be used. +*/ +for (i =0 ; i < common->tx_ch_num; i++) { +k3_udma_glue_reset_tx_chn (tx_chan[i].tx_chn, &tx_chan[i], + am65_cpsw_nuss_tx_cleanup); +k3_udma_glue_disable_tx_chn (tx_chan[i].tx_chn); + } + +for (i =0 ; i <AM65_CPSW_MAX_RX_FLOWS ; i++) +k3_udma_glue_reset_rx_chn (rx_chan->rx_chn, i, rx_chan, + am65_cpsw_nuss_rx_cleanup, !!i); + +k3_udma_glue_disable_rx_chn (rx_chan->rx_chn); + ret =am65_cpsw_nuss_register_devlink (common);if (ret)return ret;
drivers/net/tun.c +10 -8
@@ -2132,14 +2132,16 @@ static ssize_t tun_put_user(struct tun_struct *tun, tun_is_little_endian(tun), true, vlan_hlen)) {struct skb_shared_info *sinfo =skb_shinfo (skb); -pr_err ("unexpected GSO type: " -"0x%x, gso_size %d, hdr_len %d\n" , - sinfo->gso_type,tun16_to_cpu (tun, gso.gso_size), -tun16_to_cpu (tun, gso.hdr_len)); -print_hex_dump (KERN_ERR ,"tun: " , -DUMP_PREFIX_NONE , -16 ,1 , skb->head, -min ((int )tun16_to_cpu (tun, gso.hdr_len),64 ), true); + +if (net_ratelimit ()) { +netdev_err (tun->dev,"unexpected GSO type: 0x%x, gso_size %d, hdr_len %d\n" , + sinfo->gso_type,tun16_to_cpu (tun, gso.gso_size), +tun16_to_cpu (tun, gso.hdr_len)); +print_hex_dump (KERN_ERR ,"tun: " , +DUMP_PREFIX_NONE , +16 ,1 , skb->head, +min ((int )tun16_to_cpu (tun, gso.hdr_len),64 ), true); + }WARN_ON_ONCE (1 );return -EINVAL ; }
drivers/net/usb/ax88179_178a.c +2 -2
@@ -1317,6 +1317,8 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)netif_set_tso_max_size (dev->net,16384 ); +ax88179_reset (dev); +return 0 ; }
@@ -1695,7 +1697,6 @@ static const struct driver_info ax88179_info = { .unbind = ax88179_unbind, .status = ax88179_status, .link_reset = ax88179_link_reset, - .reset = ax88179_reset, .stop = ax88179_stop, .flags = FLAG_ETHER | FLAG_FRAMING_AX, .rx_fixup = ax88179_rx_fixup,
@@ -1708,7 +1709,6 @@ static const struct driver_info ax88178a_info = { .unbind = ax88179_unbind, .status = ax88179_status, .link_reset = ax88179_link_reset, - .reset = ax88179_reset, .stop = ax88179_stop, .flags = FLAG_ETHER | FLAG_FRAMING_AX, .rx_fixup = ax88179_rx_fixup,
drivers/net/virtio_net.c +21 -4
@@ -3570,19 +3570,34 @@ static int virtnet_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfustatic int virtnet_set_rxfh (struct net_device *dev,const u32 *indir,const u8 *key,const u8 hfunc) {struct virtnet_info *vi =netdev_priv (dev); +bool update = false;int i;if (hfunc !=ETH_RSS_HASH_NO_CHANGE && hfunc !=ETH_RSS_HASH_TOP )return -EOPNOTSUPP ;if (indir) { +if (!vi->has_rss) +return -EOPNOTSUPP ; +for (i =0 ; i < vi->rss_indir_table_size; ++i) vi->ctrl->rss.indirection_table[i] = indir[i]; + update = true; } -if (key) +if (key) { +/* If either _F_HASH_REPORT or _F_RSS are negotiated, the +* device provides hash calculation capabilities, that is, +* hash_key is configured. +*/ +if (!vi->has_rss && !vi->has_rss_hash_report) +return -EOPNOTSUPP ; +memcpy (vi->ctrl->rss.key, key, vi->rss_key_size); + update = true; + } -virtnet_commit_rss_command (vi); +if (update) +virtnet_commit_rss_command (vi);return 0 ; }
@@ -4491,13 +4506,15 @@ static int virtnet_probe(struct virtio_device *vdev)if (virtio_has_feature (vdev,VIRTIO_NET_F_HASH_REPORT )) vi->has_rss_hash_report = true; -if (virtio_has_feature (vdev,VIRTIO_NET_F_RSS )) +if (virtio_has_feature (vdev,VIRTIO_NET_F_RSS )) { vi->has_rss = true; -if (vi->has_rss || vi->has_rss_hash_report) { vi->rss_indir_table_size =virtio_cread16 (vdev, offsetof(struct virtio_net_config , rss_max_indirection_table_length)); + } + +if (vi->has_rss || vi->has_rss_hash_report) { vi->rss_key_size =virtio_cread8 (vdev, offsetof(struct virtio_net_config , rss_max_key_size));
drivers/pci/bus.c +32 -17
62 lines not on this page · raw message
drivers/pci/pci.c +52 -26
78 lines not on this page · raw message
drivers/platform/x86/amd/pmc/pmc-quirks.c +9 -0
Lines of this file are not shown. View the raw message.
drivers/thunderbolt/lc.c +45 -0
45 lines not on this page · raw message
drivers/thunderbolt/switch.c +155 -23
178 lines not on this page · raw message
drivers/thunderbolt/usb4.c +46 -6
52 lines not on this page · raw message
fs/ceph/caps.c +28 -25
53 lines not on this page · raw message
fs/ceph/mds_client.c +23 -18
41 lines not on this page · raw message
fs/smb/client/connect.c +63 -68
131 lines not on this page · raw message
fs/smb/client/dfs.c +24 -27
51 lines not on this page · raw message
fs/smb/client/dfs_cache.c +24 -29
53 lines not on this page · raw message
include/linux/swapops.h +33 -32
65 lines not on this page · raw message
net/bridge/netfilter/nf_conntrack_bridge.c +10 -4
Lines of this file are not shown. View the raw message.
sound/soc/ti/omap3pandora.c +23 -40
63 lines not on this page · raw message
sound/usb/mixer_scarlett2.c new file +4391 -0
4,391 lines not on this page · raw message
sound/usb/mixer_scarlett_gen2.c deleted +0 -4274
4,274 lines not on this page · raw message
sound/usb/mixer_scarlett_gen2.h deleted +0 -7
Lines of this file are not shown. View the raw message.
tools/perf/util/bpf_skel/lock_contention.bpf.c +4 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/test.d/event/subsystem-enable.tc +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/timers/posix_timers.c +74 -82
156 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.