Skip to contentSkip to conversation

6.18.53-rc1 review

PATCH In review Greg Kroah-Hartman 8 participants 1,258 messages Sep 17 – Sep 19 Page 1 of 10

Subsystems (6)
lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

cover 6.18.53-rc1 review

This is the start of the stable review cycle for the 6.18.53 release. There are 1250 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Sat, 19 Sep 2026 15:13:46 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.18.53-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.18.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <[email protected]>

    Linux 6.18.53-rc1

Peter Zijlstra <[email protected]>
x86/mm: Fix and document DEBUG_PAGEALLOC

Griffin Kroah-Hartman <[email protected]>
misc: amd-sbi: Add null check for devm_kasprintf()

Thadeu Lima de Souza Cascardo <[email protected]>
drm/ttm: Fix bo resource use-after-free

Matthew Brost <[email protected]>

    drm/ttm: Drop tt->restore after successful restore

Tvrtko Ursulin <[email protected]>
drm/ttm: Tidy usage of local variables a little bit

Paulo Alcantara <[email protected]>
smb: client: use atomic_t for mnt_cifs_flags

Bjoern Doebel <[email protected]>
smb: client: fail DACL rewrite when the new DACL exceeds 64K

Ralph Boehme <[email protected]>
smb/client: fix security flag calculation when setting security descriptors

Ralph Boehme <[email protected]>
smb: client: refactor ACL setting control flow in id_mode_to_cifs_acl()

Paolo Abeni <[email protected]>
mptcp: prevent race between disconnect() and rtx

Paolo Abeni <[email protected]>
mptcp: do not reschedule the RTX timer for fallback sockets

Eric Dumazet <[email protected]>

    tcp: remove icsk->icsk_retransmit_timer

Eric Dumazet <[email protected]>

    tcp: introduce icsk->icsk_keepalive_timer

Eric Dumazet <[email protected]>
tcp: rename icsk_timeout() to tcp_timeout_expires()

Joe Damato <[email protected]>
bnxt_en: Handle buffer allocation failure in bnxt_rx_ring_reset()

Jakub Kicinski <[email protected]>
Reapply "bnxt_en: bring back rtnl_lock() in the bnxt_open() path"

Pavan Chebbi <[email protected]>
fwctl/bnxt_en: Move common definitions to include/linux/bnxt/

Matthieu Baerts (NGI0) <[email protected]>
mptcp: pm: reset retrans_time when ADD_ADDR entry is reused

Norbert Szetei <[email protected]>
landlock: Fix use-after-free of the source's parent directory

Günther Noack <[email protected]>
landlock: Use mem_is_zero() in is_layer_masks_allowed()

Günther Noack <[email protected]>
landlock: Transpose the layer masks data structure

Günther Noack <[email protected]>
landlock: Add access_mask_subset() helper

Günther Noack <[email protected]>
landlock: Clarify documentation for the IOCTL access right

Myeonghun Pak <[email protected]>
idpf: disable DIM work before freeing q_vectors

Pavan Kumar Linga <[email protected]>
idpf: introduce idpf_q_vec_rsrc struct and move vector resources to it

Pavan Kumar Linga <[email protected]>
idpf: introduce local idpf structure to store virtchnl queue chunks

Andy Shevchenko <[email protected]>
idpf: Fix kernel-doc descriptions to avoid warnings

Jingbo Xu <[email protected]>
erofs: add sysfs feature entry for xattr prefixes

Gao Xiang <[email protected]>
erofs: separate plain and compressed filesystems formally

Runyu Xiao <[email protected]>
net: macb: initialize PTP state before registering clock

Théo Lebrun <[email protected]>
net: macb: unify device pointer naming convention

Kevin Hao <[email protected]>
net: macb: Use netif_napi_add_tx() instead of netif_napi_add() for TX NAPI

Kevin Hao <[email protected]>
net: macb: Replace open-coded implementation with napi_schedule()

Daehyeon Ko <[email protected]>
exit: hold a reference to thread_pid across proc_flush_pid

Christian Brauner <[email protected]>
ns: rename to exit_nsproxy_namespaces()

Christian Brauner <[email protected]>

    ns: add __ns_ref_read()

Chengfeng Ye <[email protected]>
netfilter: cttimeout: prevent UAF during module unload

Pablo Neira Ayuso <[email protected]>
netfilter: cttimeout: detach dataplane timeout policy and repurpose refcount

Dinh Nguyen <[email protected]>
EDAC/altera: Use parent device for devres in altr_portb_setup()

Rounak Das <[email protected]>
EDAC/altera: Use ECC manager compatible to select A10/S10 IRQ layout

Donggeun Yoo <[email protected]>
tracing: Undo the registration when enabling the histogram trigger fails

Donggeun Yoo <[email protected]>
tracing: Take the reference before publishing the named histogram trigger

Donggeun Yoo <[email protected]>
tracing: Set the trace clock before registering the histogram trigger

Steven Rostedt <[email protected]>
tracing: Merge struct event_trigger_ops into struct event_command

Steven Rostedt <[email protected]>
tracing: Remove get_trigger_ops() and add count_func() from trigger ops

Javier Tia <[email protected]>

    xfs: initialise args->total for parent pointer updates

Esben Haabendal <[email protected]>
drm/bridge: ti-sn65dsi83: Fix error handling in sn65dsi83_reset_work()

Satyajit Roy <[email protected]>
drm/amd/display: Honor Broadcast RGB for BT.2020 RGB output

Satyajit Roy <[email protected]>
drm/amd/display: Propagate HDMI RGB quantization selectability

Thomas Hellström <[email protected]>
drm/xe: Flush LSC untyped L1 dataport cache after rcs/ccs batches

Satyajit Roy <[email protected]>
drm/amd/display: Rebuild InfoFrames on output color space changes

Jens Axboe <[email protected]>

    io_uring/rw: end write accounting from ->ki_complete

XingWang Xiang <[email protected]>
genetlink: pin family module during policy dump

Masami Hiramatsu (Google) <[email protected]>
bootconfig: Fix integer overflow in initrd size check

Sun Jian <[email protected]>
init/main: read bootconfig header with get_unaligned_le32()

Lorenzo Stoakes (ARM) <[email protected]>
x86/mm/pat: Allocate split page tables as kernel page tables

Lorenzo Stoakes (ARM) <[email protected]>
x86/mm/pat: Acquire init_mm read lock on attribute changes to avoid UAF

Mike Rapoport (Microsoft) <[email protected]>
x86/mm/pat: Don't gate cpa_lock on debug_pagealloc_enabled()

Vishal Moola (Oracle) <[email protected]>
x86/mm/pat: Convert split_large_page() to use ptdescs

Vasileios Almpanis <[email protected]>
configfs: unhash the dentry before dropping the item in rmdir

Zihan Xi <[email protected]>
ipmr: account multicast table and route memory

Matthew Brost <[email protected]>
drm/pagemap: dma-unmap pages before handling migration errors

Heikki Krogerus <[email protected]>
drm/xe/i2c: Keep the i2c controller always enabled

Heikki Krogerus <[email protected]>
i2c: designware: Global register definitions

Bob Zhou <[email protected]>
drm/amdgpu: avoid force-completing uninitialized UVD rings

Alex Deucher <[email protected]>
drm/amdgpu: plumb timedout fence through to force completion

Srinivasan Shanmugam <[email protected]>
drm/amdgpu: Make amdgpu_vm_flush() non-failing in submission path

Alex Deucher <[email protected]>
drm/amdgpu: reorder IB schedule sequence

Alex Deucher <[email protected]>
drm/amdgpu: add a helper to calculate ring distance

Srinivasan Shanmugam <[email protected]>
drm/amdgpu: Fix missing unwind in amdgpu_ib_schedule() error path

Wenjie Qi <[email protected]>
f2fs: reject setattr size changes on large folio files

Chao Yu <[email protected]>
Revert: "f2fs: check in-memory block bitmap"

Xuanqiang Luo <[email protected]>
fou: Fix use-after-free in fou_create()

Daeho Jeong <[email protected]>
f2fs: accurately adjust free_sections during free_segment_range

Chao Yu <[email protected]>
f2fs: fix to reclaim space in f2fs_allocate_pinning_section()

Chao Yu <[email protected]>
f2fs: embed f2fs_gc_kthread in f2fs_sb_info

Wenjie Qi <[email protected]>
f2fs: limit recovery filename logging to stored length

Wenjie Qi <[email protected]>
f2fs: validate MOVE_RANGE destination size

Nilesh Javali <[email protected]>

    scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]

Nilesh Javali <[email protected]>
scsi: qla2xxx: Serialize NVMe unsol ctx list with a per-fcport lock

Nilesh Javali <[email protected]>
scsi: qla2xxx: Unlink NVMe unsol ctx before freeing on LS reject error

Nilesh Javali <[email protected]>
scsi: qla2xxx: Clamp max_npiv_vports to VP_CTRL bitmap capacity

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix soft lockup polling continuation IOCB signature

Nilesh Javali <[email protected]>
scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot

Nilesh Javali <[email protected]>
scsi: qla2xxx: Use ring-slot helpers in __qla2x00_alloc_iocbs

Nilesh Javali <[email protected]>
scsi: qla2xxx: Skip vport under deletion in report ID acquisition

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix 64G link speed reporting in get_data_rate

Nilesh Javali <[email protected]>
scsi: qla2xxx: Bound VP index against VP_CTRL IOCB bitmap size

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking

Nilesh Javali <[email protected]>
scsi: qla2xxx: Null out freed pointers in qla2x00_mem_alloc() error path

Hungyu Lin <[email protected]>
media: qcom: iris: fix runtime PM reference leaks

Sang-Heon Jeon <[email protected]>
media: remove conditional return with no effect

Dmitry Baryshkov <[email protected]>
media: iris: turn platform data into constants

Nilesh Javali <[email protected]>
scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak

Jackson Lee <[email protected]>
media: chips-media: wave5: Add timeout while stop_streaming

Weiming Shi <[email protected]>
net: appletalk: fix NULL pointer dereference in aarp_send_ddp()

Weiming Shi <[email protected]>
i2c: smbus: reject oversized block transfers in the common path

Gary Guo <[email protected]>
net: usb: pegasus: don't rely on id table pointer arithmetic

Gary Guo <[email protected]>
media: as102: do not rely on id table address comparison

Gary Guo <[email protected]>
usb: serial: spcp8x5: don't store usb_device_id

Gary Guo <[email protected]>
usb: usbtmc: don't store usb_device_id

Gary Guo <[email protected]>
wifi: ath9k_htc: don't store usb_device_id

Gary Guo <[email protected]>
usb: xusbatm: don't rely on id table pointer arithmetic

Chuck Lever <[email protected]>
xdrgen: Fix union declarations

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: kodiak: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sar2130p: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>

    Revert "arm64: dts: qcom: sc8180x: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sdm845: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8150: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8250: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8350: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8450: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8550: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8650: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: sm8750: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: talos: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: lemans: Fix the PCIe iommu-map entries"

Sasha Levin <[email protected]>
Revert "arm64: dts: qcom: qcs6490-rb3gen2: Fix the PCIe iommu-map entries"

Atish Patra <[email protected]>
crypto: ccp - Fix possible deadlock in SEV init failure path

Namjae Jeon <[email protected]>

    ksmbd: don't hold ci->m_lock while waiting for a lease break ack

Guenter Roeck <[email protected]>
hwmon: (sht4x) Add missing locks

Henrique Carvalho <[email protected]>
smb: client: fix UBSAN array-index-out-of-bounds in smb2_copychunk_range

Darrick J. Wong <[email protected]>
xfs: actually check internal-rtdev fields in the superblock

Darrick J. Wong <[email protected]>
xfs: actually recover intended file sizes in xfs_xmi_item_recover_intent

Darrick J. Wong <[email protected]>
xfs: advance the findparent inode scan cursor while holding ILOCK

Darrick J. Wong <[email protected]>
xfs: bail out on bitmap errors in xrep_agfl_fill

Darrick J. Wong <[email protected]>
xfs: compute dquot checksum after resetting dd_lsn in repair

Darrick J. Wong <[email protected]>
xfs: count escaped corruption errors in scrub stats

Darrick J. Wong <[email protected]>
xfs: cross-reference the rtgroup superblock extent, not block

Darrick J. Wong <[email protected]>
xfs: destroy seen inode bitmap when we fail to add a dirpath

Darrick J. Wong <[email protected]>
xfs: don't leak dqacct if rhashtable insertion fails

Darrick J. Wong <[email protected]>
xfs: don't leak new_bp if xfs_btree_bload_drop_buf fails

Darrick J. Wong <[email protected]>
xfs: don't modify file attributes or poke fsnotify for dry runs

Darrick J. Wong <[email protected]>
xfs: don't spin forever on zero-length dirents when salvaging them

Darrick J. Wong <[email protected]>
xfs: fix backwards mergeability logic in refcount scrubber

Darrick J. Wong <[email protected]>
xfs: fix backwards skipping logic in xrep_quota_block

Darrick J. Wong <[email protected]>
xfs: fix bnobt repair space reservation disposal failure

Lin Jiapeng <[email protected]>
xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN

Darrick J. Wong <[email protected]>
xfs: fix name string recording in slowpath pptr tracepoints

Darrick J. Wong <[email protected]>
xfs: fix parent rec lookup initialization in xrep_metapath_unlink

Eric Sandeen <[email protected]>
xfs: fix reclaimed page accounting in xfs_buf_free

Darrick J. Wong <[email protected]>
xfs: fix replaying dirent removals into the temporary directory

Darrick J. Wong <[email protected]>
xfs: fix rtrefcount btree block counting in scrub

Darrick J. Wong <[email protected]>
xfs: fix rtrmap cross-referencing elision logic

Darrick J. Wong <[email protected]>
xfs: fix short ifork reaping computation in xreap_bmapi_binval

Darrick J. Wong <[email protected]>
xfs: fix the rtrmap and rtrefcount _maxlevels_ondisk functions

Darrick J. Wong <[email protected]>
xfs: fix unit conversions in per_binval computation

Darrick J. Wong <[email protected]>
xfs: fix xfs_rtrmapbt_mem_cursor for non-rmap filesystems

Javier Tia <[email protected]>
xfs: initialise error in xfs_defer_finish_one()

Darrick J. Wong <[email protected]>
xfs: log the tempip after we convert it to extents format

Darrick J. Wong <[email protected]>
xfs: make the rtsummary repair fix the file size too

Darrick J. Wong <[email protected]>
xfs: preserve owner on in-memory btree creation

Anuj Gupta <[email protected]>
xfs: release alleged child inode on metapath unlink error

Darrick J. Wong <[email protected]>
xfs: report healthy filesystem events in scrub stats

Darrick J. Wong <[email protected]>
xfs: report nonexistent parents as a filesystem corruption

Darrick J. Wong <[email protected]>
xfs: reset parent pointer args before each dir tree unlink repair

Darrick J. Wong <[email protected]>
xfs: signal inode btree xref error if get_rec returns an error

Darrick J. Wong <[email protected]>
xfs: snapshot old AGFL before rewriting it

Darrick J. Wong <[email protected]>
xfs: snapshot scrub stats when rendering them

Darrick J. Wong <[email protected]>
xfs: strengthen the "is cow staging" helpers in scrub

Darrick J. Wong <[email protected]>
xfs: truncate quota file correctly when repairing quota file

Darrick J. Wong <[email protected]>
xfs: use the rtgroup extent count to find rtrefcount gaps

Bjoern Doebel <[email protected]>
smb: client: fix heap overflow in DACL owner/group rewrite

Bjoern Doebel <[email protected]>
smb: client: avoid leaking refcount when cifs_sb_tlink() fails

Bjoern Doebel <[email protected]>
smb: client: avoid leaking refcount in cifs_queue_oplock_break()

Paulo Alcantara <[email protected]>
smb: client: fix file type corruption in wsl_to_fattr()

Paulo Alcantara <[email protected]>
smb: client: fix file type corruption in posix_reparse_to_fattr()

Paulo Alcantara <[email protected]>
smb: client: fix file type corruption in cifs_reparse_point_to_fattr()

Paulo Alcantara <[email protected]>
smb: client: fix one-byte OOB read in smb2_parse_native_symlink()

Karl Mehltretter <[email protected]>
smb: client: pin DFS superblock in iterator callback

Diego Oliva <[email protected]>
smb: client: reject short READ responses in CIFSSMBRead()

Aohan Mei <[email protected]>
smb: client: reject userspace cifs.idmap descriptions

Qing Luo <[email protected]>
mptcp: pm: userspace: fix address ID overflow

Kalpan Jani <[email protected]>
mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0

Gang Yan <[email protected]>
selftests: mptcp: fix an UAF in mptcp_connect.c

Matthieu Baerts (NGI0) <[email protected]>
mptcp: syncookies: remember the request backup flag

Matthieu Baerts (NGI0) <[email protected]>
mptcp: subflow: no need to copy thmac during ulp_clone

Matthieu Baerts (NGI0) <[email protected]>
mptcp: options: handle MPC data + csum reqd + no csum

Joe Damato <[email protected]>
bnxt_en: Propagate TPA buffer allocation failures in bnxt_queue_mem_alloc()

Joe Damato <[email protected]>
bnxt_en: Propagate RX ring init failures in bnxt_init_nic()

Joe Damato <[email protected]>
bnxt_en: Don't free the live ring's TPA state on queue restart failure

Joe Damato <[email protected]>
bnxt_en: Only restore LRO if the device supports TPA

Michael Bommarito <[email protected]>
media: v4l2-ctrls: validate AV1 tile counts

Michael Bommarito <[email protected]>
media: v4l2-ctrls: validate HEVC tile counts

Michael Bommarito <[email protected]>
media: verisilicon: rockchip: reject AV1 frames exceeding the tile capacity

Michael Bommarito <[email protected]>
media: verisilicon: rockchip: guard VPU981 AV1 divisor and tile buffer

Haotian Zhang <[email protected]>
media: v4l2-h264: Fix memcmp() size in B1 reference list comparison

Michael Bommarito <[email protected]>
media: mediatek: vcodec: bound AV1 tile-start copy to the array capacity

Michael Bommarito <[email protected]>
media: verisilicon: hantro: bound G2 HEVC tile loop to the buffer capacity

Michael Bommarito <[email protected]>
media: hevc: add bounded tile-count helpers

Vishnu Razdan <[email protected]>
hwmon: (pmbus) Clear generic status alarms with CLEAR_FAULTS

Fan Wu <[email protected]>
hwmon: (gpio-fan) Fix use-after-free in alarm work

Javier Carrasco <[email protected]>
hwmon: (chipcap2) fix channels in humidity alarm notifications

Cong Nguyen <[email protected]>
hwmon: (applesmc) fix key backlight workqueue leak on register failure

Chengfeng Ye <[email protected]>
afs: Clear stale peer app data after address list changes

David Howells <[email protected]>
afs: Fix incorrect free in candidate cleanup in afs_lookup_server()

David Howells <[email protected]>
afs: Fix double-unmap of directory block

David Howells <[email protected]>
afs: Fix missing kunmap in afs_dir_search_bucket()

Xixin Liu <[email protected]>
perf: RISC-V: use BIT_ULL for u64 overflow masks

Xixin Liu <[email protected]>
perf: RISC-V: store available counter mask as bitmap

Harald Freudenberger <[email protected]>
s390/crypto: Map EBUSY to EIO when key conversion fails repeatedly

Harald Freudenberger <[email protected]>
s390/crypto: Fix wrong return code to engine in asynch callbacks

Harald Freudenberger <[email protected]>
s390/crypto: Fix missing scrub of temp buffers with PAES algorithm

Harald Freudenberger <[email protected]>
s390/crypto: Fix handling of EBUSY in PHMAC when req is pushed to crypto engine

Harald Freudenberger <[email protected]>
s390/crypto: Fix missing cra_flags in paes_s390

Harald Freudenberger <[email protected]>
s390/crypto: Fix missing scrub of temp buffers with AES ctr and gcm algorithm

Harald Freudenberger <[email protected]>
s390/crypto: Fix use of mutex in atomic context

Harald Freudenberger <[email protected]>
s390/crypto: Fix skcipher_walk return code handling in aes_s390

Nagamani PV <[email protected]>
s390/qeth: allow bridgeport queries despite OS_MISMATCH

Niklas Schnelle <[email protected]>
iommu/s390: Fix NULL dereference in iova_to_phys() with ZPCI_TABLE_TYPE_RFX

leixiang <[email protected]>

    KVM: PPC: Book3S HV: Set irqfd->producer only on success

Ibrahim Hashimov <[email protected]>
mac802154: fix use-after-free of sdata via queued RX frames

Kyle Zeng <[email protected]>
ipvs: reject invalid states in connection template sync records

Zhiling Zou <[email protected]>
ipv6: flowlabel: cap duplicate leases per socket

Zihan Xi <[email protected]>
ipv4: fib: bound automatic table ID allocation

David Carlier <[email protected]>
ieee802154: hwsim: serialize pib updates to fix double-free

Fan Wu <[email protected]>

    ieee802154: cc2520: fix FIFOP work use-after-free

Zhiling Zou <[email protected]>
ieee802154: 6lowpan: fix NULL dereference in lowpan_newlink

Yilin Zhang <[email protected]>
inet: frags: invalidate queues before flushing them

Weiming Shi <[email protected]>
fbdev: vfb: defer cleanup until the last reference

Nikhil Gurudasani <[email protected]>
erofs: preserve LZMA decoders on resize failure

Jeffin Philip <[email protected]>
fs: autofs: fix memory leak in autofs_fill_super()

Nathan Chancellor <[email protected]>
scripts/sorttable: Mark long_size as __maybe_unused

Xiong Weimin <[email protected]>
vdpa: solidrun: Free IRQs after request failure

Xiong Weimin <[email protected]>
vdpa: ifcvf: Put device on unsupported feature error

Ilya Maximets <[email protected]>
netfilter: report NLM_F_DUMP_FILTERED when all is filtered out

Chengfeng Ye <[email protected]>
netfilter: nf_log: unregister loggers before per-net teardown

Karl Mehltretter <[email protected]>
netfs: Fix uninitialized return value in netfs_unbuffered_write()

Donggeun Yoo <[email protected]>
net: phy: dp83td510: handle the active-high LED polarity mode

Norbert Szetei <[email protected]>
net: openvswitch: fix use-after-free of the flow table mask array

Fourie Zhang <[email protected]>
net: mpls: clear inner_protocol when the last label is popped

Sahil Chandna <[email protected]>
net: mana: Reserve extra CQ slot for the fence completion CQE

Johan Hovold <[email protected]>
net: hso: fix TIOCMIWAIT race

Weiming Shi <[email protected]>
net: dsa: tag_brcm: legacy FCS: request needed tailroom

Zhiling Zou <[email protected]>
net: bridge: use option bits for CFM/MRP frame handlers

Xuanqiang Luo <[email protected]>
net/sched: act_api: release all action references on NEWACTION failure

David Carlier <[email protected]>
ring-buffer: Check resize_disabled before publishing the new subbuf order

Sebastian Andrzej Siewior <[email protected]>
ring-buffer: Acquire the lock with irqsave in rb_wake_up_waiters()

Gabriel Krisman Bertazi <[email protected]>
io_uring/net: don't overconsume buffers when using MSG_TRUNC

Gabriel Krisman Bertazi <[email protected]>
io_uring/net: let io_recv_buf_select return the length of the buffer region

Shixiong Ou <[email protected]>
drm/sched: Create a fake device for KUnit tests

Yudi Yang <[email protected]>
drm/rockchip: analogix_dp: fix unchecked bound endpoint name length

Thorsten Blum <[email protected]>
drm/i915: Fix memory leak in query_perf_config_list()

Sunil Khatri <[email protected]>
drm/drm_exec: fix up contended obj when num_objects is 0

Leonardo Costa <[email protected]>
drm/bridge: tc358768: Enforce input bus flags via atomic_check

Donggeun Yoo <[email protected]>
function_graph: Use the saved entry's size when reprinting it

Moritz Tanner <[email protected]>
fs: don't return -EINVAL for successful nested thaw

Jann Horn <[email protected]>
exec: do_close_on_exec() before taking exec_update_lock

Runyu Xiao <[email protected]>
cpufreq: initialize policy rwsem before sysfs publication

Zhongqiu Han <[email protected]>
cpufreq: zero-initialize policy cpumask before sysfs publication

Rong Zhang <[email protected]>
Bluetooth: btrtl: Don't leak return code when parsing firmware format v2

Xu Rao <[email protected]>
Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev

Runyu Xiao <[email protected]>
ASoC: sti: initialize IRQ lock before requesting IRQ

Tianchu Chen <[email protected]>
ASoC: sprd: validate compress buffer sizes against fixed allocations

Dawid Osuchowski <[email protected]>
accel/ivpu: Limit firmware log name prints to field size

Magdalena Schulfer <[email protected]>
accel/ivpu: Validate firmware log buffer metadata

Magdalena Schulfer <[email protected]>
accel/ivpu: Validate full buffer range in ivpu_to_cpu_addr

Donggeun Yoo <[email protected]>
tracing: Keep the entry count when the histogram stats allocation fails

Donggeun Yoo <[email protected]>
tracing: Let histogram values keep the percent and graph modifiers

Donggeun Yoo <[email protected]>
tracing: Free histogram the field rejected for a bad modifier

Donggeun Yoo <[email protected]>
tracing: Free histogram var refs regardless of how often they are referenced

Donggeun Yoo <[email protected]>
tracing: Free histogram the var ref when its initialization fails

Henry Martin <[email protected]>
tracing/user_events: Don't destroy fields when event removal fails

Masami Hiramatsu (Google) <[email protected]>
tools/bootconfig: Fix integer overflow and truncation in size checks

Thomas Gleixner <[email protected]>
tick/broadcast: Plug clockevents replacement race

Ido Schimmel <[email protected]>
tunnels: Drop stale dst when building an ICMP error for PMTUD

Ali Ahmet Memis <[email protected]>
ufs: validate cylinder group metadata before caching it

Ali Ahmet Memis <[email protected]>
ufs: create the root dentry after loading cylinder metadata

Xiong Weimin <[email protected]>
virtio_mmio: disable IRQ wake before free_irq

James Hilliard <[email protected]>
watchdog: sunxi_wdt: preserve boot-enabled watchdog

Prike Liang <[email protected]>
drm/amdgpu: skip gfx switch_power_profile during GPU reset

Harry Wentland <[email protected]>
dm/amdgpu: fix malformed link_settings debugfs output

Samuel Holland <[email protected]>
Revert "riscv: Reset pmm when PR_TAGGED_ADDR_ENABLE is not set"

Tristan Madani <[email protected]>
ALSA: usbusx2y: validate URB actual_length in interrupt callback

Tristan Madani <[email protected]>
ALSA: usbusx2y: fix in04_last array size mismatch with in04_buf

Kazuki Hanai <[email protected]>
ALSA: us122l: Prevent write upgrades for read mappings

Roman Prucha <[email protected]>
ALSA: ctxfi: Fix CA20K2 S/PDIF passthrough

Miguel Ojeda <[email protected]>
drm/panic: clean new clippy::needless_range_loop lint for Rust 1.100.0

Miguel Ojeda <[email protected]>
rust: allow unknown_lints in generated bindings for Rust < 1.88

John Hubbard <[email protected]>
rust: allow clippy::as_underscore in the generated bindings

Donggeun Yoo <[email protected]>
tracing: Fix memory corruption from a "STACKTRACE" histogram key

Thomas Weißschuh <[email protected]>
tracing: Restore :mod: trailer after parsing in ftrace_set_clr_event()

Donggeun Yoo <[email protected]>
tracing: Fix memory corruption from the histogram stacktrace modifier

Cen Zhang (Microsoft) <[email protected]>
reboot: fix cad_pid use-after-free race

Zihan Xi <[email protected]>
ipv6: fix fib6 walker UAF on seq stop

Pedro Falcato <[email protected]>
x86/alternatives: Exclude text poking against change_page_attr()

Lorenzo Stoakes (ARM) <[email protected]>
x86/mm/pat: Acquire init_mm write lock on collapse to avoid UAF

Soheil Hassas Yeganeh <[email protected]>
x86/cfi: Fix FineIBT hash offset in cfi_get_func_hash()

Vernon Yang <[email protected]>
x86/mm: Fix user-space data loss with MADV_FREE and THP

Yazen Ghannam <[email protected]>
x86/amd_node: Fix PCI device reference counting in amd_smn_init()

Eric Biggers <[email protected]>
crypto: x86/aria - add missing vzeroupper in AVX-512 code

Eric Biggers <[email protected]>
crypto: x86/aria - add missing vzeroupper in AVX2 code

Jason Andryuk <[email protected]>
x86/amd_node: Fix potential NULL pointer dereference

Jason Andryuk <[email protected]>
x86/amd_node: Avoid divide by zero on virtualized systems

Shivaprasad G Bhat <[email protected]>
powerpc: pci-ioda: Fix the stale irq chip reference

Shivaprasad G Bhat <[email protected]>
powerpc/eeh: Fix recursive locking on devices without EEH sensitive driver

Thorsten Blum <[email protected]>
powerpc/ps3: Fix repository.c build failure

Vasileios Almpanis <[email protected]>

    configfs: pin the symlink target's dirent instead of chasing ->ci_dentry

Namjae Jeon <[email protected]>
ksmbd: prevent out-of-bounds reads in share config responses

Maurizio Lombardi <[email protected]>
scsi: target: iscsi: Fix hang for aborted WRITE_PENDING commands

Lorenzo Stoakes (ARM) <[email protected]>
scripts/mksysmap: fix escape of '$' in the __pi_ pattern

Lorenzo Stoakes (ARM) <[email protected]>
scripts/mksysmap: drop the MODULE_INFO() symbols from kallsyms

Binglei Wang <[email protected]>

    erofs: add missing buf->off in erofs_bread()

Stian Halseth <[email protected]>
sunvdc: unmap LDC cookies when the descriptor send fails

Eelco Chaudron <[email protected]>
openvswitch: fix wrong flag value in get_ipv6_ext_hdrs()

MD Danish Anwar <[email protected]>
net: hsr: enable promiscuous mode on interlink port with fwd offload

Lorenzo Bianconi <[email protected]>
net: stmmac: fix TX descriptor availability check for TSO traffic

Russell King (Oracle) <[email protected]>
net: stmmac: add TSO check for header length

Russell King (Oracle) <[email protected]>
net: stmmac: add stmmac_tso_header_size()

Russell King (Oracle) <[email protected]>
net: stmmac: fix TSO support when some channels have TBS available

Greg Marsden <[email protected]>
net/rds: fix tcp stream corruption with large pages

Long Li <[email protected]>
net: mana: restore the XDP program pointer when pre-allocation fails

Donggeun Yoo <[email protected]>
net: phy: dp83867: handle the active-high LED polarity mode

Ratheesh Kannoth <[email protected]>
octeontx2-af: fix PF/CGX debugfs PCI bus lookup

Faicker Mo <[email protected]>
net: net_failover: Fix the deadlock in net_failover_slave_name_change()

Vladislav Karmanov <[email protected]>
net: phy: mediatek-ge: disable EEE on the MT7530 PHY

Aleksei Sviridkin <[email protected]>
net: ethernet: mtk_eth_soc: populate lpi_interfaces to fix EEE support

Christian Marangi <[email protected]>
net: ethernet: mtk_eth_soc: fix supported_interface set after phylink_create

Joris Vaisvila <[email protected]>
net: ethernet: mtk_eth_soc: avoid writing to ESW registers on MT7628

Aleksei Sviridkin <[email protected]>
net: dsa: mt7530: populate lpi_interfaces to fix EEE support

Ahmed Naseef <[email protected]>

    net: dsa: mt7530: add EN7528 support

Aamir Ahmed <[email protected]>
net: hinic: fix mailbox segment buffer overflow

Li Youhong <[email protected]>
net: sun4i-emac: fix missing of_node_put() for phy_node

Kuniyuki Iwashima <[email protected]>
net/sched: cls_api: Don't replay RTM_GETCHAIN in tc_ctl_chain().

Victor Nogueira <[email protected]>
net/sched: cls_route: Fix in-place replace

Victor Nogueira <[email protected]>
net/sched: cls_route: Reject handle aliasing

Victor Nogueira <[email protected]>
net/sched: cls_route: free emptied bucket on filter move

Hui Su <[email protected]>
sched/core: Call wq_worker_tick() for the execution context

Hui Su <[email protected]>
sched: Account cgroup CPU time to the execution context

Vincent Guittot <[email protected]>
sched/eevdf: Fix rb augmented with multi fields

Vincent Guittot <[email protected]>
sched/eevdf: Fix augmented max_slice

Dapeng Mi <[email protected]>
perf/x86/intel: Prevent drain_pebs() reentry

Dapeng Mi <[email protected]>

    perf/x86/intel: Correct pt_regs->flags update for PEBS path

Dapeng Mi <[email protected]>
perf/x86/intel/ds: Factor out PEBS group processing code to functions

Thomas Richter <[email protected]>
perf/core: Allow list_del during perf_event_overflow()

Thibault Ferrante <[email protected]>
selftests/powerpc/tm: Fix tcheck() reading uninitialised CR value

Carolina Jubran <[email protected]>
net/mlx5e: Move representor vnic reporter to eswitch devlink port

Or Har-Toov <[email protected]>
net/mlx5: Register SF resource on PF port representor

Or Har-Toov <[email protected]>
devlink: Add port-level resource registration infrastructure

Or Har-Toov <[email protected]>
devlink: Refactor resource functions to be generic

Lorenzo Bianconi <[email protected]>
net: stmmac: initialize ptp_lock at probe time

Qingfang Deng <[email protected]>
ppp_synctty: ensure a writeable skb header

Eric Dumazet <[email protected]>
vxlan: initialize _md in vxlan_xmit_one()

Ratheesh Kannoth <[email protected]>
octeontx2-pf: reset HTB scheduler topology before freeing queues

Ali Ahmet Memis <[email protected]>
hwmon: (nct6694) do not expose enable on DTIN temperature channels

Linmao Li <[email protected]>
hwmon: (corsair-cpro) Remove debugfs entries when probe fails

Pengpeng Hou <[email protected]>
hwmon: (aspeed-pwm-tacho) Propagate reset deassert errors

Cong Nguyen <[email protected]>

    hwmon: (gpio-fan) take fan_data->lock in gpio_fan_shutdown()

Linmao Li <[email protected]>
hwmon: (corsair-cpro) Create debugfs entries after hwmon registration

Marek Vasut <[email protected]>
net: ks8851: Fix receiver error in 100BASE-TX mode following software power-down

Yicong Hui <[email protected]>
net/micrel: Fix typos in micrel driver code comments

Jan Havran (Advantech Czech) <[email protected]>
net: dsa: lantiq_gswip: fix GSWIP_MDIO_PHY_FCONTX_EN value

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Sync timeout value if WDT was running at boot

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Fix undefined behavior

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Fix spurious reset on suspend

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Enable clock before accessing hardware registers

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Fix clock leak and spurious timer in settimeout()

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Avoid division by zero

David Arcari <[email protected]>
watchdog: fix hrtimer start when pretimeout is zero

Paolo Abeni <[email protected]>
mptcp: remove unneeded READ_ONCE() annotation

Nicolai Buchwitz <[email protected]>
net: macb: put the "mdio" child node reference on success

Nicolai Buchwitz <[email protected]>
net: macb: destroy the phylink instance on the probe error path

Naman Gulati <[email protected]>
ipv6: null-check fib6_node before accessing in __ip6_del_rt_siblings()

Long Li <[email protected]>
net: mana: Clear RDMA teardown and suspend state in mana_rdma_probe()

Jiajia Liu <[email protected]>
Bluetooth: btusb: Fix leaked runtime PM reference in btusb_reset

Jiajia Liu <[email protected]>
Bluetooth: btusb: mediatek: Fix leaked runtime PM reference in reset

Krystian Kaniewski <[email protected]>
Bluetooth: hci_sysfs: Fix NULL pointer dereference in device_del()

Ivan Hu <[email protected]>
Bluetooth: btmtk: Declare MT7920 (MT7961 1a) Bluetooth firmware

Kiran K <[email protected]>
Bluetooth: btintel_pcie: fix tx_handle bounds off-by-one

Kiran K <[email protected]>
Bluetooth: btintel_pcie: validate packet_len before skb_put_data

Luiz Augusto von Dentz <[email protected]>
Bluetooth: btusb: Fix UAF of btusb_data by rx_work

Jakub Kicinski <[email protected]>
eth: ice: don't dereference pointers from TP_printk()

Jacob Keller <[email protected]>
ice: add missing xa_destroy for sched_node_ids

Joshua Hay <[email protected]>
idpf: account for VLAN header when parsing RSC packet header

HyeongJun An <[email protected]>
ALSA: hda: Report a change when only the channel status bytes move

Karl Mehltretter <[email protected]>
drm/logicvc: Drop the select of the nonexistent CONFIG_DRM_KMS_DMA_HELPER

Karl Mehltretter <[email protected]>
drm/adp: Drop the select of the nonexistent CONFIG_DRM_KMS_DMA_HELPER

Linus Walleij <[email protected]>
net: ethernet: cortina: Count RX descriptors for freeq refill

Linus Walleij <[email protected]>
net: ethernet: cortina: Count RX drops once per frame

Linus Walleij <[email protected]>
net: ethernet: cortina: No mapping is a dropped rx

Linus Walleij <[email protected]>
net: ethernet: cortina: Count dropped frames as NAPI work

Linus Walleij <[email protected]>
net: ethernet: cortina: Finish RX updates before NAPI completion

Linus Walleij <[email protected]>
net: ethernet: cortina: Fix budget accounting

Alice Mikityanska <[email protected]>
net: ipv6: Clamp to IP6_MAX_MTU in ip6_dst_mtu_maybe_forward

Alice Mikityanska <[email protected]>
net: ipv6: Fix UDP length overflow with PMTU discover and big MTU

Alice Mikityanska <[email protected]>
net: ipv4: Fix UDP length overflow with PMTU discover and big MTU

Kuniyuki Iwashima <[email protected]>
af_unix: Return immediately when manage_oob() returns NULL for 0-length buffer.

Kuniyuki Iwashima <[email protected]>
af_unix: Update last skb marker in manage_oob().

Karl Mehltretter <[email protected]>
virtio_input: stop callbacks before unregistering input device

Xiong Weimin <[email protected]>
virtio_input: reset device if input_register_device() fails

Andrew Stellman <[email protected]>
virtio-pci: return IRQ_HANDLED after non-zero ISR

Linfeng Sun <[email protected]>
vdpa_sim_net: check TX pull result before RX copy

Linfeng Sun <[email protected]>
vdpa_sim_blk: reject out-of-range sector starts

Yu Zhang <[email protected]>
vhost-vdpa: protect config_ctx from being freed under the config callback

Yu Zhang <[email protected]>
vhost-vdpa: don't install the eventfd_ctx_fdget() error in config_ctx

Jia Jia <[email protected]>
vhost/vdpa: reject VRING_NUM larger than device max

Jia Jia <[email protected]>
virtio_console: do not free control-out buffers on remove

Karl Mehltretter <[email protected]>
virtio: fix use-after-free in unregister_virtio_device()

Sascha Bischoff <[email protected]>
irqchip/gic-v5: Preserve ICC_CR0_EL1 state

hpp.iscas <[email protected]>
ASoC: mt6351: Publish the OF module alias

Florian Westphal <[email protected]>
netfilter: ip6_tables: set F_PROTO when proto value is nonzero

Florian Westphal <[email protected]>
netfilter: nfnetlink_log: cope with concurrent instance destruction

hpp.iscas <[email protected]>
ASoC: Intel: SST: Publish the PCI module aliases

hpp.iscas <[email protected]>
ASoC: bcm: bcm63xx: Publish the OF module aliases

Guenter Roeck <[email protected]>
hwmon: (sht4x) Fix return value from heater_enable_store()

Guenter Roeck <[email protected]>
hwmon: (sht4x) Rely on subsystem locking

Antonin Godard <[email protected]>
Documentation: hwmon: replace full-width colon by a standard ASCII colon

Jared Kangas <[email protected]>
hwmon: (ina2xx) Decouple in0 and curr1 alarms

Jared Kangas <[email protected]>
hwmon: (ina2xx) Replace masks with enum in alert functions

Jared Kangas <[email protected]>
hwmon: (ina2xx) Parameterize ina2xx_data in ina226_alert_read()

Guenter Roeck <[email protected]>
hwmon: (ina2xx) Rely on subsystem locking

Jared Kangas <[email protected]>
hwmon: (ina2xx) Acquire hwmon_lock in shunt_resistor_show()

Guenter Roeck <[email protected]>
hwmon: Fix potential UAF in pec_store

Guenter Roeck <[email protected]>
Documentation/hwmon: Document hwmon_notify_event()

Geert Uytterhoeven <[email protected]>
hwmon: (ltc4282) Make sure clk_init_data is fully initialized

Vasant Hegde <[email protected]>
iommu/amd: Fix premature break in init_iommu_one() again

Karl Mehltretter <[email protected]>
iommu/amd: Do not reallocate GA log buffers on resume

Li RongQing <[email protected]>
iommu/amd: Add NUMA node affinity for IOMMU log buffers

Jason Gunthorpe <[email protected]>
iommu/riscv: Disable SADE

Fangyu Yu <[email protected]>
iommu/riscv: Add command queue lock

Edward Adam Davis <[email protected]>
ALSA: caiaq: Decoupling ep1_in_urb in caiaq dev

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Reject non-scalar bpf_loop iteration counts

Vineeth Karumanchi <[email protected]>
net: macb: fix NULL pointer dereference on unbind with fixed-link

Théo Lebrun <[email protected]>

    net: macb: rename bp->sgmii_phy field to bp->phy

Jamal Hadi Salim <[email protected]>
net/sched: ets: clamp quantum in parse and fallback paths

Jamal Hadi Salim <[email protected]>
net/sched: drr: clamp quantum in change class

Jamal Hadi Salim <[email protected]>
net/sched: pie: clamp psched_mtu in pie_drop_early

Jamal Hadi Salim <[email protected]>
net/sched: dualpi2: clamp psched_mtu at all call sites

Jamal Hadi Salim <[email protected]>
net/sched: hhf: clamp quantum in change and init paths

Jamal Hadi Salim <[email protected]>
net/sched: sfq: clamp quantum in change path

Jamal Hadi Salim <[email protected]>
net/sched: fq_pie: clamp quantum in change path

Carolina Jubran <[email protected]>
net/mlx5e: Keep HW timestamp stats monotonic across reconfiguration

Lama Kayal <[email protected]>
net/mlx5: E-Switch, prevent mc_list repopulation during vport disable

Yael Chemla <[email protected]>
net/mlx5: E-Switch: fix use-after-free in mlx5_eswitch_termtbl_put

Carolina Jubran <[email protected]>
net/mlx5e: Fix use-after-free race in sample_restore_put()

Carolina Jubran <[email protected]>
net/mlx5e: Fix ETS zero BW reporting when one TC holds 100%

Akiva Goldberger <[email protected]>
net/mlx5: LAG, use local tracker to update active ports

Shahar Shitrit <[email protected]>
net/mlx5e: Fix setting RS FEC after remapping

Shahar Shitrit <[email protected]>
net/mlx5e: Fix missing FEC mode mapping for RS_544_514_INTERLEAVED_QUAD

Weiming Shi <[email protected]>
net/sched: defer qdisc freeing after failed creation

XingWang Xiang <[email protected]>
net: mctp: i3c: serialize probe with bus removal

Thorsten Blum <[email protected]>
powerpc/kexec_file: Use inclusive range checks for excluded memory

Thorsten Blum <[email protected]>
powerpc/kexec_file: Use inclusive range checks in add_usable_mem()

Nikhil P. Rao <[email protected]>
pds_core: don't release PCI regions for VFs on reset

Nikhil P. Rao <[email protected]>
pds_core: fix cmd_regs access racing BAR unmap on reset

Jamal Hadi Salim <[email protected]>
net: reject oversized tx_queue_len at netlink parse time

Jamal Hadi Salim <[email protected]>
net: cap tx_queue_len at S16_MAX to prevent oversized ring allocations

Seungwon Bae <[email protected]>
vxlan: reject dynamic fdb entries that reference a nexthop id

Alexandra Winter <[email protected]>
s390/ism: folio_put() after error

Alexandra Winter <[email protected]>
dibs: Unregister dibs_class after error

Jori Koolstra <[email protected]>
dibs: change dibs_class to a const struct

Alexandra Winter <[email protected]>
dibs: Remove reset of static vars in dibs_init()

Jason Winter <[email protected]>

    net: usb: cx82310_eth: drop URB after 0xffff reboot sentinel to prevent partial_data heap overflow

Nikhil P. Rao <[email protected]>
ionic: use netif_txq_maybe_stop() in ionic_tx()

Viswajith Murali <[email protected]>
octeontx2-af: mcs: Clear stale X2P calibration state before calibration

Nikolay Aleksandrov <[email protected]>
net: bridge: mcast: properly convert mglist to rcu

Jakub Kicinski <[email protected]>
net: dsa: mv88e6xxx: bound the policy rule dump by the caller's buffer size

Jakub Kicinski <[email protected]>
eth: nfp: drop the replaced rule from the list when reprogramming fails

Jakub Kicinski <[email protected]>
eth: nfp: bound the ntuple rule dump by the caller's buffer size

Jakub Kicinski <[email protected]>
net: dsa: bcm_sf2: bound the CFP rule dump by the caller's buffer size

Eric Dumazet <[email protected]>
bonding: use skb_cow_head() in bond_do_alb_xmit() and rlb_arp_xmit()

Ido Schimmel <[email protected]>
nexthop: Initialize extack in remove_nh_grp_entry()

Jiayuan Chen <[email protected]>
selftests/bpf: Fix flaky bpf_nf test when random NAT port is 0

Masami Hiramatsu (Google) <[email protected]>
tracing: Fix to avoid creating trace instances with duplicate names

Masami Hiramatsu (Google) <[email protected]>
tracing: Add boot-time backup of persistent ring buffer

Ning Ding <[email protected]>
bpf: Reject untrusted allocated-object pointers

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Require MEM_PERCPU for percpu kptr stores

Andy Shevchenko <[email protected]>
thermal: sysfs: switch to use scnprintf() to suppress truncation warning

Eduard Zingerman <[email protected]>
bpf: Don't predict JMP32 pointer vs zero comparisons

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Reject legacy packet loads from callbacks

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark faultable stack helpers as sleepable

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark bpf_btf_find_by_name_kind() as sleepable

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Check ancestor frames for rbtree callbacks

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Track verifier instruction stats for each subprogram

Paul Chaignon <[email protected]>
bpf: Report maximum combined stack depth

Paul Chaignon <[email protected]>
bpf: Print breakdown of insns processed by subprogs

Eduard Zingerman <[email protected]>
bpf: share several utility functions as internal API

Emil Tsalapatis <[email protected]>
bpf: Only enforce 8 frame call stack limit for all-static stacks

Taylor Bates <[email protected]>
mlxsw: spectrum_ptp: Fix napi_gro_receive() call from GC workqueue context

Justin Chen <[email protected]>
net: bcmasp: fix tx_spb_ring_full() checking same slot cnt times

Justin Chen <[email protected]>

    net: bcmasp: clear txcb->last before writing each descriptor

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Refactor and fix init_config access

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Honor NHLT override when setting up a path

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Allow the topology to carry NHLT data

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Fix unbalanced module reference count

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Do not ignore -ENOENT when loading a topology

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Clean up streams if their initialization fails

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Clean up the bus when fetching ML caps fails

Xixin Liu <[email protected]>
nvme-tcp: defer TLS inline send to io_work

Mohamed Khalfella <[email protected]>
nvme: remove stale namespaces by NSID range during scan

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark sched_process_wait argument as nullable

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Reject resilient lock operations in rbtree callbacks

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Reject tail calls directly from callback frames

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark signal tracepoint siginfo arguments as scalar

Jiayuan Chen <[email protected]>
bpf: Fix NULL-ptr-deref in btf_var_show()

Jiayuan Chen <[email protected]>
bpf: Fix NULL-ptr-deref when showing a void BTF type

Igor Paunovic <[email protected]>
drm/rockchip: rk3066_hdmi: Add missing Kconfig selects

Igor Paunovic <[email protected]>
drm/rockchip: dw_dp: Select DRM_BRIDGE_CONNECTOR

Takashi Iwai <[email protected]>
ALSA: caiaq: Fix potential double-free at error path

HyeongJun An <[email protected]>
selftests/alsa: Fix the step check for INTEGER controls

Gao Xiang <[email protected]>
erofs: disable LZ4 rolling decompression for now

Breno Leitao <[email protected]>
arm64: trans_pgd: clone only the linear map that exists at runtime

HW He <[email protected]>
net: gro: Fix nesting of TCP GSO SKBs in skb_gro_receive_list()

Lorenzo Bianconi <[email protected]>
net: stmmac: reconfigure RX packet parser table in stmmac_hw_setup() after reset

Lorenzo Bianconi <[email protected]>
net: airoha: enable RX_DONE interrupt for RX queue 31

Allison Henderson <[email protected]>
net/rds: don't let rds_conn_shutdown() consume a concurrent drop

Håkon Bugge <[email protected]>
net/rds: acquire the fastpath locks in rds_conn_shutdown()

Allison Henderson <[email protected]>
net/rds: acquire RDS_IN_XMIT in rds_tcp_reset_callbacks()

Gerd Rausch <[email protected]>
net/rds: tcp: don't force RDS_CONN_RESETTING over a concurrent shutdown

Allison Henderson <[email protected]>
net/rds: clear cp_flags bits individually in rds_conn_path_reset()

Allison Henderson <[email protected]>
net/rds: use clear_bit_unlock() in release_refill()

Allison Henderson <[email protected]>
net/rds: use wq_has_sleeper() in release_in_xmit()

Kuniyuki Iwashima <[email protected]>
net: Remove conflicting altnames for dying netns in __dev_change_net_namespace().

Eric Dumazet <[email protected]>
bonding: do not clear curr_active_slave prematurely when releasing all slaves

Eduard Zingerman <[email protected]>
bpf: reject BPF_PSEUDO_FUNC reference to the main program

Henry Martin <[email protected]>
tracing/probes: Fix use-after-free on field name/type of events with multiple probes

Joas Antonio dos Santos <[email protected]>
netfilter: nf_conntrack_sip: fix OOB read in sip_skip_whitespace()

Kyle Zeng <[email protected]>
ipvs: fix reversed sequence option serialization

Yogesh Mohan Marimuthu <[email protected]>
drm/amdgpu/userq: fix struct drm_amdgpu_info_device padding for 32bit compile

FAN YE <[email protected]>
btrfs: zstd: fix lost wakeup when waiting for a workspace

Qu Wenruo <[email protected]>
btrfs: do not force reloc root creation during qgroup_account_snapshot()

Avi Weiss <[email protected]>
btrfs: send: fix lost error return value in will_overwrite_ref()

Johannes Thumshirn <[email protected]>
btrfs: zoned: finish active block group cleanup if call_zone_finish() fails

Qu Wenruo <[email protected]>
btrfs: return proper negative error code for update_raid_extent_item()

Qu Wenruo <[email protected]>
btrfs: fix the possible bioc_list memory leak during error

Shuangpeng Bai <[email protected]>
btrfs: fix transaction use-after-free in raid stripe insertion

James C. Owens <[email protected]>
btrfs: scrub: report the failing sector's address, not the stripe base

Linus Walleij <[email protected]>
ASoC: ux500: Program the MSP FIFO watermarks

Linus Walleij <[email protected]>
ASoC: ux500: Allow repeated MSP prepare calls

Linus Walleij <[email protected]>
ASoC: ux500: Remove obsolete PRCMU QoS calls

Linus Walleij <[email protected]>
ASoC: ux500: Request the MSP MMIO resource

Linus Walleij <[email protected]>
ASoC: ux500: Deassert the MSP reset during probe

Linus Walleij <[email protected]>

    mfd: db8500-prcmu: Fold dbx500 header into db8500

Linus Walleij <[email protected]>
ASoC: ux500: Validate MSP DAI configuration

Linus Walleij <[email protected]>
ASoC: ux500: Correct MSP frame and bit clock setup

Linus Walleij <[email protected]>
ASoC: ux500: Propagate MSP setup errors

Linus Walleij <[email protected]>
ASoC: ux500: Fix MSP stream lifecycle handling

John Ogness <[email protected]>
printk/nbcon: Change nbcon_irq_work to IRQ_WORK_LAZY

Qingyu Zhang <[email protected]>
ALSA: ump: do not touch legacy_rmidi before it exists

Sunil Goutham <[email protected]>
octeontx2-af: Fix limiting SRIOV VF count logic

Eric Dumazet <[email protected]>
locking/lockdep: Invalidate stale class_cache entries for zapped classes

Leo Yan <[email protected]>
perf/core: Skip empty AUX records with only format flags

Mario Limonciello <[email protected]>
x86/itmt: Don't make ITMT enablement depend on debugfs

Seiji Nishikawa <[email protected]>
sched/rt,dl: Skip migrate-disabled tasks when picking a push candidate

John Stultz <[email protected]>
sched: Make class_schedulers avoid pushing current, and get rid of proxy_tag_curr()

Ivy Lopez <[email protected]>
scsi: mpt3sas: Avoid out-of-bounds cpumask_of_node() call in _base_assign_reply_queues()

Xixin Liu <[email protected]>
perf: RISC-V: check cpu_hw_evt before dereference in overflow IRQ

Eric Dumazet <[email protected]>
bonding: alb: fix uninitialized transport header access in alb_determine_nd()

Guanghui Yang <[email protected]>
btrfs: restore active device pointers after failed sprout

Guanghui Yang <[email protected]>
btrfs: detach failed sprout device from transaction update list

HyeongJun An <[email protected]>
ALSA: dummy: Report a change when one capture switch channel moves

Lu Yao <[email protected]>
drm/xe/oa: Remove sysfs entry on idr_alloc failure in xe_oa_add_config_ioctl()

wangdicheng <[email protected]>
ASoC: amd: yc: fix memory leak in acp6x_pdm_dma_close()

wangdicheng <[email protected]>
ASoC: amd: renoir: fix disable_pdm_interrupts() to clear mask bits

Ștefan Ghețu <[email protected]>
ASoC: fsl_micfil: balance mclk enable/disable

Vasily Gorbik <[email protected]>
s390/boot: Avoid IPL parameter append past command line

Vasily Gorbik <[email protected]>
s390/boot: Fix physical memory search range

Xu Rao <[email protected]>
ALSA: hda: restore MFG widget enumeration after core split

Hui Su <[email protected]>
staging: fbtft: make dirty_lock IRQ-safe

Kuniyuki Iwashima <[email protected]>
af_packet: Don't cast tpacket_hdr.tp_len to int in tpacket_parse_header().

Eric Dumazet <[email protected]>
ipv6: sr: restore network header before routing and forwarding

David Laight <[email protected]>
tipc: Dont send random pad bytes in RESET/ACTIVATE messages

Tung Nguyen <[email protected]>
tipc: fix NULL deref in tipc_named_node_up() on empty publication list

Eric Dumazet <[email protected]>
ip6_gre: check tunnel info before xmit in ip6gre_tunnel_xmit

Eric Dumazet <[email protected]>
ipv6: mcast: use copy-on-write RCU updates in ip6_mc_source()

Eric Dumazet <[email protected]>
ipv6: mcast: fix RCU list diversion in ip6_mc_del1_src()

Qingfang Deng <[email protected]>
ppp: ppp_synctty: simplify tty disc_data access

Qingfang Deng <[email protected]>
ppp: ppp_async: simplify tty disc_data access

Eric Dumazet <[email protected]>
igmp: convert struct ip_sf_list to RCU

Jamal Hadi Salim <[email protected]>
net/sched: cls_u32: fix duplicate handle when node ID pool is exhausted

Selvamani Rajagopal <[email protected]>
net: ethernet: oa_tc6: Fix for the wrong data type

Selvamani Rajagopal <[email protected]>
net: ethernet: oa_tc6: Disable tx queues on fatal error

Selvamani Rajagopal <[email protected]>
net: ethernet: oa_tc6: Improve the error recovery

Selvamani Rajagopal <[email protected]>
net: ethernet: oa_tc6: Protect skb pointer used by two different kernel instances

Ciprian Regus <[email protected]>
net: ethernet: oa_tc6: Add the OA_TC6_ prefix to standard registers

Ciprian Regus <[email protected]>
net: ethernet: oa_tc6: Export standard defined registers

Ciprian Regus <[email protected]>
net: ethernet: oa_tc6: Handle the OA TC6 SPI protected mode

Selvamani Rajagopal <[email protected]>
net: ethernet: oa_tc6: Interrupt is active low, level triggered.

Linus Walleij <[email protected]>
ASoC: ab8500: Validate and program TDM slots correctly

Linus Walleij <[email protected]>
ASoC: ab8500: Correct digital interface format setup

Linus Walleij <[email protected]>
ASoC: ab8500: Repair the DAPM capture graph

Linus Walleij <[email protected]>
ASoC: ab8500: Reset the audio block before configuring it

Gongwei Li <[email protected]>
Bluetooth: hci_mrvl: Fix wrong return value check of wait_on_bit_timeout()

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: clear FLAG_DEFER_SETUP only for same PID/PSM

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: fix out-of-bounds write in l2cap_ecred_connect

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: fix chan mode for LE_CONN_REQ + EXT_FLOWCTL pchan

Aleksandr Nogikh <[email protected]>
Bluetooth: hci_core: Fix race condition during device registration

Laxman Acharya Padhya <[email protected]>
Bluetooth: btintel: bound firmware ID by TLV length

Laxman Acharya Padhya <[email protected]>
Bluetooth: btintel: validate version TLV value lengths

Jiacheng Xu <[email protected]>
workqueue: reject watchdog thresholds that overflow jiffies

Kiran K <[email protected]>
Bluetooth: btintel_pcie: Clear automask on spurious interrupts

Wanwu Li <[email protected]>
sched_ext: Fix vtime delta loss in scx_flatcg cgroup migration

Cheng-Yang Chou <[email protected]>
sched_ext: Update demo schedulers and selftests to use scx_bpf_task_set_dsq_vtime()

Wanwu Li <[email protected]>
sched_ext: Fix timer pinning and return value in scx_central

Sumanth Korikkar <[email protected]>
s390/diag324: Preserve -EBUSY return code

Vasily Gorbik <[email protected]>
s390/ipl: Fix NULL deref in dump_reipl without re-IPL parm block

Vasily Gorbik <[email protected]>
s390/ipl: Fix NULL deref in kdump without re-IPL parm block

Heiko Carstens <[email protected]>
s390/time: Use jiffies instead of jiffies_64

Heiko Carstens <[email protected]>

    s390/vtime: Use __this_cpu_read() / get rid of READ_ONCE()

Namjae Jeon <[email protected]>
ksmbd: rate limit unmapped SID errors

Namjae Jeon <[email protected]>
ksmbd: propagate DACL parsing errors

Yilin Zhang <[email protected]>
ALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF

David Howells <[email protected]>
cachefiles: Fix potential UAF/KASAN warning

Edward Adam Davis <[email protected]>
netfs: break unbuffered write when netfs_alloc_subrequest() fails

David Howells <[email protected]>
netfs: Fix subreq ref leak

David Howells <[email protected]>
netfs: Fix i_size update for partial transfer

David Howells <[email protected]>

    netfs: Fix error vs transferred passed to ->ki_complete()

David Howells <[email protected]>
netfs: Fix unbuffered/DIO write partial transfer error return

Wang Yan <[email protected]>
perf powerpc-vpadtl: Fix raw_size of DTL samples

Colin Ian King <[email protected]>
OPP: of: Fix potential multiplication overflow when calculating freq

Adrian Hunter <[email protected]>
perf symbol: Do not use debug file as the binary type

Tzung-Bi Shih <[email protected]>
watchdog: msc313e: Fix NULL pointer dereference in PM callbacks

Baul Lee <[email protected]>
vxlan: mdb: Fix use-after-free in vxlan_mdb_remote_src_del()

James Nugraha <[email protected]>
net: amd-xgbe: discard rx packets with bad FCS

Xuanqiang Luo <[email protected]>

    raw: annotate disconnect-side IPv4 match writers

Henry Martin <[email protected]>
sctp: fix soft lockup from unpadded ASCONF-ACK parameter iteration

Andy Shevchenko <[email protected]>
smb: client: transport: Fix debug printing in __release_mid()

Huiwen He <[email protected]>
smb/client: fix integer truncation in collapse range

Huiwen He <[email protected]>
smb/client: fix data corruption in emulated insert range

ZhangGuoDong <[email protected]>
smb: move copychunk definitions to common/smb2pdu.h

Huiwen He <[email protected]>
smb/client: mark file sparse before emulating insert range

Huiwen He <[email protected]>
smb/client: validate new EOF for zero range

Huiwen He <[email protected]>
smb/client: validate new EOF for insert range

Milan P. Gandhi <[email protected]>
scsi: mpi3mr: Fix target device refcount leak in mpi3mr_sas_port_add()

Milan P. Gandhi <[email protected]>
scsi: mpi3mr: Fix NULL pointer dereference in mpi3mr_sas_port_add()

Xin Long <[email protected]>
sctp: fix a TOCTOU race in SCTP_CMD_TIMER_START

Victor Nogueira <[email protected]>
net/sched: act_api: fix skb sizing and action leak on reoffload delete

Victor Nogueira <[email protected]>
net/sched: act_api: size the RTM_GETACTION reply from the actions

Victor Nogueira <[email protected]>
net/sched: act_api: budget all shared attributes in notify skbs

Dong Chenchen <[email protected]>
net: iptunnel: fix stale transport header during tunnel decapsulation

Eric Dumazet <[email protected]>
tcp: use GFP_ATOMIC in tcp_send_active_reset()

Eric Dumazet <[email protected]>
net: icmp: avoid invalid transport header access in icmp_send tracepoint

Slawomir Stepien <[email protected]>
drm/cirrus-qemu: Validate BAR0 size during probe

Ali Ahmet Memis <[email protected]>
ufs: do not treat unreadable directory blocks as empty

Lizhi Hou <[email protected]>
accel/amdxdna: Remove __counted_by from struct amdxdna_cmd_chain

Sajal Gupta <[email protected]>
drm/gud: validate GUD_ROTATION_0 is present in supported rotations

Jiayuan Chen <[email protected]>
bpf: Fix REG INVARIANTS VIOLATION on speculative pointer arithmetic

Hongfu Li <[email protected]>
selftests/cgroup: Fix cg_run_in_subcgroups ignoring arg parameter

Liang Luo <[email protected]>
sched_ext: Fix nonexistent field in sched-ext.rst example

Xixin Liu <[email protected]>
nvmet-rdma: fix queue leak when connect backlog is exceeded

Xixin Liu <[email protected]>
nvme-rdma: fix -EIO cleanup order in queue_rq

Youssef Samir <[email protected]>
accel/qaic: Address potential out-of-bounds read in resp_worker()

Benjamin Leggett <[email protected]>
drm/virtio: use the DMA API for resource backing on Xen

Dan Carpenter <[email protected]>
drm/virtio: Fix a NULL vs ERR_PTR() bug in virtio_gpu_user_framebuffer_create()

Jad Keskes <[email protected]>
EDAC/device_sysfs: Use kstrtouint() for poll_msec to prevent truncation

Qiuxu Zhuo <[email protected]>
EDAC/igen6: Fix channel address decode for non-hash mode

Qiuxu Zhuo <[email protected]>
EDAC/igen6: Fix channel selection hash

Qiuxu Zhuo <[email protected]>
EDAC/igen6: Fix interleave boundary condition

Yazen Ghannam <[email protected]>
RAS/AMD/ATL, EDAC/amd64: Only load ATL when needed

Russell King (Oracle) <[email protected]>
ARM: ensure interrupts are enabled in __do_user_fault()

Xie Yuanbin <[email protected]>
ARM: 9484/1: enable interrupts when unhandled user faults are triggered

Rafael J. Wysocki <[email protected]>
rtc: cmos: Use platform_get_irq_optional() in cmos_platform_probe()

Kuniyuki Iwashima <[email protected]>
af_unix: Unlink scc_entry in unix_del_edge().

Eric Dumazet <[email protected]>
l2tp: fix tunnel and session refcount leak on seq_file release

Namjae Jeon <[email protected]>
ksmbd: use memcmp() to compare ClientGUIDs

Wei Zhang <[email protected]>
wifi: ath11k: cancel SSR work items during PCI shutdown

HyeongJun An <[email protected]>
ASoC: meson: aiu: Validate written enum values

Cássio Gabriel <[email protected]>
ASoC: topology: Check PCM and DAI name strings before use

Kuniyuki Iwashima <[email protected]>
ipv4: fib: Don't dump dying fib_info in fib_leaf_notify().

Joe Damato <[email protected]>
bnxt: fix head underflow on XDP head-grow

Jiri Olsa <[email protected]>
bpf: Guard __get_user acesss with access_ok for uprobe_multi data

Selvin Xavier <[email protected]>
RDMA/bnxt_re: Proper rollback if the ioremap fails

Jacob Moroni <[email protected]>
RDMA/irdma: Replace waitqueue and flag with completion

Jie Gan <[email protected]>
coresight: platform: defer connection counter increment until alloc succeeds

Abd-Alrhman Masalkhi <[email protected]>
md/raid10: fix writes_pending and barrier reference leaks on discard failures

Xin Long <[email protected]>
sctp: fix err_chunk memory leaks in INIT handling

Nuoqi Gui <[email protected]>
bpf: Mask pseudo pointer values in verifier logs

David Howells <[email protected]>
netfs: Fix barriering when walking subrequest list

Pauli Virtanen <[email protected]>
Bluetooth: ISO: fix malformed ISO_END/CONT handling

Daniel Borkmann <[email protected]>
bpf: Reject redirect helpers without a bpf_net_context

Gregor Herburger <[email protected]>
drm/vc4: hvs/v3d: Fix null dereference in unbind

Cen Zhang (Microsoft) <[email protected]>
tipc: fix integer overflow in tipc_recvmsg() and tipc_recvstream()

Yehyeong Lee <[email protected]>
net: drop_monitor: fix info leak in NET_DM_ATTR_PAYLOAD

Eric Dumazet <[email protected]>
drop_monitor: fix size calculations for 64-bit attributes

Eric Dumazet <[email protected]>
drop_monitor: perform u64_stats updates under IRQ-disabled section

Vlatko Kosturjak <[email protected]>
ppp_async: drop the errored frame instead of resetting its headroom

Max Chou <[email protected]>
Bluetooth: btrtl: Add the support for RTL8761CUV

Manuel Fombuena <[email protected]>
leds: st1202: Validate pattern input before stopping the sequence

Laxman Acharya Padhya <[email protected]>
wifi: mt76: mt7921: skip unknown CLC firmware records

Laxman Acharya Padhya <[email protected]>
wifi: mt76: mt7921: validate CLC firmware records

Wentao Guan <[email protected]>
iommu/arm-smmu-v3: Disable implementations during devm teardown

Gil Portnoy <[email protected]>
ksmbd: remove stale channels from all sessions on teardown

Andrii Nakryiko <[email protected]>
bpftool: Strip all -Wformat* flags from bootstrap libbpf build

Florian Westphal <[email protected]>
netfilter: nfnetlink_log: wait for rcu grace period before freeing pernet state

Lin Xianglin <[email protected]>
ASoC: amd: yc: Add DMI quirk for HyperX OMEN Gaming Laptop 16-ap1xxx

Zizhi Wo <[email protected]>
scsi: core: Do not block on tag allocation in scsi_eh_lock_door()

Rudi Heitbaum <[email protected]>
ASoC: rt5645: Perform the initial jack detect at probe

Jisheng Zhang <[email protected]>
spi: dw: fix wrong RX_SAMPLE_DLY setting after resume

Niklas Cassel <[email protected]>
ata: libata-core: Disable LPM on WDC WD141KFGX-68FH9N0

Guenter Roeck <[email protected]>
hwmon: (corsair-psu) Fix linear11 calculation

Jia Jia <[email protected]>
vhost-scsi: flush backend after device ioctls

Zhang Heng <[email protected]>
ASoC: amd: yc: Add DMI quirk for HP Victus Laptop 16-e1xxx

Hardik Garg <[email protected]>
Drivers: hv: vmbus: add VTL2 redirect connection ID

Niklas Cassel <[email protected]>
ata: libata-core: Disable LPM on WD Green 2.5 480GB

André Pragosa <[email protected]>

    ALSA: hda/realtek: Add mute LED quirk for HP Victus 16-e0xxx (MB 88ED)

Niklas Cassel <[email protected]>
ata: libata-core: Disable LPM on some WD drives

Robert Abrahamse <[email protected]>
ALSA: usb-audio: Add quirk for Corsair Virtuoso (later revision)

Jiale Yao <[email protected]>
Bluetooth: RFCOMM: validate skb length in rfcomm_recv_frame

Deepanshu Kartikey <[email protected]>

    wifi: cfg80211: validate IEs in cfg80211_wext_siwgenie()

Li Qiang <[email protected]>
cifs: validate idmap key payload length

Vaibhav Jain <[email protected]>
powerpc/pseries: Ensure vpa,slb_shadow & dtl are unregistered during crash

Michal Swiatkowski <[email protected]>
ice: pass the return value of skb_checksum_help()

Madhavender Singh <[email protected]>
ALSA: hda/realtek: Add mute LED quirk for HP Laptop 14s-dr1xxx

Markus Lindner <[email protected]>
ALSA: usb-audio: Add dB map quirk for Razer Barracuda X 2.4

Minhong He <[email protected]>
phonet: check register_netdevice_notifier() error in phonet_device_init()

Pengpeng Hou <[email protected]>
drm/gma500: return errors from Oaktrail HDMI I2C reads

Namjae Jeon <[email protected]>
ksmbd: preserve VFS inherited POSIX ACL mask

Ibrahim Hashimov <[email protected]>
wifi: mac80211_hwsim: reject undersized HWSIM_ATTR_TX_INFO

Kamal Wadhwa <[email protected]>
regulator: core: clamp voltage constraints before applying apply_uV

Jay Vadayath <[email protected]>
smb: client: bound dirent name against end of SMB response in cifs_filldir

Georgi Valkov <[email protected]>
wifi: mwifiex: replace one-element arrays with flexible array members

Zhang Heng <[email protected]>
ALSA: hda/realtek: Add HDA_CODEC_QUIRK for Samsung 750XBE/730XBE

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: acpi: validate WGDS table revision index

Daniel C. Ribeiro <[email protected]>
ALSA: usb-audio: Add FIXED_RATE quirk for JBL Quantum650 Wireless

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: bound aligned TLV advance in FW parser

Takashi Iwai <[email protected]>
ALSA: hda/realtek: Add quirk for HP Pavilion x360

Timur Kristóf <[email protected]>
drm/amd/pm/si: Don't schedule thermal work when queue isn't initialized

Pu Hu <[email protected]>
arm64: kprobes: Allow reentering kprobes while single-stepping

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix out-of-bounds tid_data access in BA notif

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: add a check on the tid coming from the firmware

Yu Peng <[email protected]>
arm64: fixmap: Allow 256K early_ioremap() at any offset

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix a possible underflow

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: validate TX_CMD response layout

Charles Keepax <[email protected]>
ASoC: Intel: sof_sdw: Add quirks for new Dell laptops

Huiwen He <[email protected]>
smb/client: flush dirty data before punching a hole

Tao Cui <[email protected]>
blk-cgroup: fix leaks and online flag on radix_tree_insert failure

Marcel Kłos <[email protected]>
ALSA: hda/realtek: Add quirk for HP EliteBook 830 G8 (8AB8) to enable mute LEDs

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: pcie: null RX pointers after free

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix sched scan IE sizing

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: parse beacon notif per layout

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix an off-by-1 boundary check

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: validate mac_link_id in session protect notif

Filipe Manana <[email protected]>
btrfs: fix reloc root cleanup in merge_reloc_roots()

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: validate sta_id in BA window status notif

Wang YuWei <[email protected]>
spi: dw-dma: Wait for controller idle before completing Tx

Filipe Manana <[email protected]>
btrfs: fix use-after-free on reloc root after error in insert_dirty_subvol()

Dave Chen <[email protected]>
btrfs: only account delalloc bytes for regular file inodes in btrfs_getattr()

Pali Rohár <[email protected]>
cifs: Fix support for creating SFU fifo

Richard Fitzgerald <[email protected]>
ALSA: hda: cs35l56: Fail if wmfw file is missing

Rohit Sinha <[email protected]>

    ALSA: hda/realtek - Add quirk for HP Victus 15-fa0xxx (MB 8A50)

Chen Bowen <[email protected]>
ALSA: hda/realtek: Fix speakers on MECHREVO WUJIE Series

ChenXiaoSong <[email protected]>
smb/client: zero-initialize stack-allocated cifs_open_info_data

Pali Rohár <[email protected]>
cifs: Fix support for creating SFU socket

Tianze Shao <[email protected]>
ASoC: rt712-sdca: reset codec at io_init to fix silent headphone

Pengpeng Hou <[email protected]>
wifi: rsi: validate beacon length before fixed buffer copy

Jozsef Kadlecsik <[email protected]>
netfilter: ipset: mark the rcu locked areas properly

Pengpeng Hou <[email protected]>
wifi: libipw: fix key index receive bound checks

Liang Hao <[email protected]>
gpio: dwapb: Mask interrupts at hardware initialization

Pagadala Yesu Anjaneyulu <[email protected]>
wifi: mac80211: ibss: wait for in-flight TX on disconnect

Zhao Li <[email protected]>
wifi: cfg80211: validate rx/tx MLME callback frame lengths before access

Namjae Jeon <[email protected]>
ksmbd: validate SID namespace before mapping IDs

Namjae Jeon <[email protected]>
ksmbd: mark invalid session responses as signed

Namjae Jeon <[email protected]>
ksmbd: find bound sessions during reauthentication

Zhao Li <[email protected]>
wifi: cfg80211: validate assoc response length before status and IE access

Pengpeng Hou <[email protected]>
wifi: libertas: reject short monitor TX frames

Pengpeng Hou <[email protected]>
wifi: rsi: avoid reading TKIP MIC keys for non-TKIP ciphers

Zhao Li <[email protected]>
wifi: mac80211: validate deauth frame length before reason access

Corentin Labbe <[email protected]>
wifi: ralink: RT2X00: init EEPROM properly

Pengpeng Hou <[email protected]>
ALSA: usb-audio: caiaq: validate EP1 reply lengths

Namjae Jeon <[email protected]>
ksmbd: fix credit charge calculation for SMB2 QUERY_INFO

Perry Yuan <[email protected]>
drm/amdgpu: flush pending RCU callbacks on module unload

Jetha Chan <[email protected]>
ASoC: amd: yc: Add Alienware m15 R7 AMD to DMIC quirk table

David Howells <[email protected]>
netfs: Fix decision whether to disallow write-streaming due to fscache use

David Howells <[email protected]>
cachefiles: Fix double fput

Yousef Alhouseen <[email protected]>
xen/gntalloc: validate grant count before allocation

Farhad Alemi <[email protected]>
freevxfs: don't BUG() on unknown typed-extent type

Yousef Alhouseen <[email protected]>
xen/front-pgdir-shbuf: free grant reference head on errors

Qiang Liu <[email protected]>
ksmbd: Fix acl.sd_buf memory leak and invalid sd_size error handling

Qiang Liu <[email protected]>
ksmbd: fix n.data memory leak in ksmbd_vfs_set_dos_attrib_xattr

Gustavo Kenji Mendonça Kaneko <[email protected]>
drm/arm/komeda: fix error handling for clk_prepare_enable() and callers

Shubham Nayak <[email protected]>

    ALSA: hda/realtek: Add quirk for HP Victus 16-e0xxx (88EE) to enable mute LED

Qiang Liu <[email protected]>
ksmbd: fix sd_ndr.data memory leak in ksmbd_vfs_set_sd_xattr

Florian Westphal <[email protected]>
netfilter: nf_conntrack_expect: zero at allocation time

Gustavo Kenji Mendonça Kaneko <[email protected]>
drm/arm/malidp: use clk_bulk API in runtime PM resume and suspend

Weiming Shi <[email protected]>
btrfs: tree-checker: validate INODE_REF's namelen

Praveen Talari <[email protected]>
spi: core: Abort active target transfer on controller suspend

Baojun Xu <[email protected]>
ASoC: tas2781: Update default register address to TAS2563

Haoxiang Li <[email protected]>
fbdev: pm2fb: unwind WC setup on probe failure

Kamlesh Chhetty <[email protected]>
ALSA: hda: Add Lenovo Legion 7i 16IAX7 17AA3874 quirk

Arnd Bergmann <[email protected]>
eth: mlx5: fix macsec dependency

Adriana Stancu <[email protected]>
rtc: bq32000: add delay between RTC reads

Yu Kuai <[email protected]>

    blk-cgroup: protect iterating blkgs with blkcg->lock in blkcg_print_stat()

Runyu Xiao <[email protected]>
net: au1000: move free_irq out of the close-time spinlocked section

Pengpeng Hou <[email protected]>
regulator: da9121: Use subvariant ids in the I2C table

Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Use kstrtobool() to parse the ROM attribute input

Krzysztof Wilczyński <[email protected]>
PCI/proc: Fix race between pci_proc_init() and pci_bus_add_device()

Namjae Jeon <[email protected]>
ksmbd: treat read-control opens as stat opens only for leases

Namjae Jeon <[email protected]>
ksmbd: break RH leases before delete-on-close

Namjae Jeon <[email protected]>
ksmbd: start file id allocation at 1

Namjae Jeon <[email protected]>
ksmbd: deny renaming directory with open children

Namjae Jeon <[email protected]>
ksmbd: apply create security descriptor first

Namjae Jeon <[email protected]>
ksmbd: treat unnamed DATA stream as base file

Namjae Jeon <[email protected]>
ksmbd: use connection ClientGUID for lease lookup

Namjae Jeon <[email protected]>
ksmbd: align SMB2 oplock break ack handling

Namjae Jeon <[email protected]>
ksmbd: validate SMB2 lease create contexts

Namjae Jeon <[email protected]>
ksmbd: fix lease break and ack state handling

Tommy Huang <[email protected]>
rtc: aspeed: add AST2700 compatible

Xue Lei <[email protected]>
rtc: mv: add suspend/resume support for wakeup

Samuel Moelius <[email protected]>
f2fs: validate inline dentry name lengths before conversion

Chris Aherin <[email protected]>
ALSA: hda/realtek: Add quirk for Lenovo Yoga 7 16IAP7

Chen Cheng <[email protected]>
md/raid5: let stripe batch bm_seq comparison wrap-safe

Sebastian Andrzej Siewior <[email protected]>
mailbox: imx: use devm_of_platform_populate()

Sebastian Andrzej Siewior <[email protected]>
mailbox: imx: Add a channel shutdown field

Yu Kuai <[email protected]>
md/raid5: account discard IO

Sebastian Andrzej Siewior <[email protected]>
mailbox: imx: Use devm_pm_runtime_enable()

Peter Zijlstra <[email protected]>
perf: Fix addr_filter_ranges lifetime

Hans Zhang <[email protected]>
PCI: plda: Protect root bus removal with rescan lock

Hans Zhang <[email protected]>
PCI: mediatek: Protect root bus removal with rescan lock

Hans Zhang <[email protected]>
PCI: rockchip: Protect root bus removal with rescan lock

Hans Zhang <[email protected]>
PCI: altera: Protect root bus removal with rescan lock

Hans Zhang <[email protected]>
PCI: iproc: Protect root bus removal with rescan lock

David Francis <[email protected]>
drm/amdkfd: Properly acquire queue buffers in CRIU restore

Jean-Louis Colaco <[email protected]>
ALSA: usb-audio: Add quirk for YAMAHA CDS3000

Timur Kristóf <[email protected]>
drm/amdgpu: Use system unbound workqueue for soft IH ring

Xiaogang Chen <[email protected]>

    drm/amdkfd: check find_first_zero_bit before __set_bit on kfd->doorbell_bitmap

Xiaogang Chen <[email protected]>
drm/amdkfd: Let driver decide buffer size at AMDKFD_IOC_GET_DMABUF_INFO ioctl

Matthew Bystrin <[email protected]>

    mfd: rsmu: Add 8a34002 support

Piotr Kubik <[email protected]>
leds: trigger: gpio: Use GPIOD_FLAGS_BIT_NONEXCLUSIVE

Akashdeep Kaur <[email protected]>
mfd: tps65219: Make poweroff handler conditional on system-power-controller

Tobias Deiminger <[email protected]>
leds: pca9532: Don't stop blinking for non-zero brightness

Yousef Alhouseen <[email protected]>
leds: uleds: Return -EFAULT on copy_to_user() failure

Galen Hassen <[email protected]>
ALSA: hda/conexant: Add pin config quirk for Lenovo IdeaPad Slim 5 16AKP10

Jakub Kicinski <[email protected]>
tls: reject the combination of TLS and sockmap

Ai Chao <[email protected]>
ALSA: usb-audio: Add quirk flags for SC13A

guoqi0226 <[email protected]>
spi: Add NULL check for spi_get_device_id() in spi_get_device_match_data()

Rob Herring (Arm) <[email protected]>
gpio: pisosr: Read "ngpios" as u32

Arnd Bergmann <[email protected]>
scsi: bfa: Reduce kernel stack usage in bfa_fcs_lport_fdmi_build_portattr_block()

Zhang Tianci <[email protected]>

    fuse: set ff->flock only on success

Jiri Kosina <[email protected]>
HID: hidpp: fix potential UAF in hidpp_connect_event()

Yung-Tse Cheng <[email protected]>
virtio-fs: avoid double-free on failed queue setup

Viktor Menshin <[email protected]>
ALSA: hda/realtek: Add quirk for Lenovo Xiaoxin 14 GT

David Timber <[email protected]>
exfat: fix handling of damaged volume in exfat_create_upcase_table()

Rosen Penev <[email protected]>
sparc: Disable compat support with LLD

Leo Yan <[email protected]>
bpftool: Pass host flags to bootstrap libbpf

Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Tolerate i3c_master_add_i3c_dev_locked() failures in DAA

Fredric Cover <[email protected]>
smb: client: fix races in cifsd thread creation

Alice Mikityanska <[email protected]>
net/sched: act_csum: don't mangle UDP tunnel GSO packets

Maxime Bélair <[email protected]>
apparmor: propagate -ENOMEM correctly in unpack_table

Jijie Shao <[email protected]>
net: hns3: improve the unused_tuple parameter setting

Agalakov Daniil <[email protected]>
e1000e: limit endianness conversion to boundary words

Raf Dickson <[email protected]>
vsock: use sk_acceptq_is_full() helper in all transports

Ido Schimmel <[email protected]>
ipv6: Honor oif when choosing nexthop for locally generated traffic

Vadim Fedorenko <[email protected]>
ptp: ocp: add shutdown callback

Nazim Amirul <[email protected]>
net: stmmac: xgmac2: disable RBUE in default RX interrupt mask

Rosen Penev <[email protected]>
sparc64: uprobes: add missing break

Chen Zhang <[email protected]>
Bluetooth: btusb: Add Realtek RTL8922AE VID/PID 0bda/d923

bui duc phuc <[email protected]>
ASoC: rockchip: spdif: Restore regcache cache-only mode on sync failure

bui duc phuc <[email protected]>
ASoC: rockchip: rockchip_pdm: Reorder clock enable sequence

bui duc phuc <[email protected]>
ASoC: rockchip: rockchip_pdm: Handle runtime PM resume failures in set_fmt

Kiran K <[email protected]>
Bluetooth: btintel_pcie: Add 50 ms delay before MAC init on BlazarIW

Samuel Moelius <[email protected]>
Bluetooth: L2CAP: validate connectionless PSM length

Cris <[email protected]>
Bluetooth: btusb: Add support for TP-Link TL-UB250

Chris Lu <[email protected]>

    Bluetooth: btusb: MT7925: Add VID/PID 0e8d/8c38

Rong Zhang <[email protected]>
Bluetooth: btmtk: Disable remote wakeup for MT7922/MT7925

Hrvoje Nuic <[email protected]>
Bluetooth: btusb: Add Mercusys MA530 for Realtek RTL8761BUV

Chen Zhang <[email protected]>
Bluetooth: btusb: Add Realtek RTL8922AE VID/PID 0bda/d922

Ravindra <[email protected]>

    Bluetooth: btusb: Add support for Intel Lizard Peak 2 (0x8087:0x0040)

Chris Lu <[email protected]>

    Bluetooth: btusb: MT7922: Add VID/PID 0e8d/223c

Vadim Fedorenko <[email protected]>
spi: xilinx: let transfers timeout in case of no IRQ

Potin Lai <[email protected]>

    hwmon: (pmbus/lm25066) Fix PMBus coefficients for LM5064/5066/5066i

Tze Yee Ng <[email protected]>
dmaengine: dw-axi-dmac: fix PM for system sleep and channel alloc

Adrian Ng Ho Yin <[email protected]>
dmaengine: altera-msgdma: Use memcpy_toio for descriptor FIFO writes

Jose Ignacio Tornos Martinez <[email protected]>
PCI: Avoid SBR for Qualcomm WCN6855/WCN7850 WiFi, SDX62/SDX65 modems

Armin Wolf <[email protected]>
hwmon: (dell-smm) Add Dell Latitude 7530 to fan control whitelist

Dave Carey <[email protected]>
HID: multitouch: Honor ContactCount for Yoga Book 9 to suppress ghost contacts

Yuho Choi <[email protected]>
sctp: Unwind address notifier registration on failure

Mohamed Khalfella <[email protected]>
nvme-fc: Do not cancel requests in io target before it is initialized

Nikolay Metchev <[email protected]>
platform/x86: intel-hid: Add HP ProBook x360 440 G1 to button_array_table

Xu Rao <[email protected]>
ata: libata-pmp: add JMicron JMS562 quirk

Moritz Baron <[email protected]>
ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IRH8

Furst Blumier <[email protected]>
ALSA: hda/realtek: Add quirk for HP 255 15.6 inch G9 Notebook PC

Vamsi Attunuru <[email protected]>
vdpa/octeon_ep: Use 4 bytes for mailbox signature

Evgenii Burenchev <[email protected]>
vdpa/ifcvf: handle dev_set_name() failure in ifcvf_vdpa_dev_add()

Guangshuo Li <[email protected]>
net: lan966x: restore RX state on reload failure

George Moussalem <[email protected]>
net: dsa: qca8k: Add support for force mode for fixed link topology

Ben Maurer <[email protected]>
btrfs: use lockless read in nr_cached_objects shrinker callback

Anand Jain <[email protected]>
btrfs: use on-disk uuid for s_uuid in temp_fsid mounts

Kory Maincent <[email protected]>
hwmon: (adt7462) Add of_match_table to support devicetree

Shubham Chakraborty <[email protected]>
hwmon: (raspberrypi) Fix delayed-work teardown race

Jose Ignacio Tornos Martinez <[email protected]>
PCI: Avoid FLR for MediaTek MT7925 WiFi

Lu Yao <[email protected]>
fbcon: don't suspend/resume when vc is graphics mode

KangNing Liao <[email protected]>
btrfs: protect sb_write_pointer() with invalidate lock

Breno Leitao <[email protected]>
netconsole: take target_cleanup_list_lock in drop_netconsole_target()

Jiajia Liu <[email protected]>
wifi: mt76: transform aspm_conf for pci_disable_link_state

Javier Tia <[email protected]>

    wifi: mt76: mt7925: add 320MHz bandwidth to bss_rlm_tlv

Javier Tia <[email protected]>
wifi: mt76: mt7925: populate EHT 320MHz MCS map in sta_rec

Devin Wittmayer <[email protected]>

    wifi: mt76: mt7925: add Netgear A8500 USB device ID

Luis de Carlos <[email protected]>
platform/x86: msi-ec: Add support for MSI Pulse GL66 12th Gen

Javier Tia <[email protected]>
wifi: mt76: mt7925: handle 320MHz bandwidth in RXV and TXS

Gleb Sonichev <[email protected]>
platform/x86: dell-laptop: add Inspiron N5110 to touchpad LED quirk table

Chuck Lever <[email protected]>
tls: Flush backlog before waiting for a new record

Rosen Penev <[email protected]>
net: ibm: emac: mal: fix potential system hang in mal_remove()

Nikhil P. Rao <[email protected]>
pds_core: quiesce DMA before freeing resources

Al Viro <[email protected]>
configfs_depend_prep(): pass configfs_dirent instead of dentry

Jason Gunthorpe <[email protected]>
RDMA/mlx5: Create ODP EQ for non-pinned dmabuf MRs

Chuck Lever <[email protected]>
xprtrdma: Add request-pool slack for delayed recycling

Aurelien DESBRIERES <[email protected]>
RDMA/rtrs-srv: Fix integer underflow in process_read and process_write

Tuo Li <[email protected]>
ASoC: mediatek: mt8365-afe-pcm: fix possible NULL-pointer dereferences in mt8365_afe_suspend()

Dai Ngo <[email protected]>
NFS: fix eof updates after NFSv4.2 fallocate/zero-range

Zhang Cen <[email protected]>
btrfs: tree-checker: validate names in ROOT_REF and ROOT_BACKREF

ZhengYuan Huang <[email protected]>
btrfs: balance: fix potential bg lookup failure in btrfs_may_alloc_data_chunk()

Osama Abdelkader <[email protected]>
riscv: panic if IRQ handler stacks cannot be allocated

Rosen Penev <[email protected]>
netfilter: nf_conntrack: use get_unaligned_be32() in tcp_sack()

Ruoyu Wang <[email protected]>
ALSA: es18xx: check control allocation before private data setup

Haoxiang Li <[email protected]>
net: microchip: sparx5: clean up PSFP resources on flower setup failure

Maoyi Xie <[email protected]>
hsr: broadcast netlink notifications in the device's net namespace

Guangshuo Li <[email protected]>
net: cpsw_new: unregister devlink on port registration failure

Dawei Feng <[email protected]>
bpf: NUL-terminate replaced sysctl value

Li RongQing <[email protected]>
RDMA/mlx5: Fix state and counter desync on loopback enable failure

Genevieve Chan <[email protected]>
firmware: stratix10-svc: fix FCS SMC call kernel-doc

Jason Gunthorpe <[email protected]>
RDMA/umem: Make ib_umem_is_contiguous() safe on 32 bit

Jason Gunthorpe <[email protected]>
RDMA/umem: Be careful about boundary conditions in ib_umem_find_best_pgsz()

Thiyagarajan Pandiyan <[email protected]>
wifi: nl80211: Increase ie_len size to prevent truncated IEs in new peer notifications

Runyu Xiao <[email protected]>
ipv6: use READ_ONCE() for bindv6only default in inet6_create()

Yongqiang Sun <[email protected]>
drm/amdkfd: Unwind debug trap enable on copy_to_user failure

Yongqiang Sun <[email protected]>
drm/amdkfd: fix SMI event cross-process information leak

Jakub Kicinski <[email protected]>
net: ethtool: cmis_cdb: hold instance lock for ops locked devices

Borislav Petkov (AMD) <[email protected]>
x86/microcode/AMD: Move the no-revision fixup to get_patch_level()

Koba Ko <[email protected]>
cxl/region: Validate partition index before array access

Rosen Penev <[email protected]>
ipmi: si: Use platform_get_irq_optional() to retrieve interrupt

Zide Chen <[email protected]>
perf/x86/intel/uncore: Guard against invalid box control address

Andrei Faleichyk <[email protected]>
ALSA: hda/realtek: Add quirk for ASUS VivoBook X509DAP

Evelyn Ali <[email protected]>
ALSA: hda/realtek: ALC882: Fixup for Clevo P775TM1

Michael Walle <[email protected]>
clk: keystone: don't cache clock rate

Rosen Penev <[email protected]>
net: ibm: emac: fix unchecked platform_get_irq return value

Shay Drory <[email protected]>
net/mlx5: E-Switch, align disable sequence with switchdev-to-legacy transition

Yunxiang Li <[email protected]>
drm/amdgpu/ras: add ras_suspend callback and use it for cp_ecc_error_irq

Cyrill Gorcunov <[email protected]>
RDMA/irdma: Fix typo in SQ completions generation

Shay Drory <[email protected]>
net/mlx5e: Verify unique vhca_id count instead of range

Candice Li <[email protected]>
drm/amdgpu: validate RAS EEPROM tbl_size before record count

Shiwu Zhang <[email protected]>
drm/amdgpu: fix buffer overflow during vBIOS update

Candice Li <[email protected]>
drm/amdgpu/pm: fix SmartShift bias sysfs store PM refcount on parse error

Asad Kamal <[email protected]>
drm/amd/pm: bound pp_dpm_set_pp_table() memcpy

Stanley.Yang <[email protected]>
drm/amdgpu: harden FRU PIA parsing with bounded helpers

Alysa Liu <[email protected]>
drm/amdkfd: fix UAF race in destroy_queue_cpsch

Samson Tam <[email protected]>
drm/amd/display: Check for sharpening case when calculating max vtaps for scaler

Mathias Nyman <[email protected]>
xhci: Prevent queuing new commands if xhci is inaccessible

Ilya Bakoulin <[email protected]>
drm/amd/display: Avoid DPMS-on for phantom stream

Niklas Neronin <[email protected]>
usb: xhci: remove legacy 'num_trbs_free' tracking

Michal Pecio <[email protected]>
usb: xhci: Improve Soft Retries after short transfers

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: add support for AX231

Johannes Berg <[email protected]>
wifi: iwlwifi: mvm: fix P2P-Device binding handling

Johannes Berg <[email protected]>
wifi: iwlwifi: mld: don't WARN on WoWLAN suspend w/o netdetect

Johannes Berg <[email protected]>

    wifi: cfg80211: harden cfg80211_defragment_element()

Johannes Berg <[email protected]>
wifi: mac80211: unify link STA removal in vif link removal

Johannes Berg <[email protected]>
wifi: mac80211: clarify beacon parsing with MBSSID/EMA

liuxixin <[email protected]>
nvme: validate FDP configuration descriptor sizes

Priyansh Jain <[email protected]>
thermal/drivers/qcom/tsens: Atomic temperature read with hardware-guided retries

Ping-Ke Shih <[email protected]>

    wifi: rtw89: 8851bu: add Mercusys MA60XNB (2c4e:0128)

Ioana Ciornei <[email protected]>
dpaa2-switch: fix handling of NAPI on the remove path

David Yang <[email protected]>
net: dsa: sja1105: flower: reject cross-chip redirect

Ioana Ciornei <[email protected]>
dpaa2-switch: fix the error path in dpaa2_switch_rx()

Ioana Ciornei <[email protected]>
dpaa2-switch: rework FDB management on the bridge leave path

Cássio Gabriel <[email protected]>
ALSA: seq: oss: Reject reads that cannot fit the next event

Cássio Gabriel <[email protected]>
ASoC: codecs: rk3328: Use managed GPIO and clock helpers

Alessandro Schino <[email protected]>
ntfs3: fix out-of-bounds read in ntfs_dir_emit() and hdr_find_e()

ZhengYuan Huang <[email protected]>
fs/ntfs3: validate index entry key bounds

Yao Sang <[email protected]>
nvme: refresh multipath head zoned limits from path limits

ZhengYuan Huang <[email protected]>
fs/ntfs3: preserve non-DOS attribute bits in system.dos_attrib

Adriano Vero <[email protected]>
powerpc/fadump: Add timeout to RTAS busy-wait loops

Simon Xue <[email protected]>
iommu/rockchip: disable fetch dte time limit

Chenguang Zhao <[email protected]>
net: txgbe: fix phylink leak on AML init failure

Jose Ignacio Tornos Martinez <[email protected]>
net: wwan: t7xx: Add delay between MD and SAP suspend

Wentao Liang <[email protected]>
net: qrtr: fix node refcount leak on ctrl packet alloc failure

Shivang Upadhyay <[email protected]>
ppc/fadump: invoke kmsg_dump in fadump panic path

Chen Pei <[email protected]>
ACPI: PCI: Clear _DEP dependencies after PCI root bridge attach

Chen Pei <[email protected]>
ACPI: scan: Honor _DEP for ACPI0016 PCI/CXL host bridge

liyouhong <[email protected]>
ata: ahci: fail probe if BAR too small for claimed ports

Aditya Kumar Singh <[email protected]>
wifi: ath12k: Prevent incorrect vif chanctx switch when handling multi-radio contexts

Cezary Rojewski <[email protected]>
ASoC: codecs: pcm3168a: Drop CONFIG_PM-conditional preproc directive

Srinivas Kandagatla <[email protected]>
ASoC: qcom: q6apm: return error code to consumers on failures

Cezary Rojewski <[email protected]>
ASoC: codecs: pcm3168a: Prevent regulator double-disable in S4

Miaoqing Pan <[email protected]>
wifi: ath11k: fix invalid data access in ath11k_dp_rx_h_undecap_nwifi

Rosen Penev <[email protected]>
net: ibm: emac: Reserve VLAN header in MJS limit

Aaron Kling <[email protected]>
spi: tegra210-quad: Allocate DMA memory for DMA engine

Daniel Borkmann <[email protected]>
libbpf: Also reset {insn,data}_cur on realloc failure

Sanjay Chitroda <[email protected]>
iio: accel: mma8452: switch to non-devm request_threaded_irq()

Rik van Riel <[email protected]>
perf/ftrace: Fix WARNING in __unregister_ftrace_function

Miao Li <[email protected]>
iio: light: stk3310: Deal with the ps interrupt issue in PM

Loic Poulain <[email protected]>
media: qcom: camss: vfe-340: Proper client handling

Denzeel Oliva <[email protected]>
clk: samsung: exynos990: Fix PERIC0/1 USI clock types

Lad Prabhakar <[email protected]>
mmc: renesas_sdhi: Add OF entry for RZ/G2E SoC

Karl Mehltretter <[email protected]>
tracing: Disable KCOV instrumentation for trace_irqsoff.o

Ion Agorria <[email protected]>
ARM: tegra: p880: Lower CPU thermal limit

Lad Prabhakar <[email protected]>
mmc: renesas_sdhi: Add OF entry for RZ/G2N SoC

Svyatoslav Ryhel <[email protected]>
ARM: tegra: tf600t: Invert accelerometer calibration matrix

Osama Abdelkader <[email protected]>
mmc: davinci: fix mmc_add_host order in probe

Bard Liao <[email protected]>
soundwire: only handle alert events when the peripheral is attached

Andreas Gruenbacher <[email protected]>
gfs2: page poisoning fix

Charles Keepax <[email protected]>
soundwire: dmi-quirks: Disable ghost Realtek devices

Kartik Rajput <[email protected]>
soc/tegra: fuse: Register nvmem lookups at probe

Tiezhu Yang <[email protected]>
libbpf: Add __NR_bpf definition for LoongArch

Timur Tabi <[email protected]>
drm/nouveau/bios: skip the IFR header if present

Cezary Rojewski <[email protected]>
ASoC: Intel: catpt: Complete coredump handling

Ricardo Neri <[email protected]>
x86/topology: Add missing struct declaration and attribute dependency

Timur Tabi <[email protected]>
drm/nouveau/gsp: add SEC2 to GA100 chip table

Alexandre Courbot <[email protected]>
scripts: modpost: detect and report truncated buf_printf() output

shayderrr <[email protected]>
host1x: bus: Fix missing ops null check in error teardown

Claudiu Beznea <[email protected]>
pinctrl: renesas: rzv2m: Use -ENOTSUPP instead of -EOPNOTSUPP

Wei Qisen <[email protected]>
net: sfp: add quirk for OEM 2.5G optical modules

Viacheslav Dubeyko <[email protected]>
hfs: rework hfsplus_readdir() logic

ikaros <[email protected]>
ACPICA: add boundary checks in two places

ikaros <[email protected]>
ACPICA: Enhance buffer validation in acpi_ut_walk_aml_resources()

Weiming Shi <[email protected]>
ACPICA: Fix NULL pointer dereference in acpi_ns_custom_package()

ikaros <[email protected]>
ACPICA: Enhance OEM ID and Table ID validation in acpi_ex_load_table_op()

ikaros <[email protected]>
ACPICA: Add validation for node in acpi_ns_build_normalized_path()

ikaros <[email protected]>
ACPICA: Add package limit checks in parser functions

ikaros <[email protected]>
ACPICA: validate handler object type in two places

ikaros <[email protected]>
ACPICA: Improve argument parsing in acpi_ps_get_next_simple_arg()

ikaros <[email protected]>
ACPICA: Fix integer overflow in acpi_ex_opcode_3A_1T_1R() (mid_op)

ikaros <[email protected]>
ACPICA: Prevent adding invalid references

ikaros <[email protected]>
ACPICA: validate byte_count in acpi_ps_get_next_package_length()

ikaros <[email protected]>
ACPICA: add boundary checks in acpi_ps_get_next_field()

ikaros <[email protected]>
ACPICA: Fix use-after-free in acpi_ds_terminate_control_method()

ikaros <[email protected]>
ACPICA: Fix condition check in acpi_ps_parse_loop()

Ivan Lipski <[email protected]>
drm/amd/display: Initialize dsc_caps to 0

Jeremy Klarenbeek <[email protected]>
drm/amd/pm/si: Fix updating clock limits from power states

Imre Deak <[email protected]>
drm/dp: Add DSC virtual DPCD quirk for Realtek MST branch device

Johny Lin <[email protected]>
ALSA: hda: cs35l41: imply SERIAL_MULTI_INSTANTIATE

Haoxiang Li <[email protected]>
net: thunderx: fix PTP device ref leak in nicvf_probe()

Martin Karsten <[email protected]>
net: napi: Skip last poll when arming gro timer in busy poll

Fernando Fernandez Mancera <[email protected]>
ipv6: addrconf: fix temp address generation after prefix deprecation

Luka Gejak <[email protected]>
net: hsr: require valid EOT supervision TLV

Uwe Küchler <[email protected]>
ALSA: usb-audio: Add quirk for Novation Mininova

Mostafa Saleh <[email protected]>
irqchip/gic-v4: Don't advertise VLPIs if no ITS is probed

Stepan Ionichev <[email protected]>
iio: adc: qcom-spmi-iadc: balance enable_irq_wake() on driver unbind

Rosen Penev <[email protected]>
mips: cps: Assemble jr.hb with an R2 ISA level

Dario Binacchi <[email protected]>

    drm/panel: simple: Add AM-1280800W8TZQW-T00H

Thomas Gleixner <[email protected]>
genirq/manage: Make NMI cleanup RT safe

Sumeet Pawnikar <[email protected]>
powercap: intel_rapl: Fix memory leak in rapl_add_package_cpuslocked()

Avinash Bhatt <[email protected]>
wifi: iwlwifi: mld: keep healthy link on EMLSR missed beacon exit

Miri Korenblit <[email protected]>
wifi: iwlwifi: mld: purge async notifications upon nic error

Pagadala Yesu Anjaneyulu <[email protected]>
wifi: iwlwifi: mld: disallow puncturing in US/CA for WH

Johannes Berg <[email protected]>
wifi: iwlwifi: pcie: add two LNL PCI IDs

Avinash Bhatt <[email protected]>
wifi: iwlwifi: Transition to basic uAPSD with MAC_PM_POWER_TABLE API VER_3

Avraham Stern <[email protected]>
wifi: iwlwifi: mld: call iwl_mld_free_ap_early_key() for AP only

Johannes Berg <[email protected]>
wifi: iwlwifi: pcie: fix ACPI DSM check

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mld: honor BSS_CHANGED_BEACON_ENABLED

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: fix the access to CNVR TOP registers

Daniel Lezcano <[email protected]>
thermal/drivers/tegra/soctherma: Switch to devm cooling device registration

Adrian Ng Ho Yin <[email protected]>
clk: socfpga: agilex: implement l3_main_free_clk

Heiko Carstens <[email protected]>
s390/zcore: Removed unused variables

Jiayuan Chen <[email protected]>
rds: annotate data-race around rs_seen_congestion

Maoyi Xie <[email protected]>
rds: filter RDS_INFO_* getsockopt by caller's netns

Cássio Gabriel <[email protected]>
ALSA: seq: Remove arbitrary prioq insertion limit

Tao Cui <[email protected]>
RDMA/counter: Fix num_counters leak on bind_qp failure in alloc_and_bind()

Chenguang Zhao <[email protected]>
netlabel: fix IPv6 unlabeled address add error handling

Dian-Syuan Yang <[email protected]>
wifi: rtw89: pci: enable LTR based on pcie control register

Sicong Huang <[email protected]>
virt: acrn: Fix irqfd use-after-free during eventfd shutdown

Zqiang <[email protected]>
rcu-tasks: Fix possible boot-time tests failed for the call_rcu_tasks()

Shiji Yang <[email protected]>
pwm: mediatek: set mt7628 pwm45_fixup flag to false

Sascha Bischoff <[email protected]>
irqchip/gic-v5: Immediately exec priority drop following activate

Dave Penkler <[email protected]>
gpib: Suppress setting END on error from NI_USB dongle

Venkat Rao Bagalkote <[email protected]>
char/nvram: Remove redundant nvram_mutex

Thorsten Blum <[email protected]>
crypto: atmel-sha204a - remove sysfs group before hwrng

Herve Codina <[email protected]>
driver core: Avoid warning when removing a device while its supplier is unbinding

Stepan Ionichev <[email protected]>

    tty: serial: 8250: protect against NULL uart->port.dev in register

Christian Marangi <[email protected]>
usb: host: add ARCH_AIROHA in XHCI MTK dependency

Marco Felsch <[email protected]>
serial: 8250: fix possible ISR soft lockup

Maoyi Xie <[email protected]>
usb: gadget: aspeed_udc: avoid past-the-end iterator in dequeue

Dave Carey <[email protected]>
USB: cdc-acm: start bulk-IN polling when ALWAYS_POLL_CTRL is set

Stepan Ionichev <[email protected]>

    usb: gadget: goku_udc: avoid NULL deref of dev->driver in INT_USBRESET log

Oliver Neukum <[email protected]>
usb: core: hcd: fix possible deadlock in rh control transfers

Adrian Wowk <[email protected]>
usbip: vhci_hcd: fix NULL deref in status_show_vhci

Jérôme de Bretagne <[email protected]>

    drm/panel-edp: Add LG LP129WT232166 panel

Nikhil Chatterjee <[email protected]>
HID: bpf: Add Huion Inspiroy Frego M button quirk

Christoph Hellwig <[email protected]>
isofs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
omfs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
hpfs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
jfs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
qnx4: handle set_blocksize failures

Christoph Hellwig <[email protected]>
minix: handle set_blocksize failures

Christoph Hellwig <[email protected]>
bfs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
affs: handle set_blocksize failures

Christoph Hellwig <[email protected]>
ntfs3: handle set_blocksize failures

Christoph Hellwig <[email protected]>
befs: handle set_blocksize failures

Thomas Lin <[email protected]>
spi: dw-mmio: Add ACPI ID LECA0002 for LECARC SoCs

Moshe Shemesh <[email protected]>
net/mlx5: Switch vport HCA cap helpers to kvzalloc

Allison Henderson <[email protected]>
net/rds: Don't sleep inside rds_ib_conn_path_shutdown

Eric Dumazet <[email protected]>

    net/sched: sch_drr: make cl->quantum lockless

Eric Dumazet <[email protected]>
net: bridge: remove stale rcu_barrier() in br_multicast_dev_del()

Jan Volckaert <[email protected]>
net: usb: qmi_wwan: add MeiG SRM813Q

Matthew Leach <[email protected]>
PM: hibernate: call preallocate_image() after freeze prepare

Maurizio Lombardi <[email protected]>
nvme-core: align fabrics_q teardown with admin_q in nvme_free_ctrl

Yury Norov <[email protected]>
bitfield: wire __bf_shf to __builtin_ctzll

Gil Fine <[email protected]>
thunderbolt: Verify Router Ready bit is set after router enumeration

Miri Korenblit <[email protected]>
wifi: mac80211: don't call ieee80211_handle_reconfig_failure when not needed

Gil Fine <[email protected]>
thunderbolt: Increase timeout for Configuration Ready bit

Sudeep Holla <[email protected]>
firmware: arm_scmi: Validate BASE_ERROR_EVENT payload size

Sudeep Holla <[email protected]>
firmware: arm_scmi: Validate SENSOR_UPDATE payload size

Gil Fine <[email protected]>
thunderbolt: Verify PCIe adapter in detect state before tunnel setup

Alan Borzeszkowski <[email protected]>
thunderbolt: Improve multi-display DisplayPort tunnel allocation

Pooja Katiyar <[email protected]>
thunderbolt: Don't access path config space on Lane 1 adapters in tb_switch_reset_host()

Ido Schimmel <[email protected]>
bridge: Add missing READ_ONCE() annotations around FDB destination port

YiPeng Chai <[email protected]>
drm/amdgpu: check and drop invalid bad page records

Ce Sun <[email protected]>
drm/amdgpu: avoid integer overflow in VA range check

Candice Li <[email protected]>
drm/amdgpu: Bound GPIO I2C table entry count from VBIOS

Gangliang Xie <[email protected]>
drm/amdgpu: add first record offset check

Candice Li <[email protected]>
drm/amdgpu: validate and share PSP fw_pri_buf copies via psp_copy_fw

Candice Li <[email protected]>
drm/amdgpu: cap ATOM command table nesting depth

Xiang Liu <[email protected]>
drm/amd/ras: reset CPER ring on corrupt entry size

Pierre Barre <[email protected]>
9p: use kvzalloc for readdir buffer

Brajesh Gupta <[email protected]>
drm/imagination: Populate FW common context ID before passing to the FW

Leonardo Bras <[email protected]>
arm64/daifflags: Make local_daif_*() helpers __always_inline

Osama Abdelkader <[email protected]>
arm64: panic from init_IRQ if IRQ handler stacks cannot be allocated

Pierre Barre <[email protected]>
9p: invalidate readdir buffer on seek

Brajesh Gupta <[email protected]>
drm/imagination: Don't timeout job if its fence has been signaled

Anna Maniscalco <[email protected]>
iommu: arm-smmu-qcom: Ensure smmu is powered up in set_ttbr0_cfg

Andrea Righi <[email protected]>
sched/fair: Reject misfit pulls onto busy SMT siblings on asym-capacity

Sunil Khatri <[email protected]>
drm/amdgpu: use atomic operation to achieve lockless serialization

Cássio Gabriel <[email protected]>
ALSA: usx2y: Drain pending US-428 pipe-4 output commands

Cássio Gabriel <[email protected]>
ALSA: ice1724: Fix blocking open for independent surround PCMs

Ezio Galeazzi <[email protected]>
ALSA: hda/ca0132: add QUIRK_GENERIC path for Gigabyte GA-Z170X-Gaming G1

David Francis <[email protected]>
drm/amdkfd: Check bounds on allocate_doorbell

Sunday Clement <[email protected]>
drm/amdkfd: Fix OOB memory exposure in get_wave_state()

David Francis <[email protected]>
drm/amdkfd: Check bounds for allocate_sdma_queue restore_sdma_id

Bjorn Helgaas <[email protected]>

    PCI: Wait for device readiness after D3hot -> D0uninitialized transition

Sunil Khatri <[email protected]>
drm/amdgpu/userq: pin mqd and fw object bo to avoid eviction

Joonwon Kang <[email protected]>
mailbox: Make mbox_send_message() return error code when tx fails

Christoph Hellwig <[email protected]>
iomap: don't make REQ_POLLED imply REQ_NOWAIT

Luca Leonardo Scorcia <[email protected]>
drm/mediatek: dsi: Add compatible for mt8167-dsi

Leo Yan <[email protected]>
coresight: Disable source helpers in coresight_disable_path()

Leo Yan <[email protected]>
coresight: perf: Retrieve path and source from event data

Chenguang Zhao <[email protected]>
RDMA/mlx5: Use QP port when decoding responder CQEs

Alessandro Baldi <[email protected]>
media: imon: Add iMON VFD HID OEM v1.2 key mappings

Alexander Koskovich <[email protected]>
clk: qcom: clk-rpmh: Make all VRMs optional

Lorenzo Bianconi <[email protected]>
net: airoha: Reserve RX headroom to avoid skb reallocation

Thorsten Blum <[email protected]>
crypto: atmel-ecc - add support for atecc608b

Bard Liao <[email protected]>
ASoC: Intel: sof_sdw: append dai type to dai link name unconditionally

Lukas Wunner <[email protected]>
crypto: ecc - Unbreak the build on arm with CONFIG_KASAN_STACK=y

Kumar Meiyappan <[email protected]>
scsi: pm8001: Reject non-fatal dump when controller is crashed

Kumar Meiyappan <[email protected]>
scsi: pm8001: Reject firmware update in fatal error state

Alexey Klimov <[email protected]>
clk: samsung: exynos850: mark APM I3C clocks as critical

Peter Ujfalusi <[email protected]>
soundwire: intel: Move suspend tracking from trigger to pm suspend

Pengpeng Hou <[email protected]>
drivers/of: validate status properties in reconfig state changes

Pengpeng Hou <[email protected]>
drivers/of: validate live-tree string properties before string use

Stefan Berger <[email protected]>
integrity: Check for NULL returned by asymmetric_key_public_key

Mieczyslaw Nalewaj <[email protected]>
net: dsa: realtek: rtl8365mb: add support for RTL8367SB

Ping-Ke Shih <[email protected]>
wifi: rtw89: phy: check length before parsing PHY status IE

Dave Carey <[email protected]>
HID: multitouch: Fix Yoga Book 9 14IAH10 touchscreen misclassification

Chen-Yu Tsai <[email protected]>

    drm/panel-edp: Add AUO B133HAN06.6 and BOE NV133FHM-N4F V8.0

Javier Achirica <[email protected]>
bus: mhi: host: pci_generic: Round up nr_irqs to power of two

Arash Golgol <[email protected]>
media: video-i2c: use vb2_video_unregister_device on driver removal

Ricardo Ribalda <[email protected]>
media: chips-media: wave5: Add range checks for dec_output_info

Sophie D <[email protected]>
drm/gud: Add RCade Display Adapter VID/PID pair

chunzhi.lin <[email protected]>
net: phy: motorcomm: use device properties for firmware tuning

Viacheslav Dubeyko <[email protected]>
hfsplus: rework hfsplus_readdir() logic

Florian Eckert <[email protected]>
PCI: intel-gw: Enable clock before PHY init

Xiang Liu <[email protected]>
drm/amd/ras: Fix CPER ring debugfs read overflow

Chen-Yu Tsai <[email protected]>
pinctrl: mediatek: common-v1: bypass pinctrl GPIO layer in set GPIO direction

Chen-Yu Tsai <[email protected]>
pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction

Tom Chung <[email protected]>
drm/amd/display: Fix CRC open failure during active rendering

Brodie Abrew <[email protected]>
platform/x86: sel3350-platform: Retain LED state on load and unload

Stepan Ionichev <[email protected]>

    mmc: davinci: avoid NULL deref of host->data in IRQ handler

Manuel Lauss <[email protected]>
serial: 8250_port: recognize UPIO_AU

Pengpeng Hou <[email protected]>
genirq/proc: Size interrupt directory names for 10-digit interrupt numbers

Shawn Lin <[email protected]>
mmc: core: Add validation for host-provided max_segs

Albert Esteve <[email protected]>
drm/panel/tdo-tl070wsh30: Use refcounted allocation in place of devm_kzalloc()

Tzung-Bi Shih <[email protected]>
platform/chrome: Resolve kb_wake_angle visibility race

Yevgeny Kliteynik <[email protected]>
net/mlx5: HWS, Handle destroying table that has a miss table

Yevgeny Kliteynik <[email protected]>
net/mlx5: HWS, Check if device is down while polling for completion

Mark Pearson <[email protected]>
watchdog: lenovo_se10_wdt: Fix use-after-free and resource leak risk

Ranjani Vaidyanathan <[email protected]>
watchdog: imx7ulp_wdt: Keep WDOG running until A55 enters WFI on i.MX94

Mark Pearson <[email protected]>
watchdog: lenovo_se10_wdt: Add support for SE10 Gen 2 platform

Ethan Nelson-Moore <[email protected]>
ASoC: ti: omap3pandora: update board check to use DT compatible

Wesley Cheng <[email protected]>
phy: qcom: m31-eusb2: Make USB repeater optional

Terry Hsiao <[email protected]>

    drm/panel-edp: Add BOE NT140WHM-N4T, BOE NT140WHM-T05, BOE NV140FHM-N40

Terry Hsiao <[email protected]>

    drm/panel-edp: Add AUO B140XTN07.5, AUO B140HAK03.5, AUO B116XTN02.3, AUO B140XTK02.4, AUO B140HAN07.7

Moshe Shemesh <[email protected]>
net/mlx5: Relax capability check for eswitch query paths

Arnd Bergmann <[email protected]>
media: qcom: camss: avoid format string warning

Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Add CAP_SYS_ADMIN check to __resource_resize_store()

Ziyi Guo <[email protected]>
dlm: add usercopy whitelist to dlm_cb cache

Parth Pancholi <[email protected]>
drm/bridge: tc358768: Set pre_enable_prev_first for reverse order

Geert Uytterhoeven <[email protected]>
clk: renesas: cpg-mssr: Add number of clock cells check

Thorsten Blum <[email protected]>
crypto: omap - add omap_des_unregister_algs helper

Ruoyu Wang <[email protected]>
crypto: ixp4xx - fix buffer chain unwind on allocation failure

Justin Lai <[email protected]>
rtase: Fix flow control configuration

Johannes Berg <[email protected]>
wifi: mac80211: explicitly disable FTM responder on AP stop

Haoxiang Li <[email protected]>
media: em28xx-video: fix missing res_free() on init_usb_xfer failure

Marek Behún <[email protected]>
net: dsa: mv88e6xxx: enable .rmu_disable() for 6320 family

Paul Cercueil <[email protected]>
media: v4l2-common: Always register clock with device-specific name

Marek Behún <[email protected]>

    net: dsa: mv88e6xxx: define .pot_clear() for 6321

Ben Reed <[email protected]>
PCI: switchtec: Add Gen6 Device IDs

Marek Behún <[email protected]>
net: dsa: mv88e6xxx: fix number of g1 interrupts for 6320 family

Zhaoyang Yu <[email protected]>
media: dm1105: fix missing error check for dma_alloc_coherent

David Heidelberg <[email protected]>
drm/panel: Enable GPIOLIB for panels which uses functions from it

Lijo Lazar <[email protected]>
drm/amdgpu: Prefer ROM BAR for default VGA device

Ovidiu Bunea <[email protected]>
drm/amd/display: Find link encoder for flexible DIG mapping cases

Alan Borzeszkowski <[email protected]>
thunderbolt: Don't create multiple DMA tunnels on firmware connection manager

Mika Westerberg <[email protected]>

    thunderbolt: Set tb->root_switch to NULL when domain is stopped

Mika Westerberg <[email protected]>
thunderbolt: Keep the domain reference while processing hotplug

Mika Westerberg <[email protected]>
thunderbolt: Keep XDomain reference during the lifetime of a service

Mika Westerberg <[email protected]>
thunderbolt: Release request if tb_cfg_request() fails in __tb_xdomain_response()

Mika Westerberg <[email protected]>
thunderbolt: Don't disable lane adapter if XDomain lane bonding isn't possible

Gil Fine <[email protected]>
thunderbolt: Avoid reserved fields in path config space for USB4 routers

Miri Korenblit <[email protected]>
wifi: mac80211: avoid out-of-bounds access in monitor

Ken Lin <[email protected]>
media: platform: cros-ec: Add Kulnex and Moxoe to the match table

Vineeth Vijayan <[email protected]>
s390/cio: Purge based on the cdev's online status

Erni Sri Satya Vennela <[email protected]>
net: mana: hardening: Reject zero max_num_queues from MANA_QUERY_VPORT_CONFIG

Riccardo Boninsegna <[email protected]>
media: rc: mceusb: Add support for 04eb:e033

Viken Dadhaniya <[email protected]>
spi: spi-qcom-qspi: Fix incomplete error handling in runtime PM

Benjamin Marzinski <[email protected]>
dm-raid: only requeue bios when dm is suspending

Brandon Brnich <[email protected]>
media: chips-media: wave5: Release m2m_ctx after Instance Removed from List

Brandon Brnich <[email protected]>
media: chips-media: wave5: Fix Reports from Kernel Lock Validator

Pengpeng Hou <[email protected]>
soundwire: validate DT compatible before parsing it

Charles Keepax <[email protected]>
soundwire: intel_auxdevice: Add cs42l43b to wake_capable_list

Danielle Ratson <[email protected]>
bridge: Do not suppress ARP probes and DAD NS unconditionally

Siew Chin Lim <[email protected]>
firmware: stratix10-svc: change get provision data to async SMC call

Marco Elver <[email protected]>
kcsan: Silence -Wmaybe-uninitialized when calling __kcsan_check_access()

Shengjiu Wang <[email protected]>
ASoC: fsl-asoc-card: reduce WM8904 PLL ratio to meet frequency limit

Stanley Chu <[email protected]>
i3c: master: svc: Prevent IRQ storm from false SLVSTART on NPCM845

Jakub Kicinski <[email protected]>
psp: validate IPv4 header fields in psp_dev_rcv()

Dian-Syuan Yang <[email protected]>
wifi: rtw89: disable CSI STBC for VHT 160MHz

Dian-Syuan Yang <[email protected]>
wifi: rtw89: disable HTC field in AP mode

Chih-Kang Chang <[email protected]>
wifi: rtw89: suspend DIG when remain-on-channel

Panagiotis Petrakopoulos <[email protected]>

    wifi: rtw88: Add NULL check for chip->edcca_th in rtw_fw_adaptivity_result()

Nuno Sá <[email protected]>
clk: clk-axi-clkgen: Add support versal timings

Johannes Berg <[email protected]>

    wifi: mac80211: use chandef in ieee80211_get_sta_bw()

Johannes Berg <[email protected]>
wifi: mac80211: always allow transmitting null-data on TXQs

Johannes Berg <[email protected]>
wifi: nl80211: check link is beaconing for color change

Johannes Berg <[email protected]>
wifi: nl80211: reject beacons with bad HE operation

Viacheslav Dubeyko <[email protected]>
hfsplus: fix issue of direct writes beyond end-of-file

Yuqi Xu <[email protected]>
wifi: cfg80211: reject duplicate wiphy cipher suite entries

Lukas Wunner <[email protected]>
PCI: Stop setting cached power state to 'unknown' on unbind

Thomas Weißschuh <[email protected]>
tools/nolibc: avoid call to wcslen() in _start_c() inserted by clang

Hirokazu Honda <[email protected]>
tee: optee: Allow MT_NORMAL_TAGGED shared memory

Xu Yang <[email protected]>
usb: gadget: udc: skip pullup() if already connected

Goldwyn Rodrigues <[email protected]>
ima: return error early if file xattr cannot be changed

Lad Prabhakar <[email protected]>
pinctrl: renesas: rzg2l: Add SR register cache for PM suspend/resume

Cássio Gabriel <[email protected]>
ALSA: usb-audio: Propagate write errors in generic mixer put callbacks

Lad Prabhakar <[email protected]>
pinctrl: renesas: rzg2l: Handle RZ/V2H(P) IOLH configuration in PM cache

Kevin Tung <[email protected]>
iio: adc: rtq6056: add i2c_device_id support

Douglas Anderson <[email protected]>

    driver core: Replace dev->can_match with dev_can_match()

Zhanjun Dong <[email protected]>
drm/xe: Fix null pointer dereference in devcoredump cleanup

Jie Wang <[email protected]>
gfs2: move quota_init qc iterator increment

Arun T <[email protected]>
gpio: usbio: Add ACPI device-id for NVL platforms

Jie Wang <[email protected]>
gfs2: fix quota init duplicate scan

Linus Walleij <[email protected]>
wifi: ath9k: Obtain system GPIOS from descriptors

Lijo Lazar <[email protected]>
drm/amd/pm: Check SMUv13.0.6/12 metrics integrity

Dmitry Baryshkov <[email protected]>
drm/panel: jadard-jd9365da-h3: set prepare_prev_first

Dominik Kaszewski <[email protected]>
drm/amd/display: Fix DPMS using partially updated pipe context

Biju Das <[email protected]>
drm: renesas: rzg2l_mipi_dsi: Fix deassert/assert of CMN_RSTB signal

Tommaso Merciai <[email protected]>
drm: rz-du: Ensure correct suspend/resume ordering with VSP

Michal Wajdeczko <[email protected]>
drm/xe/guc: Add support for NO_RESPONSE_BUSY in CTB

Ioana Ciornei <[email protected]>
bus: fsl-mc: wait for the MC firmware to complete its boot

Boris Brezillon <[email protected]>
drm/gem: Consider GEM object reclaimable if shrinking fails

Terry Hsiao <[email protected]>
drm/panel-edp: Add CSW PNB601LS1-2 and LGD LP116WHA-SPB1

SJ Park <[email protected]>
mm/damon/core: avoid infinite kdamond_merge_regions() internal loop

Roman Li <[email protected]>
drm/amd/display: Set gpuvm min page size to 4K on dcn35/36

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

Diffstat:

 Documentation/ABI/testing/sysfs-fs-erofs           |   6 +-
 Documentation/hwmon/gpd-fan.rst                    |   2 +-
 Documentation/hwmon/hwmon-kernel-api.rst           |  15 +
 Documentation/netlink/specs/rt-link.yaml           |   2 +
 .../net_cachelines/inet_connection_sock.rst        |   2 +-
 Documentation/scheduler/sched-ext.rst              |   2 +-
 MAINTAINERS                                        |   1 +
 Makefile                                           |   4 +-
 arch/arm/boot/dts/nvidia/tegra30-asus-tf600t.dts   |   6 +-
 arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts       |  13 +
 arch/arm/mach-ux500/cpu-db8500.c                   |   6 +-
 arch/arm/mm/fault.c                                |  12 +-
 arch/arm64/boot/dts/qcom/lemans.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts       |  18 +-
 arch/arm64/boot/dts/qcom/sar2130p.dtsi             |   8 +-
 arch/arm64/boot/dts/qcom/sc7280.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sc8180x.dtsi              |  16 +-
 arch/arm64/boot/dts/qcom/sdm845.dtsi               |  64 +--
 arch/arm64/boot/dts/qcom/sm6150.dtsi               |   4 +-
 arch/arm64/boot/dts/qcom/sm8150.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sm8250.dtsi               |  12 +-
 arch/arm64/boot/dts/qcom/sm8350.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sm8450.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sm8550.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sm8650.dtsi               |   8 +-
 arch/arm64/boot/dts/qcom/sm8750.dtsi               |   4 +-
 arch/arm64/include/asm/daifflags.h                 |  10 +-
 arch/arm64/include/asm/fixmap.h                    |   6 +-
 arch/arm64/include/asm/kprobes.h                   |   6 +
 arch/arm64/kernel/irq.c                            |  29 +-
 arch/arm64/kernel/machine_kexec.c                  |   3 +-
 arch/arm64/kernel/probes/kprobes.c                 |  23 +-
 arch/arm64/tools/sysreg                            |   4 +-
 arch/mips/kernel/cps-vec.S                         |   6 +
 arch/powerpc/kernel/eeh_driver.c                   |   2 -
 arch/powerpc/kernel/setup-common.c                 |   8 +
 arch/powerpc/kexec/file_load_64.c                  |   4 +-
 arch/powerpc/kvm/book3s_hv.c                       |   4 +-
 arch/powerpc/platforms/powernv/pci-ioda.c          |   6 +-
 arch/powerpc/platforms/ps3/repository.c            |   5 +-
 arch/powerpc/platforms/pseries/kexec.c             |  13 +-
 arch/powerpc/platforms/pseries/rtas-fadump.c       |  80 +--
 arch/powerpc/platforms/pseries/rtas-fadump.h       |   6 +
 arch/riscv/kernel/irq.c                            |  22 +-
 arch/riscv/kernel/process.c                        |   4 +-
 arch/s390/boot/ipl_parm.c                          |  26 +-
 arch/s390/boot/physmem_info.c                      |   2 +-
 arch/s390/crypto/aes_s390.c                        |  87 ++--
 arch/s390/crypto/paes_s390.c                       |  19 +-
 arch/s390/crypto/phmac_s390.c                      |  36 +-
 arch/s390/kernel/diag/diag324.c                    |   3 +-
 arch/s390/kernel/ipl.c                             |  12 +-
 arch/s390/kernel/vtime.c                           |  25 +-
 arch/sparc/Kconfig                                 |   1 +
 arch/sparc/kernel/uprobes.c                        |   1 +
 arch/x86/crypto/aria-aesni-avx2-asm_64.S           |   6 +
 arch/x86/crypto/aria-gfni-avx512-asm_64.S          |   3 +
 arch/x86/events/intel/core.c                       |  33 +-
 arch/x86/events/intel/ds.c                         | 184 ++++---
 arch/x86/events/intel/uncore_discovery.c           |  33 +-
 arch/x86/events/perf_event.h                       |   3 +
 arch/x86/include/asm/pgtable.h                     |   2 +-
 arch/x86/include/asm/topology.h                    |   3 +
 arch/x86/kernel/alternative.c                      | 111 ++--
 arch/x86/kernel/amd_node.c                         |  25 +-
 arch/x86/kernel/cpu/microcode/amd.c                |  12 +-
 arch/x86/kernel/itmt.c                             |   8 +-
 arch/x86/mm/pat/set_memory.c                       | 147 ++++--
 block/blk-cgroup.c                                 |  13 +-
 crypto/Makefile                                    |   5 +
 drivers/accel/amdxdna/amdxdna_ctx.h                |   2 +-
 drivers/accel/ivpu/ivpu_fw_log.c                   |  87 ++--
 drivers/accel/ivpu/ivpu_gem.h                      |  14 +-
 drivers/accel/ivpu/ivpu_ipc.c                      |   7 +-
 drivers/accel/qaic/qaic_control.c                  |  46 +-
 drivers/acpi/acpi_apd.c                            |   7 +
 drivers/acpi/acpica/dsmethod.c                     |  43 ++
 drivers/acpi/acpica/evhandler.c                    |  11 +
 drivers/acpi/acpica/exconfig.c                     |  26 +-
 drivers/acpi/acpica/exoparg3.c                     |   2 +-
 drivers/acpi/acpica/nsnames.c                      |   6 +
 drivers/acpi/acpica/nsprepkg.c                     |   7 +
 drivers/acpi/acpica/nsxfname.c                     |   4 +
 drivers/acpi/acpica/psargs.c                       | 134 ++++-
 drivers/acpi/acpica/psloop.c                       |  30 +-
 drivers/acpi/acpica/psparse.c                      |  14 +
 drivers/acpi/acpica/utcopy.c                       |  10 +-
 drivers/acpi/acpica/utresrc.c                      |  30 ++
 drivers/acpi/pci_root.c                            |   4 +
 drivers/acpi/scan.c                                |   1 +
 drivers/ata/ahci.c                                 |  22 +
 drivers/ata/libata-core.c                          |  10 +
 drivers/ata/libata-pmp.c                           |   7 +-
 drivers/base/core.c                                |  13 +-
 drivers/base/dd.c                                  |  10 +-
 drivers/block/sunvdc.c                             |  17 +
 drivers/bluetooth/btintel.c                        |  39 +-
 drivers/bluetooth/btintel_pcie.c                   |  22 +-
 drivers/bluetooth/btmtk.c                          |  11 +
 drivers/bluetooth/btmtk.h                          |   1 +
 drivers/bluetooth/btqcomsmd.c                      |   6 +-
 drivers/bluetooth/btrtl.c                          |  21 +-
 drivers/bluetooth/btusb.c                          |  45 +-
 drivers/bluetooth/hci_mrvl.c                       |   3 +-
 drivers/bus/fsl-mc/fsl-mc-bus.c                    |  46 ++
 drivers/bus/mhi/host/pci_generic.c                 |   3 +-
 drivers/char/ipmi/ipmi_si_platform.c               |   5 +-
 drivers/char/nvram.c                               |  16 +-
 drivers/char/virtio_console.c                      |  21 +-
 drivers/clk/clk-axi-clkgen.c                       |   5 +-
 drivers/clk/keystone/sci-clk.c                     |   8 +
 drivers/clk/qcom/clk-rpmh.c                        |   8 +-
 drivers/clk/renesas/renesas-cpg-mssr.c             |   3 +
 drivers/clk/samsung/clk-exynos850.c                |   5 +-
 drivers/clk/samsung/clk-exynos990.c                | 307 +++++------
 drivers/clk/socfpga/clk-agilex.c                   |   2 +
 drivers/clk/ux500/clk-prcmu.c                      |  20 +-
 drivers/clk/ux500/u8500_of_clk.c                   |   2 +-
 drivers/cpufreq/cpufreq.c                          |   6 +-
 drivers/cpuidle/cpuidle-ux500.c                    |   6 +-
 drivers/crypto/atmel-ecc.c                         |   3 +
 drivers/crypto/atmel-sha204a.c                     |   3 +-
 drivers/crypto/ccp/sev-dev.c                       |   2 +-
 drivers/crypto/intel/ixp4xx/ixp4xx_crypto.c        |  25 +-
 drivers/crypto/omap-des.c                          |  26 +-
 drivers/cxl/core/region.c                          |   3 +
 drivers/dibs/dibs_main.c                           |  25 +-
 drivers/dma/altera-msgdma.c                        |  24 +-
 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c     |  11 +-
 drivers/edac/altera_edac.c                         | 115 +++--
 drivers/edac/altera_edac.h                         |   1 +
 drivers/edac/amd64_edac.c                          |   2 +
 drivers/edac/edac_device_sysfs.c                   |  11 +-
 drivers/edac/igen6_edac.c                          |  27 +-
 drivers/firmware/arm_scmi/base.c                   |  15 +-
 drivers/firmware/arm_scmi/sensors.c                |  10 +-
 drivers/firmware/stratix10-svc.c                   |   4 +-
 drivers/gpio/gpio-ath79.c                          |  57 +-
 drivers/gpio/gpio-dwapb.c                          |  17 +
 drivers/gpio/gpio-pisosr.c                         |   4 +-
 drivers/gpio/gpio-usbio.c                          |   1 +
 drivers/gpu/drm/adp/Kconfig                        |   1 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c         |  23 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h         |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c       |  24 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c           |   4 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c           |  18 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c        |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c         |   6 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c            |   8 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c          |  26 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c     |  97 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c            |   4 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c            |  26 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h            |   3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c             |  22 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c            |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c            |  34 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h            |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c            |  59 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h            |   1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c     |  34 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c           |  29 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h           |  21 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c           |   4 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c          |  13 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c          |  13 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c            |   3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c            |  21 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c             |  11 +
 drivers/gpu/drm/amd/amdgpu/atom.c                  |  11 +
 drivers/gpu/drm/amd/amdgpu/atom.h                  |   3 +
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c              |   2 -
 drivers/gpu/drm/amd/amdgpu/psp_v11_0.c             |   8 +-
 drivers/gpu/drm/amd/amdgpu/psp_v12_0.c             |   8 +-
 drivers/gpu/drm/amd/amdgpu/psp_v13_0.c             |  14 +-
 drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c           |  14 +-
 drivers/gpu/drm/amd/amdgpu/psp_v14_0.c             |  14 +-
 drivers/gpu/drm/amd/amdgpu/psp_v3_1.c              |   8 +-
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c           |  10 +-
 drivers/gpu/drm/amd/amdkfd/kfd_debug.c             |   6 +
 .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c  |  17 +-
 drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c          |   8 +-
 drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c    |  11 +-
 .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c |  12 +-
 drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c        |   8 +-
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  |  12 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c  |   7 +-
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c  |  20 +-
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c  |   3 +
 drivers/gpu/drm/amd/display/dc/core/dc.c           |  22 +-
 .../amd/display/dc/dml2/dml2_translation_helper.c  |   1 +
 .../gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp.c |   8 +-
 .../drm/amd/display/dc/hwss/dce110/dce110_hwseq.c  |  12 +-
 .../amd/display/dc/link/accessories/link_dp_cts.c  |   2 +
 drivers/gpu/drm/amd/pm/amdgpu_dpm.c                |   6 +-
 drivers/gpu/drm/amd/pm/amdgpu_pm.c                 |   8 +-
 drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c         |  31 +-
 drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c   |   3 +
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c   |   4 +
 drivers/gpu/drm/arm/display/komeda/komeda_dev.c    |   6 +-
 drivers/gpu/drm/arm/display/komeda/komeda_drv.c    |  14 +-
 drivers/gpu/drm/arm/malidp_drv.c                   |  22 +-
 drivers/gpu/drm/bridge/tc358768.c                  |  17 +-
 drivers/gpu/drm/bridge/ti-sn65dsi83.c              |   3 +-
 drivers/gpu/drm/display/drm_dp_helper.c            |   2 +
 drivers/gpu/drm/drm_exec.c                         |  13 +
 drivers/gpu/drm/drm_gem.c                          |  10 +
 drivers/gpu/drm/drm_pagemap.c                      |  10 +-
 drivers/gpu/drm/drm_panic_qr.rs                    |   4 +-
 drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c         |  21 +-
 drivers/gpu/drm/gud/gud_drv.c                      |   3 +
 drivers/gpu/drm/i915/i915_query.c                  |   4 +-
 drivers/gpu/drm/imagination/pvr_context.c          |  32 +-
 drivers/gpu/drm/imagination/pvr_queue.c            |   7 +-
 drivers/gpu/drm/logicvc/Kconfig                    |   1 -
 drivers/gpu/drm/mediatek/mtk_dsi.c                 |   1 +
 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c  |   1 +
 .../gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.c   | 110 +++-
 drivers/gpu/drm/panel/Kconfig                      |  11 +-
 drivers/gpu/drm/panel/panel-edp.c                  |  13 +
 drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c   |   2 +
 drivers/gpu/drm/panel/panel-simple.c               |  28 +
 drivers/gpu/drm/panel/panel-tdo-tl070wsh30.c       |  14 +-
 drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c       |  16 +
 drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h       |   2 +
 drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c     |  18 +-
 drivers/gpu/drm/rockchip/Kconfig                   |   3 +
 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c    |   7 +-
 drivers/gpu/drm/scheduler/tests/mock_scheduler.c   |  11 +
 drivers/gpu/drm/tiny/cirrus-qemu.c                 |   3 +
 drivers/gpu/drm/ttm/ttm_bo.c                       |  53 +-
 drivers/gpu/drm/ttm/ttm_bo_util.c                  |  47 +-
 drivers/gpu/drm/ttm/ttm_bo_vm.c                    |  12 +-
 drivers/gpu/drm/ttm/ttm_pool.c                     |  37 +-
 drivers/gpu/drm/ttm/ttm_resource.c                 |   6 +-
 drivers/gpu/drm/vc4/vc4_hvs.c                      |   2 +-
 drivers/gpu/drm/vc4/vc4_v3d.c                      |   2 +-
 drivers/gpu/drm/virtio/virtgpu_display.c           |   2 +-
 drivers/gpu/drm/virtio/virtgpu_drv.h               |  20 +
 drivers/gpu/drm/virtio/virtgpu_object.c            |   2 +-
 drivers/gpu/drm/virtio/virtgpu_vq.c                |   6 +-
 drivers/gpu/drm/xe/instructions/xe_gpu_commands.h  |   1 +
 drivers/gpu/drm/xe/regs/xe_i2c_regs.h              |   2 +
 drivers/gpu/drm/xe/xe_devcoredump.c                |   6 +-
 drivers/gpu/drm/xe/xe_guc_ct.c                     |  38 +-
 drivers/gpu/drm/xe/xe_i2c.c                        |  61 ++-
 drivers/gpu/drm/xe/xe_i2c.h                        |   1 +
 drivers/gpu/drm/xe/xe_oa.c                         |   6 +-
 drivers/gpu/drm/xe/xe_ring_ops.c                   |  16 +-
 drivers/gpu/host1x/bus.c                           |   4 +-
 .../hid/bpf/progs/Huion__Inspiroy-Frego-M.bpf.c    |  87 ++++
 drivers/hid/hid-logitech-hidpp.c                   |   1 +
 drivers/hid/hid-multitouch.c                       | 147 +++++-
 drivers/hv/connection.c                            |  47 +-
 drivers/hv/hyperv_vmbus.h                          |   2 +
 drivers/hwmon/adt7462.c                            |   8 +
 drivers/hwmon/applesmc.c                           |   7 +-
 drivers/hwmon/aspeed-pwm-tacho.c                   |   4 +-
 drivers/hwmon/chipcap2.c                           |   9 +-
 drivers/hwmon/corsair-cpro.c                       |  24 +-
 drivers/hwmon/corsair-psu.c                        |  23 +-
 drivers/hwmon/dell-smm-hwmon.c                     |   8 +
 drivers/hwmon/gpio-fan.c                           |  13 +-
 drivers/hwmon/hwmon.c                              |  21 +-
 drivers/hwmon/ina2xx.c                             | 183 +++++--
 drivers/hwmon/ltc4282.c                            |   2 +-
 drivers/hwmon/nct6694-hwmon.c                      |  35 +-
 drivers/hwmon/pmbus/lm25066.c                      |  60 +--
 drivers/hwmon/pmbus/pmbus_core.c                   |   4 +-
 drivers/hwmon/raspberrypi-hwmon.c                  |  12 +-
 drivers/hwmon/sht4x.c                              |  44 +-
 drivers/hwtracing/coresight/coresight-core.c       |  29 +-
 drivers/hwtracing/coresight/coresight-etm-perf.c   | 116 +++--
 drivers/hwtracing/coresight/coresight-platform.c   |  12 +-
 drivers/hwtracing/coresight/coresight-priv.h       |   1 +
 drivers/i2c/busses/i2c-designware-common.c         |   2 +
 drivers/i2c/busses/i2c-designware-core.h           |  85 +--
 drivers/i2c/busses/i2c-designware-master.c         |   2 +
 drivers/i2c/busses/i2c-designware-slave.c          |   2 +
 drivers/i2c/i2c-core-smbus.c                       |  12 +
 drivers/i3c/master/mipi-i3c-hci/cmd_v1.c           |   4 +-
 drivers/i3c/master/mipi-i3c-hci/cmd_v2.c           |   4 +-
 drivers/i3c/master/svc-i3c-master.c                |   9 +
 drivers/iio/accel/mma8452.c                        |  19 +-
 drivers/iio/adc/qcom-spmi-iadc.c                   |  18 +-
 drivers/iio/adc/rtq6056.c                          |  10 +-
 drivers/iio/light/stk3310.c                        |  76 ++-
 drivers/infiniband/core/counters.c                 |  10 +-
 drivers/infiniband/core/umem.c                     |  18 +-
 drivers/infiniband/hw/bnxt_re/debugfs.c            |   2 +-
 drivers/infiniband/hw/bnxt_re/main.c               |   2 +-
 drivers/infiniband/hw/bnxt_re/qplib_fp.c           |   2 +-
 drivers/infiniband/hw/bnxt_re/qplib_res.c          |  11 +
 drivers/infiniband/hw/bnxt_re/qplib_res.h          |   2 +-
 drivers/infiniband/hw/irdma/hw.c                   |   7 +-
 drivers/infiniband/hw/irdma/main.h                 |   3 +-
 drivers/infiniband/hw/irdma/utils.c                |  14 +-
 drivers/infiniband/hw/mlx5/cq.c                    |   3 +-
 drivers/infiniband/hw/mlx5/main.c                  |  11 +
 drivers/infiniband/hw/mlx5/mr.c                    |   4 +
 drivers/infiniband/hw/mlx5/odp.c                   |   3 +
 drivers/infiniband/ulp/rtrs/rtrs-srv.c             |  12 +-
 drivers/iommu/amd/init.c                           |  31 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |   4 +-
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c         |   9 +
 drivers/iommu/riscv/iommu.c                        |   7 +-
 drivers/iommu/riscv/iommu.h                        |   2 +
 drivers/iommu/rockchip-iommu.c                     |   8 +
 drivers/iommu/s390-iommu.c                         |   2 +
 drivers/irqchip/irq-gic-v3-its.c                   |   1 +
 drivers/irqchip/irq-gic-v5.c                       |  19 +-
 drivers/leds/leds-pca9532.c                        |   8 +-
 drivers/leds/leds-st1202.c                         |  10 +-
 drivers/leds/trigger/ledtrig-gpio.c                |   3 +-
 drivers/leds/uleds.c                               |  11 +-
 drivers/mailbox/imx-mailbox.c                      |  64 ++-
 drivers/mailbox/mailbox.c                          |   6 +-
 drivers/md/dm-raid.c                               |   6 +
 drivers/md/md.h                                    |   2 +
 drivers/md/raid10.c                                |   5 +
 drivers/md/raid5.c                                 |  42 +-
 drivers/media/cec/platform/cros-ec/cros-ec-cec.c   |   4 +
 drivers/media/i2c/mt9p031.c                        |   6 +-
 drivers/media/i2c/video-i2c.c                      |   2 +-
 drivers/media/pci/dm1105/dm1105.c                  |   7 +-
 .../platform/chips-media/wave5/wave5-helper.c      |   4 +-
 .../platform/chips-media/wave5/wave5-vpu-dec.c     |  59 ++-
 .../platform/chips-media/wave5/wave5-vpuapi.c      |  11 +-
 .../platform/chips-media/wave5/wave5-vpuconfig.h   |   1 +
 .../vcodec/decoder/vdec/vdec_av1_req_lat_if.c      |   5 +-
 .../platform/microchip/microchip-sama7g5-isc.c     |   7 +-
 drivers/media/platform/qcom/camss/camss-csiphy.c   |  10 +-
 drivers/media/platform/qcom/camss/camss-vfe-340.c  |  84 +--
 .../platform/qcom/iris/iris_platform_common.h      |  10 +-
 .../media/platform/qcom/iris/iris_platform_gen2.c  |   8 +-
 .../platform/qcom/iris/iris_platform_sm8250.c      |   2 +-
 drivers/media/platform/qcom/iris/iris_resources.c  |  15 +-
 drivers/media/platform/qcom/venus/pm_helpers.c     |   7 +-
 drivers/media/platform/renesas/rcar-csi2.c         |   6 +-
 .../media/platform/samsung/s3c-camif/camif-core.c  |   7 +-
 .../platform/verisilicon/hantro_g2_hevc_dec.c      |   6 +-
 .../verisilicon/rockchip_vpu981_hw_av1_dec.c       |  57 +-
 drivers/media/rc/imon.c                            |   4 +
 drivers/media/rc/mceusb.c                          |   2 +
 drivers/media/usb/as102/as102_usb_drv.c            |  75 ++-
 drivers/media/usb/dvb-usb-v2/mxl111sf.c            |  12 +-
 drivers/media/usb/em28xx/em28xx-video.c            |   4 +-
 drivers/media/usb/gspca/jl2005bcd.c                |   7 +-
 drivers/media/v4l2-core/v4l2-common.c              |  13 +-
 drivers/media/v4l2-core/v4l2-ctrls-core.c          |  32 ++
 drivers/media/v4l2-core/v4l2-h264.c                |   3 +-
 drivers/mfd/ab8500-core.c                          |   2 +-
 drivers/mfd/db8500-prcmu.c                         |   6 +-
 drivers/mfd/rsmu_i2c.c                             |   2 +
 drivers/mfd/rsmu_spi.c                             |   2 +
 drivers/mfd/tps65219.c                             |  14 +-
 drivers/misc/amd-sbi/rmi-core.c                    |   4 +
 drivers/mmc/core/queue.c                           |   8 +-
 drivers/mmc/host/davinci_mmc.c                     |  16 +-
 drivers/mmc/host/renesas_sdhi_internal_dmac.c      |   2 +
 drivers/net/bonding/bond_alb.c                     |  32 +-
 drivers/net/bonding/bond_main.c                    |   4 +-
 drivers/net/dsa/bcm_sf2_cfp.c                      |   2 +
 drivers/net/dsa/lantiq/lantiq_gswip.h              |   2 +-
 drivers/net/dsa/mt7530-mmio.c                      |   1 +
 drivers/net/dsa/mt7530.c                           |  70 ++-
 drivers/net/dsa/mt7530.h                           |   1 +
 drivers/net/dsa/mv88e6xxx/chip.c                   |  23 +-
 drivers/net/dsa/qca/qca8k-8xxx.c                   |  22 +-
 drivers/net/dsa/qca/qca8k.h                        |   1 +
 drivers/net/dsa/realtek/rtl8365mb.c                |  14 +
 drivers/net/dsa/sja1105/sja1105_flower.c           |   4 +-
 drivers/net/ethernet/airoha/airoha_eth.c           |  14 +-
 drivers/net/ethernet/airoha/airoha_eth.h           |   4 +-
 drivers/net/ethernet/allwinner/sun4i-emac.c        |   2 +
 drivers/net/ethernet/amd/au1000_eth.c              |   3 +-
 drivers/net/ethernet/amd/pds_core/core.c           |   4 +
 drivers/net/ethernet/amd/pds_core/fw.c             |  10 +-
 drivers/net/ethernet/amd/pds_core/main.c           |  10 +-
 drivers/net/ethernet/amd/xgbe/xgbe-dev.c           |   3 +-
 drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c   |   4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |  86 ++-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h          |   1 +
 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c  |   2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c  |   2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c    |   2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c      |   2 +-
 drivers/net/ethernet/cadence/macb.h                |   2 +-
 drivers/net/ethernet/cadence/macb_main.c           |  54 +-
 drivers/net/ethernet/cadence/macb_ptp.c            |  11 +-
 drivers/net/ethernet/cavium/thunder/nicvf_main.c   |   8 +-
 drivers/net/ethernet/cortina/gemini.c              |  77 +--
 .../net/ethernet/freescale/dpaa2/dpaa2-switch.c    |  69 ++-
 .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c    |  12 +
 drivers/net/ethernet/huawei/hinic/hinic_hw_mbox.c  |   4 +-
 drivers/net/ethernet/ibm/emac/core.c               |   8 +-
 drivers/net/ethernet/ibm/emac/mal.c                |   6 +-
 drivers/net/ethernet/intel/e1000e/ethtool.c        |  19 +-
 drivers/net/ethernet/intel/ice/ice_common.c        |   9 +-
 drivers/net/ethernet/intel/ice/ice_sched.c         |   4 +-
 drivers/net/ethernet/intel/ice/ice_trace.h         |  64 ++-
 drivers/net/ethernet/intel/ice/ice_txrx.c          |  20 +-
 drivers/net/ethernet/intel/ice/ice_type.h          |   2 +-
 drivers/net/ethernet/intel/idpf/idpf.h             |  70 ++-
 drivers/net/ethernet/intel/idpf/idpf_dev.c         |  16 +-
 drivers/net/ethernet/intel/idpf/idpf_lib.c         |  78 +--
 drivers/net/ethernet/intel/idpf/idpf_txrx.c        | 327 +++++++-----
 drivers/net/ethernet/intel/idpf/idpf_txrx.h        |  14 +-
 drivers/net/ethernet/intel/idpf/idpf_vf_dev.c      |  16 +-
 drivers/net/ethernet/intel/idpf/idpf_virtchnl.c    | 204 ++++----
 drivers/net/ethernet/intel/idpf/idpf_virtchnl.h    |  26 +-
 drivers/net/ethernet/marvell/octeontx2/af/mcs.c    |  10 +
 drivers/net/ethernet/marvell/octeontx2/af/rvu.c    |  33 +-
 .../ethernet/marvell/octeontx2/af/rvu_debugfs.c    |  10 +-
 drivers/net/ethernet/marvell/octeontx2/nic/qos.c   |  60 ++-
 drivers/net/ethernet/mediatek/mtk_eth_soc.c        |  62 ++-
 drivers/net/ethernet/mediatek/mtk_eth_soc.h        |   4 +-
 drivers/net/ethernet/mellanox/mlx5/core/Kconfig    |   2 +-
 drivers/net/ethernet/mellanox/mlx5/core/devlink.h  |   4 +
 drivers/net/ethernet/mellanox/mlx5/core/en/port.c  |  15 +-
 drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c   |  27 +-
 .../net/ethernet/mellanox/mlx5/core/en/tc/sample.c |   7 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c |   2 +-
 .../net/ethernet/mellanox/mlx5/core/en_ethtool.c   |   1 +
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c   |  52 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.h   |   1 -
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c |  51 +-
 .../ethernet/mellanox/mlx5/core/esw/devlink_port.c |  74 +++
 .../net/ethernet/mellanox/mlx5/core/esw/ipsec.c    |   2 +-
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c  |  14 +-
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.h  |   1 +
 .../ethernet/mellanox/mlx5/core/eswitch_offloads.c |  14 +-
 .../mellanox/mlx5/core/eswitch_offloads_termtbl.c  |   7 +-
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c  |  19 +-
 drivers/net/ethernet/mellanox/mlx5/core/main.c     |   3 +-
 .../ethernet/mellanox/mlx5/core/steering/hws/bwc.c |  12 +
 .../mellanox/mlx5/core/steering/hws/table.c        |   3 +
 drivers/net/ethernet/mellanox/mlx5/core/vport.c    |   8 +-
 drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c |  34 +-
 drivers/net/ethernet/micrel/ks8842.c               |   4 +-
 drivers/net/ethernet/micrel/ks8851_common.c        |  10 +-
 drivers/net/ethernet/micrel/ks8851_spi.c           |   4 +-
 drivers/net/ethernet/micrel/ksz884x.c              |   4 +-
 .../net/ethernet/microchip/lan966x/lan966x_fdma.c  |  20 +
 .../net/ethernet/microchip/sparx5/sparx5_psfp.c    |   5 +-
 .../ethernet/microchip/sparx5/sparx5_tc_flower.c   |  18 +-
 drivers/net/ethernet/microsoft/mana/mana_bpf.c     |   1 +
 drivers/net/ethernet/microsoft/mana/mana_en.c      |  30 +-
 .../net/ethernet/netronome/nfp/nfp_net_ethtool.c   |  19 +-
 drivers/net/ethernet/oa_tc6.c                      | 514 +++++++++++-------
 drivers/net/ethernet/pensando/ionic/ionic_txrx.c   |  13 +-
 drivers/net/ethernet/realtek/rtase/rtase.h         |   4 +
 drivers/net/ethernet/realtek/rtase/rtase_main.c    |   3 +
 drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h     |   4 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  | 111 +++-
 drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c   |   1 -
 drivers/net/ethernet/ti/cpsw_new.c                 |   4 +-
 drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c     |   1 +
 drivers/net/gtp.c                                  |   5 +
 drivers/net/ieee802154/cc2520.c                    |   5 +-
 drivers/net/ieee802154/mac802154_hwsim.c           |  10 +-
 drivers/net/mctp/mctp-i3c.c                        |   9 +-
 drivers/net/net_failover.c                         |   2 +-
 drivers/net/netconsole.c                           |   2 +
 drivers/net/phy/dp83867.c                          |   3 +
 drivers/net/phy/dp83td510.c                        |   3 +
 drivers/net/phy/mediatek/mtk-ge.c                  |  29 ++
 drivers/net/phy/motorcomm.c                        |  41 +-
 drivers/net/phy/sfp.c                              |   2 +
 drivers/net/ppp/ppp_async.c                        |  89 +---
 drivers/net/ppp/ppp_synctty.c                      |  97 +---
 drivers/net/usb/cx82310_eth.c                      |   1 +
 drivers/net/usb/hso.c                              |   2 +-
 drivers/net/usb/pegasus.c                          |  54 +-
 drivers/net/usb/pegasus.h                          |   3 -
 drivers/net/usb/qmi_wwan.c                         |   2 +
 drivers/net/vxlan/vxlan_core.c                     |  13 +-
 drivers/net/vxlan/vxlan_mdb.c                      |   8 +
 drivers/net/wireless/ath/ath11k/dp_rx.c            |  50 +-
 drivers/net/wireless/ath/ath11k/mhi.c              |   4 +-
 drivers/net/wireless/ath/ath11k/pci.c              |   8 +
 drivers/net/wireless/ath/ath12k/mac.c              |  87 +++-
 drivers/net/wireless/ath/ath9k/hif_usb.c           |  12 +-
 drivers/net/wireless/ath/ath9k/hif_usb.h           |   2 +-
 drivers/net/wireless/ath/ath9k/hw.c                |  33 +-
 drivers/net/wireless/ath/ath9k/hw.h                |   3 +-
 drivers/net/wireless/intel/ipw2x00/libipw_rx.c     |   4 +-
 drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c     |   3 +-
 drivers/net/wireless/intel/iwlwifi/fw/acpi.c       |   5 +
 drivers/net/wireless/intel/iwlwifi/fw/api/power.h  |  48 +-
 drivers/net/wireless/intel/iwlwifi/iwl-config.h    |   4 +-
 drivers/net/wireless/intel/iwlwifi/iwl-drv.c       |  13 +-
 drivers/net/wireless/intel/iwlwifi/iwl-io.c        |  18 +-
 drivers/net/wireless/intel/iwlwifi/iwl-io.h        |   4 +-
 drivers/net/wireless/intel/iwlwifi/iwl-prph.h      |   7 +-
 drivers/net/wireless/intel/iwlwifi/mld/ap.c        |  25 +-
 drivers/net/wireless/intel/iwlwifi/mld/ap.h        |   6 +-
 drivers/net/wireless/intel/iwlwifi/mld/d3.c        |   7 +-
 drivers/net/wireless/intel/iwlwifi/mld/iface.c     |  18 -
 drivers/net/wireless/intel/iwlwifi/mld/iface.h     |   3 -
 drivers/net/wireless/intel/iwlwifi/mld/link.c      |  17 +-
 drivers/net/wireless/intel/iwlwifi/mld/mac80211.c  |  12 +-
 drivers/net/wireless/intel/iwlwifi/mld/mcc.c       |  13 +-
 drivers/net/wireless/intel/iwlwifi/mld/mld.c       |  10 +-
 drivers/net/wireless/intel/iwlwifi/mld/notif.c     |   6 -
 drivers/net/wireless/intel/iwlwifi/mld/power.c     | 177 ++++++-
 drivers/net/wireless/intel/iwlwifi/mvm/binding.c   |   5 +-
 drivers/net/wireless/intel/iwlwifi/mvm/d3.c        |  19 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c  |  25 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c  |  19 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mvm.h       |  10 +-
 drivers/net/wireless/intel/iwlwifi/mvm/power.c     |  14 +-
 drivers/net/wireless/intel/iwlwifi/mvm/rx.c        |   5 +
 drivers/net/wireless/intel/iwlwifi/mvm/scan.c      |   4 +-
 .../net/wireless/intel/iwlwifi/mvm/time-event.c    |   8 +-
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c        |  45 +-
 drivers/net/wireless/intel/iwlwifi/pcie/drv.c      |   5 +-
 .../net/wireless/intel/iwlwifi/pcie/gen1_2/rx.c    |   9 +-
 .../net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c |  28 +-
 drivers/net/wireless/marvell/libertas/tx.c         |   7 +
 drivers/net/wireless/marvell/mwifiex/fw.h          |  18 +-
 drivers/net/wireless/marvell/mwifiex/join.c        |   8 +-
 drivers/net/wireless/marvell/mwifiex/sta_cmd.c     |   2 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mcu.c    |  33 +-
 drivers/net/wireless/mediatek/mt76/mt7925/mac.c    |   9 +
 drivers/net/wireless/mediatek/mt76/mt7925/mcu.c    |   5 +
 drivers/net/wireless/mediatek/mt76/mt7925/usb.c    |   3 +
 drivers/net/wireless/mediatek/mt76/pci.c           |   8 +-
 drivers/net/wireless/ralink/rt2x00/rt2400pci.c     |   2 +-
 drivers/net/wireless/ralink/rt2x00/rt2500pci.c     |   2 +-
 drivers/net/wireless/ralink/rt2x00/rt2800pci.c     |   2 +-
 drivers/net/wireless/ralink/rt2x00/rt61pci.c       |   2 +-
 drivers/net/wireless/realtek/rtw88/fw.c            |   3 +
 drivers/net/wireless/realtek/rtw89/core.c          |  10 +-
 drivers/net/wireless/realtek/rtw89/mac_be.c        |   4 +
 drivers/net/wireless/realtek/rtw89/pci.c           |  16 +-
 drivers/net/wireless/realtek/rtw89/rtw8851bu.c     |   3 +
 drivers/net/wireless/rsi/rsi_91x_hal.c             |   8 +
 drivers/net/wireless/rsi/rsi_91x_mgmt.c            |   6 +-
 drivers/net/wireless/virtual/mac80211_hwsim.c      |   6 +-
 drivers/net/wwan/t7xx/t7xx_pci.c                   |   3 +
 drivers/nvme/host/core.c                           |  44 +-
 drivers/nvme/host/fc.c                             |   7 +-
 drivers/nvme/host/rdma.c                           |  18 +-
 drivers/nvme/host/tcp.c                            |   5 +
 drivers/nvme/target/rdma.c                         |  15 +-
 drivers/of/base.c                                  |  43 +-
 drivers/of/dynamic.c                               |  20 +-
 drivers/of/property.c                              |  27 +-
 drivers/of/unittest.c                              |  32 ++
 drivers/opp/of.c                                   |   2 +-
 drivers/pci/controller/dwc/pcie-intel-gw.c         |  19 +-
 drivers/pci/controller/pcie-altera.c               |   2 +
 drivers/pci/controller/pcie-iproc.c                |   2 +
 drivers/pci/controller/pcie-mediatek.c             |   2 +
 drivers/pci/controller/pcie-rockchip-host.c        |   2 +
 drivers/pci/controller/plda/pcie-plda-host.c       |   2 +
 drivers/pci/pci-driver.c                           |  10 +-
 drivers/pci/pci-sysfs.c                            |  14 +-
 drivers/pci/pci.c                                  |  24 +-
 drivers/pci/proc.c                                 |  79 ++-
 drivers/pci/quirks.c                               |   5 +
 drivers/pci/switch/switchtec.c                     |  16 +
 drivers/perf/riscv_pmu_legacy.c                    |   5 +-
 drivers/perf/riscv_pmu_sbi.c                       |  98 ++--
 drivers/phy/qualcomm/phy-qcom-m31-eusb2.c          |   2 +-
 drivers/pinctrl/mediatek/pinctrl-mtk-common.c      |  13 +-
 drivers/pinctrl/mediatek/pinctrl-paris.c           |   8 +-
 drivers/pinctrl/renesas/pinctrl-rzg2l.c            |  41 +-
 drivers/pinctrl/renesas/pinctrl-rzv2m.c            |   4 +-
 drivers/platform/chrome/cros_ec_sensorhub.c        |   6 +-
 drivers/platform/chrome/cros_ec_sysfs.c            |   5 +-
 drivers/platform/x86/dell/dell-laptop.c            |   9 +
 drivers/platform/x86/intel/hid.c                   |   7 +
 drivers/platform/x86/msi-ec.c                      |   1 +
 drivers/platform/x86/sel3350-platform.c            | 136 +++--
 drivers/powercap/intel_rapl_common.c               |   3 +-
 drivers/ptp/ptp_ocp.c                              |   1 +
 drivers/pwm/pwm-mediatek.c                         |   2 +-
 drivers/ras/amd/atl/core.c                         |   1 -
 drivers/regulator/core.c                           | 163 +++---
 drivers/regulator/da9121-regulator.c               |  18 +-
 drivers/regulator/db8500-prcmu.c                   |  12 +-
 drivers/rtc/rtc-aspeed.c                           |   1 +
 drivers/rtc/rtc-bq32k.c                            |   9 +
 drivers/rtc/rtc-cmos.c                             |  13 +-
 drivers/rtc/rtc-mv.c                               |  23 +
 drivers/s390/char/zcore.c                          |   8 +-
 drivers/s390/cio/device.c                          |   2 +-
 drivers/s390/net/ism_drv.c                         |   4 +-
 drivers/s390/net/qeth_l2.h                         |   3 +-
 drivers/s390/net/qeth_l2_main.c                    |  26 +-
 drivers/s390/net/qeth_l2_sys.c                     |   7 +-
 drivers/scsi/bfa/bfa_fcs_lport.c                   |   2 +-
 drivers/scsi/mpi3mr/mpi3mr_transport.c             |   8 +
 drivers/scsi/mpt3sas/mpt3sas_base.c                |   5 +-
 drivers/scsi/pm8001/pm8001_ctl.c                   |   8 +
 drivers/scsi/pm8001/pm80xx_hwi.c                   |   7 +
 drivers/scsi/qla2xxx/qla_bsg.c                     |  47 +-
 drivers/scsi/qla2xxx/qla_def.h                     |   2 +
 drivers/scsi/qla2xxx/qla_fw.h                      |   4 +
 drivers/scsi/qla2xxx/qla_init.c                    |  14 +
 drivers/scsi/qla2xxx/qla_iocb.c                    |  23 +-
 drivers/scsi/qla2xxx/qla_isr.c                     |  33 +-
 drivers/scsi/qla2xxx/qla_mbx.c                     |   6 +-
 drivers/scsi/qla2xxx/qla_mid.c                     |  49 +-
 drivers/scsi/qla2xxx/qla_nvme.c                    |  10 +
 drivers/scsi/qla2xxx/qla_os.c                      |  15 +
 drivers/scsi/scsi_error.c                          |   2 +-
 drivers/soc/tegra/fuse/fuse-tegra.c                |  14 +-
 drivers/soundwire/bus.c                            |   4 +
 drivers/soundwire/dmi-quirks.c                     |  35 ++
 drivers/soundwire/intel.c                          |  31 +-
 drivers/soundwire/intel_ace2x.c                    |  39 +-
 drivers/soundwire/intel_auxdevice.c                |   2 +
 drivers/soundwire/slave.c                          |   4 +-
 drivers/spi/spi-dw-dma.c                           |   3 +-
 drivers/spi/spi-dw-mmio.c                          |   7 +-
 drivers/spi/spi-dw.h                               |   1 +
 drivers/spi/spi-qcom-qspi.c                        |  44 +-
 drivers/spi/spi-tegra210-quad.c                    |  29 +-
 drivers/spi/spi-xilinx.c                           |   6 +-
 drivers/spi/spi.c                                  |   9 +-
 drivers/staging/fbtft/fbtft-core.c                 |   9 +-
 drivers/staging/gpib/ni_usb/ni_usb_gpib.c          |   2 +-
 drivers/target/iscsi/iscsi_target.c                |   4 +-
 drivers/tee/optee/call.c                           |   3 +-
 drivers/thermal/db8500_thermal.c                   |  10 +-
 drivers/thermal/qcom/tsens.c                       | 111 ++--
 drivers/thermal/qcom/tsens.h                       |   1 +
 drivers/thermal/tegra/soctherm.c                   |   6 +-
 drivers/thermal/thermal_sysfs.c                    |  12 +-
 drivers/thunderbolt/icm.c                          |  10 +
 drivers/thunderbolt/path.c                         |  31 +-
 drivers/thunderbolt/switch.c                       |   6 +
 drivers/thunderbolt/tb.c                           |   9 +-
 drivers/thunderbolt/tb.h                           |   1 +
 drivers/thunderbolt/tb_regs.h                      |  16 +
 drivers/thunderbolt/tunnel.c                       |  35 ++
 drivers/thunderbolt/usb4.c                         |  35 +-
 drivers/thunderbolt/xdomain.c                      |  49 +-
 drivers/tty/serial/8250/8250_core.c                |   2 +-
 drivers/tty/serial/8250/8250_port.c                |   9 +
 drivers/usb/atm/xusbatm.c                          |   6 +-
 drivers/usb/class/cdc-acm.c                        |   6 +
 drivers/usb/class/usbtmc.c                         |   2 -
 drivers/usb/core/hcd.c                             |  14 +-
 drivers/usb/gadget/udc/aspeed_udc.c                |   7 +-
 drivers/usb/gadget/udc/core.c                      |   7 +-
 drivers/usb/gadget/udc/goku_udc.c                  |   3 +-
 drivers/usb/host/Kconfig                           |   2 +-
 drivers/usb/host/xhci-dbgcap.c                     |   5 +-
 drivers/usb/host/xhci-mem.c                        |   6 -
 drivers/usb/host/xhci-ring.c                       |   9 +-
 drivers/usb/host/xhci.c                            |   4 +
 drivers/usb/host/xhci.h                            |   2 +-
 drivers/usb/serial/spcp8x5.c                       |   6 +-
 drivers/usb/usbip/vhci_sysfs.c                     |  52 +-
 drivers/vdpa/ifcvf/ifcvf_main.c                    |  14 +-
 drivers/vdpa/octeon_ep/octep_vdpa_main.c           |   6 +-
 drivers/vdpa/solidrun/snet_main.c                  |   6 +-
 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c               |   3 +-
 drivers/vdpa/vdpa_sim/vdpa_sim_net.c               |   7 +-
 drivers/vhost/scsi.c                               |   3 +-
 drivers/vhost/vdpa.c                               |  88 +++-
 drivers/video/fbdev/core/fbcon.c                   |   9 +-
 drivers/video/fbdev/pm2fb.c                        |   1 +
 drivers/video/fbdev/vfb.c                          |  11 +-
 drivers/virt/acrn/irqfd.c                          |  75 +--
 drivers/virtio/virtio.c                            |   2 +-
 drivers/virtio/virtio_input.c                      |   9 +-
 drivers/virtio/virtio_mmio.c                       |  16 +-
 drivers/virtio/virtio_pci_common.c                 |   4 +-
 drivers/watchdog/db8500_wdt.c                      |  22 +-
 drivers/watchdog/imx7ulp_wdt.c                     |  10 +-
 drivers/watchdog/lenovo_se10_wdt.c                 |  82 ++-
 drivers/watchdog/msc313e_wdt.c                     |  74 ++-
 drivers/watchdog/sunxi_wdt.c                       |  45 +-
 drivers/watchdog/watchdog_hrtimer_pretimeout.c     |   1 +
 drivers/xen/gntalloc.c                             |  13 +-
 drivers/xen/xen-front-pgdir-shbuf.c                |  12 +-
 fs/9p/vfs_dir.c                                    |  14 +-
 fs/affs/affs.h                                     |   5 -
 fs/affs/super.c                                    |   6 +-
 fs/afs/addr_list.c                                 |   5 +-
 fs/afs/dir_edit.c                                  |   9 +-
 fs/afs/dir_search.c                                |  11 +-
 fs/afs/fs_probe.c                                  |   1 +
 fs/afs/internal.h                                  |   8 +
 fs/afs/server.c                                    |   1 -
 fs/autofs/inode.c                                  |   4 +-
 fs/befs/linuxvfs.c                                 |   3 +-
 fs/bfs/inode.c                                     |   3 +-
 fs/btrfs/disk-io.c                                 |  11 +-
 fs/btrfs/inode.c                                   |   6 +-
 fs/btrfs/ioctl.c                                   |  11 +-
 fs/btrfs/raid-stripe-tree.c                        |  25 +-
 fs/btrfs/raid-stripe-tree.h                        |   1 +
 fs/btrfs/relocation.c                              |  47 +-
 fs/btrfs/scrub.c                                   |  24 +-
 fs/btrfs/send.c                                    |   2 +-
 fs/btrfs/super.c                                   |   2 +-
 fs/btrfs/transaction.c                             |  13 +-
 fs/btrfs/tree-checker.c                            |  41 ++
 fs/btrfs/volumes.c                                 |  10 +-
 fs/btrfs/zoned.c                                   |  13 +-
 fs/btrfs/zstd.c                                    |  11 +-
 fs/cachefiles/namei.c                              |   1 -
 fs/cachefiles/xattr.c                              |  16 +-
 fs/configfs/dir.c                                  |  25 +-
 fs/configfs/symlink.c                              |  24 +-
 fs/dlm/memory.c                                    |   4 +-
 fs/erofs/data.c                                    |   2 +-
 fs/erofs/decompressor.c                            |  55 +-
 fs/erofs/decompressor_lzma.c                       |  18 +-
 fs/erofs/internal.h                                |   6 +-
 fs/erofs/sysfs.c                                   |   4 +-
 fs/erofs/zdata.c                                   |  18 +-
 fs/exec.c                                          |  22 +-
 fs/exfat/nls.c                                     |  19 +-
 fs/f2fs/debug.c                                    |   4 -
 fs/f2fs/f2fs.h                                     |  29 +-
 fs/f2fs/file.c                                     |  18 +-
 fs/f2fs/gc.c                                       |  51 +-
 fs/f2fs/gc.h                                       |  27 +-
 fs/f2fs/inline.c                                   |   7 +
 fs/f2fs/recovery.c                                 |  33 +-
 fs/f2fs/segment.c                                  |  56 +-
 fs/f2fs/segment.h                                  |   6 -
 fs/f2fs/super.c                                    |   4 +-
 fs/f2fs/sysfs.c                                    |  18 +-
 fs/freevxfs/vxfs_bmap.c                            |   3 +-
 fs/fuse/file.c                                     |   3 +-
 fs/fuse/virtio_fs.c                                |   2 +
 fs/gfs2/bmap.c                                     |  19 +
 fs/gfs2/bmap.h                                     |   1 +
 fs/gfs2/file.c                                     |  10 +
 fs/gfs2/quota.c                                    |  36 +-
 fs/hfs/catalog.c                                   |   9 -
 fs/hfs/dir.c                                       |  28 +-
 fs/hfs/hfs.h                                       |   3 +-
 fs/hfs/hfs_fs.h                                    |   2 -
 fs/hfs/inode.c                                     |   4 -
 fs/hfsplus/catalog.c                               |  11 -
 fs/hfsplus/dir.c                                   |  28 +-
 fs/hfsplus/hfsplus_fs.h                            |   5 +-
 fs/hfsplus/inode.c                                 |  40 +-
 fs/hfsplus/super.c                                 |   2 -
 fs/hpfs/super.c                                    |   3 +-
 fs/iomap/direct-io.c                               |   2 +-
 fs/isofs/inode.c                                   |   3 +-
 fs/jfs/super.c                                     |   3 +-
 fs/minix/inode.c                                   |   3 +-
 fs/netfs/buffered_read.c                           |   2 +-
 fs/netfs/buffered_write.c                          |   2 +-
 fs/netfs/direct_write.c                            |  31 +-
 fs/netfs/internal.h                                |  12 +
 fs/netfs/read_retry.c                              |   7 +-
 fs/netfs/write_issue.c                             |   2 +
 fs/netfs/write_retry.c                             |   7 +-
 fs/nfs/nfs42proc.c                                 |  15 +-
 fs/ntfs3/dir.c                                     |   4 +-
 fs/ntfs3/fslog.c                                   |  28 +-
 fs/ntfs3/index.c                                   |  41 +-
 fs/ntfs3/super.c                                   |   8 +-
 fs/ntfs3/xattr.c                                   |   4 +-
 fs/omfs/inode.c                                    |   6 +-
 fs/qnx4/inode.c                                    |   3 +-
 fs/smb/client/cached_dir.c                         |   2 +-
 fs/smb/client/cifs_fs_sb.h                         |   8 +-
 fs/smb/client/cifs_ioctl.h                         |   2 +-
 fs/smb/client/cifs_unicode.c                       |   4 +-
 fs/smb/client/cifsacl.c                            | 105 ++--
 fs/smb/client/cifsfs.c                             |  66 +--
 fs/smb/client/cifsglob.h                           |  10 +-
 fs/smb/client/cifspdu.h                            |   8 -
 fs/smb/client/cifssmb.c                            |   8 +
 fs/smb/client/connect.c                            |  70 +--
 fs/smb/client/dfs_cache.c                          |   2 +-
 fs/smb/client/dir.c                                |  16 +-
 fs/smb/client/file.c                               |  37 +-
 fs/smb/client/fs_context.c                         | 110 ++--
 fs/smb/client/inode.c                              |  80 +--
 fs/smb/client/ioctl.c                              |   2 +-
 fs/smb/client/link.c                               |   6 +-
 fs/smb/client/misc.c                               |  36 +-
 fs/smb/client/readdir.c                            |  25 +-
 fs/smb/client/reparse.c                            |  27 +-
 fs/smb/client/reparse.h                            |   4 +-
 fs/smb/client/smb1ops.c                            |   6 +-
 fs/smb/client/smb2file.c                           |   2 +-
 fs/smb/client/smb2misc.c                           |   4 +-
 fs/smb/client/smb2ops.c                            | 198 +++++--
 fs/smb/client/smb2pdu.c                            |   4 +-
 fs/smb/client/smb2pdu.h                            |  24 -
 fs/smb/client/transport.c                          |  11 +-
 fs/smb/client/xattr.c                              |   6 +-
 fs/smb/common/smb2pdu.h                            |  29 ++
 fs/smb/server/mgmt/share_config.c                  |  36 +-
 fs/smb/server/mgmt/user_session.c                  |  25 +-
 fs/smb/server/misc.c                               |  14 +-
 fs/smb/server/oplock.c                             | 166 ++++--
 fs/smb/server/oplock.h                             |   2 +-
 fs/smb/server/server.c                             |   6 +
 fs/smb/server/smb2misc.c                           |   9 +-
 fs/smb/server/smb2pdu.c                            | 281 +++++-----
 fs/smb/server/smb2pdu.h                            |  20 -
 fs/smb/server/smbacl.c                             |  88 ++--
 fs/smb/server/transport_ipc.c                      |  21 +-
 fs/smb/server/vfs.c                                |  46 +-
 fs/smb/server/vfs_cache.c                          |  28 +-
 fs/smb/server/vfs_cache.h                          |   8 +-
 fs/super.c                                         |   9 +-
 fs/ufs/cylinder.c                                  |  10 +
 fs/ufs/dir.c                                       |   2 +-
 fs/ufs/super.c                                     |  17 +-
 fs/xfs/libxfs/xfs_btree_mem.c                      |   2 +
 fs/xfs/libxfs/xfs_btree_staging.c                  |   4 +-
 fs/xfs/libxfs/xfs_defer.c                          |   2 +-
 fs/xfs/libxfs/xfs_exchmaps.c                       |  10 +
 fs/xfs/libxfs/xfs_parent.c                         |  13 +-
 fs/xfs/libxfs/xfs_rtrefcount_btree.c               |   7 +-
 fs/xfs/libxfs/xfs_rtrmap_btree.c                   |   6 +-
 fs/xfs/scrub/agheader.c                            |   7 +
 fs/xfs/scrub/agheader_repair.c                     |  39 +-
 fs/xfs/scrub/alloc_repair.c                        |  18 +-
 fs/xfs/scrub/bmap.c                                |   2 +-
 fs/xfs/scrub/dir_repair.c                          |  10 +-
 fs/xfs/scrub/dirtree.c                             |  31 +-
 fs/xfs/scrub/dirtree_repair.c                      |   2 +
 fs/xfs/scrub/findparent.c                          |  56 +-
 fs/xfs/scrub/ialloc.c                              |   4 +
 fs/xfs/scrub/metapath.c                            |   4 +-
 fs/xfs/scrub/quota_repair.c                        |  14 +-
 fs/xfs/scrub/quotacheck.c                          |   4 +-
 fs/xfs/scrub/reap.c                                |   6 +-
 fs/xfs/scrub/refcount.c                            |   8 +-
 fs/xfs/scrub/rgsuper.c                             |   6 +-
 fs/xfs/scrub/rtrefcount.c                          |  82 ++-
 fs/xfs/scrub/rtsummary_repair.c                    |   3 +-
 fs/xfs/scrub/scrub.c                               |   3 +-
 fs/xfs/scrub/stats.c                               |  61 ++-
 fs/xfs/scrub/stats.h                               |   4 +-
 fs/xfs/scrub/symlink_repair.c                      |   2 +-
 fs/xfs/scrub/trace.h                               |  35 +-
 fs/xfs/xfs_buf.c                                   |   2 +-
 fs/xfs/xfs_exchmaps_item.c                         |  19 +-
 fs/xfs/xfs_exchrange.c                             |  12 +-
 include/linux/adi-axi-common.h                     |   2 +
 include/linux/bio.h                                |  14 -
 include/linux/bitfield.h                           |   2 +-
 .../bnxt/bnxt_ulp.h => include/linux/bnxt/ulp.h    |   0
 include/linux/bpf.h                                |   1 +
 include/linux/bpf_verifier.h                       |  12 +-
 include/linux/designware_i2c.h                     | 107 ++++
 include/linux/device.h                             |   9 +-
 include/linux/firmware/intel/stratix10-smc.h       |  18 +-
 include/linux/igmp.h                               |   7 +-
 include/linux/kcsan-checks.h                       |   6 +-
 include/linux/mailbox_controller.h                 |   2 +
 include/linux/mfd/db8500-prcmu.h                   | 252 ++++++++-
 include/linux/mfd/dbx500-prcmu.h                   | 575 ---------------------
 include/linux/mmap_lock.h                          |   2 +
 include/linux/ns_common.h                          |   7 +-
 include/linux/nsproxy.h                            |   2 +-
 include/linux/oa_tc6.h                             |  50 ++
 include/linux/perf/riscv_pmu.h                     |   2 +-
 include/linux/platform_data/cros_ec_proto.h        |   2 +
 include/linux/rbtree_augmented.h                   |  35 +-
 include/linux/sched.h                              |   2 +-
 include/linux/sched/signal.h                       |   5 +-
 include/linux/skbuff.h                             |   5 +
 include/linux/switchtec.h                          |   1 +
 include/linux/thunderbolt.h                        |   2 +
 include/media/v4l2-hevc.h                          |  41 ++
 include/net/cfg80211.h                             |   2 +-
 include/net/cfg802154.h                            |   1 +
 include/net/devlink.h                              |  10 +-
 include/net/if_inet6.h                             |   2 -
 include/net/inet_connection_sock.h                 |  20 +-
 include/net/ip.h                                   |   3 +-
 include/net/ip6_route.h                            |   2 +
 include/net/ip_fib.h                               |   5 +
 include/net/netdev_lock.h                          |   6 +
 include/net/netfilter/nf_conntrack_timeout.h       |  27 +-
 include/net/sch_generic.h                          |   2 +-
 include/net/sock.h                                 |   9 +-
 include/net/tcp.h                                  |   3 +-
 include/rdma/ib_umem.h                             |  15 +-
 include/sound/tas2781.h                            |   4 +-
 include/trace/events/cachefiles.h                  |  19 +-
 include/trace/events/icmp.h                        |  13 +-
 include/uapi/drm/amdgpu_drm.h                      |   2 +-
 include/uapi/linux/landlock.h                      |  37 +-
 include/uapi/sound/intel/avs/tokens.h              |   6 +
 init/main.c                                        |  36 +-
 io_uring/net.c                                     |  51 +-
 io_uring/rw.c                                      |  25 +-
 kernel/bpf/bpf_iter.c                              |   2 +-
 kernel/bpf/btf.c                                   |  27 +-
 kernel/bpf/cgroup.c                                |   1 +
 kernel/bpf/disasm.c                                |   5 +-
 kernel/bpf/log.c                                   |   4 +-
 kernel/bpf/stackmap.c                              |   2 +
 kernel/bpf/verifier.c                              | 245 +++++++--
 kernel/cgroup/cgroup.c                             |   6 +-
 kernel/events/core.c                               |   7 +-
 kernel/events/ring_buffer.c                        |   9 +-
 kernel/exit.c                                      |  11 +-
 kernel/fork.c                                      |   2 +-
 kernel/irq/manage.c                                |  37 +-
 kernel/irq/proc.c                                  |   7 +-
 kernel/locking/lockdep.c                           |  50 +-
 kernel/nsproxy.c                                   |   2 +-
 kernel/power/hibernate.c                           |  46 +-
 kernel/printk/nbcon.c                              |   2 +-
 kernel/rcu/tasks.h                                 |   3 +-
 kernel/reboot.c                                    |  19 +-
 kernel/sched/core.c                                |  33 +-
 kernel/sched/deadline.c                            |  18 +-
 kernel/sched/fair.c                                |  29 +-
 kernel/sched/rt.c                                  |  15 +-
 kernel/signal.c                                    |  12 +
 kernel/time/clockevents.c                          |  35 +-
 kernel/time/tick-broadcast.c                       |  36 +-
 kernel/time/tick-internal.h                        |   2 +
 kernel/trace/Makefile                              |   5 +-
 kernel/trace/bpf_trace.c                           |  11 +
 kernel/trace/ring_buffer.c                         |  21 +-
 kernel/trace/trace.c                               |  68 ++-
 kernel/trace/trace.h                               | 125 ++---
 kernel/trace/trace_eprobe.c                        |  19 +-
 kernel/trace/trace_event_perf.c                    |  12 +-
 kernel/trace/trace_events.c                        |   2 +
 kernel/trace/trace_events_hist.c                   | 209 +++-----
 kernel/trace/trace_events_trigger.c                | 344 +++++-------
 kernel/trace/trace_events_user.c                   |  26 +-
 kernel/trace/trace_functions_graph.c               |   3 +
 kernel/trace/trace_probe.c                         |  48 +-
 kernel/trace/trace_probe.h                         |   2 +
 kernel/workqueue.c                                 |   3 +
 mm/damon/core.c                                    |  13 +-
 net/9p/client.c                                    |   2 +-
 net/appletalk/aarp.c                               |   5 +
 net/bluetooth/hci_core.c                           |   4 +-
 net/bluetooth/hci_sysfs.c                          |  17 +-
 net/bluetooth/iso.c                                |  31 +-
 net/bluetooth/l2cap_core.c                         |  38 +-
 net/bluetooth/msft.c                               |   2 +-
 net/bluetooth/rfcomm/core.c                        |   5 +
 net/bridge/br_arp_nd_proxy.c                       |  16 +-
 net/bridge/br_cfm.c                                |  11 +-
 net/bridge/br_device.c                             |   3 +-
 net/bridge/br_fdb.c                                |   7 +-
 net/bridge/br_input.c                              |  37 +-
 net/bridge/br_mrp.c                                |  13 +-
 net/bridge/br_multicast.c                          |  11 +-
 net/bridge/br_private.h                            |  26 +-
 net/core/dev.c                                     |  89 ++--
 net/core/drop_monitor.c                            |  18 +-
 net/core/filter.c                                  |  17 +-
 net/core/gro_cells.c                               |   2 +
 net/core/rtnetlink.c                               |   7 +-
 net/core/skbuff.c                                  |   7 +
 net/devlink/port.c                                 |   2 +
 net/devlink/resource.c                             | 161 ++++--
 net/dsa/tag_brcm.c                                 |   1 +
 net/ethtool/cmis_cdb.c                             |   3 +
 net/ethtool/cmis_fw_update.c                       |   8 +-
 net/ethtool/module.c                               |   2 +
 net/hsr/hsr_forward.c                              |   2 +-
 net/hsr/hsr_netlink.c                              |   9 +-
 net/hsr/hsr_slave.c                                |  11 +-
 net/ieee802154/6lowpan/core.c                      |   2 +-
 net/ipv4/fib_rules.c                               |   4 +-
 net/ipv4/fib_trie.c                                |   4 +
 net/ipv4/fou_core.c                                |   2 +-
 net/ipv4/igmp.c                                    | 210 +++++---
 net/ipv4/inet_connection_sock.c                    |  12 +-
 net/ipv4/inet_diag.c                               |   8 +-
 net/ipv4/inet_fragment.c                           |   6 +
 net/ipv4/ip_output.c                               |   1 +
 net/ipv4/ip_tunnel_core.c                          |   6 +
 net/ipv4/ipmr.c                                    |   3 +-
 net/ipv4/ipmr_base.c                               |   2 +-
 net/ipv4/nexthop.c                                 |   2 +-
 net/ipv4/tcp.c                                     |  14 +-
 net/ipv4/tcp_ipv4.c                                |   8 +-
 net/ipv4/tcp_offload.c                             |  22 +-
 net/ipv4/tcp_output.c                              |   4 +-
 net/ipv4/tcp_timer.c                               |  29 +-
 net/ipv4/udp.c                                     |   4 +-
 net/ipv6/addrconf.c                                |  10 +-
 net/ipv6/af_inet6.c                                |   2 +-
 net/ipv6/exthdrs.c                                 |   4 +-
 net/ipv6/ip6_fib.c                                 |   4 +-
 net/ipv6/ip6_flowlabel.c                           |  19 +
 net/ipv6/ip6_gre.c                                 |   6 +-
 net/ipv6/ip6_output.c                              |   2 +
 net/ipv6/ip6mr.c                                   |   2 +-
 net/ipv6/mcast.c                                   | 116 +++--
 net/ipv6/netfilter/ip6_tables.c                    |   5 +
 net/ipv6/route.c                                   |  14 +-
 net/ipv6/tcp_ipv6.c                                |   8 +-
 net/ipv6/tcpv6_offload.c                           |  15 +-
 net/l2tp/l2tp_debugfs.c                            |   4 +
 net/l2tp/l2tp_ppp.c                                |  56 +-
 net/mac80211/cfg.c                                 |   9 +-
 net/mac80211/chan.c                                |  10 +-
 net/mac80211/ibss.c                                |   9 +-
 net/mac80211/ieee80211_i.h                         |   9 +
 net/mac80211/link.c                                |  30 ++
 net/mac80211/mlme.c                                |  97 ++--
 net/mac80211/parse.c                               |   4 +
 net/mac80211/status.c                              |   9 +-
 net/mac80211/tx.c                                  |   2 +-
 net/mac80211/util.c                                |   6 +-
 net/mac802154/ieee802154_i.h                       |   8 +
 net/mac802154/iface.c                              |   6 +
 net/mac802154/main.c                               |   1 +
 net/mac802154/rx.c                                 | 120 ++++-
 net/mac802154/scan.c                               |  10 +-
 net/mptcp/options.c                                |   7 +-
 net/mptcp/pm.c                                     |   2 +-
 net/mptcp/pm_kernel.c                              |   8 +
 net/mptcp/pm_userspace.c                           |  18 +-
 net/mptcp/protocol.c                               |  55 +-
 net/mptcp/protocol.h                               |   5 +-
 net/mptcp/subflow.c                                |   1 -
 net/mptcp/syncookies.c                             |   5 +-
 net/netfilter/ipset/ip_set_hash_gen.h              |  13 +-
 net/netfilter/ipvs/ip_vs_sync.c                    |  20 +-
 net/netfilter/nf_conntrack_core.c                  |   6 +-
 net/netfilter/nf_conntrack_expect.c                |   3 +-
 net/netfilter/nf_conntrack_netlink.c               |  13 +-
 net/netfilter/nf_conntrack_proto_tcp.c             |  10 +-
 net/netfilter/nf_conntrack_sip.c                   |   2 +-
 net/netfilter/nf_conntrack_timeout.c               |  27 +-
 net/netfilter/nf_log_syslog.c                      |   6 +-
 net/netfilter/nfnetlink_cttimeout.c                | 114 ++--
 net/netfilter/nfnetlink_log.c                      |  28 +-
 net/netfilter/nft_ct.c                             |   7 +-
 net/netfilter/xt_CT.c                              |   2 +-
 net/netlabel/netlabel_unlabeled.c                  |   2 +-
 net/netlink/genetlink.c                            |  21 +-
 net/openvswitch/flow.c                             |   4 +-
 net/openvswitch/flow_table.c                       |   4 +-
 net/packet/af_packet.c                             |   5 +-
 net/phonet/pn_dev.c                                |  30 +-
 net/psp/psp_main.c                                 |   9 +
 net/qrtr/af_qrtr.c                                 |   4 +-
 net/rds/af_rds.c                                   |  63 ++-
 net/rds/connection.c                               | 102 +++-
 net/rds/ib_cm.c                                    |  25 +-
 net/rds/ib_recv.c                                  |   9 +-
 net/rds/message.c                                  |   4 +-
 net/rds/send.c                                     |  16 +-
 net/rds/tcp.c                                      | 164 ++++--
 net/rds/tcp_listen.c                               |   6 +-
 net/sched/act_api.c                                |  46 +-
 net/sched/act_csum.c                               |   8 +-
 net/sched/cls_api.c                                |   8 +-
 net/sched/cls_route.c                              |  76 +--
 net/sched/cls_u32.c                                |  32 +-
 net/sched/sch_api.c                                |   2 +-
 net/sched/sch_drr.c                                |  13 +-
 net/sched/sch_dualpi2.c                            |  10 +-
 net/sched/sch_ets.c                                |  12 +-
 net/sched/sch_fq_pie.c                             |   3 +-
 net/sched/sch_generic.c                            |  24 +-
 net/sched/sch_hhf.c                                |   8 +-
 net/sched/sch_pie.c                                |   2 +-
 net/sched/sch_sfq.c                                |   7 +-
 net/sctp/ipv6.c                                    |  12 +-
 net/sctp/protocol.c                                |  10 +-
 net/sctp/sm_make_chunk.c                           |  14 +-
 net/sctp/sm_sideeffect.c                           |  11 +-
 net/sctp/sm_statefuns.c                            |   5 +
 net/sunrpc/xprtrdma/verbs.c                        |  21 +-
 net/tipc/link.c                                    |   6 +-
 net/tipc/name_table.c                              |  32 +-
 net/tipc/socket.c                                  |   4 +-
 net/tls/tls_main.c                                 |  11 +
 net/tls/tls_sw.c                                   |  12 +
 net/unix/af_unix.c                                 |  12 +-
 net/unix/garbage.c                                 |   1 +
 net/vmw_vsock/hyperv_transport.c                   |   2 +-
 net/vmw_vsock/vmci_transport.c                     |   2 +-
 net/wireless/core.c                                |  21 +
 net/wireless/mlme.c                                | 105 ++--
 net/wireless/nl80211.c                             |  13 +-
 net/wireless/scan.c                                |   6 +-
 net/wireless/wext-sme.c                            |   9 +
 rust/bindings/lib.rs                               |   4 +-
 rust/uapi/lib.rs                                   |   4 +-
 scripts/mksysmap                                   |   4 +-
 scripts/mod/modpost.c                              |  11 +-
 scripts/sorttable.c                                |   2 +-
 security/apparmor/match.c                          |  22 +-
 security/integrity/digsig_asymmetric.c             |   4 +
 security/integrity/ima/ima_appraise.c              |   5 +
 security/landlock/access.h                         |  35 +-
 security/landlock/audit.c                          |  81 +--
 security/landlock/audit.h                          |   3 +-
 security/landlock/domain.c                         |  44 +-
 security/landlock/domain.h                         |   3 +-
 security/landlock/fs.c                             | 353 ++++++-------
 security/landlock/net.c                            |   9 +-
 security/landlock/ruleset.c                        |  89 ++--
 security/landlock/ruleset.h                        |   6 +-
 sound/core/pcm_native.c                            |  35 +-
 sound/core/seq/oss/seq_oss_rw.c                    |   3 +-
 sound/core/seq/seq_prioq.c                         |  14 +-
 sound/core/ump.c                                   |   4 +
 sound/drivers/dummy.c                              |   2 +-
 sound/hda/codecs/Kconfig                           |   1 +
 sound/hda/codecs/ca0132.c                          | 111 +++-
 sound/hda/codecs/conexant.c                        |  12 +
 sound/hda/codecs/realtek/alc269.c                  |  40 ++
 sound/hda/codecs/realtek/alc882.c                  |  22 +
 sound/hda/codecs/side-codecs/Kconfig               |   2 +
 .../hda/codecs/side-codecs/cs35l41_hda_property.c  |   2 +
 sound/hda/codecs/side-codecs/cs35l56_hda.c         |  30 +-
 sound/hda/common/codec.c                           |   4 +-
 sound/hda/core/device.c                            |   5 +-
 sound/isa/es18xx.c                                 |   4 +
 sound/pci/ctxfi/cthw20k2.c                         |   1 +
 sound/pci/ice1712/ice1724.c                        |  19 +-
 sound/soc/amd/renoir/acp3x-pdm-dma.c               |   2 +-
 sound/soc/amd/yc/acp6x-mach.c                      |  21 +
 sound/soc/amd/yc/acp6x-pdm-dma.c                   |   2 +
 sound/soc/bcm/bcm63xx-i2s-whistler.c               |   1 +
 sound/soc/codecs/ab8500-codec.c                    | 543 ++++++++++---------
 sound/soc/codecs/mt6351.c                          |   1 +
 sound/soc/codecs/pcm3168a.c                        |  21 +-
 sound/soc/codecs/rk3328_codec.c                    |  54 +-
 sound/soc/codecs/rt5645.c                          |   4 +
 sound/soc/codecs/rt712-sdca.c                      |  11 +
 sound/soc/fsl/fsl-asoc-card.c                      |   8 +-
 sound/soc/fsl/fsl_micfil.c                         |  21 +-
 sound/soc/intel/atom/sst/sst_pci.c                 |   1 +
 sound/soc/intel/avs/core.c                         |  29 +-
 sound/soc/intel/avs/debugfs.c                      |  12 +-
 sound/soc/intel/avs/path.c                         |  24 +-
 sound/soc/intel/avs/pcm.c                          |  34 +-
 sound/soc/intel/avs/topology.c                     | 162 +++++-
 sound/soc/intel/avs/topology.h                     |  13 +-
 sound/soc/intel/boards/sof_sdw.c                   |  25 +-
 sound/soc/intel/catpt/ipc.c                        |   8 +
 sound/soc/intel/catpt/loader.c                     |   3 +
 sound/soc/intel/catpt/registers.h                  |  12 +
 sound/soc/mediatek/mt8365/mt8365-afe-pcm.c         |  13 +-
 sound/soc/meson/aiu-acodec-ctrl.c                  |   3 +
 sound/soc/meson/aiu-codec-ctrl.c                   |   3 +
 sound/soc/qcom/qdsp6/q6apm.c                       |  10 +-
 sound/soc/rockchip/rockchip_pdm.c                  |  16 +-
 sound/soc/rockchip/rockchip_spdif.c                |   1 +
 sound/soc/soc-topology.c                           |  37 +-
 sound/soc/sprd/sprd-pcm-compress.c                 |  15 +-
 sound/soc/sti/uniperif_reader.c                    |   4 +-
 sound/soc/ti/omap3pandora.c                        |   5 +-
 sound/soc/ux500/ux500_msp_dai.c                    | 189 +++----
 sound/soc/ux500/ux500_msp_dai.h                    |  14 +-
 sound/soc/ux500/ux500_msp_i2s.c                    | 260 +++++++---
 sound/soc/ux500/ux500_msp_i2s.h                    |  12 +-
 sound/usb/caiaq/audio.c                            |  10 +-
 sound/usb/caiaq/device.c                           |  53 +-
 sound/usb/caiaq/device.h                           |   4 +-
 sound/usb/caiaq/input.c                            |   6 +
 sound/usb/caiaq/midi.c                             |   6 +-
 sound/usb/mixer.c                                  |  17 +-
 sound/usb/mixer_maps.c                             |  25 +
 sound/usb/quirks-table.h                           |  22 +
 sound/usb/quirks.c                                 |   4 +
 sound/usb/usx2y/us122l.c                           |   7 +-
 sound/usb/usx2y/usbusx2y.c                         |  49 +-
 sound/usb/usx2y/usbusx2y.h                         |   4 +-
 tools/bootconfig/main.c                            |  13 +-
 tools/bpf/bpftool/Makefile                         |   6 +-
 tools/build/feature/test-bpf.c                     |   2 +
 tools/include/nolibc/crt.h                         |   2 +-
 tools/lib/bpf/bpf.c                                |   2 +
 tools/lib/bpf/gen_loader.c                         |   2 +
 .../xdrgen/templates/C/union/declaration/close.j2  |   4 +
 tools/perf/util/powerpc-vpadtl.c                   |   2 +-
 tools/perf/util/symbol.c                           |  11 +-
 tools/sched_ext/scx_central.bpf.c                  |   6 +-
 tools/sched_ext/scx_flatcg.bpf.c                   |  14 +-
 tools/sched_ext/scx_simple.bpf.c                   |   6 +-
 tools/testing/selftests/alsa/mixer-test.c          |   4 +-
 tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c  |   8 +-
 tools/testing/selftests/bpf/progs/bpf_iter_tcp6.c  |   8 +-
 tools/testing/selftests/bpf/progs/test_bpf_nf.c    |   8 +-
 .../selftests/bpf/progs/test_global_func3.c        |  18 +-
 tools/testing/selftests/cgroup/test_kmem.c         |   2 +-
 tools/testing/selftests/net/fib_nexthops.sh        |  28 +
 tools/testing/selftests/net/mptcp/mptcp_connect.c  |   4 +-
 tools/testing/selftests/net/pmtu.sh                |   2 +-
 tools/testing/selftests/net/test_vxlan_mdb.sh      |   6 +
 tools/testing/selftests/powerpc/tm/tm.h            |   8 +-
 .../selftests/sched_ext/select_cpu_vtime.bpf.c     |   6 +-
 1202 files changed, 16489 insertions(+), 8703 deletions(-)
author maintainer
#1 lore raw

PATCH 1/1250 drm/amd/display: Set gpuvm min page size to 4K on dcn35/36

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Roman Li <[email protected]>

commit 9ce3169430f1db035d491481086e2fae2552569c upstream.

[WHY]
Splash screen corruption on some 8K monitors.

[HOW]
Set GPUVM min page size to 4K for DCN35/36 to use the correct DML2 calculations, avoiding the corruption path observed during splash.

Fixes 115009d11ccf ("drm/amd/display: Add DCN35 DML2 support")
Cc Mario Limonciello <[email protected]>
Cc Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c | 1 +
 1 file changed, 1 insertion(+)
drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c +1 -0
index 3b866e876bf4d..9fea55fddded4 100644
@@ -299,6 +299,7 @@ void dml2_init_socbb_params(struct dml2_context *dml2, const struct dc *in_dc, s
 		out->smn_latency_us = 2;
 		out->dispclk_dppclk_vco_speed_mhz = 3600;
 		out->pct_ideal_dram_bw_after_urgent_pixel_only = 65.0;
+		out->gpuvm_min_page_size_kbytes = 4;
 		break;
 
 	case dml_project_dcn401:
Signature · 1 line
2.53.0
author maintainer
#2 lore raw

PATCH 2/1250 mm/damon/core: avoid infinite kdamond_merge_regions() internal loop

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: SJ Park <[email protected]>

commit 123e4619ab6c8ab1c4cb1d7a58311a2af13929cd upstream.

Patch series "mm/damon: unurgent fixes for infinite loop, NULL de-ref and races", v1.1.

Sashiko found a few issues in DAMON that could cause infinite loop, NULL dereference and monitoring results degradation. The first two sounds scary but the infinite loop happens only under unreasonable user setup. The NULL dereference is only in a unit test. Monitoring results degradation is trivial since it is only best-effort, and those happens from only unlikely races. Still those are bugs that better to fix if possible. Fix those.

This patch (of 6):

Due to online parameter update like events, the number of DAMON regions could be higher than the user-set upper limit. kdamond_merge_regions() repeats merge regions until the number meets the limit, while doubling the merge threshold up to the theoretical maximum threshold. It is tried only up to the theoretical maximum threshold because even the aggressive merging can fail from reducing the number of regions under the user-defined upper limit. For example, there could be many user-defined non-contiguous regions that cannot be merged.

The threshold based loop break condition is evaluated by comparing the threshold for the next merging try against the theoretical maximum threshold. If max_thres is larger than UINT_MAX / 2, doubling the threshold could make it overflow, and bypass the loop break condition. In the case, if the number of regions cannot be reduced under the upper limit like explained above, the loop will run infinitely.

Prevent the case by doing the break condition check before doubling the threshold. Also, prevent the threshold exceeding the maximum threshold, as it could overflow and apply the wrong merge threshold.

This issue is unlikely to occur in real world, since having the max_thres higher than UINT_MAX / 2 require unrealistically large aggregation intervals compared to the sampling interval. Also, it requires an unrealistically large number of uncontiguous regions setup. Nonetheless, the consequence is bad and the fix is simple.

The issue was discovered [1] by Sashiko.

---
 mm/damon/core.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
mm/damon/core.c +9 -4
index a9168a03b3402..6fa02025d2af1 100644
@@ -2415,7 +2415,7 @@ static void kdamond_merge_regions(struct damon_ctx *c, unsigned int threshold,
 
 	max_thres = c->attrs.aggr_interval /
 		(c->attrs.sample_interval ?  c->attrs.sample_interval : 1);
-	do {
+	while (true) {
 		nr_regions = 0;
 		damon_for_each_target(t, c) {
 			damon_merge_regions_of(t, threshold, sz_limit,
@@ -2423,9 +2423,14 @@ static void kdamond_merge_regions(struct damon_ctx *c, unsigned int threshold,
 			nr_regions += damon_nr_regions(t);
 		}
 		count_age = false;
-		threshold = max(1, threshold * 2);
-	} while (nr_regions > c->attrs.max_nr_regions &&
-			threshold / 2 < max_thres);
+		if (nr_regions <= c->attrs.max_nr_regions ||
+				max_thres <= threshold)
+			break;
+		if (threshold < max_thres / 2)
+			threshold = max(1, threshold * 2);
+		else
+			threshold = max_thres;
+	}
 }
 
 /*
Signature · 1 line
2.53.0
author maintainer
#3 lore raw

PATCH 3/1250 drm/panel-edp: Add CSW PNB601LS1-2 and LGD LP116WHA-SPB1

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Terry Hsiao <[email protected]>

[ Upstream commit e88b5cc6d6e5b1ba257f00e5c186ba137e6e8bc3 ]

The raw EDIDs for each panel:

CSW
- PNB601LS1-2
00 ff ff ff ff ff ff 00 0e 77 0a 11 00 00 00 00 30 23 01 04 a5 1a 0e 78 03 a1 35 9b 5e 58 91 25 1c 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 09 1e 56 dc 50 00 28 30 30 20 36 00 00 90 10 00 00 1a 06 14 56 dc 50 00 28 30 30 20 36 00 00 90 10 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 0c 3d ff 0c 3c 7d 0e 0b 17 7d 00 00 00 00 e8

LGD
- LP116WHA-SPB1
00 ff ff ff ff ff ff 00 30 e4 fe 07 01 01 00 00 00 24 01 04 a5 1a 0e 78 03 72 e5 9c 5e 5b 94 27 19 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 d5 21 56 a0 50 00 b2 30 30 20 f8 0c 00 90 10 00 00 1a 8e 16 56 a0 50 00 b2 30 30 20 f8 0c 00 90 10 00 00 1a 00 00 00 fd 00 28 3c 39 39 09 01 0a 20 20 20 20 20 20 00 00 00 02 00 0f 3d ff 0f 3c 7d 0d 0a 15 7d 00 00 00 01 da

70 20 79 02 00 25 00 09 57 52 01 57 52 01 28 3c 80 81 00 15 74 1a 00 00 03 01 28 3c 00 00 4a 5a 4a 5a 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ef 90

---
 drivers/gpu/drm/panel/panel-edp.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/panel/panel-edp.c +2 -0
index b00c91d2a9aea..334d71e282ccd 100644
@@ -2036,6 +2036,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x1100, &delay_200_500_e80_d50, "MNB601LS1-1"),
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x1103, &delay_200_500_e80_d50, "MNB601LS1-3"),
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x1104, &delay_200_500_e50_d100, "MNB601LS1-4"),
+	EDP_PANEL_ENTRY('C', 'S', 'W', 0x110a, &delay_200_500_e50, "PNB601LS1-2"),
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x143f, &delay_200_500_e50, "MNE007QS3-6"),
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x1448, &delay_200_500_e50, "MNE007QS3-7"),
 	EDP_PANEL_ENTRY('C', 'S', 'W', 0x1457, &delay_80_500_e80_p2e200, "MNE007QS3-8"),
@@ -2077,6 +2078,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('L', 'G', 'D', 0x05af, &delay_200_500_e200_d200, "Unknown"),
 	EDP_PANEL_ENTRY('L', 'G', 'D', 0x05f1, &delay_200_500_e200_d200, "Unknown"),
 	EDP_PANEL_ENTRY('L', 'G', 'D', 0x0778, &delay_200_500_e200_d200, "134WT1"),
+	EDP_PANEL_ENTRY('L', 'G', 'D', 0x07fe, &delay_200_500_e200_d200, "LP116WHA-SPB1"),
 
 	EDP_PANEL_ENTRY('S', 'H', 'P', 0x1511, &delay_200_500_e50, "LQ140M1JW48"),
 	EDP_PANEL_ENTRY('S', 'H', 'P', 0x1523, &delay_80_500_e50, "LQ140M1JW46"),
Signature · 1 line
2.53.0
author maintainer
#4 lore raw

PATCH 4/1250 drm/gem: Consider GEM object reclaimable if shrinking fails

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Boris Brezillon <[email protected]>

[ Upstream commit 71c8224a18825102ee1e5e70498f96f6c2d2a81d ]

If the object wasn't moved to a different LRU after the shrink callback returns, it means the buffer is still reclaimable. Update the remaining counter to reflect that.

v2:
- Collect R-b

v3:
- Collect R-b

v4:
- No changes

v5:
- No changes

v6:
- No changes

v7:
- No changes

---
 drivers/gpu/drm/drm_gem.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/gpu/drm/drm_gem.c +10 -0
index 5c4a113b08941..224ed96bd0d4a 100644
@@ -1601,6 +1601,16 @@ drm_gem_lru_scan(struct drm_gem_lru *lru,
 			 */
 			WARN_ON(obj->lru == &still_in_lru);
 			WARN_ON(obj->lru == lru);
+		} else if (obj->lru == &still_in_lru) {
+			/*
+			 * If the object wasn't moved and wasn't shrunk either,
+			 * it's still remaining as reclaimable. Note that
+			 * obj->lru is supposed to be checked with the LRU lock
+			 * held for an accurate result, but we don't care about
+			 * accuracy here. Worst thing that could happen is an
+			 * extra scan.
+			 */
+			*remaining += obj->size >> PAGE_SHIFT;
 		}
 
 		dma_resv_unlock(obj->resv);
Signature · 1 line
2.53.0
author maintainer
#5 lore raw

PATCH 5/1250 bus: fsl-mc: wait for the MC firmware to complete its boot

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ioana Ciornei <[email protected]>

[ Upstream commit 208858b1b48eba83d073542372329cf8ed606526 ]

There are use cases in which the Management Complex firmware boot process is started by the bootloader which does not wait for the boot to complete. This is mainly done in order to reduce the overall boot time of a DPAA2 based SoC.

In this kind of circumstance, the fsl-mc bus driver needs to make sure that the MC firmware boot process is finished before proceeding to the usual operations such as interrogating the firmware to gather all existent DPAA2 objects, creating the fsl-mc devices on the bus etc.

Add this kind of check early in the boot process of the fsl-mc bus and defer the probe in case the firmware is still in its boot process.

---
 drivers/bus/fsl-mc/fsl-mc-bus.c | 46 +++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
drivers/bus/fsl-mc/fsl-mc-bus.c +46 -0
index 996379ace3764..21eb0a3c190fc 100644
@@ -66,6 +66,13 @@ struct fsl_mc_addr_translation_range {
 #define GCR1_P1_STOP	BIT(31)
 #define GCR1_P2_STOP	BIT(30)
 
+#define FSL_MC_GSR		0x8
+#define FSL_MC_GSR_BOOT_DONE	BIT(0)
+#define FSL_MC_GSR_MCS_MASK	GENMASK(7, 0)
+#define FSL_MC_GSR_MCS_ERR_MASK	GENMASK(7, 1)
+#define FSL_MC_GSR_BC_MASK	GENMASK(15, 8)
+#define FSL_MC_GSR_BC_SHIFT	8
+
 #define FSL_MC_FAPR	0x28
 #define MC_FAPR_PL	BIT(18)
 #define MC_FAPR_BMT	BIT(17)
@@ -1007,6 +1014,41 @@ static int get_mc_addr_translation_ranges(struct device *dev,
 	return 0;
 }
 
+static u32 fsl_mc_read_gsr(struct fsl_mc *mc)
+{
+	return readl(mc->fsl_mc_regs + FSL_MC_GSR);
+}
+
+static int fsl_mc_firmware_check(struct platform_device *pdev)
+{
+	struct fsl_mc *mc = platform_get_drvdata(pdev);
+	u32 gsr, boot_done, boot_code, mcs;
+
+	gsr = fsl_mc_read_gsr(mc);
+	boot_code = (gsr & FSL_MC_GSR_BC_MASK) >> FSL_MC_GSR_BC_SHIFT;
+	if (boot_code == 0xDD) {
+		dev_err(&pdev->dev,
+			"fsl-mc: DPL processing was not started, DPAA2 will not work!\n");
+		return -EOPNOTSUPP;
+	}
+
+	boot_done = gsr & FSL_MC_GSR_BOOT_DONE;
+	if (!boot_done) {
+		dev_dbg(&pdev->dev,
+			"fsl-mc: DPL processing in progress, defer probe\n");
+		return -EPROBE_DEFER;
+	}
+
+	mcs = gsr & FSL_MC_GSR_MCS_MASK;
+	if (mcs & FSL_MC_GSR_MCS_ERR_MASK) {
+		dev_err(&pdev->dev,
+			"fsl-mc: MC boot completed with error 0x%x\n", mcs);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 /*
  * fsl_mc_bus_probe - callback invoked when the root MC bus is being
  * added
@@ -1071,6 +1113,10 @@ static int fsl_mc_bus_probe(struct platform_device *pdev)
 		       mc->fsl_mc_regs + FSL_MC_GCR1);
 	}
 
+	error = fsl_mc_firmware_check(pdev);
+	if (error)
+		return error;
+
 	/*
 	 * Get physical address of MC portal for the root DPRC:
 	 */
Signature · 1 line
2.53.0
author maintainer
#6 lore raw

PATCH 6/1250 drm/xe/guc: Add support for NO_RESPONSE_BUSY in CTB

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Michal Wajdeczko <[email protected]>

[ Upstream commit 4d33314decfeac8b82d771a1bd083a59f4ac6fae ]

We only have support for G2H NO_RESPONSE_BUSY messages over MMIO, but it turned out that GuC also uses that type of messages in CTB.

The following error was recently observed on BMG after adding VGT policy updates to the GT restart sequence:

[] xe 0000:03:00.0: [drm] *ERROR* Tile0: GT1: G2H channel broken on read, type=3, reset required [] xe 0000:03:00.0: [drm] *ERROR* Tile0: GT1: CT dequeue failed: -95
...
[] xe 0000:03:00.0: [drm] *ERROR* Tile0: GT1: Timed out wait for G2H, fence 21965, action 5502, done no [] xe 0000:03:00.0: [drm] PF: Tile0: GT1: Failed to push 1 policy KLV (-ETIME)
[] xe 0000:03:00.0: [drm] Tile0: GT1: { key 0x8004 : no value } # engine_group_config

where type=3 was this unrecognized NO_RESPONSE_BUSY message.

Note that GuC might send the real RESPONSE message right after the BUSY message, so we must be prepared to update our g2h_fence data twice before sender actually wakes up and clears the flags.

---
 drivers/gpu/drm/xe/xe_guc_ct.c | 38 ++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)
drivers/gpu/drm/xe/xe_guc_ct.c +36 -2
index 4158e8af13908..b9d265ad06a0e 100644
@@ -82,13 +82,16 @@ static void ct_dead_capture(struct xe_guc_ct *ct, struct guc_ctb *ctb, u32 reaso
 struct g2h_fence {
 	u32 *response_buffer;
 	u32 seqno;
+	/* fields below this point are setup based on the response */
 	u32 response_data;
 	u16 response_len;
 	u16 error;
 	u16 hint;
 	u16 reason;
+	u32 counter;
 	bool cancel;
 	bool retry;
+	bool wait;
 	bool fail;
 	bool done;
 };
@@ -102,6 +105,11 @@ static void g2h_fence_init(struct g2h_fence *g2h_fence, u32 *response_buffer)
 	g2h_fence->seqno = ~0x0;
 }
 
+static void g2h_fence_reinit(struct g2h_fence *g2h_fence)
+{
+	memset_after(g2h_fence, 0, seqno);
+}
+
 static void g2h_fence_cancel(struct g2h_fence *g2h_fence)
 {
 	g2h_fence->cancel = true;
@@ -1134,6 +1142,7 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
 	/* READ_ONCEs pairs with WRITE_ONCEs in parse_g2h_response
 	 * and g2h_fence_cancel.
 	 */
+wait_again:
 	ret = wait_event_timeout(ct->g2h_fence_wq, READ_ONCE(g2h_fence.done), HZ);
 	if (!ret) {
 		LNL_FLUSH_WORK(&ct->g2h_worker);
@@ -1159,6 +1168,14 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
 		return -ETIME;
 	}
 
+	if (g2h_fence.wait) {
+		xe_gt_dbg(gt, "H2G action %#x busy: counter %u\n",
+			  action[0], g2h_fence.counter);
+		/* we can't leave any response data if we want to wait again */
+		g2h_fence_reinit(&g2h_fence);
+		mutex_unlock(&ct->lock);
+		goto wait_again;
+	}
 	if (g2h_fence.retry) {
 		xe_gt_dbg(gt, "H2G action %#x retrying: reason %#x\n",
 			  action[0], g2h_fence.reason);
@@ -1354,7 +1371,12 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
 		return -EPROTO;
 	}
 
-	g2h_fence = xa_erase(&ct->fence_lookup, fence);
+	/* don't erase as we still expect a final response with the same fence */
+	if (type == GUC_HXG_TYPE_NO_RESPONSE_BUSY)
+		g2h_fence = xa_load(&ct->fence_lookup, fence);
+	else
+		g2h_fence = xa_erase(&ct->fence_lookup, fence);
+
 	if (unlikely(!g2h_fence)) {
 		/* Don't tear down channel, as send could've timed out */
 		/* CT_DEAD(ct, NULL, PARSE_G2H_UNKNOWN); */
@@ -1365,6 +1387,12 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
 
 	xe_gt_assert(gt, fence == g2h_fence->seqno);
 
+	/*
+	 * reinit as we might have already process this g2h_fence before
+	 * if we received a NO_RESPONSE_BUSY reply
+	 */
+	g2h_fence_reinit(g2h_fence);
+
 	if (type == GUC_HXG_TYPE_RESPONSE_FAILURE) {
 		g2h_fence->fail = true;
 		g2h_fence->error = FIELD_GET(GUC_HXG_FAILURE_MSG_0_ERROR, hxg[0]);
@@ -1372,6 +1400,9 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
 	} else if (type == GUC_HXG_TYPE_NO_RESPONSE_RETRY) {
 		g2h_fence->retry = true;
 		g2h_fence->reason = FIELD_GET(GUC_HXG_RETRY_MSG_0_REASON, hxg[0]);
+	} else if (type == GUC_HXG_TYPE_NO_RESPONSE_BUSY) {
+		g2h_fence->wait = true;
+		g2h_fence->counter = FIELD_GET(GUC_HXG_BUSY_MSG_0_COUNTER, hxg[0]);
 	} else if (g2h_fence->response_buffer) {
 		g2h_fence->response_len = hxg_len;
 		memcpy(g2h_fence->response_buffer, hxg, hxg_len * sizeof(u32));
@@ -1379,7 +1410,9 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
 		g2h_fence->response_data = FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, hxg[0]);
 	}
 
-	g2h_release_space(ct, GUC_CTB_HXG_MSG_MAX_LEN);
+	/* don't release any space if it was an intermediate message */
+	if (!g2h_fence->wait)
+		g2h_release_space(ct, GUC_CTB_HXG_MSG_MAX_LEN);
 
 	/* WRITE_ONCE pairs with READ_ONCEs in guc_ct_send_recv. */
 	WRITE_ONCE(g2h_fence->done, true);
@@ -1416,6 +1449,7 @@ static int parse_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
 	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
 	case GUC_HXG_TYPE_RESPONSE_FAILURE:
 	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
+	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
 		ret = parse_g2h_response(ct, msg, len);
 		break;
 	default:
Signature · 1 line
2.53.0
author maintainer
#7 lore raw

PATCH 7/1250 drm: rz-du: Ensure correct suspend/resume ordering with VSP

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Tommaso Merciai <[email protected]>

[ Upstream commit c94e765abb051df62b9f7c27116ef9307216c868 ]

The VSP serves as an interface to memory and a compositor to the DU. It therefore needs to be suspended after and resumed before the DU, to be properly stopped and restarted in a controlled fashion driven by the DU driver. This currently works by chance. Avoid relying on luck by enforcing the correct suspend/resume ordering with device links.

Based on similar work done by Laurent Pinchart for R-Car DU. commit db5be3a7d6bd ("drm: rcar-du: Ensure correct suspend/resume ordering with VSP")

---
 drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c | 16 ++++++++++++++++
 drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h |  2 ++
 2 files changed, 18 insertions(+)
drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c +16 -0
index 040d4e4aff000..ab49604d69acf 100644
@@ -20,6 +20,7 @@
 #include <drm/drm_vblank.h>
 
 #include <linux/bitops.h>
+#include <linux/device.h>
 #include <linux/dma-mapping.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
@@ -293,6 +294,9 @@ static void rzg2l_du_vsp_cleanup(struct drm_device *dev, void *res)
 {
 	struct rzg2l_du_vsp *vsp = res;
 
+	if (vsp->link)
+		device_link_del(vsp->link);
+
 	put_device(vsp->vsp);
 }
 
@@ -317,6 +321,18 @@ int rzg2l_du_vsp_init(struct rzg2l_du_vsp *vsp, struct device_node *np,
 	if (ret < 0)
 		return ret;
 
+	/*
+	 * Enforce suspend/resume ordering between the DU (consumer) and the
+	 * VSP (supplier). The DU will be suspended before and resume after the
+	 * VSP.
+	 */
+	vsp->link = device_link_add(rcdu->dev, vsp->vsp, DL_FLAG_STATELESS);
+	if (!vsp->link) {
+		dev_err(rcdu->dev, "Failed to create device link to VSP %s\n",
+			dev_name(vsp->vsp));
+		return -EINVAL;
+	}
+
 	ret = vsp1_du_init(vsp->vsp);
 	if (ret < 0)
 		return ret;
drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h +2 -0
index 322eb80dcbaff..a22aaf0843ed7 100644
@@ -15,6 +15,7 @@
 #include <linux/scatterlist.h>
 
 struct device;
+struct device_link;
 struct drm_framebuffer;
 struct rzg2l_du_device;
 struct rzg2l_du_format_info;
@@ -29,6 +30,7 @@ struct rzg2l_du_vsp_plane {
 struct rzg2l_du_vsp {
 	unsigned int index;
 	struct device *vsp;
+	struct device_link *link;
 	struct rzg2l_du_device *dev;
 };
 
Signature · 1 line
2.53.0
author maintainer
#8 lore raw

PATCH 8/1250 drm: renesas: rzg2l_mipi_dsi: Fix deassert/assert of CMN_RSTB signal

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Biju Das <[email protected]>

[ Upstream commit 8065890f5cda3f8a503f3b9d326aab0e9cca39e7 ]

The RZ/G2L hardware manual (Rev. 1.50, May 2025), Section 34.4.2.1, requires deasserting the CMN_RSTB signal after setting the Link registers. Move the reset_control_deassert() call from rzg2l_mipi_dsi_dphy_init() to rzg2l_mipi_dsi_startup(), placing it after the Link register writes. This reset signal is optional for RZ/V2H SoCs, so add a NULL check. Drop the unused ret variable from rzg2l_mipi_dsi_dphy_init().

The CMN_RSTB signal is not required for reading PHY registers in the probe. Move reset_control_assert() from rzg2l_mipi_dsi_dphy_exit() to rzg2l_mipi_dsi_stop(), placing it before the dphy_exit() call. Since this reset signal is optional for RZ/V2H, the call is a no-op on that SoC.

---
 drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +9 -9
index 04a24ff9dde15..1c6f29c285b65 100644
@@ -228,7 +228,6 @@ static int rzg2l_mipi_dsi_dphy_init(struct rzg2l_mipi_dsi *dsi,
 	u32 dphytim1;
 	u32 dphytim2;
 	u32 dphytim3;
-	int ret;
 
 	/* All DSI global operation timings are set with recommended setting */
 	for (i = 0; i < ARRAY_SIZE(rzg2l_mipi_dsi_global_timings); ++i) {
@@ -268,12 +267,6 @@ static int rzg2l_mipi_dsi_dphy_init(struct rzg2l_mipi_dsi *dsi,
 	rzg2l_mipi_dsi_phy_write(dsi, DSIDPHYTIM2, dphytim2);
 	rzg2l_mipi_dsi_phy_write(dsi, DSIDPHYTIM3, dphytim3);
 
-	ret = reset_control_deassert(dsi->rstc);
-	if (ret < 0)
-		return ret;
-
-	fsleep(1000);
-
 	return 0;
 }
 
@@ -285,8 +278,6 @@ static void rzg2l_mipi_dsi_dphy_exit(struct rzg2l_mipi_dsi *dsi)
 
 	dphyctrl0 &= ~(DSIDPHYCTRL0_EN_LDO1200 | DSIDPHYCTRL0_EN_BGR);
 	rzg2l_mipi_dsi_phy_write(dsi, DSIDPHYCTRL0, dphyctrl0);
-
-	reset_control_assert(dsi->rstc);
 }
 
 static int rzg2l_dphy_conf_clks(struct rzg2l_mipi_dsi *dsi, unsigned long mode_freq,
@@ -393,6 +384,14 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi *dsi,
 	dsisetr |= FIELD_PREP(DSISETR_MRPSZ, RZG2L_DCS_BUF_SIZE);
 	rzg2l_mipi_dsi_link_write(dsi, DSISETR, dsisetr);
 
+	if (dsi->rstc) {
+		ret = reset_control_deassert(dsi->rstc);
+		if (ret < 0)
+			goto err_phy;
+
+		fsleep(1000);
+	}
+
 	return 0;
 
 err_phy:
@@ -404,6 +403,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi *dsi,
 
 static void rzg2l_mipi_dsi_stop(struct rzg2l_mipi_dsi *dsi)
 {
+	reset_control_assert(dsi->rstc);
 	dsi->info->dphy_exit(dsi);
 	pm_runtime_put(dsi->dev);
 }
Signature · 1 line
2.53.0
author maintainer
#9 lore raw

PATCH 9/1250 drm/amd/display: Fix DPMS using partially updated pipe context

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Dominik Kaszewski <[email protected]>

[ Upstream commit 6fd45b5d8955bbc362ac3dfe181529f7b1cfd224 ]

[Why & How]
DPMS functions should not use partially updated pipe context passed as argument of commit_planes_do_stream_update, and instead use the one in current_state, which is guaranteed to be the most recently programmed HW config.

---
 drivers/gpu/drm/amd/display/dc/core/dc.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)
drivers/gpu/drm/amd/display/dc/core/dc.c +14 -7
index 927837249479f..627a9fb4c551e 100644
@@ -3690,27 +3690,34 @@ static void commit_planes_do_stream_update(struct dc *dc,
 				resource_build_test_pattern_params(&context->res_ctx, pipe_ctx);
 			}
 
+			// DPMS should not use partially updated pipe context
+			struct pipe_ctx *dpms_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[j];
+
 			if (stream_update->dpms_off) {
 				if (*stream_update->dpms_off) {
-					dc->link_srv->set_dpms_off(pipe_ctx);
+					dc->link_srv->set_dpms_off(dpms_pipe_ctx);
 					/* for dpms, keep acquired resources*/
-					if (pipe_ctx->stream_res.audio && !dc->debug.az_endpoint_mute_only)
-						pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio);
+					if (dpms_pipe_ctx->stream_res.audio && !dc->debug.az_endpoint_mute_only) {
+						struct audio *audio = dpms_pipe_ctx->stream_res.audio;
+
+						audio->funcs->az_disable(audio);
+					}
 
 					dc->optimized_required = true;
 
 				} else {
 					if (get_seamless_boot_stream_count(context) == 0)
 						dc->hwss.prepare_bandwidth(dc, dc->current_state);
-					dc->link_srv->set_dpms_on(dc->current_state, pipe_ctx);
+					dc->link_srv->set_dpms_on(dc->current_state, dpms_pipe_ctx);
 				}
-			} else if (pipe_ctx->stream->link->wa_flags.blank_stream_on_ocs_change && stream_update->output_color_space
-					&& !stream->dpms_off && dc_is_dp_signal(pipe_ctx->stream->signal)) {
+			} else if (dpms_pipe_ctx->stream->link->wa_flags.blank_stream_on_ocs_change &&
+					stream_update->output_color_space &&
+					!stream->dpms_off && dc_is_dp_signal(dpms_pipe_ctx->stream->signal)) {
 				/*
 				 * Workaround for firmware issue in some receivers where they don't pick up
 				 * correct output color space unless DP link is disabled/re-enabled
 				 */
-				dc->link_srv->set_dpms_on(dc->current_state, pipe_ctx);
+				dc->link_srv->set_dpms_on(dc->current_state, dpms_pipe_ctx);
 			}
 
 			if (stream_update->abm_level && pipe_ctx->stream_res.abm) {
Signature · 1 line
2.53.0
author maintainer
#10 lore raw

PATCH 10/1250 drm/panel: jadard-jd9365da-h3: set prepare_prev_first

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Dmitry Baryshkov <[email protected]>

[ Upstream commit b55a4b5d4769a650f52ea3f1ae680610169d125e ]

Sending DSI commands from the prepare() callback requires DSI link to be up at that point. For DSI hosts is guaranteed only if the panel driver sets the .prepare_prev_first flag. Set it to let these panels work with the DSI hosts which don't power on the link in their .mode_set callback.

---
 drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c +2 -0
index 5c2530598ddb9..9e5287829b952 100644
@@ -1157,6 +1157,8 @@ static int jadard_dsi_probe(struct mipi_dsi_device *dsi)
 	if (ret)
 		return ret;
 
+	jadard->panel.prepare_prev_first = true;
+
 	drm_panel_add(&jadard->panel);
 
 	mipi_dsi_set_drvdata(dsi, jadard);
Signature · 1 line
2.53.0
author maintainer
#11 lore raw

PATCH 11/1250 drm/amd/pm: Check SMUv13.0.6/12 metrics integrity

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Lijo Lazar <[email protected]>

[ Upstream commit 6fc63d80c01a480e3d2c98620f07d46e5bcfc85a ]

Check if data fetch is proper by matching the first few bytes against 0xFFs. If 0xFFs, that means data couldn't be read properly.

---
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c +4 -0
index 43965b1135fe7..0d065e4073655 100644
@@ -768,6 +768,10 @@ int smu_v13_0_6_get_metrics_table(struct smu_context *smu, void *metrics_table,
 		amdgpu_asic_invalidate_hdp(smu->adev, NULL);
 		memcpy(smu_table->metrics_table, table->cpu_addr, table_size);
 
+		if (!memchr_inv(smu_table->metrics_table, 0xff,
+				min(16, table_size)))
+			return -EHWPOISON;
+
 		smu_table->metrics_time = jiffies;
 	}
 
Signature · 1 line
2.53.0
author maintainer
#12 lore raw

PATCH 12/1250 wifi: ath9k: Obtain system GPIOS from descriptors

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Linus Walleij <[email protected]>

[ Upstream commit 34a5329beee86a22a446e27eb37f06caa63479ca ]

The ath9k has an odd use of system-wide GPIOs: if the chip does not have internal GPIO capability, it will try to obtain a GPIO line from the system GPIO controller:

  if (BIT(gpio) & ah->caps.gpio_mask)
        ath9k_hw_gpio_cfg_wmac(...);
  else if (AR_SREV_SOC(ah))
        ath9k_hw_gpio_cfg_soc(ah, gpio, out, label);

Where ath9k_hw_gpio_cfg_soc() will attempt to issue gpio_request_one() passing the local GPIO number of the controller (0..31) to gpio_request_one().

This is somewhat peculiar and possibly even dangerous: there is nowadays no guarantee of the numbering of these system-wide GPIOs, and assuming that GPIO 0..31 as used by ath9k would correspond to GPIOs 0..31 on the system as a whole seems a bit wild.

Register all 32 GPIOs at index 0..31 directly in the ATH79K GPIO driver and associate with the NULL device (making them widely available) if and only if we are probing ATH79K wifi from the AHB bus (used for SoCs). We obtain these offsets from the NULL device if necessary.

These GPIOs should ideally be defined in the device tree instead, but we have no control over that for the legacy code path.

Testcompiled with the ath79 defconfig.

---
 drivers/gpio/gpio-ath79.c           | 57 ++++++++++++++++++++++++++++-
 drivers/net/wireless/ath/ath9k/hw.c | 33 +++++++++++------
 drivers/net/wireless/ath/ath9k/hw.h |  3 +-
 3 files changed, 80 insertions(+), 13 deletions(-)
drivers/gpio/gpio-ath79.c +56 -1
index 2ad9f6ac66362..85bd994d15d48 100644
@@ -11,6 +11,7 @@
 #include <linux/device.h>
 #include <linux/gpio/driver.h>
 #include <linux/gpio/generic.h>
+#include <linux/gpio/machine.h> /* For WLAN GPIOs */
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/mod_devicetable.h>
@@ -214,6 +215,56 @@ static const struct of_device_id ath79_gpio_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, ath79_gpio_of_match);
 
+#if IS_ENABLED(CONFIG_ATH9K_AHB)
+/*
+ * This registers all of the ath79k GPIOs as descriptors to be picked
+ * directly from the ATH79K wifi driver if the two are jitted together
+ * in the same SoC.
+ */
+#define ATH79K_WIFI_DESCS 32
+static int ath79_gpio_register_wifi_descriptors(struct device *dev,
+						const char *label)
+{
+	struct gpiod_lookup_table *lookup;
+	int i;
+
+	/* Create a gpiod lookup using gpiochip-local offsets + 1 for NULL */
+	lookup = devm_kzalloc(dev,
+			      struct_size(lookup, table, ATH79K_WIFI_DESCS + 1),
+			      GFP_KERNEL);
+	if (!lookup)
+		return -ENOMEM;
+
+	/*
+	 * Ugly system-wide lookup for the NULL device: we know this
+	 * is already NULL but explicitly assign it here for people to
+	 * know what is going on. (Yes this is an ugly legacy hack, live
+	 * with it.)
+	 */
+	lookup->dev_id = NULL;
+
+	for (i = 0; i < ATH79K_WIFI_DESCS; i++) {
+		lookup->table[i] =
+			/*
+			 * Set the HW offset on the chip and the lookup
+			 * index to the same value, so looking up index 0
+			 * will get HW offset 0, index 1 HW offset 1 etc.
+			 */
+			GPIO_LOOKUP_IDX(label, i, "ath9k", i, GPIO_ACTIVE_HIGH);
+	}
+
+	gpiod_add_lookup_table(lookup);
+
+	return 0;
+}
+#else
+static int ath79_gpio_register_wifi_descriptors(struct device *dev,
+						const char *label)
+{
+	return 0;
+}
+#endif
+
 static int ath79_gpio_probe(struct platform_device *pdev)
 {
 	struct gpio_generic_chip_config config;
@@ -276,7 +327,11 @@ static int ath79_gpio_probe(struct platform_device *pdev)
 		girq->handler = handle_simple_irq;
 	}
 
-	return devm_gpiochip_add_data(dev, &ctrl->chip.gc, ctrl);
+	err = devm_gpiochip_add_data(dev, &ctrl->chip.gc, ctrl);
+	if (err)
+		return err;
+
+	return ath79_gpio_register_wifi_descriptors(dev, ctrl->chip.gc.label);
 }
 
 static struct platform_driver ath79_gpio_driver = {
drivers/net/wireless/ath/ath9k/hw.c +22 -11
index 14de62c1a32bd..9a32cf683c4fd 100644
@@ -21,7 +21,7 @@
 #include <linux/time.h>
 #include <linux/bitops.h>
 #include <linux/etherdevice.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/unaligned.h>
 
 #include "hw.h"
@@ -2719,19 +2719,28 @@ static void ath9k_hw_gpio_cfg_output_mux(struct ath_hw *ah, u32 gpio, u32 type)
 static void ath9k_hw_gpio_cfg_soc(struct ath_hw *ah, u32 gpio, bool out,
 				  const char *label)
 {
+	enum gpiod_flags flags = out ? GPIOD_OUT_LOW : GPIOD_IN;
+	struct gpio_desc *gpiod;
 	int err;
 
-	if (ah->caps.gpio_requested & BIT(gpio))
+	if (ah->gpiods[gpio])
 		return;
 
-	err = devm_gpio_request_one(ah->dev, gpio, out ? GPIOF_OUT_INIT_LOW : GPIOF_IN, label);
+	/*
+	 * Obtains a system specific GPIO descriptor from another GPIO controller.
+	 * Ideally this should come from the device tree, this is a legacy code
+	 * path.
+	 */
+	gpiod = gpiod_get_index(NULL, "ath9k", gpio, flags);
+	err = PTR_ERR_OR_ZERO(gpiod);
 	if (err) {
 		ath_err(ath9k_hw_common(ah), "request GPIO%d failed:%d\n",
 			gpio, err);
 		return;
 	}
 
-	ah->caps.gpio_requested |= BIT(gpio);
+	gpiod_set_consumer_name(gpiod, label);
+	ah->gpiods[gpio] = gpiod;
 }
 
 static void ath9k_hw_gpio_cfg_wmac(struct ath_hw *ah, u32 gpio, bool out,
@@ -2791,10 +2800,12 @@ void ath9k_hw_gpio_free(struct ath_hw *ah, u32 gpio)
 	if (!AR_SREV_SOC(ah))
 		return;
 
-	WARN_ON(gpio >= ah->caps.num_gpio_pins);
+	if (ah->gpiods[gpio]) {
+		gpiod_put(ah->gpiods[gpio]);
+		ah->gpiods[gpio] = NULL;
+	}
 
-	if (ah->caps.gpio_requested & BIT(gpio))
-		ah->caps.gpio_requested &= ~BIT(gpio);
+	WARN_ON(gpio >= ah->caps.num_gpio_pins);
 }
 EXPORT_SYMBOL(ath9k_hw_gpio_free);
 
@@ -2822,8 +2833,8 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio)
 			val = REG_READ(ah, AR_GPIO_IN(ah)) & BIT(gpio);
 		else
 			val = MS_REG_READ(AR, gpio);
-	} else if (BIT(gpio) & ah->caps.gpio_requested) {
-		val = gpio_get_value(gpio) & BIT(gpio);
+	} else if (ah->gpiods[gpio]) {
+		val = gpiod_get_value(ah->gpiods[gpio]);
 	} else {
 		WARN_ON(1);
 	}
@@ -2846,8 +2857,8 @@ void ath9k_hw_set_gpio(struct ath_hw *ah, u32 gpio, u32 val)
 			AR7010_GPIO_OUT : AR_GPIO_IN_OUT(ah);
 
 		REG_RMW(ah, out_addr, val << gpio, BIT(gpio));
-	} else if (BIT(gpio) & ah->caps.gpio_requested) {
-		gpio_set_value(gpio, val);
+	} else if (ah->gpiods[gpio]) {
+		gpiod_set_value(ah->gpiods[gpio], val);
 	} else {
 		WARN_ON(1);
 	}
drivers/net/wireless/ath/ath9k/hw.h +2 -1
index eaa07d6dbde00..d9d2f64c55700 100644
@@ -19,6 +19,7 @@
 
 #include <linux/if_ether.h>
 #include <linux/delay.h>
+#include <linux/gpio/consumer.h>
 #include <linux/io.h>
 #include <linux/firmware.h>
 
@@ -302,7 +303,6 @@ struct ath9k_hw_capabilities {
 	u8 max_rxchains;
 	u8 num_gpio_pins;
 	u32 gpio_mask;
-	u32 gpio_requested;
 	u8 rx_hp_qdepth;
 	u8 rx_lp_qdepth;
 	u8 rx_status_len;
@@ -783,6 +783,7 @@ struct ath_hw {
 	struct ath9k_hw_capabilities caps;
 	struct ath9k_channel channels[ATH9K_NUM_CHANNELS];
 	struct ath9k_channel *curchan;
+	struct gpio_desc *gpiods[32];
 
 	union {
 		struct ar5416_eeprom_def def;
Signature · 1 line
2.53.0
author maintainer
#13 lore raw

PATCH 13/1250 gfs2: fix quota init duplicate scan

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Jie Wang <[email protected]>

[ Upstream commit b99a1f0f18ee50445907f55069e88bcfd8947383 ]

gfs2_quota_init() checks for duplicate quota_change IDs while holding qd_lock and the quota hash bucket bitlock. That path used gfs2_qd_search_bucket(), which takes a lockref reference via lockref_get_not_dead().

On PREEMPT_RT this may sleep, which is not allowed under the bucket bitlock, triggering "sleeping function called from invalid context".

Use a no-ref bucket lookup in this path, then continue duplicate handling without taking a lockref there.

Refactor gfs2_qd_search_bucket() to build on top of the no-ref helper so lookup traversal stays in one place.

This patch fixes a bug reported by syzbot.

---
 fs/gfs2/quota.c | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)
fs/gfs2/quota.c +23 -10
index 898fc3937b449..7a36a3fe5e6e6 100644
@@ -254,9 +254,13 @@ static struct gfs2_quota_data *qd_alloc(unsigned hash, struct gfs2_sbd *sdp, str
 	return NULL;
 }
 
-static struct gfs2_quota_data *gfs2_qd_search_bucket(unsigned int hash,
-						     const struct gfs2_sbd *sdp,
-						     struct kqid qid)
+/*
+ * Lookup variant for callers which already hold qd_lock + bucket lock.
+ */
+static struct gfs2_quota_data *
+gfs2_qd_search_bucket_noref(unsigned int hash,
+			    const struct gfs2_sbd *sdp,
+			    struct kqid qid)
 {
 	struct gfs2_quota_data *qd;
 	struct hlist_bl_node *h;
@@ -264,12 +268,22 @@ static struct gfs2_quota_data *gfs2_qd_search_bucket(unsigned int hash,
 	hlist_bl_for_each_entry_rcu(qd, h, &qd_hash_table[hash], qd_hlist) {
 		if (!qid_eq(qd->qd_id, qid))
 			continue;
-		if (qd->qd_sbd != sdp)
-			continue;
-		if (lockref_get_not_dead(&qd->qd_lockref)) {
-			list_lru_del_obj(&gfs2_qd_lru, &qd->qd_lru);
+		if (qd->qd_sbd == sdp)
 			return qd;
-		}
+	}
+
+	return NULL;
+}
+
+static struct gfs2_quota_data *
+gfs2_qd_search_bucket(unsigned int hash, const struct gfs2_sbd *sdp, struct kqid qid)
+{
+	struct gfs2_quota_data *qd;
+
+	qd = gfs2_qd_search_bucket_noref(hash, sdp, qid);
+	if (qd && lockref_get_not_dead(&qd->qd_lockref)) {
+		list_lru_del_obj(&gfs2_qd_lru, &qd->qd_lru);
+		return qd;
 	}
 
 	return NULL;
@@ -1458,7 +1472,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
 
 			spin_lock(&qd_lock);
 			spin_lock_bucket(hash);
-			old_qd = gfs2_qd_search_bucket(hash, sdp, qc_id);
+			old_qd = gfs2_qd_search_bucket_noref(hash, sdp, qc_id);
 			if (old_qd) {
 				fs_err(sdp, "Corruption found in quota_change%u"
 					    "file: duplicate identifier in "
@@ -1467,7 +1481,6 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
 
 				spin_unlock_bucket(hash);
 				spin_unlock(&qd_lock);
-				qd_put(old_qd);
 
 				gfs2_glock_put(qd->qd_gl);
 				kmem_cache_free(gfs2_quotad_cachep, qd);
Signature · 1 line
2.53.0
author maintainer
#14 lore raw

PATCH 14/1250 gpio: usbio: Add ACPI device-id for NVL platforms

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Arun T <[email protected]>

[ Upstream commit 5ccb19ae1cb3620a76254db5c60121d092d9a0f6 ]

Add device IDs of Nova Lake into gpio-usbio support list.

---
 drivers/gpio/gpio-usbio.c | 1 +
 1 file changed, 1 insertion(+)
drivers/gpio/gpio-usbio.c +1 -0
index 34d42c743d5bc..489c8ac6299e1 100644
@@ -31,6 +31,7 @@ static const struct acpi_device_id usbio_gpio_acpi_hids[] = {
 	{ "INTC10B5" }, /* LNL */
 	{ "INTC10D1" }, /* MTL-CVF */
 	{ "INTC10E2" }, /* PTL */
+	{ "INTC1116" }, /* NVL */
 	{ }
 };
 
Signature · 1 line
2.53.0
author maintainer
#15 lore raw

PATCH 15/1250 gfs2: move quota_init qc iterator increment

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Jie Wang <[email protected]>

[ Upstream commit 942202677f8f2ee448a6a2feb06aeeaf520342e3 ]

Move qc++ from the loop body into the for-loop increment expression in gfs2_quota_init().

This keeps iterator progression explicit and avoids mixing pointer advance with duplicate-slot handling in the loop body.

---
 fs/gfs2/quota.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
fs/gfs2/quota.c +1 -2
index 7a36a3fe5e6e6..4620f586411a6 100644
@@ -1447,7 +1447,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
 
 		qc = (struct gfs2_quota_change *)(bh->b_data + sizeof(struct gfs2_meta_header));
 		for (y = 0; y < sdp->sd_qc_per_block && slot < sdp->sd_quota_slots;
-		     y++, slot++) {
+		     y++, slot++, qc++) {
 			struct gfs2_quota_data *old_qd, *qd;
 			s64 qc_change = be64_to_cpu(qc->qc_change);
 			u32 qc_flags = be32_to_cpu(qc->qc_flags);
@@ -1455,7 +1455,6 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
 						USRQUOTA : GRPQUOTA;
 			struct kqid qc_id = make_kqid(&init_user_ns, qtype,
 						      be32_to_cpu(qc->qc_id));
-			qc++;
 			if (!qc_change)
 				continue;
 
Signature · 1 line
2.53.0
author maintainer
#16 lore raw

PATCH 16/1250 drm/xe: Fix null pointer dereference in devcoredump cleanup

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Zhanjun Dong <[email protected]>

[ Upstream commit 12ef528d78adc8ea4e7e3db594f3bcac327e79fa ]

In xe_devcoredump_snapshot_free(), ss->gt may be NULL when the snapshot was never fully populated (e.g., when cleanup is triggered without a prior capture). Guard the xe_guc_capture_put_matched_nodes() call with IS_ERR_OR_NULL() to prevent a null dereference.

In xe_devcoredump_free(), the deferred work is only queued when a coredump is captured, so guard cancel_work_sync() with a check on coredump->captured.

---
 drivers/gpu/drm/xe/xe_devcoredump.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/gpu/drm/xe/xe_devcoredump.c +4 -2
index 203e3038cc817..26a294f79e79f 100644
@@ -150,7 +150,8 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
 	xe_guc_ct_snapshot_free(ss->guc.ct);
 	ss->guc.ct = NULL;
 
-	xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
+	if (!IS_ERR_OR_NULL(ss->gt))
+		xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
 	ss->matched_node = NULL;
 
 	xe_guc_exec_queue_snapshot_free(ss->ge);
@@ -255,7 +256,8 @@ static void xe_devcoredump_free(void *data)
 	if (!data || !coredump_to_xe(coredump))
 		return;
 
-	cancel_work_sync(&coredump->snapshot.work);
+	if (coredump->captured)
+		cancel_work_sync(&coredump->snapshot.work);
 
 	mutex_lock(&coredump->lock);
 
Signature · 1 line
2.53.0
author maintainer
#17 lore raw

PATCH 17/1250 driver core: Replace dev->can_match with dev_can_match()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Douglas Anderson <[email protected]>

[ Upstream commit f2648bb3150a71241a2254aa4ac10680d7f9fb16 ]

In C, bitfields are not necessarily safe to modify from multiple threads without locking. Switch "can_match" over to the "flags" field so modifications are safe.

---
 drivers/base/core.c    | 10 +++++-----
 drivers/base/dd.c      | 10 +++++-----
 include/linux/device.h |  9 +++++----
 3 files changed, 15 insertions(+), 14 deletions(-)
drivers/base/core.c +5 -5
index 5034d9b103642..2b0179096c73d 100644
@@ -1084,7 +1084,7 @@ static void device_links_missing_supplier(struct device *dev)
 
 static bool dev_is_best_effort(struct device *dev)
 {
-	return (fw_devlink_best_effort && dev->can_match) ||
+	return (fw_devlink_best_effort && dev_can_match(dev)) ||
 		(dev->fwnode && fwnode_test_flag(dev->fwnode, FWNODE_FLAG_BEST_EFFORT));
 }
 
@@ -1152,7 +1152,7 @@ int device_links_check_suppliers(struct device *dev)
 
 			if (dev_is_best_effort(dev) &&
 			    device_link_test(link, DL_FLAG_INFERRED) &&
-			    !link->supplier->can_match) {
+			    !dev_can_match(link->supplier)) {
 				ret = -EAGAIN;
 				continue;
 			}
@@ -1435,7 +1435,7 @@ void device_links_driver_bound(struct device *dev)
 		} else if (dev_is_best_effort(dev) &&
 			   device_link_test(link, DL_FLAG_INFERRED) &&
 			   link->status != DL_STATE_CONSUMER_PROBE &&
-			   !link->supplier->can_match) {
+			   !dev_can_match(link->supplier)) {
 			/*
 			 * When dev_is_best_effort() is true, we ignore device
 			 * links to suppliers that don't have a driver.  If the
@@ -1823,7 +1823,7 @@ static int fw_devlink_no_driver(struct device *dev, void *data)
 {
 	struct device_link *link = to_devlink(dev);
 
-	if (!link->supplier->can_match)
+	if (!dev_can_match(link->supplier))
 		fw_devlink_relax_link(link);
 
 	return 0;
@@ -3775,7 +3775,7 @@ int device_add(struct device *dev)
 	 * match with any driver, don't block its consumers from probing in
 	 * case the consumer device is able to operate without this supplier.
 	 */
-	if (dev->fwnode && fw_devlink_drv_reg_done && !dev->can_match)
+	if (dev->fwnode && fw_devlink_drv_reg_done && !dev_can_match(dev))
 		fw_devlink_unblock_consumers(dev);
 
 	if (parent)
drivers/base/dd.c +5 -5
index dabdfc088f3f6..d019d0f98ad47 100644
@@ -132,7 +132,7 @@ static DECLARE_WORK(deferred_probe_work, deferred_probe_work_func);
 
 void driver_deferred_probe_add(struct device *dev)
 {
-	if (!dev->can_match)
+	if (!dev_can_match(dev))
 		return;
 
 	mutex_lock(&deferred_probe_mutex);
@@ -858,14 +858,14 @@ static int __driver_probe_device(const struct device_driver *drv, struct device
 		return dev_err_probe(dev, -EPROBE_DEFER, "Device not ready to probe\n");
 
 	/*
-	 * Set can_match = true after calling dev_ready_to_probe(), so
+	 * Call dev_set_can_match() after calling dev_ready_to_probe(), so
 	 * driver_deferred_probe_add() won't actually add the device to the
 	 * deferred probe list when dev_ready_to_probe() returns false.
 	 *
 	 * When dev_ready_to_probe() returns false, it means that device_add()
 	 * will do another probe() attempt for us.
 	 */
-	dev->can_match = true;
+	dev_set_can_match(dev);
 	dev_dbg(dev, "bus: '%s': %s: matched device with driver %s\n",
 		drv->bus->name, __func__, drv->name);
 
@@ -1011,7 +1011,7 @@ static int __device_attach_driver(struct device_driver *drv, void *_data)
 		return 0;
 	} else if (ret == -EPROBE_DEFER) {
 		dev_dbg(dev, "Device match requests probe deferral\n");
-		dev->can_match = true;
+		dev_set_can_match(dev);
 		driver_deferred_probe_add(dev);
 		/*
 		 * Device can't match with a driver right now, so don't attempt
@@ -1255,7 +1255,7 @@ static int __driver_attach(struct device *dev, void *data)
 		return 0;
 	} else if (ret == -EPROBE_DEFER) {
 		dev_dbg(dev, "Device match requests probe deferral\n");
-		dev->can_match = true;
+		dev_set_can_match(dev);
 		driver_deferred_probe_add(dev);
 		/*
 		 * Driver could not match with device, but may match with
include/linux/device.h +5 -4
index dc1252a06480c..56e5a9314367d 100644
@@ -485,10 +485,14 @@ struct device_physical_location {
  *
  * @DEV_FLAG_READY_TO_PROBE: If set then device_add() has finished enough
  *		initialization that probe could be called.
+ * @DEV_FLAG_CAN_MATCH: The device has matched with a driver at least once or it
+ *		is in a bus (like AMBA) which can't check for matching drivers
+ *		until other devices probe successfully.
  * @DEV_FLAG_COUNT: Number of defined struct_device_flags.
  */
 enum struct_device_flags {
 	DEV_FLAG_READY_TO_PROBE = 0,
+	DEV_FLAG_CAN_MATCH = 1,
 
 	DEV_FLAG_COUNT
 };
@@ -575,9 +579,6 @@ enum struct_device_flags {
  * @state_synced: The hardware state of this device has been synced to match
  *		  the software state of this device by calling the driver/bus
  *		  sync_state() callback.
- * @can_match:	The device has matched with a driver at least once or it is in
- *		a bus (like AMBA) which can't check for matching drivers until
- *		other devices probe successfully.
  * @dma_coherent: this particular device is dma coherent, even if the
  *		architecture supports non-coherent devices.
  * @dma_ops_bypass: If set to %true then the dma_ops are bypassed for the
@@ -696,7 +697,6 @@ struct device {
 	bool			offline:1;
 	bool			of_node_reused:1;
 	bool			state_synced:1;
-	bool			can_match:1;
 #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
@@ -738,6 +738,7 @@ static inline bool dev_test_and_set_##accessor_name(struct device *dev) \
 }
 
 __create_dev_flag_accessors(ready_to_probe, DEV_FLAG_READY_TO_PROBE);
+__create_dev_flag_accessors(can_match, DEV_FLAG_CAN_MATCH);
 
 #undef __create_dev_flag_accessors
 
Signature · 1 line
2.53.0
author maintainer
#18 lore raw

PATCH 18/1250 iio: adc: rtq6056: add i2c_device_id support

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Kevin Tung <[email protected]>

[ Upstream commit ce80292ead5bb42b50a6b63e44fd95c0edf9d334 ]

Add i2c_device_id table to support legacy I2C instantiation. Update probe to use i2c_get_match_data() so device data can be retrieved consistently for both OF and legacy I2C instantiation.

---
 drivers/iio/adc/rtq6056.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/iio/adc/rtq6056.c +9 -1
index 2bf3a09ac6b04..e2b1da13c0d31 100644
@@ -728,7 +728,7 @@ static int rtq6056_probe(struct i2c_client *i2c)
 	if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_WORD_DATA))
 		return -EOPNOTSUPP;
 
-	devdata = device_get_match_data(dev);
+	devdata = i2c_get_match_data(i2c);
 	if (!devdata)
 		return dev_err_probe(dev, -EINVAL, "Invalid dev data\n");
 
@@ -871,6 +871,13 @@ static const struct richtek_dev_data rtq6059_devdata = {
 	.set_average = rtq6059_adc_set_average,
 };
 
+static const struct i2c_device_id rtq6056_id[] = {
+	{ "rtq6056", (kernel_ulong_t)&rtq6056_devdata },
+	{ "rtq6059", (kernel_ulong_t)&rtq6059_devdata },
+	{ }
+};
+MODULE_DEVICE_TABLE(i2c, rtq6056_id);
+
 static const struct of_device_id rtq6056_device_match[] = {
 	{ .compatible = "richtek,rtq6056", .data = &rtq6056_devdata },
 	{ .compatible = "richtek,rtq6059", .data = &rtq6059_devdata },
@@ -885,6 +892,7 @@ static struct i2c_driver rtq6056_driver = {
 		.pm = pm_ptr(&rtq6056_pm_ops),
 	},
 	.probe = rtq6056_probe,
+	.id_table = rtq6056_id,
 };
 module_i2c_driver(rtq6056_driver);
 
Signature · 1 line
2.53.0
author maintainer
#19 lore raw

PATCH 19/1250 pinctrl: renesas: rzg2l: Handle RZ/V2H(P) IOLH configuration in PM cache

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Lad Prabhakar <[email protected]>

[ Upstream commit d0fc9f8eb2ce55eb00dbfdc0f19c844df5aee5b8 ]

Include PIN_CFG_IOLH_RZV2H in the IOLH capability checks when saving and restoring pin configuration registers.

On RZ/V2H(P), RZ/V2N, and RZ/G3E, the IOLH configuration is defined by the PIN_CFG_IOLH_RZV2H capability. The previous implementation did not account for this, causing the IOLH registers to be skipped during PM save/restore.

---
 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pinctrl/renesas/pinctrl-rzg2l.c +2 -1
index e8cc83029db33..ab8d64a14dd0a 100644
@@ -3094,7 +3094,8 @@ static void rzg2l_pinctrl_pm_setup_dedicated_regs(struct rzg2l_pinctrl *pctrl, b
 		}
 
 		/* And apply them in a single shot. */
-		has_iolh = !!(caps & (PIN_CFG_IOLH_A | PIN_CFG_IOLH_B | PIN_CFG_IOLH_C));
+		has_iolh = !!(caps & (PIN_CFG_IOLH_A | PIN_CFG_IOLH_B |
+				      PIN_CFG_IOLH_C | PIN_CFG_IOLH_RZV2H));
 		has_ien = !!(caps & PIN_CFG_IEN);
 		pincnt = hweight8(FIELD_GET(RZG2L_SINGLE_PIN_BITS_MASK, cfg));
 
Signature · 1 line
2.53.0
author maintainer
#20 lore raw

PATCH 20/1250 ALSA: usb-audio: Propagate write errors in generic mixer put callbacks

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Cássio Gabriel <[email protected]>

[ Upstream commit 87a6f2fa6e6c69bb649fa327635a0bd977724603 ]

mixer_ctl_feature_put(), mixer_ctl_procunit_put(), and mixer_ctl_selector_put() ignore failures from their SET_CUR helper routines and report the control as changed whenever the requested value differs from the current one.

If the device rejects the write, userspace still sees success although the hardware state did not change. Propagate write failures instead, using filter_error() so ignore_ctl_error keeps the same semantics as the existing get paths.

---
 sound/usb/mixer.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
sound/usb/mixer.c +13 -4
index 2e65afd18bd3c..72bd94b44ce34 100644
@@ -1469,7 +1469,10 @@ static int mixer_ctl_feature_put(struct snd_kcontrol *kcontrol,
 				return -EINVAL;
 			val = get_abs_value(cval, val);
 			if (oval != val) {
-				snd_usb_set_cur_mix_value(cval, c + 1, cnt, val);
+				err = snd_usb_set_cur_mix_value(cval, c + 1,
+								cnt, val);
+				if (err < 0)
+					return filter_error(cval, err);
 				changed = 1;
 			}
 			cnt++;
@@ -1484,7 +1487,9 @@ static int mixer_ctl_feature_put(struct snd_kcontrol *kcontrol,
 			return -EINVAL;
 		val = get_abs_value(cval, val);
 		if (val != oval) {
-			snd_usb_set_cur_mix_value(cval, 0, 0, val);
+			err = snd_usb_set_cur_mix_value(cval, 0, 0, val);
+			if (err < 0)
+				return filter_error(cval, err);
 			changed = 1;
 		}
 	}
@@ -2350,7 +2355,9 @@ static int mixer_ctl_procunit_put(struct snd_kcontrol *kcontrol,
 		return -EINVAL;
 	val = get_abs_value(cval, val);
 	if (val != oval) {
-		set_cur_ctl_value(cval, cval->control << 8, val);
+		err = set_cur_ctl_value(cval, cval->control << 8, val);
+		if (err < 0)
+			return filter_error(cval, err);
 		return 1;
 	}
 	return 0;
@@ -2714,7 +2721,9 @@ static int mixer_ctl_selector_put(struct snd_kcontrol *kcontrol,
 		return -EINVAL;
 	val = get_abs_value(cval, val);
 	if (val != oval) {
-		set_cur_ctl_value(cval, cval->control << 8, val);
+		err = set_cur_ctl_value(cval, cval->control << 8, val);
+		if (err < 0)
+			return filter_error(cval, err);
 		return 1;
 	}
 	return 0;
Signature · 1 line
2.53.0
author maintainer
#21 lore raw

PATCH 21/1250 pinctrl: renesas: rzg2l: Add SR register cache for PM suspend/resume

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Lad Prabhakar <[email protected]>

[ Upstream commit 29df31ae3e8a0152dd8e8c2376816aad2f233473 ]

Include the SR (Slew Rate) register in the PM suspend/resume register cache.

---
 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 38 +++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 3 deletions(-)
drivers/pinctrl/renesas/pinctrl-rzg2l.c +35 -3
index ab8d64a14dd0a..b4d7e80dd6468 100644
@@ -322,6 +322,7 @@ struct rzg2l_pinctrl_pin_settings {
  * @pupd: PUPD registers cache
  * @ien: IEN registers cache
  * @smt: SMT registers cache
+ * @sr: SR registers cache
  * @sd_ch: SD_CH registers cache
  * @eth_poc: ET_POC registers cache
  * @oen: Output Enable register cache
@@ -336,6 +337,7 @@ struct rzg2l_pinctrl_reg_cache {
 	u32	*ien[2];
 	u32	*pupd[2];
 	u32	*smt[2];
+	u32	*sr[2];
 	u8	sd_ch[2];
 	u8	eth_poc[2];
 	u8	oen;
@@ -2746,6 +2748,11 @@ static int rzg2l_pinctrl_reg_cache_alloc(struct rzg2l_pinctrl *pctrl)
 		if (!cache->smt[i])
 			return -ENOMEM;
 
+		cache->sr[i] = devm_kcalloc(pctrl->dev, nports, sizeof(*cache->sr[i]),
+					    GFP_KERNEL);
+		if (!cache->sr[i])
+			return -ENOMEM;
+
 		/* Allocate dedicated cache. */
 		dedicated_cache->iolh[i] = devm_kcalloc(pctrl->dev, n_dedicated_pins,
 							sizeof(*dedicated_cache->iolh[i]),
@@ -2758,6 +2765,12 @@ static int rzg2l_pinctrl_reg_cache_alloc(struct rzg2l_pinctrl *pctrl)
 						       GFP_KERNEL);
 		if (!dedicated_cache->ien[i])
 			return -ENOMEM;
+
+		dedicated_cache->sr[i] = devm_kcalloc(pctrl->dev, n_dedicated_pins,
+						      sizeof(*dedicated_cache->sr[i]),
+						      GFP_KERNEL);
+		if (!dedicated_cache->sr[i])
+			return -ENOMEM;
 	}
 
 	pctrl->cache = cache;
@@ -2989,7 +3002,7 @@ static void rzg2l_pinctrl_pm_setup_regs(struct rzg2l_pinctrl *pctrl, bool suspen
 	struct rzg2l_pinctrl_reg_cache *cache = pctrl->cache;
 
 	for (u32 port = 0; port < nports; port++) {
-		bool has_iolh, has_ien, has_pupd, has_smt;
+		bool has_iolh, has_ien, has_pupd, has_smt, has_sr;
 		u32 off, caps;
 		u8 pincnt;
 		u64 cfg;
@@ -3010,6 +3023,7 @@ static void rzg2l_pinctrl_pm_setup_regs(struct rzg2l_pinctrl *pctrl, bool suspen
 		has_ien = !!(caps & PIN_CFG_IEN);
 		has_pupd = !!(caps & PIN_CFG_PUPD);
 		has_smt = !!(caps & PIN_CFG_SMT);
+		has_sr = !!(caps & PIN_CFG_SR);
 
 		if (suspend)
 			RZG2L_PCTRL_REG_ACCESS32(suspend, pctrl->base + PFC(off), cache->pfc[port]);
@@ -3061,6 +3075,15 @@ static void rzg2l_pinctrl_pm_setup_regs(struct rzg2l_pinctrl *pctrl, bool suspen
 							 cache->smt[1][port]);
 			}
 		}
+
+		if (has_sr) {
+			RZG2L_PCTRL_REG_ACCESS32(suspend, pctrl->base + SR(off),
+						 cache->sr[0][port]);
+			if (pincnt >= 4) {
+				RZG2L_PCTRL_REG_ACCESS32(suspend, pctrl->base + SR(off) + 4,
+							 cache->sr[1][port]);
+			}
+		}
 	}
 }
 
@@ -3075,7 +3098,7 @@ static void rzg2l_pinctrl_pm_setup_dedicated_regs(struct rzg2l_pinctrl *pctrl, b
 	 * port offset are close together.
 	 */
 	for (i = 0, caps = 0; i < pctrl->data->n_dedicated_pins; i++) {
-		bool has_iolh, has_ien;
+		bool has_iolh, has_ien, has_sr;
 		u32 off, next_off = 0;
 		u64 cfg, next_cfg;
 		u8 pincnt;
@@ -3097,6 +3120,7 @@ static void rzg2l_pinctrl_pm_setup_dedicated_regs(struct rzg2l_pinctrl *pctrl, b
 		has_iolh = !!(caps & (PIN_CFG_IOLH_A | PIN_CFG_IOLH_B |
 				      PIN_CFG_IOLH_C | PIN_CFG_IOLH_RZV2H));
 		has_ien = !!(caps & PIN_CFG_IEN);
+		has_sr = !!(caps & PIN_CFG_SR);
 		pincnt = hweight8(FIELD_GET(RZG2L_SINGLE_PIN_BITS_MASK, cfg));
 
 		if (has_iolh) {
@@ -3107,7 +3131,10 @@ static void rzg2l_pinctrl_pm_setup_dedicated_regs(struct rzg2l_pinctrl *pctrl, b
 			RZG2L_PCTRL_REG_ACCESS32(suspend, pctrl->base + IEN(off),
 						 cache->ien[0][i]);
 		}
-
+		if (has_sr) {
+			RZG2L_PCTRL_REG_ACCESS32(suspend, pctrl->base + SR(off),
+						 cache->sr[0][i]);
+		}
 		if (pincnt >= 4) {
 			if (has_iolh) {
 				RZG2L_PCTRL_REG_ACCESS32(suspend,
@@ -3119,6 +3146,11 @@ static void rzg2l_pinctrl_pm_setup_dedicated_regs(struct rzg2l_pinctrl *pctrl, b
 							 pctrl->base + IEN(off) + 4,
 							 cache->ien[1][i]);
 			}
+			if (has_sr) {
+				RZG2L_PCTRL_REG_ACCESS32(suspend,
+							 pctrl->base + SR(off) + 4,
+							 cache->sr[1][i]);
+			}
 		}
 		caps = 0;
 	}
Signature · 1 line
2.53.0
author maintainer
#22 lore raw

PATCH 22/1250 ima: return error early if file xattr cannot be changed

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Goldwyn Rodrigues <[email protected]>

[ Upstream commit 69fc6474236d9edda6983623e4282f2bdfd8e3d8 ]

During early boot, the filesystem is read-only and any changes to xattrs are not allowed. This fails in case of ext4 because changing xattr starts an ext4 transaction which fails with the following warning.

WARNING: fs/ext4/ext4_jbd2.c:75 at ext4_journal_check_start+0x63/0xa0 [ext4], CPU#1: systemd-sysroot/561
CPU: 1 UID: 0 PID: 561 Comm: systemd-sysroot Not tainted 6.19.12-1-default #1 PREEMPT(voluntary) openSUSE Tumbleweed  c2dfc3c9d9f6f1233251c5d4410574fe82a348ee
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 02/02/2022
RIP: 0010:ext4_journal_check_start+0x63/0xa0 [ext4]
Call Trace:
  __ext4_journal_start_sb+0x3e/0x180 [ext4 6d025f3bc52c89a957b89a89d211fadf5e9434e1]
  ext4_xattr_set+0x104/0x150 [ext4 6d025f3bc52c89a957b89a89d211fadf5e9434e1]
  __vfs_setxattr+0x9a/0xd0
  __vfs_setxattr_noperm+0x76/0x1f0
  ima_appraise_measurement+0x23e/0xe40
  ima_d_path+0x5a/0xd0
  process_measurement+0xb29/0xc40
  ? copy_from_kernel_nofault+0x21/0xe0
  ? fscrypt_file_open+0xc0/0xe0
  ? ext4_file_open+0x60/0x490 [ext4 6d025f3bc52c89a957b89a89d211fadf5e9434e1]
  ? bpf_prog_31efb7c56239148b_restrict_filesystems+0xab/0x126
  ? __bpf_prog_exit+0x23/0xd0
  ? __bpf_tramp_exit+0xd/0x50
  ? bpf_trampoline_6442530367+0x9f/0xea
  ima_file_check+0x57/0x80
  security_file_post_open+0x50/0xf0
  path_openat+0x493/0x1650
  do_filp_open+0xc7/0x170

Detect the state of the file early and return the error.

---
 security/integrity/ima/ima_appraise.c | 5 +++++
 1 file changed, 5 insertions(+)
security/integrity/ima/ima_appraise.c +5 -0
index 6a33484fcd6fe..a87ef7c05f11e 100644
@@ -90,6 +90,11 @@ static int ima_fix_xattr(struct dentry *dentry, struct ima_iint_cache *iint)
 	int rc, offset;
 	u8 algo = iint->ima_hash->algo;
 
+	if (IS_RDONLY(d_inode(dentry)))
+		return -EROFS;
+	if (IS_IMMUTABLE(d_inode(dentry)))
+		return -EPERM;
+
 	if (algo <= HASH_ALGO_SHA1) {
 		offset = 1;
 		iint->ima_hash->xattr.sha1.type = IMA_XATTR_DIGEST;
Signature · 1 line
2.53.0
author maintainer
#23 lore raw

PATCH 23/1250 usb: gadget: udc: skip pullup() if already connected

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Xu Yang <[email protected]>

[ Upstream commit 62911bc82b0332aee7546156800d3516500fa1e1 ]

The device controller may update vbus status via usb_udc_vbus_handler(), which tries to connect the gadget even though gadget_bind_driver() has already called usb_udc_connect_control_locked(). This causes pullup() to be called twice. Avoid this by checking if gadget->connected is true.

This also set gadget->connected as false in usb_gadget_activate() if it became connected while it was being deactivated. Otherwise, usb_gadget_connect_locked will return early and pullup() won't be called.

---
 drivers/usb/gadget/udc/core.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/usb/gadget/udc/core.c +6 -1
index ab1bcc5512b2c..fa49746d54036 100644
@@ -714,6 +714,9 @@ static int usb_gadget_connect_locked(struct usb_gadget *gadget)
 		goto out;
 	}
 
+	if (gadget->connected)
+		goto out;
+
 	if (gadget->deactivated || !gadget->udc->allow_connect || !gadget->udc->started) {
 		/*
 		 * If the gadget isn't usable (because it is deactivated,
@@ -887,8 +890,10 @@ int usb_gadget_activate(struct usb_gadget *gadget)
 	 * If gadget has been connected before deactivation, or became connected
 	 * while it was being deactivated, we call usb_gadget_connect().
 	 */
-	if (gadget->connected)
+	if (gadget->connected) {
+		gadget->connected = false;
 		ret = usb_gadget_connect_locked(gadget);
+	}
 
 unlock:
 	mutex_unlock(&gadget->udc->connect_lock);
Signature · 1 line
2.53.0
author maintainer
#24 lore raw

PATCH 24/1250 tee: optee: Allow MT_NORMAL_TAGGED shared memory

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Hirokazu Honda <[email protected]>

[ Upstream commit 1a6e94a8ff32e7879effd1e4a45bf112e506edc1 ]

On ARM64, shared memory can have MT_NORMAL_TAGGED attribute when using the Memory Tagging Extension (MTE). The OP-TEE driver needs to recognize this as normal memory to allow sharing such buffers with the Secure World.

---
 drivers/tee/optee/call.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/tee/optee/call.c +2 -1
index 16eb953e14bb6..e422e77b06fb8 100644
@@ -602,7 +602,8 @@ static bool is_normal_memory(pgprot_t p)
 	return (((pgprot_val(p) & L_PTE_MT_MASK) == L_PTE_MT_WRITEALLOC) ||
 		((pgprot_val(p) & L_PTE_MT_MASK) == L_PTE_MT_WRITEBACK));
 #elif defined(CONFIG_ARM64)
-	return (pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL);
+	return ((pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL)) ||
+	       ((pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL_TAGGED));
 #else
 #error "Unsupported architecture"
 #endif
Signature · 1 line
2.53.0
author maintainer
#25 lore raw

PATCH 25/1250 tools/nolibc: avoid call to wcslen() in _start_c() inserted by clang

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Thomas Weißschuh <[email protected]>

[ Upstream commit 4c6826ee7d04f489ad6fcf46ae6dd595fe9c6295 ]

Clang may convert the loop to find _auxv into a call to wcslen() which is missing on nolibc. -fsanitize needs to be disabled for this to happen.

Use the same pattern as in the nolibc strlen() implementation to avoid the function call generation.

---
 tools/include/nolibc/crt.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/include/nolibc/crt.h +1 -1
index 961cfe777c356..d4e726ed80765 100644
@@ -71,7 +71,7 @@ void _start_c(long *sp)
 
 	/* find _auxv */
 	for (auxv = (void *)envp; *auxv++;)
-		;
+		__asm__("");
 	_auxv = auxv;
 
 	for (ctor_func = __preinit_array_start; ctor_func < __preinit_array_end; ctor_func++)
Signature · 1 line
2.53.0
author maintainer
#26 lore raw

PATCH 26/1250 PCI: Stop setting cached power state to unknown on unbind

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Lukas Wunner <[email protected]>

[ Upstream commit d462c8e89e84bfb6417e6b4c88e0cb7cc747ba41 ]

When a PCI device is unbound from its driver, pci_device_remove() sets the cached power state in pci_dev->current_state to PCI_UNKNOWN. This was introduced by commit 2449e06a5696 ("PCI: reset pci device state to unknown state for resume") to invalidate the cached power state in case the system is subsequently put to sleep.

For bound devices, the cached power state is set to PCI_UNKNOWN in pci_pm_suspend_noirq(), immediately before entering system sleep.

Extend to unbound devices for consistency.

This obviates the need to change the cached power state on unbind, so stop doing so.

---
 drivers/pci/pci-driver.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)
drivers/pci/pci-driver.c +2 -8
index f9ead94d5ebb6..1219f39b1c69b 100644
@@ -490,13 +490,6 @@ static void pci_device_remove(struct device *dev)
 	/* Undo the runtime PM settings in local_pci_probe() */
 	pm_runtime_put_sync(dev);
 
-	/*
-	 * If the device is still on, set the power state as "unknown",
-	 * since it might change by the next time we load the driver.
-	 */
-	if (pci_dev->current_state == PCI_D0)
-		pci_dev->current_state = PCI_UNKNOWN;
-
 	/*
 	 * We would love to complain here if pci_dev->is_enabled is set, that
 	 * the driver should have called pci_disable_device(), but the
@@ -871,7 +864,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
 
 	if (!pm) {
 		pci_save_state(pci_dev);
-		goto Fixup;
+		goto set_unknown;
 	}
 
 	if (pm->suspend_noirq) {
@@ -923,6 +916,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
 		goto Fixup;
 	}
 
+set_unknown:
 	pci_pm_set_unknown_state(pci_dev);
 
 	/*
Signature · 1 line
2.53.0
author maintainer
#27 lore raw

PATCH 27/1250 wifi: cfg80211: reject duplicate wiphy cipher suite entries

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Yuqi Xu <[email protected]>

[ Upstream commit 7187d145d9042b037e4f10538f70cf95e380219f ]

Duplicate entries in wiphy->cipher_suites do not describe any additional capability, but cfg80211 currently accepts them and leaves individual consumers to deal with them.

One such consumer is the WEXT compatibility code, which appends a WEP key length for each WEP cipher entry it sees. Repeated WEP entries can therefore overflow the fixed iw_range::encoding_size array returned by SIOCGIWRANGE.

Reject duplicate cipher suite entries in wiphy_register() instead. This keeps the cipher suite invariant in one place and makes malformed wiphy descriptions fail early with -EINVAL, rather than relying on a single cfg80211 user to handle duplicates correctly.

---
 net/wireless/core.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
net/wireless/core.c +21 -0
index 6a9ba151b09fe..b565f777e5561 100644
@@ -781,6 +781,24 @@ static int wiphy_verify_combinations(struct wiphy *wiphy)
 	return ret;
 }
 
+static bool wiphy_cipher_suites_valid(const struct wiphy *wiphy)
+{
+	int i, j;
+
+	if (wiphy->n_cipher_suites && !wiphy->cipher_suites)
+		return false;
+
+	for (i = 0; i < wiphy->n_cipher_suites; i++) {
+		for (j = 0; j < i; j++) {
+			if (wiphy->cipher_suites[i] ==
+			    wiphy->cipher_suites[j])
+				return false;
+		}
+	}
+
+	return true;
+}
+
 int wiphy_register(struct wiphy *wiphy)
 {
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
@@ -913,6 +931,9 @@ int wiphy_register(struct wiphy *wiphy)
 	if (res)
 		return res;
 
+	if (!wiphy_cipher_suites_valid(wiphy))
+		return -EINVAL;
+
 	/* sanity check supported bands/channels */
 	for (band = 0; band < NUM_NL80211_BANDS; band++) {
 		const struct ieee80211_sband_iftype_data *iftd;
Signature · 1 line
2.53.0
author maintainer
#28 lore raw

PATCH 28/1250 hfsplus: fix issue of direct writes beyond end-of-file

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Viacheslav Dubeyko <[email protected]>

[ Upstream commit 5f63ac80aef2ee6bb58eab62e98c264774872da6 ]

The xfstests' test-case generic/729 fails with error:

sudo ./check generic/729

FSTYP         -- hfsplus
PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 7.0.0-rc1+ #36 SMP PREEMPT_DYNAMIC Fri Apr 17 12:40:51 PDT 2026
MKFS_OPTIONS  -- /dev/loop51

MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch

generic/729 23s ... [failed, exit status 1]- output mismatch

mmap-rw-fault: /mnt/test/mmap-rw-fault.tmp: Input/output error

The hfsplus_get_block() only allows creating the next sequential block. It returns -EIO for direct writes beyond EOF. This patch waits for any in-flight DIO on the inode to finish. Then, it extends the file by calling generic_cont_expand_simple() with the goal to guarantee that blockdev_direct_IO() finds all needed blocks already reachable sequentially. And, finally, it flushes and invalidates the DIO range again so the page cache is clean before the direct write begins.

sudo ./check generic/729

FSTYP         -- hfsplus
PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 7.0.0-rc1+ #40 SMP PREEMPT_DYNAMIC Thu Apr 16 15:41:03 PDT 2026
MKFS_OPTIONS  -- /dev/loop51

MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch

generic/729 23s ... 32s
Ran: generic/729
Passed all 1 tests

---
 fs/hfsplus/inode.c | 38 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)
fs/hfsplus/inode.c +36 -2
index 6153e5cc6eb65..7e6cc4dde9f26 100644
@@ -125,9 +125,44 @@ static ssize_t hfsplus_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	struct file *file = iocb->ki_filp;
 	struct address_space *mapping = file->f_mapping;
 	struct inode *inode = mapping->host;
+	loff_t isize;
 	size_t count = iov_iter_count(iter);
+	loff_t end = iocb->ki_pos + count;
 	ssize_t ret;
 
+	/*
+	 * The hfsplus_get_block() only allows creating the next sequential block.
+	 * For direct writes beyond EOF, expand the file first.
+	 */
+	if (iov_iter_rw(iter) == WRITE && iocb->ki_pos > i_size_read(inode)) {
+		loff_t start_off, end_off;
+		loff_t start_page, end_page;
+
+		isize = i_size_read(inode);
+
+		/*
+		 * Wait for any in-flight DIO on this inode to finish before
+		 * calling generic_cont_expand_simple().
+		 */
+		inode_dio_wait(inode);
+
+		ret = generic_cont_expand_simple(inode, iocb->ki_pos);
+		if (ret)
+			return ret;
+
+		start_off = isize;
+		end_off = (end > 0) ? end - 1 : end;
+
+		ret = filemap_write_and_wait_range(mapping, start_off, end_off);
+		if (ret)
+			return ret;
+
+		start_page = start_off >> PAGE_SHIFT;
+		end_page = end_off >> PAGE_SHIFT;
+
+		invalidate_inode_pages2_range(mapping, start_page, end_page);
+	}
+
 	ret = blockdev_direct_IO(iocb, inode, iter, hfsplus_get_block);
 
 	/*
@@ -135,8 +170,7 @@ static ssize_t hfsplus_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	 * blocks outside i_size. Trim these off again.
 	 */
 	if (unlikely(iov_iter_rw(iter) == WRITE && ret < 0)) {
-		loff_t isize = i_size_read(inode);
-		loff_t end = iocb->ki_pos + count;
+		isize = i_size_read(inode);
 
 		if (end > isize)
 			hfsplus_write_failed(mapping, end);
Signature · 1 line
2.53.0
author maintainer
#29 lore raw

PATCH 29/1250 wifi: nl80211: reject beacons with bad HE operation

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Johannes Berg <[email protected]>

[ Upstream commit 8b9a100e1a76c52988b31099b349fd95a58c8768 ]

The HE operation element not only needs to be longer than the fixed part, but also have an appropriate size for the variable part inside of it. Check this.

---
 net/wireless/nl80211.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
net/wireless/nl80211.c +5 -1
index 232218818ed7f..badb951763840 100644
@@ -6505,8 +6505,12 @@ static int nl80211_calculate_ap_params(struct cfg80211_ap_settings *params)
 	if (cap && cap->datalen >= sizeof(*params->he_cap) + 1)
 		params->he_cap = (void *)(cap->data + 1);
 	cap = cfg80211_find_ext_elem(WLAN_EID_EXT_HE_OPERATION, ies, ies_len);
-	if (cap && cap->datalen >= sizeof(*params->he_oper) + 1)
+	if (cap && cap->datalen >= sizeof(*params->he_oper) + 1) {
 		params->he_oper = (void *)(cap->data + 1);
+		/* takes extension ID into account */
+		if (cap->datalen < ieee80211_he_oper_size((void *)params->he_oper))
+			return -EINVAL;
+	}
 	cap = cfg80211_find_ext_elem(WLAN_EID_EXT_EHT_CAPABILITY, ies, ies_len);
 	if (cap) {
 		if (!cap->datalen)
Signature · 1 line
2.53.0
author maintainer
#30 lore raw

PATCH 30/1250 wifi: nl80211: check link is beaconing for color change

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Johannes Berg <[email protected]>

[ Upstream commit 55308cee9c2196f39cd1ce8ee6c1fed9e12a00d4 ]

When trying to do a color change, validate that the link is beaconing first, to avoid calling the driver with an invalid link.

---
 net/wireless/nl80211.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
net/wireless/nl80211.c +4 -1
index badb951763840..906a974cce5dc 100644
@@ -17783,6 +17783,10 @@ static int nl80211_color_change(struct sk_buff *skb, struct genl_info *info)
 	params.count = nla_get_u8(info->attrs[NL80211_ATTR_COLOR_CHANGE_COUNT]);
 	params.color = nla_get_u8(info->attrs[NL80211_ATTR_COLOR_CHANGE_COLOR]);
 
+	params.link_id = nl80211_link_id(info->attrs);
+	if (!wdev->links[params.link_id].ap.beacon_interval)
+		return -EINVAL;
+
 	err = nl80211_parse_beacon(rdev, info->attrs, &params.beacon_next,
 				   info->extack);
 	if (err)
@@ -17856,7 +17860,6 @@ static int nl80211_color_change(struct sk_buff *skb, struct genl_info *info)
 			goto out;
 	}
 
-	params.link_id = nl80211_link_id(info->attrs);
 	err = rdev_color_change(rdev, dev, &params);
 
 out:
Signature · 1 line
2.53.0
author maintainer
#31 lore raw

PATCH 31/1250 wifi: mac80211: always allow transmitting null-data on TXQs

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Johannes Berg <[email protected]>

[ Upstream commit 51129a2ca0482b006d0e12a0aa025ff1e1cad2cb ]

Jouni reported that certain sequences of tests caused some WDS tests to fail after applying the upcoming hwsim changes for NAN. I bisected that down to converting hwsim to TXQs, and after a long debug session found that the 4-addr NDP was getting dropped, because it goes out via a (management) TXQ and is a data frame.

It's unclear to me now why this only happens in some test sequences (e.g. "sigma_dut_sae_h2e_ap_loop ap_wds_sta" and "sigma_dut_eap_ttls_all_akm_suites ap_wds_sta_open"), maybe that affects timing and the frame is otherwise delayed in some way.

Correct the check to only drop frames that actually carry data, not NDPs.

---
 net/mac80211/tx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
net/mac80211/tx.c +1 -1
index 89eb340e982b2..e7df1a0c85911 100644
@@ -3895,7 +3895,7 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
 		 * injected frames or EAPOL frames from the local station.
 		 */
 		if (unlikely(!(info->flags & IEEE80211_TX_CTL_INJECTED) &&
-			     ieee80211_is_data(hdr->frame_control) &&
+			     ieee80211_is_data_present(hdr->frame_control) &&
 			     !ieee80211_vif_is_mesh(&tx.sdata->vif) &&
 			     tx.sdata->vif.type != NL80211_IFTYPE_OCB &&
 			     !is_multicast_ether_addr(hdr->addr1) &&
Signature · 1 line
2.53.0
author maintainer
#32 lore raw

PATCH 32/1250 wifi: mac80211: use chandef in ieee80211_get_sta_bw()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Johannes Berg <[email protected]>

[ Upstream commit e36b3322a41b7de0168ad6a37bdd1219cfe35077 ]

When getting the bandwidth the station uses in order to calculate the channel context's min_def, pass the channel for the link to _ieee80211_sta_cap_rx_bw() instead of using ieee80211_sta_cap_rx_bw(), which looks it up.

---
 net/mac80211/chan.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
net/mac80211/chan.c +5 -5
index a6895b40d4322..8403b5248a953 100644
@@ -235,11 +235,12 @@ ieee80211_find_reservation_chanctx(struct ieee80211_local *local,
 	return NULL;
 }
 
-static enum nl80211_chan_width ieee80211_get_sta_bw(struct sta_info *sta,
-						    unsigned int link_id)
+static enum nl80211_chan_width
+ieee80211_get_sta_bw(struct sta_info *sta, struct ieee80211_link_data *link)
 {
 	enum ieee80211_sta_rx_bandwidth width;
 	struct link_sta_info *link_sta;
+	int link_id = link->link_id;
 
 	link_sta = wiphy_dereference(sta->local->hw.wiphy, sta->link[link_id]);
 
@@ -254,7 +255,7 @@ static enum nl80211_chan_width ieee80211_get_sta_bw(struct sta_info *sta,
 	 * capabilities here. Calling it RX bandwidth capability is a bit
 	 * wrong though, since capabilities are in fact symmetric.
 	 */
-	width = ieee80211_sta_cap_rx_bw(link_sta);
+	width = _ieee80211_sta_cap_rx_bw(link_sta, &link->conf->chanreq.oper);
 
 	switch (width) {
 	case IEEE80211_STA_RX_BW_20:
@@ -289,7 +290,6 @@ static enum nl80211_chan_width
 ieee80211_get_max_required_bw(struct ieee80211_link_data *link)
 {
 	struct ieee80211_sub_if_data *sdata = link->sdata;
-	unsigned int link_id = link->link_id;
 	enum nl80211_chan_width max_bw = NL80211_CHAN_WIDTH_20_NOHT;
 	struct sta_info *sta;
 
@@ -300,7 +300,7 @@ ieee80211_get_max_required_bw(struct ieee80211_link_data *link)
 		    !(sta->sdata->bss && sta->sdata->bss == sdata->bss))
 			continue;
 
-		max_bw = max(max_bw, ieee80211_get_sta_bw(sta, link_id));
+		max_bw = max(max_bw, ieee80211_get_sta_bw(sta, link));
 	}
 
 	return max_bw;
Signature · 1 line
2.53.0
author maintainer
#33 lore raw

PATCH 33/1250 clk: clk-axi-clkgen: Add support versal timings

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Nuno Sá <[email protected]>

[ Upstream commit 0aef2f0db6db22c2a441e067d8e8458106fb0483 ]

Add proper VCO and PFD limits for versal based platforms. For that we need to add new Technology and Speed grade defines.

---
 drivers/clk/clk-axi-clkgen.c   | 5 ++++-
 include/linux/adi-axi-common.h | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)
drivers/clk/clk-axi-clkgen.c +4 -1
index fa5ccef73e60d..26f76a6db8202 100644
@@ -521,7 +521,7 @@ static int axi_clkgen_setup_limits(struct axi_clkgen *axi_clkgen,
 		axi_clkgen->limits.fvco_max = 1200000;
 		axi_clkgen->limits.fpfd_max = 450000;
 		break;
-	case ADI_AXI_FPGA_SPEED_2 ... ADI_AXI_FPGA_SPEED_2LV:
+	case ADI_AXI_FPGA_SPEED_2 ... ADI_AXI_FPGA_SPEED_2MP:
 		axi_clkgen->limits.fvco_max = 1440000;
 		axi_clkgen->limits.fpfd_max = 500000;
 		if (family == ADI_AXI_FPGA_FAMILY_KINTEX || family == ADI_AXI_FPGA_FAMILY_ARTIX) {
@@ -546,6 +546,9 @@ static int axi_clkgen_setup_limits(struct axi_clkgen *axi_clkgen,
 	if (tech == ADI_AXI_FPGA_TECH_ULTRASCALE_PLUS) {
 		axi_clkgen->limits.fvco_max = 1600000;
 		axi_clkgen->limits.fvco_min = 800000;
+	} else if (tech == ADI_AXI_FPGA_TECH_VERSAL) {
+		axi_clkgen->limits.fvco_max = 4320000;
+		axi_clkgen->limits.fvco_min = 2160000;
 	}
 
 	return 0;
include/linux/adi-axi-common.h +2 -0
index 37962ba530dfc..e7ba393061ee6 100644
@@ -51,6 +51,7 @@ enum adi_axi_fpga_technology {
 	ADI_AXI_FPGA_TECH_SERIES7,
 	ADI_AXI_FPGA_TECH_ULTRASCALE,
 	ADI_AXI_FPGA_TECH_ULTRASCALE_PLUS,
+	ADI_AXI_FPGA_TECH_VERSAL,
 };
 
 enum adi_axi_fpga_family {
@@ -71,6 +72,7 @@ enum adi_axi_fpga_speed_grade {
 	ADI_AXI_FPGA_SPEED_2    = 20,
 	ADI_AXI_FPGA_SPEED_2L   = 21,
 	ADI_AXI_FPGA_SPEED_2LV  = 22,
+	ADI_AXI_FPGA_SPEED_2MP  = 23,
 	ADI_AXI_FPGA_SPEED_3    = 30,
 };
 
Signature · 1 line
2.53.0
author maintainer
#34 lore raw

PATCH 34/1250 wifi: rtw88: Add NULL check for chip->edcca_th in rtw_fw_adaptivity_result()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Panagiotis Petrakopoulos <[email protected]>

[ Upstream commit d5e6f353ce1e1c25b8458ea390ed09d2377412c5 ]

It was recently reported that rtw_fw_adaptivity_result() in fw.c dereferences rtwdev->chip->edcca_th without a NULL check. The issue is that devices with the 8821CE chip don't define edcca_th in their chip info. As a result, when rtw_fw_adaptivity_result() tries to dereference it, the kernel triggers an oops.

Add a NULL check for edcca_th before dereferencing it in rtw_fw_adaptivity_result() in fw.c. Placing the check at the function entry avoids logging any garbage values.

This change does not address the root cause for this behavior, but it prevents the NULL dereference and the resulting oops while a more permanent solution is developed.

Tested on a 8822CE chip which defines edcca_th, so this issue is not present on it, but it still uses this driver and I can verify there are no regressions.

---
 drivers/net/wireless/realtek/rtw88/fw.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/net/wireless/realtek/rtw88/fw.c +3 -0
index c68a9fff68082..7ea8390f4d5a8 100644
@@ -279,6 +279,9 @@ static void rtw_fw_adaptivity_result(struct rtw_dev *rtwdev, u8 *payload,
 	const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
 	struct rtw_c2h_adaptivity *result = (struct rtw_c2h_adaptivity *)payload;
 
+	if (!edcca_th)
+		return;
+
 	rtw_dbg(rtwdev, RTW_DBG_ADAPTIVITY,
 		"Adaptivity: density %x igi %x l2h_th_init %x l2h %x h2l %x option %x\n",
 		result->density, result->igi, result->l2h_th_init, result->l2h,
Signature · 1 line
2.53.0
author maintainer
#35 lore raw

PATCH 35/1250 wifi: rtw89: suspend DIG when remain-on-channel

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Chih-Kang Chang <[email protected]>

[ Upstream commit 602b58bb45b2f2bf848215560406ff87dc9a0ab6 ]

The PD (Packet Detection) lower bound is set after the STA interface connects. When the P2P interface attempts to find peers, it enters the remain-on-channel flow to listen for probe requests. However, if the RSSI of the connected AP is too high, the P2P interface fails to receive it. To resolve this, suspend the DIG during the remain-on-channel period.

---
 drivers/net/wireless/realtek/rtw89/core.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/wireless/realtek/rtw89/core.c +2 -0
index 46c5de687dfc0..3842b0e3bcb44 100644
@@ -4047,6 +4047,7 @@ void rtw89_roc_start(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 	reg = rtw89_mac_reg_by_idx(rtwdev, mac->rx_fltr, rtwvif_link->mac_idx);
 	rtw89_write32_clr(rtwdev, reg, B_AX_A_UC_CAM_MATCH | B_AX_A_BC_CAM_MATCH);
 
+	rtw89_phy_dig_suspend(rtwdev);
 	ieee80211_ready_on_channel(hw);
 	wiphy_delayed_work_cancel(hw->wiphy, &rtwvif->roc.roc_work);
 	wiphy_delayed_work_queue(hw->wiphy, &rtwvif->roc.roc_work,
@@ -4094,6 +4095,7 @@ void rtw89_roc_end(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 
 	rtw89_core_handle_sta_pending_tx(rtwdev, rtwvif_link);
 	queue_work(rtwdev->txq_wq, &rtwdev->txq_work);
+	rtw89_phy_dig_resume(rtwdev, true);
 
 	if (hw->conf.flags & IEEE80211_CONF_IDLE)
 		wiphy_delayed_work_queue(hw->wiphy, &roc->roc_work,
Signature · 1 line
2.53.0
author maintainer
#36 lore raw

PATCH 36/1250 wifi: rtw89: disable HTC field in AP mode

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Dian-Syuan Yang <[email protected]>

[ Upstream commit 1e53b826d5f8a3ca6d88fa6ed263acf54503214b ]

Disable HE QoS HTC field when operating in AP mode to resolve interoperability issues with some stations.

---
 drivers/net/wireless/realtek/rtw89/core.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/net/wireless/realtek/rtw89/core.c +4 -0
index 3842b0e3bcb44..fa277c8e899fd 100644
@@ -847,6 +847,7 @@ __rtw89_core_tx_check_he_qos_htc(struct rtw89_dev *rtwdev,
 				 enum btc_pkt_type pkt_type)
 {
 	struct rtw89_sta_link *rtwsta_link = tx_req->rtwsta_link;
+	struct ieee80211_vif *vif = tx_req->vif;
 	struct sk_buff *skb = tx_req->skb;
 	struct ieee80211_hdr *hdr = (void *)skb->data;
 	struct ieee80211_link_sta *link_sta;
@@ -878,6 +879,9 @@ __rtw89_core_tx_check_he_qos_htc(struct rtw89_dev *rtwdev,
 	if (rtwsta_link && rtwsta_link->ra_report.might_fallback_legacy)
 		return false;
 
+	if (vif->type == NL80211_IFTYPE_AP)
+		return false;
+
 	return true;
 }
 
Signature · 1 line
2.53.0
author maintainer
#37 lore raw

PATCH 37/1250 wifi: rtw89: disable CSI STBC for VHT 160MHz

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Dian-Syuan Yang <[email protected]>

[ Upstream commit d1fba55228685a7a237681be739683eaf698b9bc ]

Fix interoperability problem where CSI feedback with STBC enabled at VHT 160MHz BW cannot be properly decoded by certain APs, causing CSI reports to be rejected. This problem is specific to Wi-Fi 7 chips, as Wi-Fi 6 defaults to 20MHz CSI BW. Therefore, disable STBC encoding for CSI transmission in VHT 160MHz mode to ensure CSI feedback is accepted by these APs and maintain smooth throughput.

---
 drivers/net/wireless/realtek/rtw89/mac_be.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/net/wireless/realtek/rtw89/mac_be.c +4 -0
index e5a61c628b731..b03392612f252 100644
@@ -2147,6 +2147,10 @@ static int rtw89_mac_set_csi_para_reg_be(struct rtw89_dev *rtwdev,
 		sound_dim = min(sound_dim, t);
 	}
 
+	/* Disable stbc_en in VHT 160MHz to avoid IOT issues with certain APs */
+	if (link_sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ)
+		stbc_en = 0;
+
 	nc = min(nc, sound_dim);
 	nr = min(nr, sound_dim);
 
Signature · 1 line
2.53.0
author maintainer
#38 lore raw

PATCH 38/1250 psp: validate IPv4 header fields in psp_dev_rcv()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Jakub Kicinski <[email protected]>

[ Upstream commit c2b22277ad897d21341f502f87fccd905ff4e207 ]

psp_dev_rcv() is called from the NIC driver's RX completion path before the frame reaches ip_rcv_core(), so the IP header has not been validated in SW, yet. We expect that the device has done all this validation, but let's also add the SW checks, to avoid surprises.

---
 net/psp/psp_main.c | 9 +++++++++
 1 file changed, 9 insertions(+)
net/psp/psp_main.c +9 -0
index e35c31977479c..afda9cb660275 100644
@@ -294,6 +294,9 @@ int psp_dev_rcv(struct sk_buff *skb, u16 dev_id, u8 generation, bool strip_icv)
 	if (proto == htons(ETH_P_IP)) {
 		struct iphdr *iph = (struct iphdr *)(skb->data + l2_hlen);
 
+		if (unlikely(iph->ihl < 5))
+			return -EINVAL;
+
 		is_udp = iph->protocol == IPPROTO_UDP;
 		l3_hlen = iph->ihl * 4;
 		if (l3_hlen != sizeof(struct iphdr) &&
@@ -347,6 +350,9 @@ int psp_dev_rcv(struct sk_buff *skb, u16 dev_id, u8 generation, bool strip_icv)
 	if (proto == htons(ETH_P_IP)) {
 		struct iphdr *iph = (struct iphdr *)(skb->data + l2_hlen);
 
+		if (unlikely(ntohs(iph->tot_len) < l3_hlen + encap))
+			return -EINVAL;
+
 		iph->protocol = psph->nexthdr;
 		iph->tot_len = htons(ntohs(iph->tot_len) - encap);
 		iph->check = 0;
@@ -354,6 +360,9 @@ int psp_dev_rcv(struct sk_buff *skb, u16 dev_id, u8 generation, bool strip_icv)
 	} else {
 		struct ipv6hdr *ipv6h = (struct ipv6hdr *)(skb->data + l2_hlen);
 
+		if (unlikely(ntohs(ipv6h->payload_len) < encap))
+			return -EINVAL;
+
 		ipv6h->nexthdr = psph->nexthdr;
 		ipv6h->payload_len = htons(ntohs(ipv6h->payload_len) - encap);
 	}
Signature · 1 line
2.53.0
author maintainer
#39 lore raw

PATCH 39/1250 i3c: master: svc: Prevent IRQ storm from false SLVSTART on NPCM845

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Stanley Chu <[email protected]>

[ Upstream commit 1effa3adfe53cb2bb28bf5640a676b791d5ab405 ]

On NPCM845, when a target on the I3C bus gets stuck holding SDA low, the controller reports a false Master Request (MR) in-band interrupt event. The driver handles this by emitting a STOP condition to restore the bus.

However, the hardware quirk SVC_I3C_QUIRK_FALSE_SLVSTART indicates that emitting a STOP condition may spuriously set the SLVSTART interrupt status bit. In the Master Request case, this creates a feedback loop:
the STOP triggers a new SLVSTART event, the IRQ handler fires again, the controller still reports an MR type, another STOP is emitted, and the cycle repeats indefinitely, resulting in an IRQ storm that can lock up the CPU.

Clear the SLVSTART status bit explicitly after emitting the STOP in the Master Request IBI handler when the SVC_I3C_QUIRK_FALSE_SLVSTART quirk is set. This breaks the feedback loop without affecting normal SLVSTART processing, which is already guarded in the top-level IRQ handler by checking that MSTATUS is in SLVREQ state.

---
 drivers/i3c/master/svc-i3c-master.c | 9 +++++++++
 1 file changed, 9 insertions(+)
drivers/i3c/master/svc-i3c-master.c +9 -0
index b6a697173e19e..1f936196b30cc 100644
@@ -616,6 +616,15 @@ static void svc_i3c_master_ibi_isr(struct svc_i3c_master *master)
 		break;
 	case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST:
 		svc_i3c_master_emit_stop(master);
+
+		/*
+		 * If a target gets stuck holding SDA low, the controller reports a MR.
+		 * On NPCM845, emitting STOP may spuriously set SLVSTART, retriggering
+		 * the interrupt and re-entering MR handling, leading to an IRQ storm.
+		 * Clear SLVSTART after STOP to break the loop.
+		 */
+		if (svc_has_quirk(master, SVC_I3C_QUIRK_FALSE_SLVSTART))
+			writel(SVC_I3C_MINT_SLVSTART, master->regs + SVC_I3C_MSTATUS);
 		break;
 	default:
 		break;
Signature · 1 line
2.53.0
author maintainer
#40 lore raw

PATCH 40/1250 ASoC: fsl-asoc-card: reduce WM8904 PLL ratio to meet frequency limit

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Shengjiu Wang <[email protected]>

[ Upstream commit 99b5316f08f390a5e1ea2239ecca8e2b4ef70ac6 ]

WM8904 has a 27 MHz PLL frequency limit. The current S24_LE PLL ratio of 384 exceeds this at high sample rates (96 kHz × 384 = 36.864 MHz).

Reduce the ratio to 192 for WM8904, keeping PLL within limits at all supported rates (96 kHz × 192 = 18.432 MHz).

Add codec-specific pll_ratio_s24 field, default 384, override to 192 for WM8904.

---
 sound/soc/fsl/fsl-asoc-card.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
sound/soc/fsl/fsl-asoc-card.c +7 -1
index f660eeb8e5451..6cf5047eb9551 100644
@@ -48,6 +48,9 @@
  * @mclk_id: MCLK (or main clock) id for set_sysclk()
  * @fll_id: FLL (or secordary clock) id for set_sysclk()
  * @pll_id: PLL id for set_pll()
+ * @pll_ratio_s24: PLL output ratio for S24_LE format (PLL_freq = sample_rate × ratio)
+ *                 Default is 384, but some codecs (e.g., WM8904) require lower values
+ *                 to stay within PLL frequency limits
  */
 struct codec_priv {
 	struct clk *mclk;
@@ -56,6 +59,7 @@ struct codec_priv {
 	u32 mclk_id;
 	int fll_id;
 	int pll_id;
+	int pll_ratio_s24;
 };
 
 /**
@@ -222,7 +226,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
 
 		if (codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) {
 			if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE)
-				pll_out = priv->sample_rate * 384;
+				pll_out = priv->sample_rate * codec_priv->pll_ratio_s24;
 			else
 				pll_out = priv->sample_rate * 256;
 
@@ -742,6 +746,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
 	for (codec_idx = 0; codec_idx < 2; codec_idx++) {
 		priv->codec_priv[codec_idx].fll_id = -1;
 		priv->codec_priv[codec_idx].pll_id = -1;
+		priv->codec_priv[codec_idx].pll_ratio_s24 = 384;
 	}
 
 	/* Diversify the card configurations */
@@ -835,6 +840,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
 		priv->codec_priv[0].mclk_id = WM8904_FLL_MCLK;
 		priv->codec_priv[0].fll_id = WM8904_CLK_FLL;
 		priv->codec_priv[0].pll_id = WM8904_FLL_MCLK;
+		priv->codec_priv[0].pll_ratio_s24 = 192;
 		priv->dai_fmt |= SND_SOC_DAIFMT_CBP_CFP;
 	} else if (of_device_is_compatible(np, "fsl,imx-audio-spdif")) {
 		ret = fsl_asoc_card_spdif_init(codec_np, cpu_np, codec_dai_name, priv);
Signature · 1 line
2.53.0
author maintainer
#41 lore raw

PATCH 41/1250 kcsan: Silence -Wmaybe-uninitialized when calling __kcsan_check_access()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Marco Elver <[email protected]>

[ Upstream commit 07a1a6562ce29e2e0c134a57882d6e52e8758492 ]

Some subsystems enable -Wmaybe-uninitialized [1], which can trigger false positives when KCSAN is enabled. Specifically, passing an uninitialized variable to functions that instrument accesses (e.g., copy_from_user()) results in calls to __kcsan_check_access().

Because __kcsan_check_access() takes a const volatile void *ptr, GCC infers that the function may only read the memory location, and thus warns if the passed variable is uninitialized.

However, KCSAN is a dynamic analysis tool for data race detection; while it does read the memory location to detect concurrent modifications, the "initialized'ness" of the memory location is irrelevant for its analysis.

Use absolute_pointer() in __kcsan_check_write(), kcsan_check_write(), and kcsan_check_atomic_write() to hide the pointer from the compiler, preventing it from concluding that the pointer passed points to uninitialized memory.

This fixes warnings like:

|   CC      fs/ntfs3/file.o
| In file included from include/asm-generic/rwonce.h:27,
|                  from arch/arm64/include/asm/rwonce.h:81,
|                  from include/linux/compiler.h:369,
|                  from include/linux/array_size.h:5,
|                  from include/linux/kernel.h:16,
|                  from include/linux/backing-dev.h:12,
|                  from fs/ntfs3/file.c:10:
| In function 'instrument_copy_from_user_before',
|     inlined from '_inline_copy_from_user' at include/linux/uaccess.h:184:2,
|     inlined from 'copy_from_user' at include/linux/uaccess.h:221:9,
|     inlined from 'ntfs_ioctl_fitrim' at fs/ntfs3/file.c:77:6,
|     inlined from 'ntfs_ioctl' at fs/ntfs3/file.c:164:10:
| include/linux/kcsan-checks.h:220:28: error: 'range' may be used uninitialized [-Werror=maybe-uninitialized]
|   220 | #define kcsan_check_access __kcsan_check_access
|       |                            ^
| include/linux/kcsan-checks.h:311:9: note: in expansion of macro 'kcsan_check_access'
|   311 |         kcsan_check_access(ptr, size, KCSAN_ACCESS_WRITE)
|       |         ^~~~~~~~~~~~~~~~~~
| include/linux/instrumented.h:147:9: note: in expansion of macro 'kcsan_check_write'
|   147 |         kcsan_check_write(to, n);
|       |         ^~~~~~~~~~~~~~~~~
| include/linux/kcsan-checks.h: In function 'ntfs_ioctl':
| include/linux/kcsan-checks.h:37:6: note: by argument 1 of type 'const volatile void *' to '__kcsan_check_access' declared here
|    37 | void __kcsan_check_access(const volatile void *ptr, size_t size, int type);
|       |      ^~~~~~~~~~~~~~~~~~~~
| fs/ntfs3/file.c:65:29: note: 'range' declared here
|    65 |         struct fstrim_range range;
|       |                             ^~~~~
---
 include/linux/kcsan-checks.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
include/linux/kcsan-checks.h +3 -3
index 92f3843d9ebb8..e135dacaa90f3 100644
@@ -282,7 +282,7 @@ static inline void __kcsan_disable_current(void) { }
  * @size: size of access
  */
 #define __kcsan_check_write(ptr, size)                                         \
-	__kcsan_check_access(ptr, size, KCSAN_ACCESS_WRITE)
+	__kcsan_check_access(absolute_pointer(ptr), size, KCSAN_ACCESS_WRITE)
 
 /**
  * __kcsan_check_read_write - check regular read-write access for races
@@ -308,7 +308,7 @@ static inline void __kcsan_disable_current(void) { }
  * @size: size of access
  */
 #define kcsan_check_write(ptr, size)                                           \
-	kcsan_check_access(ptr, size, KCSAN_ACCESS_WRITE)
+	kcsan_check_access(absolute_pointer(ptr), size, KCSAN_ACCESS_WRITE)
 
 /**
  * kcsan_check_read_write - check regular read-write access for races
@@ -331,7 +331,7 @@ static inline void __kcsan_disable_current(void) { }
 #define kcsan_check_atomic_read(ptr, size)                                     \
 	kcsan_check_access(ptr, size, KCSAN_ACCESS_ATOMIC)
 #define kcsan_check_atomic_write(ptr, size)                                    \
-	kcsan_check_access(ptr, size, KCSAN_ACCESS_ATOMIC | KCSAN_ACCESS_WRITE)
+	kcsan_check_access(absolute_pointer(ptr), size, KCSAN_ACCESS_ATOMIC | KCSAN_ACCESS_WRITE)
 #define kcsan_check_atomic_read_write(ptr, size)                               \
 	kcsan_check_access(ptr, size, KCSAN_ACCESS_ATOMIC | KCSAN_ACCESS_WRITE | KCSAN_ACCESS_COMPOUND)
 #endif
Signature · 1 line
2.53.0
author maintainer
#42 lore raw

PATCH 42/1250 firmware: stratix10-svc: change get provision data to async SMC call

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Siew Chin Lim <[email protected]>

[ Upstream commit 4b0a32016347bfd6ae9849f21b1b767905f68d14 ]

Change INTEL_SIP_SMC_FCS_GET_PROVISION_DATA's SMC call to async from sync to avoid long runtime which may cause the watchdog timeout issue.

---
 drivers/firmware/stratix10-svc.c             |  4 ++--
 include/linux/firmware/intel/stratix10-smc.h | 12 ++++--------
 2 files changed, 6 insertions(+), 10 deletions(-)
drivers/firmware/stratix10-svc.c +2 -2
index ba715c6eb32bf..d2bce209d2179 100644
@@ -340,6 +340,7 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
 	case COMMAND_FCS_SEND_CERTIFICATE:
 	case COMMAND_FCS_DATA_ENCRYPTION:
 	case COMMAND_FCS_DATA_DECRYPTION:
+	case COMMAND_FCS_GET_PROVISION_DATA:
 		cb_data->status = BIT(SVC_STATUS_OK);
 		break;
 	case COMMAND_RECONFIG_DATA_SUBMIT:
@@ -366,7 +367,6 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
 		cb_data->kaddr2 = &res.a2;
 		break;
 	case COMMAND_FCS_RANDOM_NUMBER_GEN:
-	case COMMAND_FCS_GET_PROVISION_DATA:
 	case COMMAND_POLL_SERVICE_STATUS:
 		cb_data->status = BIT(SVC_STATUS_OK);
 		cb_data->kaddr1 = &res.a1;
@@ -533,7 +533,7 @@ static int svc_normal_to_secure_thread(void *data)
 			break;
 		case COMMAND_FCS_GET_PROVISION_DATA:
 			a0 = INTEL_SIP_SMC_FCS_GET_PROVISION_DATA;
-			a1 = (unsigned long)pdata->paddr;
+			a1 = 0;
 			a2 = 0;
 			break;
 
include/linux/firmware/intel/stratix10-smc.h +4 -8
index ee80ca4bb0d0c..1e60fd6210c3b 100644
@@ -600,24 +600,20 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 
 /**
  * Request INTEL_SIP_SMC_FCS_GET_PROVISION_DATA
- * Sync call to dump all the fuses and key hashes
+ * Async call to dump all the fuses and key hashes
  *
  * Call register usage:
  * a0 INTEL_SIP_SMC_FCS_GET_PROVISION_DATA
- * a1 the physical address for firmware to write structure of fuse and
- *    key hashes
- * a2-a7 not used
+ * a1-a7 not used
  *
  * Return status:
  * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FCS_ERROR or
  *      INTEL_SIP_SMC_FCS_REJECTED
- * a1 mailbox error
- * a2 physical address for the structure of fuse and key hashes
- * a3 the size of structure
+ * a1-a3 not used
  *
  */
 #define INTEL_SIP_SMC_FUNCID_FCS_GET_PROVISION_DATA 94
 #define INTEL_SIP_SMC_FCS_GET_PROVISION_DATA \
-	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_GET_PROVISION_DATA)
+	INTEL_SIP_SMC_STD_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_GET_PROVISION_DATA)
 
 #endif
Signature · 1 line
2.53.0
author maintainer
#43 lore raw

PATCH 43/1250 bridge: Do not suppress ARP probes and DAD NS unconditionally

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Danielle Ratson <[email protected]>

[ Upstream commit fee1fc1d5a5475f5516d406a03e443348cd0f06c ]

When neighbor suppression is enabled on a VXLAN port, the bridge is expected to reply to ARP/NS messages on behalf of remote hosts when both FDB and neighbor entries exist. This allows the bridge to suppress flooding of these messages to the VXLAN overlay.

According to RFC 9161 ("Operational Aspects of Proxy ARP/ND in Ethernet Virtual Private Networks"):
"A PE SHOULD reply to broadcast/multicast address resolution messages, i.e., ARP Requests, ARP probes, NS messages, as well as DAD NS messages. An ARP probe is an ARP Request constructed with an all-zero sender IP address that may be used by hosts for IPv4 Address Conflict Detection as specified in [RFC5227]".

However, the current implementation unconditionally suppresses ARP probes and DAD Neighbor Solicitations, which breaks Duplicate Address Detection (DAD) over EVPN.

For DAD to work correctly over the VXLAN fabric:
- When the bridge does not know the answer:
flood the probe/DAD packet to allow remote VTEPs to respond.
- When the bridge knows the answer:
reply to indicate the address is in use.

Fix by adjusting the early suppression checks to exclude ARP probes and DAD NS from unconditional suppression.

When replying to a DAD NS, br_nd_send() is adjusted to set the NA destination to the all-nodes multicast address (ff02::1) and clear the Solicited flag, in accordance with RFC 4861 section 7.2.4.

---
 net/bridge/br_arp_nd_proxy.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
net/bridge/br_arp_nd_proxy.c +11 -5
index 7ace0f4941bb6..4cd3470e5f56c 100644
@@ -165,7 +165,7 @@ void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
 			return;
 		if (parp->ar_op != htons(ARPOP_RREQUEST) &&
 		    parp->ar_op != htons(ARPOP_RREPLY) &&
-		    (ipv4_is_zeronet(sip) || sip == tip)) {
+		    sip == tip) {
 			/* prevent flooding to neigh suppress ports */
 			BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1;
 			return;
@@ -263,6 +263,7 @@ static void br_nd_send(struct net_bridge *br, struct net_bridge_port *p,
 	int ns_olen;
 	int i, len;
 	u8 *daddr;
+	bool dad;
 	u16 pvid;
 
 	if (!dev || skb_linearize(request))
@@ -301,8 +302,13 @@ static void br_nd_send(struct net_bridge *br, struct net_bridge_port *p,
 		}
 	}
 
+	dad = ipv6_addr_any(&ipv6_hdr(request)->saddr);
+
 	/* Ethernet header */
-	ether_addr_copy(eth_hdr(reply)->h_dest, daddr);
+	if (dad)
+		ipv6_eth_mc_map(&in6addr_linklocal_allnodes, eth_hdr(reply)->h_dest);
+	else
+		ether_addr_copy(eth_hdr(reply)->h_dest, daddr);
 	ether_addr_copy(eth_hdr(reply)->h_source, n->ha);
 	eth_hdr(reply)->h_proto = htons(ETH_P_IPV6);
 	reply->protocol = htons(ETH_P_IPV6);
@@ -318,7 +324,7 @@ static void br_nd_send(struct net_bridge *br, struct net_bridge_port *p,
 	pip6->priority = ipv6_hdr(request)->priority;
 	pip6->nexthdr = IPPROTO_ICMPV6;
 	pip6->hop_limit = 255;
-	pip6->daddr = ipv6_hdr(request)->saddr;
+	pip6->daddr = dad ? in6addr_linklocal_allnodes : ipv6_hdr(request)->saddr;
 	pip6->saddr = *(struct in6_addr *)n->primary_key;
 
 	skb_pull(reply, sizeof(struct ipv6hdr));
@@ -331,7 +337,7 @@ static void br_nd_send(struct net_bridge *br, struct net_bridge_port *p,
 	na->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT;
 	na->icmph.icmp6_router = (n->flags & NTF_ROUTER) ? 1 : 0;
 	na->icmph.icmp6_override = 1;
-	na->icmph.icmp6_solicited = 1;
+	na->icmph.icmp6_solicited = dad ? 0 : 1;
 	na->target = ns->target;
 	ether_addr_copy(&na->opt[2], n->ha);
 	na->opt[0] = ND_OPT_TARGET_LL_ADDR;
@@ -436,7 +442,7 @@ void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
 	saddr = &iphdr->saddr;
 	daddr = &iphdr->daddr;
 
-	if (ipv6_addr_any(saddr) || !ipv6_addr_cmp(saddr, daddr)) {
+	if (!ipv6_addr_cmp(saddr, daddr)) {
 		/* prevent flooding to neigh suppress ports */
 		BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1;
 		return;
Signature · 1 line
2.53.0
author maintainer
#44 lore raw

PATCH 44/1250 soundwire: intel_auxdevice: Add cs42l43b to wake_capable_list

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Charles Keepax <[email protected]>

[ Upstream commit be6d8daaab654e9b0a8508757534d556d399d0cd ]

Add cs42l43b (both packaging options) to the wake_capable_list because it can generate jack events whilst the bus is stopped.

---
 drivers/soundwire/intel_auxdevice.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/soundwire/intel_auxdevice.c +2 -0
index 8752b0e3ce74c..c0c8ffcecc6bf 100644
@@ -51,6 +51,8 @@ struct wake_capable_part {
 };
 
 static struct wake_capable_part wake_capable_list[] = {
+	{0x01fa, 0x2A30},
+	{0x01fa, 0x2A3B},
 	{0x01fa, 0x4243},
 	{0x01fa, 0x4245},
 	{0x025d, 0x5682},
Signature · 1 line
2.53.0
author maintainer
#45 lore raw

PATCH 45/1250 soundwire: validate DT compatible before parsing it

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Pengpeng Hou <[email protected]>

[ Upstream commit 45c7bda7b7440183850012153988e40b300f40d0 ]

sdw_of_find_slaves() fetches raw "compatible" bytes with of_get_property() and then immediately parses them with sscanf("sdw%01x%04hx%04hx%02hhx", ...).

Live-tree OF properties are stored as raw bytes plus a separate length; they are not globally guaranteed to be NUL-terminated. Validate the first compatible string before parsing it.

---
 drivers/soundwire/slave.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/soundwire/slave.c +2 -2
index 3d4d00188c26c..3c84027692460 100644
@@ -240,8 +240,8 @@ int sdw_of_find_slaves(struct sdw_bus *bus)
 		struct sdw_slave_id id;
 		const __be32 *addr;
 
-		compat = of_get_property(node, "compatible", NULL);
-		if (!compat)
+		ret = of_property_read_string(node, "compatible", &compat);
+		if (ret)
 			continue;
 
 		ret = sscanf(compat, "sdw%01x%04hx%04hx%02hhx", &sdw_version,
Signature · 1 line
2.53.0
author maintainer
#46 lore raw

PATCH 46/1250 media: chips-media: wave5: Fix Reports from Kernel Lock Validator

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Brandon Brnich <[email protected]>

[ Upstream commit 7d5d364f8b2dcc9b6b92456fb55632fde4a4d96f ]

handle_dynamic_resolution change requires that the state_lock be acquired based on the lockdep_assert_held. However, the handle_dynamic_resolution_change call in initialize_sequence does not properly obtain the lock before calling.

Since the v4l2_ctrl_find and s_ctrl can sleep, they should not be called while a lock is already held. Store off the fbc_buf_count then properly update control once lock has been freed.

---
 .../chips-media/wave5/wave5-vpu-dec.c         | 47 +++++++++++++------
 1 file changed, 33 insertions(+), 14 deletions(-)
drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c +33 -14
index 13f09bb42cb2d..db3f5bed7119f 100644
@@ -270,10 +270,23 @@ static void send_eos_event(struct vpu_instance *inst)
 	inst->eos = false;
 }
 
+static void wave5_update_min_bufs_ctrl(struct vpu_instance *inst, u32 fbc_buf_count)
+{
+	struct v4l2_m2m_ctx *m2m_ctx = inst->v4l2_fh.m2m_ctx;
+	struct v4l2_ctrl *ctrl;
+
+	if (!fbc_buf_count || fbc_buf_count == v4l2_m2m_num_dst_bufs_ready(m2m_ctx))
+		return;
+
+	ctrl = v4l2_ctrl_find(&inst->v4l2_ctrl_hdl,
+			      V4L2_CID_MIN_BUFFERS_FOR_CAPTURE);
+	if (ctrl)
+		v4l2_ctrl_s_ctrl(ctrl, fbc_buf_count);
+}
+
 static int handle_dynamic_resolution_change(struct vpu_instance *inst)
 {
 	struct v4l2_fh *fh = &inst->v4l2_fh;
-	struct v4l2_m2m_ctx *m2m_ctx = inst->v4l2_fh.m2m_ctx;
 
 	static const struct v4l2_event vpu_event_src_ch = {
 		.type = V4L2_EVENT_SOURCE_CHANGE,
@@ -292,14 +305,6 @@ static int handle_dynamic_resolution_change(struct vpu_instance *inst)
 
 	inst->needs_reallocation = true;
 	inst->fbc_buf_count = initial_info->min_frame_buffer_count + 1;
-	if (inst->fbc_buf_count != v4l2_m2m_num_dst_bufs_ready(m2m_ctx)) {
-		struct v4l2_ctrl *ctrl;
-
-		ctrl = v4l2_ctrl_find(&inst->v4l2_ctrl_hdl,
-				      V4L2_CID_MIN_BUFFERS_FOR_CAPTURE);
-		if (ctrl)
-			v4l2_ctrl_s_ctrl(ctrl, inst->fbc_buf_count);
-	}
 
 	if (p_dec_info->initial_info_obtained) {
 		const struct vpu_format *vpu_fmt;
@@ -427,19 +432,24 @@ static void wave5_vpu_dec_finish_decode(struct vpu_instance *inst)
 	if ((dec_info.index_frame_display == DISPLAY_IDX_FLAG_SEQ_END ||
 	     dec_info.sequence_changed)) {
 		unsigned long flags;
+		u32 fbc_buf_count = 0;
 
 		spin_lock_irqsave(&inst->state_spinlock, flags);
 		if (!v4l2_m2m_has_stopped(m2m_ctx)) {
 			switch_state(inst, VPU_INST_STATE_STOP);
 
-			if (dec_info.sequence_changed)
+			if (dec_info.sequence_changed) {
 				handle_dynamic_resolution_change(inst);
-			else
+				fbc_buf_count = inst->fbc_buf_count;
+			} else {
 				send_eos_event(inst);
+			}
 
 			flag_last_buffer_done(inst);
 		}
 		spin_unlock_irqrestore(&inst->state_spinlock, flags);
+
+		wave5_update_min_bufs_ctrl(inst, fbc_buf_count);
 	}
 
 	/*
@@ -1544,8 +1554,9 @@ static const struct vpu_instance_ops wave5_vpu_dec_inst_ops = {
 static int initialize_sequence(struct vpu_instance *inst)
 {
 	struct dec_initial_info initial_info;
-	int ret = 0;
 	unsigned long flags;
+	u32 fbc_buf_count;
+	int ret = 0;
 
 	memset(&initial_info, 0, sizeof(struct dec_initial_info));
 
@@ -1569,8 +1580,11 @@ static int initialize_sequence(struct vpu_instance *inst)
 
 	spin_lock_irqsave(&inst->state_spinlock, flags);
 	handle_dynamic_resolution_change(inst);
+	fbc_buf_count = inst->fbc_buf_count;
 	spin_unlock_irqrestore(&inst->state_spinlock, flags);
 
+	wave5_update_min_bufs_ctrl(inst, fbc_buf_count);
+
 	return 0;
 }
 
@@ -1603,6 +1617,7 @@ static void wave5_vpu_dec_device_run(void *priv)
 		ret = initialize_sequence(inst);
 		if (ret) {
 			unsigned long flags;
+			u32 fbc_buf_count = 0;
 
 			spin_lock_irqsave(&inst->state_spinlock, flags);
 			if (wave5_is_draining_or_eos(inst) &&
@@ -1611,14 +1626,18 @@ static void wave5_vpu_dec_device_run(void *priv)
 
 				switch_state(inst, VPU_INST_STATE_STOP);
 
-				if (vb2_is_streaming(dst_vq))
+				if (vb2_is_streaming(dst_vq)) {
 					send_eos_event(inst);
-				else
+				} else {
 					handle_dynamic_resolution_change(inst);
+					fbc_buf_count = inst->fbc_buf_count;
+				}
 
 				flag_last_buffer_done(inst);
 			}
 			spin_unlock_irqrestore(&inst->state_spinlock, flags);
+
+			wave5_update_min_bufs_ctrl(inst, fbc_buf_count);
 		} else {
 			switch_state(inst, VPU_INST_STATE_INIT_SEQ);
 		}
Signature · 1 line
2.53.0
author maintainer
#47 lore raw

PATCH 47/1250 media: chips-media: wave5: Release m2m_ctx after Instance Removed from List

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Brandon Brnich <[email protected]>

[ Upstream commit 7cdbd7bb21949a8fda10c7104a2b12ee363cbf5c ]

Possible use after free if IRQ thread manages to obtain spinlock between m2m_ctx release and wave5_release function removing stream instance from list of active instances. The IRQ thread looks for the m2m_ctx which is freed so null pointer dereference occurs.

---
 drivers/media/platform/chips-media/wave5/wave5-helper.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/media/platform/chips-media/wave5/wave5-helper.c +3 -1
index 53a0ac068c2e2..c3d34be833ff0 100644
@@ -68,7 +68,6 @@ int wave5_vpu_release_device(struct file *filp,
 	int ret = 0;
 	unsigned long flags;
 
-	v4l2_m2m_ctx_release(inst->v4l2_fh.m2m_ctx);
 	/*
 	 * To prevent Null reference exception, the existing irq handler were
 	 * separated to two modules.
@@ -89,6 +88,9 @@ int wave5_vpu_release_device(struct file *filp,
 	list_del_init(&inst->list);
 	spin_unlock_irqrestore(&inst->dev->irq_spinlock, flags);
 	mutex_unlock(&inst->dev->irq_lock);
+
+	v4l2_m2m_ctx_release(inst->v4l2_fh.m2m_ctx);
+
 	if (inst->state != VPU_INST_STATE_NONE) {
 		u32 fail_res;
 
Signature · 1 line
2.53.0
author maintainer
#48 lore raw

PATCH 48/1250 dm-raid: only requeue bios when dm is suspending

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Benjamin Marzinski <[email protected]>

[ Upstream commit 97cb8be0fd4c50d310988e0822f7e91d1711e6f8 ]

returning DM_MAPIO_REQUEUE from the target map() function only requeues the bio during noflush suspends. During regular operations or during flushing suspends, it fails the bio. Failing the bio during flushing suspends is the correct behavior here. We cannot handle the bio, and we cannot suspends while it is outstanding. But during normal operations, we should not push the bio back to dm. Instead, wait for the reshape to be resumed.

---
 drivers/md/dm-raid.c | 6 ++++++
 drivers/md/md.h      | 2 ++
 drivers/md/raid5.c   | 7 +++++--
 3 files changed, 13 insertions(+), 2 deletions(-)
drivers/md/dm-raid.c +6 -0
index 4bacdc499984b..9eee490c029e7 100644
@@ -3831,6 +3831,7 @@ static void raid_presuspend(struct dm_target *ti)
 	 * resume, raid_postsuspend() is too late.
 	 */
 	set_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags);
+	set_bit(MD_DM_SUSPENDING, &mddev->flags);
 
 	if (!reshape_interrupted(mddev))
 		return;
@@ -3847,13 +3848,16 @@ static void raid_presuspend(struct dm_target *ti)
 static void raid_presuspend_undo(struct dm_target *ti)
 {
 	struct raid_set *rs = ti->private;
+	struct mddev *mddev = &rs->md;
 
+	clear_bit(MD_DM_SUSPENDING, &mddev->flags);
 	clear_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags);
 }
 
 static void raid_postsuspend(struct dm_target *ti)
 {
 	struct raid_set *rs = ti->private;
+	struct mddev *mddev = &rs->md;
 
 	if (!test_and_set_bit(RT_FLAG_RS_SUSPENDED, &rs->runtime_flags)) {
 		/*
@@ -3864,6 +3868,8 @@ static void raid_postsuspend(struct dm_target *ti)
 		mddev_suspend(&rs->md, false);
 		rs->md.ro = MD_RDONLY;
 	}
+	clear_bit(MD_DM_SUSPENDING, &mddev->flags);
+
 }
 
 static void attempt_restore_of_faulty_devices(struct raid_set *rs)
drivers/md/md.h +2 -0
index 7400f7739d2e6..bba0f6790c035 100644
@@ -343,6 +343,7 @@ struct md_cluster_operations;
  * @MD_HAS_SUPERBLOCK: There is persistence sb in member disks.
  * @MD_FAILLAST_DEV: Allow last rdev to be removed.
  * @MD_SERIALIZE_POLICY: Enforce write IO is not reordered, just used by raid1.
+ * @MD_DM_SUSPENDING: This DM raid device is suspending.
  *
  * change UNSUPPORTED_MDDEV_FLAGS for each array type if new flag is added
  */
@@ -362,6 +363,7 @@ enum mddev_flags {
 	MD_HAS_SUPERBLOCK,
 	MD_FAILLAST_DEV,
 	MD_SERIALIZE_POLICY,
+	MD_DM_SUSPENDING,
 };
 
 enum mddev_sb_flags {
drivers/md/raid5.c +5 -2
index 8ff8cce3da7bf..84168ce7a0ff6 100644
@@ -6057,8 +6057,11 @@ static enum stripe_result make_stripe_request(struct mddev *mddev,
 	raid5_release_stripe(sh);
 out:
 	if (ret == STRIPE_SCHEDULE_AND_RETRY && reshape_interrupted(mddev)) {
-		bi->bi_status = BLK_STS_RESOURCE;
-		ret = STRIPE_WAIT_RESHAPE;
+		if (!mddev_is_dm(mddev) ||
+		    test_bit(MD_DM_SUSPENDING, &mddev->flags)) {
+			bi->bi_status = BLK_STS_RESOURCE;
+			ret = STRIPE_WAIT_RESHAPE;
+		}
 		pr_err_ratelimited("dm-raid456: io across reshape position while reshape can't make progress");
 	}
 	return ret;
Signature · 1 line
2.53.0
author maintainer
#49 lore raw

PATCH 49/1250 spi: spi-qcom-qspi: Fix incomplete error handling in runtime PM

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Viken Dadhaniya <[email protected]>

[ Upstream commit d283d5d4d9f6d081ddb65e371be26fffeb611c42 ]

The runtime PM functions had incomplete error handling that could leave the system in an inconsistent state. If any operation failed midway through suspend or resume, some resources would be left in the wrong state while others were already changed, leading to potential clock/power imbalances.

Reorder the suspend/resume sequences to avoid brownout risk by ensuring the performance state is set appropriately before clocks are enabled and clocks are disabled before dropping the performance state.

Fix by adding proper error checking for all operations and using goto-based cleanup to ensure all successfully acquired resources are properly released on any error.

---
 drivers/spi/spi-qcom-qspi.c | 44 ++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 8 deletions(-)
drivers/spi/spi-qcom-qspi.c +36 -8
index 3c08dad8bd3f9..44175367bbd00 100644
@@ -820,20 +820,34 @@ static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev)
 	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);
 	int ret;
 
-	/* Drop the performance state vote */
-	dev_pm_opp_set_rate(dev, 0);
 	clk_bulk_disable_unprepare(QSPI_NUM_CLKS, ctrl->clks);
 
 	ret = icc_disable(ctrl->icc_path_cpu_to_qspi);
 	if (ret) {
 		dev_err_ratelimited(ctrl->dev, "%s: ICC disable failed for cpu: %d\n",
 			__func__, ret);
-		return ret;
+		goto err_enable_clk;
 	}
 
-	pinctrl_pm_select_sleep_state(dev);
+	ret = pinctrl_pm_select_sleep_state(dev);
+	if (ret)
+		goto err_enable_icc;
+
+	/* Drop the performance state vote */
+	ret = dev_pm_opp_set_rate(dev, 0);
+	if (ret)
+		goto err_select_default_state;
 
 	return 0;
+
+err_select_default_state:
+	pinctrl_pm_select_default_state(dev);
+err_enable_icc:
+	icc_enable(ctrl->icc_path_cpu_to_qspi);
+err_enable_clk:
+	if (clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks))
+		dev_err_ratelimited(ctrl->dev, "Failed to re-enable clocks\n");
+	return ret;
 }
 
 static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev)
@@ -842,20 +856,34 @@ static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev)
 	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);
 	int ret;
 
-	pinctrl_pm_select_default_state(dev);
+	ret = dev_pm_opp_set_rate(dev, ctrl->last_speed * 4);
+	if (ret)
+		return ret;
+
+	ret = pinctrl_pm_select_default_state(dev);
+	if (ret)
+		goto err_opp_set_rate_zero;
 
 	ret = icc_enable(ctrl->icc_path_cpu_to_qspi);
 	if (ret) {
 		dev_err_ratelimited(ctrl->dev, "%s: ICC enable failed for cpu: %d\n",
 			__func__, ret);
-		return ret;
+		goto err_select_sleep_state;
 	}
 
 	ret = clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks);
 	if (ret)
-		return ret;
+		goto err_disable_icc;
 
-	return dev_pm_opp_set_rate(dev, ctrl->last_speed * 4);
+	return 0;
+
+err_disable_icc:
+	icc_disable(ctrl->icc_path_cpu_to_qspi);
+err_select_sleep_state:
+	pinctrl_pm_select_sleep_state(dev);
+err_opp_set_rate_zero:
+	dev_pm_opp_set_rate(dev, 0);
+	return ret;
 }
 
 static int __maybe_unused qcom_qspi_suspend(struct device *dev)
Signature · 1 line
2.53.0
author maintainer
#50 lore raw

PATCH 50/1250 media: rc: mceusb: Add support for 04eb:e033

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Riccardo Boninsegna <[email protected]>

[ Upstream commit 0692c2602e4cd410aa045f8991bd1c142b2e56f9 ]

This is a Sonix SN8P2202XG microcontroller with firmware compatible with the already supported Northstar 04eb:e004, implementing an MCE IR receiver (PCB seems to be tracked for a transmitter too but missing related parts).

Found in a Skintek SK-CR-IN+IR ( http://www.skintek.it/SK-CR-IN+IR.php ) internal 3.5 inch USB card reader and MCE receiver combo (implemented by, and wired as, separate USB devices)
PCB marking: AU6475 966816 STIR REV:A02 MCE

---
 drivers/media/rc/mceusb.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/media/rc/mceusb.c +2 -0
index a4c94fdf767ca..bee5cd15796fb 100644
@@ -397,6 +397,8 @@ static const struct usb_device_id mceusb_dev_table[] = {
 	{ USB_DEVICE(VENDOR_COMPRO, 0x3082) },
 	/* Northstar Systems, Inc. eHome Infrared Transceiver */
 	{ USB_DEVICE(VENDOR_NORTHSTAR, 0xe004) },
+	/* Northstar Systems, Inc. eHome Infrared Transceiver - variant */
+	{ USB_DEVICE(VENDOR_NORTHSTAR, 0xe033) },
 	/* TiVo PC IR Receiver */
 	{ USB_DEVICE(VENDOR_TIVO, 0x2000),
 	  .driver_info = TIVO_KIT },
Signature · 1 line
2.53.0
author maintainer
#51 lore raw

PATCH 51/1250 net: mana: hardening: Reject zero max_num_queues from MANA_QUERY_VPORT_CONFIG

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Erni Sri Satya Vennela <[email protected]>

[ Upstream commit 93ca1575dd1f43e24ad85663305e13114f9acdf1 ]

As a part of MANA hardening for CVM, validate that max_num_sq and max_num_rq returned by MANA_QUERY_VPORT_CONFIG are not zero. These values flow into apc->num_queues, which is used as an allocation count and loop bound. A zero value would result in zero-size allocations and incorrect driver behavior.

Return -EPROTO if either value is zero.

---
 drivers/net/ethernet/microsoft/mana/mana_en.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/net/ethernet/microsoft/mana/mana_en.c +6 -0
index adf25acb0d46f..b61da240ac1bb 100644
@@ -1262,6 +1262,12 @@ static int mana_query_vport_cfg(struct mana_port_context *apc, u32 vport_index,
 
 	*max_sq = resp.max_num_sq;
 	*max_rq = resp.max_num_rq;
+
+	if (*max_sq == 0 || *max_rq == 0) {
+		netdev_err(apc->ndev, "Invalid max queues from vPort config\n");
+		return -EPROTO;
+	}
+
 	if (resp.num_indirection_ent > 0 &&
 	    resp.num_indirection_ent <= MANA_INDIRECT_TABLE_MAX_SIZE &&
 	    is_power_of_2(resp.num_indirection_ent)) {
Signature · 1 line
2.53.0
author maintainer
#52 lore raw

PATCH 52/1250 s390/cio: Purge based on the cdevs online status

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Vineeth Vijayan <[email protected]>

[ Upstream commit 58d50cad63e85daae032924ecc3d457fb1ec02fb ]

Ensure that all devices currently offline are purged correctly.

Previously, purging logic relied on the internal FSM state to determine whether a device was offline. However, devices with a target state of offline could be skipped if CIO internal processing was still ongoing during the purge operation.

Update the purge decision logic to rely on the online variable in the cdev structure instead of the internal FSM state, providing a more reliable indication of actual device availability.

---
 drivers/s390/cio/device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/s390/cio/device.c +1 -1
index 4b2dae6eb3760..7f8f78b1f8aea 100644
@@ -1329,7 +1329,7 @@ static int purge_fn(struct subchannel *sch, void *data)
 
 	cdev = sch_get_cdev(sch);
 	if (cdev) {
-		if (cdev->private->state != DEV_STATE_OFFLINE)
+		if (cdev->online)
 			goto unlock;
 
 		if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0)
Signature · 1 line
2.53.0
author maintainer
#53 lore raw

PATCH 53/1250 media: platform: cros-ec: Add Kulnex and Moxoe to the match table

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ken Lin <[email protected]>

[ Upstream commit e024767f90f9f50bfcce4b20bb74237ad72450f3 ]

The Google Kulnex and Moxoe device uses the same approach as Google Brask which enables the HDMI CEC via the cros-ec-cec driver.

---
 drivers/media/cec/platform/cros-ec/cros-ec-cec.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/media/cec/platform/cros-ec/cros-ec-cec.c +4 -0
index 419b9a7abcceb..4b3f9bff6067a 100644
@@ -334,6 +334,10 @@ static const struct cec_dmi_match cec_dmi_match_table[] = {
 	{ "Google", "Dirks", "0000:00:02.0", port_ab_conns },
 	/* Google Moxie */
 	{ "Google", "Moxie", "0000:00:02.0", port_b_conns },
+	/* Google Kulnex */
+	{ "Google", "Kulnex", "0000:00:02.0", port_b_conns },
+	/* Google Moxoe */
+	{ "Google", "Moxoe", "0000:00:02.0", port_b_conns },
 };
 
 static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev,
Signature · 1 line
2.53.0
author maintainer
#54 lore raw

PATCH 54/1250 wifi: mac80211: avoid out-of-bounds access in monitor

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Miri Korenblit <[email protected]>

[ Upstream commit 03c41203ee5a833a9d7a7630be190830cede29d8 ]

In NAN, we don't know on what band the frame will be sent. Therefore we set info->band to NUM_NL80211_BANDS. However, this leads to out-of-bound access in ieee80211_add_tx_radiotap_header when we try to access the sbands array.

Fix it by not accessing the array if the band is NUM_NL80211_BANDS. This means that we will not report rate info for legacy rate in NAN. But nobody really cares about it.

---
 net/mac80211/status.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
net/mac80211/status.c +5 -4
index 4b38aa0e902a8..8716eda8317d1 100644
@@ -5,7 +5,7 @@
  * Copyright 2006-2007	Jiri Benc <[email protected]>
  * Copyright 2008-2010	Johannes Berg <[email protected]>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
- * Copyright 2021-2025  Intel Corporation
+ * Copyright 2021-2026  Intel Corporation
  */
 
 #include <linux/export.h>
@@ -295,9 +295,10 @@ ieee80211_add_tx_radiotap_header(struct ieee80211_local *local,
 						 RATE_INFO_FLAGS_VHT_MCS |
 						 RATE_INFO_FLAGS_HE_MCS)))
 			legacy_rate = status_rate->rate_idx.legacy;
-	} else if (info->status.rates[0].idx >= 0 &&
-		 !(info->status.rates[0].flags & (IEEE80211_TX_RC_MCS |
-						  IEEE80211_TX_RC_VHT_MCS))) {
+	} else if (info->band < NUM_NL80211_BANDS &&
+		   info->status.rates[0].idx >= 0 &&
+		   !(info->status.rates[0].flags & (IEEE80211_TX_RC_MCS |
+						    IEEE80211_TX_RC_VHT_MCS))) {
 		struct ieee80211_supported_band *sband;
 
 		sband = local->hw.wiphy->bands[info->band];
Signature · 1 line
2.53.0
author maintainer
#55 lore raw

PATCH 55/1250 thunderbolt: Avoid reserved fields in path config space for USB4 routers

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Gil Fine <[email protected]>

[ Upstream commit 7e49bb89df860bb7352974100cd5dd48752bb646 ]

According to USB4 spec, USB4 Connection Manager shall not change value of any fields that are defined as "RsvdZ" or "VD". Specifically fields:
Path Credits Allocated, IFC, ISE fields in path config space shall not be written by CM. To handle this, CM shall first read current path config space from the hardware, change only the fields that can be changed, and then write back the path config space.

---
 drivers/thunderbolt/path.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)
drivers/thunderbolt/path.c +22 -9
index f9b11dadfbdd5..d8e547286127a 100644
@@ -426,7 +426,8 @@ static int __tb_path_deactivate_hop(struct tb_port *port, int hop_index,
 				 * in the USB4 spec so we clear them
 				 * only for pre-USB4 adapters.
 				 */
-				if (!tb_switch_is_usb4(port->sw)) {
+				if (tb_port_is_null(port) ||
+				    !tb_switch_is_usb4(port->sw)) {
 					hop.ingress_fc = 0;
 					hop.ingress_shared_buffer = 0;
 				}
@@ -546,15 +547,18 @@ int tb_path_activate(struct tb_path *path)
 		__tb_path_deactivate_hop(path->hops[i].in_port,
 				path->hops[i].in_hop_index, path->clear_fc);
 
-		/* dword 0 */
+		/* Needed for USB4 routers, read path config space before write */
+		res = tb_port_read(path->hops[i].in_port, &hop, TB_CFG_HOPS,
+				   2 * path->hops[i].in_hop_index, 2);
+		if (res)
+			goto err;
+
 		hop.next_hop = path->hops[i].next_hop_index;
 		hop.out_port = path->hops[i].out_port->port;
-		hop.initial_credits = path->hops[i].initial_credits;
 		hop.pmps = path->hops[i].pm_support;
 		hop.unknown1 = 0;
 		hop.enable = 1;
 
-		/* dword 1 */
 		out_mask = (i == path->path_length - 1) ?
 				TB_PATH_DESTINATION : TB_PATH_INTERNAL;
 		in_mask = (i == 0) ? TB_PATH_SOURCE : TB_PATH_INTERNAL;
@@ -564,12 +568,21 @@ int tb_path_activate(struct tb_path *path)
 		hop.drop_packages = path->drop_packages;
 		hop.counter = path->hops[i].in_counter_index;
 		hop.counter_enable = path->hops[i].in_counter_index != -1;
-		hop.ingress_fc = path->ingress_fc_enable & in_mask;
 		hop.egress_fc = path->egress_fc_enable & out_mask;
-		hop.ingress_shared_buffer = path->ingress_shared_buffer
-					    & in_mask;
-		hop.egress_shared_buffer = path->egress_shared_buffer
-					    & out_mask;
+		hop.egress_shared_buffer = path->egress_shared_buffer & out_mask;
+		/*
+		 * Protocol adapters IFC and ISE bits, and Path Credits
+		 * Allocated are vendor defined in the USB4 spec so we
+		 * program them only for pre-USB4 and lane adapters.
+		 */
+		if (tb_port_is_null(path->hops[i].in_port) ||
+		    !tb_switch_is_usb4(path->hops[i].in_port->sw)) {
+			hop.initial_credits = path->hops[i].initial_credits;
+			hop.ingress_fc = path->ingress_fc_enable & in_mask;
+			hop.ingress_shared_buffer =
+				path->ingress_shared_buffer & in_mask;
+		}
+
 		hop.unknown3 = 0;
 
 		tb_port_dbg(path->hops[i].in_port, "Writing hop %d\n", i);
Signature · 1 line
2.53.0
author maintainer
#56 lore raw

PATCH 56/1250 thunderbolt: Dont disable lane adapter if XDomain lane bonding isnt possible

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mika Westerberg <[email protected]>

[ Upstream commit 7c7345bcde6c611fa8fa13e624207c6005798aa8 ]

This happens when firmware connection manager is being used. It will deal with disabling the lane 1 adapter after the tunnel has been established and re-enabling it afterwards. For this reason only do this when we know that lane bonding is possible (e.g running software connection manager).

---
 drivers/thunderbolt/xdomain.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/thunderbolt/xdomain.c +7 -1
index 6b16fc7254b8e..b27ef872edeac 100644
@@ -1951,7 +1951,13 @@ static void tb_xdomain_link_exit(struct tb_xdomain *xd)
 	if (tb_port_get_link_generation(down) >= 4) {
 		down->bonded = false;
 		down->dual_link_port->bonded = false;
-	} else if (xd->link_width > TB_LINK_WIDTH_SINGLE) {
+		return;
+	}
+
+	if (!xd->bonding_possible)
+		return;
+
+	if (xd->link_width > TB_LINK_WIDTH_SINGLE) {
 		/*
 		 * Just return port structures back to way they were and
 		 * update credits. No need to update userspace because
Signature · 1 line
2.53.0
author maintainer
#57 lore raw

PATCH 57/1250 thunderbolt: Release request if tb_cfg_request() fails in __tb_xdomain_response()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mika Westerberg <[email protected]>

[ Upstream commit 4c63f29872cb444b33665348bbd2f45cab06afcd ]

If tb_cfg_request() fails setting up the request (for example the control channel is shut down already) it returns an error without calling the callback. To avoid leaking that memory, call tb_cfg_request_put() if tb_cfg_request() fails.

---
 drivers/thunderbolt/xdomain.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/thunderbolt/xdomain.c +6 -1
index b27ef872edeac..5fbdd412a712f 100644
@@ -139,6 +139,7 @@ static int __tb_xdomain_response(struct tb_ctl *ctl, const void *response,
 				 size_t size, enum tb_cfg_pkg_type type)
 {
 	struct tb_cfg_request *req;
+	int ret;
 
 	req = tb_cfg_request_alloc();
 	if (!req)
@@ -150,7 +151,11 @@ static int __tb_xdomain_response(struct tb_ctl *ctl, const void *response,
 	req->request_size = size;
 	req->request_type = type;
 
-	return tb_cfg_request(ctl, req, response_ready, req);
+	ret = tb_cfg_request(ctl, req, response_ready, req);
+	if (ret)
+		tb_cfg_request_put(req);
+
+	return ret;
 }
 
 /**
Signature · 1 line
2.53.0
author maintainer
#58 lore raw

PATCH 58/1250 thunderbolt: Keep XDomain reference during the lifetime of a service

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mika Westerberg <[email protected]>

[ Upstream commit 8b4060998637f06975fceee9b73845d8672d411e ]

This is needed because we release the service ID in tb_service_release() and the ID array is owned by the parent XDomain.

---
 drivers/thunderbolt/xdomain.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/thunderbolt/xdomain.c +2 -1
index 5fbdd412a712f..fed0fae2a6299 100644
@@ -1029,6 +1029,7 @@ static void tb_service_release(struct device *dev)
 	ida_free(&xd->service_ids, svc->id);
 	kfree(svc->key);
 	kfree(svc);
+	tb_xdomain_put(xd);
 }
 
 const struct device_type tb_service_type = {
@@ -1137,7 +1138,7 @@ static void enumerate_services(struct tb_xdomain *xd)
 		svc->id = id;
 		svc->dev.bus = &tb_bus_type;
 		svc->dev.type = &tb_service_type;
-		svc->dev.parent = &xd->dev;
+		svc->dev.parent = get_device(&xd->dev);
 		dev_set_name(&svc->dev, "%s.%d", dev_name(&xd->dev), svc->id);
 
 		tb_service_debugfs_init(svc);
Signature · 1 line
2.53.0
author maintainer
#59 lore raw

PATCH 59/1250 thunderbolt: Keep the domain reference while processing hotplug

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mika Westerberg <[email protected]>

[ Upstream commit 138ec65b2c761f065b19d115aed2b8246fc272f5 ]

We process hotplug events in a workqueue that may run after the domain has been removed by tb_domain_remove(). For example if user unloads the driver while at the same time plugging a device router we may have scheduled tb_handle_hotplug() to run. Avoid possible UAF in this case by taking the domain reference before scheduling the hotplug handler in tb_queue_hotplug().

---
 drivers/thunderbolt/tb.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/thunderbolt/tb.c +4 -1
index a0fc2c80c66e3..59a503946c5ef 100644
@@ -98,7 +98,7 @@ static void tb_queue_hotplug(struct tb *tb, u64 route, u8 port, bool unplug)
 	if (!ev)
 		return;
 
-	ev->tb = tb;
+	ev->tb = tb_domain_get(tb);
 	ev->route = route;
 	ev->port = port;
 	ev->unplug = unplug;
@@ -2527,6 +2527,9 @@ static void tb_handle_hotplug(struct work_struct *work)
 	pm_runtime_mark_last_busy(&tb->dev);
 	pm_runtime_put_autosuspend(&tb->dev);
 
+	/* Undo the refcount increased in tb_queue_hotplug() */
+	tb_domain_put(tb);
+
 	kfree(ev);
 }
 
Signature · 1 line
2.53.0
author maintainer
#60 lore raw

PATCH 60/1250 thunderbolt: Set tb->root_switch to NULL when domain is stopped

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mika Westerberg <[email protected]>

[ Upstream commit e56249d8a68e712f3b60e1f3fdbb5b4fea146468 ]

Similarly what we do with the firmware connection manager. This makes tb_xdp_handle_request() return error to the remote host. However, we need to make sure we keep the uuid alive so that we can reply until the whole domain is released.

---
 drivers/thunderbolt/tb.c      | 1 +
 drivers/thunderbolt/xdomain.c | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)
drivers/thunderbolt/tb.c +1 -0
index 59a503946c5ef..75367c060695f 100644
@@ -2952,6 +2952,7 @@ static void tb_stop(struct tb *tb)
 		tb_tunnel_put(tunnel);
 	}
 	tb_switch_remove(tb->root_switch);
+	tb->root_switch = NULL;
 	tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
 }
 
drivers/thunderbolt/xdomain.c +5 -1
index fed0fae2a6299..1eb149445fa05 100644
@@ -756,7 +756,7 @@ static void tb_xdp_handle_request(struct work_struct *work)
 
 	mutex_lock(&tb->lock);
 	if (tb->root_switch)
-		uuid = tb->root_switch->uuid;
+		uuid = kmemdup(tb->root_switch->uuid, sizeof(*uuid), GFP_KERNEL);
 	else
 		uuid = NULL;
 	mutex_unlock(&tb->lock);
@@ -870,6 +870,7 @@ static void tb_xdp_handle_request(struct work_struct *work)
 	}
 
 out:
+	kfree(uuid);
 	kfree(xw->pkg);
 	kfree(xw);
 
@@ -2344,6 +2345,9 @@ static struct tb_xdomain *switch_find_xdomain(struct tb_switch *sw,
 {
 	struct tb_port *port;
 
+	if (!sw)
+		return NULL;
+
 	tb_switch_for_each_port(sw, port) {
 		struct tb_xdomain *xd;
 
Signature · 1 line
2.53.0
author maintainer
#61 lore raw

PATCH 61/1250 thunderbolt: Dont create multiple DMA tunnels on firmware connection manager

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Alan Borzeszkowski <[email protected]>

[ Upstream commit cf0c38ee554c3e9062408cc3a38325483d52ecd0 ]

Firmware connection manager supports only one DMA tunnel per XDomain connection. Firmware prior Intel Titan Ridge failed the operation directly but the same does not happen anymore on Titan Ridge and forward. For this reason add an explicit check, and fail the operation accordingly in the driver.

---
 drivers/thunderbolt/icm.c     | 10 ++++++++++
 drivers/thunderbolt/xdomain.c | 25 +++++++++++++++++++------
 include/linux/thunderbolt.h   |  2 ++
 3 files changed, 31 insertions(+), 6 deletions(-)
drivers/thunderbolt/icm.c +10 -0
index ae9bb76b05424..cafd91a443bc8 100644
@@ -587,6 +587,11 @@ static int icm_fr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd,
 	struct icm_fr_pkg_approve_xdomain request;
 	int ret;
 
+	if (atomic_read(&xd->ntunnels) >= 1) {
+		tb_warn(tb, "only one tunnel is supported by the firmware\n");
+		return -EOPNOTSUPP;
+	}
+
 	memset(&request, 0, sizeof(request));
 	request.hdr.code = ICM_APPROVE_XDOMAIN;
 	request.link_info = xd->depth << ICM_LINK_INFO_DEPTH_SHIFT | xd->link;
@@ -1157,6 +1162,11 @@ static int icm_tr_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd,
 	struct icm_tr_pkg_approve_xdomain request;
 	int ret;
 
+	if (atomic_read(&xd->ntunnels) >= 1) {
+		tb_warn(tb, "only one tunnel is supported by the firmware\n");
+		return -EOPNOTSUPP;
+	}
+
 	memset(&request, 0, sizeof(request));
 	request.hdr.code = ICM_APPROVE_XDOMAIN;
 	request.route_hi = upper_32_bits(xd->route);
drivers/thunderbolt/xdomain.c +19 -6
index 1eb149445fa05..e2c46366c8160 100644
@@ -2021,6 +2021,7 @@ struct tb_xdomain *tb_xdomain_alloc(struct tb *tb, struct device *parent,
 	INIT_DELAYED_WORK(&xd->state_work, tb_xdomain_state_work);
 	INIT_DELAYED_WORK(&xd->properties_changed_work,
 			  tb_xdomain_properties_changed);
+	atomic_set(&xd->ntunnels, 0);
 
 	xd->local_uuid = kmemdup(local_uuid, sizeof(uuid_t), GFP_KERNEL);
 	if (!xd->local_uuid)
@@ -2302,9 +2303,15 @@ int tb_xdomain_enable_paths(struct tb_xdomain *xd, int transmit_path,
 			    int transmit_ring, int receive_path,
 			    int receive_ring)
 {
-	return tb_domain_approve_xdomain_paths(xd->tb, xd, transmit_path,
-					       transmit_ring, receive_path,
-					       receive_ring);
+	int ret;
+
+	ret = tb_domain_approve_xdomain_paths(xd->tb, xd, transmit_path,
+					      transmit_ring, receive_path,
+					      receive_ring);
+	if (ret)
+		return ret;
+	atomic_inc(&xd->ntunnels);
+	return 0;
 }
 EXPORT_SYMBOL_GPL(tb_xdomain_enable_paths);
 
@@ -2327,9 +2334,15 @@ int tb_xdomain_disable_paths(struct tb_xdomain *xd, int transmit_path,
 			     int transmit_ring, int receive_path,
 			     int receive_ring)
 {
-	return tb_domain_disconnect_xdomain_paths(xd->tb, xd, transmit_path,
-						  transmit_ring, receive_path,
-						  receive_ring);
+	int ret;
+
+	ret = tb_domain_disconnect_xdomain_paths(xd->tb, xd, transmit_path,
+						 transmit_ring, receive_path,
+						 receive_ring);
+	if (ret)
+		return ret;
+	atomic_dec(&xd->ntunnels);
+	return 0;
 }
 EXPORT_SYMBOL_GPL(tb_xdomain_disable_paths);
 
include/linux/thunderbolt.h +2 -0
index 7204586c10c3e..466f315f0be7b 100644
@@ -230,6 +230,7 @@ enum tb_link_width {
  *				changed notification
  * @bonding_possible: True if lane bonding is possible on local side
  * @target_link_width: Target link width from the remote host
+ * @ntunnels: Keeps track of how many tunnels go through this XDomain
  * @link: Root switch link the remote domain is connected (ICM only)
  * @depth: Depth in the chain the remote domain is connected (ICM only)
  *
@@ -276,6 +277,7 @@ struct tb_xdomain {
 	int properties_changed_retries;
 	bool bonding_possible;
 	u8 target_link_width;
+	atomic_t ntunnels;
 	u8 link;
 	u8 depth;
 };
Signature · 1 line
2.53.0
author maintainer
#62 lore raw

PATCH 62/1250 drm/amd/display: Find link encoder for flexible DIG mapping cases

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ovidiu Bunea <[email protected]>

[ Upstream commit 74ef54e656e7006cfc215e960b0cf2720a7a3d48 ]

[why & how]
link->link_enc can only be used to identify the link's link encoder when the link is not permitted to use flexible link encoder assignments.

Use the correct function for identifying link encoder and add function pointer guards before calling them.

---
 .../drm/amd/display/dc/hwss/dce110/dce110_hwseq.c    | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +7 -5
index fe02dc4e97e4a..8eec1feafc4ad 100644
@@ -1753,20 +1753,22 @@ static void power_down_encoders(struct dc *dc)
 
 	for (i = 0; i < dc->link_count; i++) {
 		struct dc_link *link = dc->links[i];
-		struct link_encoder *link_enc = link->link_enc;
+		struct link_encoder *link_enc = link_enc_cfg_get_link_enc(link);
 		enum signal_type signal = link->connector_signal;
 
 		dc->link_srv->blank_dp_stream(link, false);
 		if (signal != SIGNAL_TYPE_EDP)
 			signal = SIGNAL_TYPE_NONE;
 
-		if (link->ep_type == DISPLAY_ENDPOINT_PHY)
+		if (link->ep_type == DISPLAY_ENDPOINT_PHY && link_enc)
 			link_enc->funcs->disable_output(link_enc, signal);
 
 		if (link->fec_state == dc_link_fec_enabled) {
-			link_enc->funcs->fec_set_enable(link_enc, false);
-			link_enc->funcs->fec_set_ready(link_enc, false);
-			link->fec_state = dc_link_fec_not_ready;
+			if (link_enc && link_enc->funcs->fec_set_enable && link_enc->funcs->fec_set_ready) {
+				link_enc->funcs->fec_set_enable(link_enc, false);
+				link_enc->funcs->fec_set_ready(link_enc, false);
+				link->fec_state = dc_link_fec_not_ready;
+			}
 		}
 
 		link->link_status.link_active = false;
Signature · 1 line
2.53.0
author maintainer
#63 lore raw

PATCH 63/1250 drm/amdgpu: Prefer ROM BAR for default VGA device

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Lijo Lazar <[email protected]>

[ Upstream commit 9e32d17592950478baffaecdbda8e2e60935fd3d ]

Fetching from platform ROM doesn't work with hybrid ROM images. For default VGA devices also prefer ROM BAR.

---
 drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +3 -1
index 4e60753e16e90..dec312b0f3b0a 100644
@@ -33,6 +33,7 @@
 #include <linux/pci.h>
 #include <linux/slab.h>
 #include <linux/acpi.h>
+#include <linux/vgaarb.h>
 /*
  * BIOS.
  */
@@ -491,7 +492,8 @@ static bool amdgpu_prefer_rom_resource(struct amdgpu_device *adev)
 {
 	struct resource *res = &adev->pdev->resource[PCI_ROM_RESOURCE];
 
-	return (res->flags & IORESOURCE_ROM_SHADOW);
+	return (res->flags & IORESOURCE_ROM_SHADOW) ||
+	       adev->pdev == vga_default_device();
 }
 
 static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
Signature · 1 line
2.53.0
author maintainer
#64 lore raw

PATCH 64/1250 drm/panel: Enable GPIOLIB for panels which uses functions from it

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: David Heidelberg <[email protected]>

[ Upstream commit ae3aa8cf5fd5ccb428a814e7eb38ae33ad1cfa34 ]

These panels used on sdm845 devices are using GPIOLIB functions, ensure it's enabled.

---
 drivers/gpu/drm/panel/Kconfig | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/gpu/drm/panel/Kconfig +9 -2
index 7354dc85a6aa7..967265ed6fc96 100644
@@ -107,6 +107,7 @@ config DRM_PANEL_BOE_TV101WUM_LL2
 
 config DRM_PANEL_EBBG_FT8719
 	tristate "EBBG FT8719 panel driver"
+	depends on GPIOLIB
 	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
@@ -316,7 +317,8 @@ config DRM_PANEL_JADARD_JD9365DA_H3
 
 config DRM_PANEL_JDI_LPM102A188A
 	tristate "JDI LPM102A188A DSI panel"
-	depends on OF && GPIOLIB
+	depends on GPIOLIB
+	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
 	help
@@ -418,6 +420,7 @@ config DRM_PANEL_LG_LG4573
 
 config DRM_PANEL_LG_SW43408
 	tristate "LG SW43408 panel"
+	depends on GPIOLIB
 	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
@@ -522,6 +525,7 @@ config DRM_PANEL_NOVATEK_NT36523
 
 config DRM_PANEL_NOVATEK_NT36672A
 	tristate "Novatek NT36672A DSI panel"
+	depends on GPIOLIB
 	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
@@ -532,6 +536,7 @@ config DRM_PANEL_NOVATEK_NT36672A
 
 config DRM_PANEL_NOVATEK_NT36672E
 	tristate "Novatek NT36672E DSI panel"
+	depends on GPIOLIB
 	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
@@ -660,7 +665,8 @@ config DRM_PANEL_RAYDIUM_RM692E5
 
 config DRM_PANEL_RAYDIUM_RM69380
 	tristate "Raydium RM69380-based DSI panel"
-	depends on OF && GPIOLIB
+	depends on GPIOLIB
+	depends on OF
 	depends on DRM_MIPI_DSI
 	depends on BACKLIGHT_CLASS_DEVICE
 	help
@@ -1118,6 +1124,7 @@ config DRM_PANEL_VISIONOX_R66451
 
 config DRM_PANEL_VISIONOX_RM69299
 	tristate "Visionox RM69299"
+	depends on GPIOLIB
 	depends on OF
 	depends on DRM_MIPI_DSI
 	help
Signature · 1 line
2.53.0
author maintainer
#65 lore raw

PATCH 65/1250 media: dm1105: fix missing error check for dma_alloc_coherent

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Zhaoyang Yu <[email protected]>

[ Upstream commit 3eaac9e02d8591d3c790db572ef1c8fa5a841fdb ]

The return value of dm1105_dma_map(), which handles DMA memory allocation, is ignored in dm1105_hw_init(). If dma_alloc_coherent() fails, the driver will proceed using a NULL pointer for DMA transfers, leading to a kernel oops or invalid hardware access.

Fix this by checking the return value and propagating -ENOMEM on failure.

---
 drivers/media/pci/dm1105/dm1105.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/media/pci/dm1105/dm1105.c +6 -1
index c1d55b9836744..abd86488064b5 100644
@@ -768,6 +768,8 @@ static void dm1105_ir_exit(struct dm1105_dev *dm1105)
 
 static int dm1105_hw_init(struct dm1105_dev *dev)
 {
+	int ret;
+
 	dm1105_disable_irqs(dev);
 
 	dm_writeb(DM1105_HOST_CTR, 0);
@@ -778,7 +780,10 @@ static int dm1105_hw_init(struct dm1105_dev *dev)
 	dm_writew(DM1105_TSCTR, 0xc10a);
 
 	/* map DMA and set address */
-	dm1105_dma_map(dev);
+	ret = dm1105_dma_map(dev);
+	if (ret)
+		return -ENOMEM;
+
 	dm1105_set_dma_addr(dev);
 	/* big buffer */
 	dm_writel(DM1105_RLEN, 5 * DM1105_DMA_BYTES);
Signature · 1 line
2.53.0
author maintainer
#66 lore raw

PATCH 66/1250 net: dsa: mv88e6xxx: fix number of g1 interrupts for 6320 family

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Marek Behún <[email protected]>

[ Upstream commit d201c2612e5aada0c931cd55115175e0a5141023 ]

The 6320 family has 9 global1 interrupt, not 8. Fix it.

---
 drivers/net/dsa/mv88e6xxx/chip.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +2 -2
index 09002c853b78e..b115575f157fe 100644
@@ -6261,7 +6261,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.global1_addr = 0x1b,
 		.global2_addr = 0x1c,
 		.age_time_coeff = 15000,
-		.g1_irqs = 8,
+		.g1_irqs = 9,
 		.g2_irqs = 10,
 		.stats_type = STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
 		.atu_move_port_mask = 0xf,
@@ -6289,7 +6289,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.global1_addr = 0x1b,
 		.global2_addr = 0x1c,
 		.age_time_coeff = 15000,
-		.g1_irqs = 8,
+		.g1_irqs = 9,
 		.g2_irqs = 10,
 		.stats_type = STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
 		.atu_move_port_mask = 0xf,
Signature · 1 line
2.53.0
author maintainer
#67 lore raw

PATCH 67/1250 PCI: switchtec: Add Gen6 Device IDs

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ben Reed <[email protected]>

[ Upstream commit 5e6c21c56998e1e58d2f314e70779989ea0fee5d ]

Add device IDs for the next generation of switchtec products.

No changes to the driver were required with the new version of the hardware.

[logang: rewrote commit message]

---
 drivers/pci/switch/switchtec.c | 16 ++++++++++++++++
 include/linux/switchtec.h      |  1 +
 2 files changed, 17 insertions(+)
drivers/pci/switch/switchtec.c +16 -0
index 5ff84fb8fb0f4..f32ddfa79da99 100644
@@ -1852,6 +1852,22 @@ static const struct pci_device_id switchtec_pci_tbl[] = {
 	SWITCHTEC_PCI_DEVICE(0x5552, SWITCHTEC_GEN5),  /* PAXA 52XG5 */
 	SWITCHTEC_PCI_DEVICE(0x5536, SWITCHTEC_GEN5),  /* PAXA 36XG5 */
 	SWITCHTEC_PCI_DEVICE(0x5528, SWITCHTEC_GEN5),  /* PAXA 28XG5 */
+	SWITCHTEC_PCI_DEVICE(0x6048, SWITCHTEC_GEN6),  /* PFXs 48XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6064, SWITCHTEC_GEN6),  /* PFXs 64XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6044, SWITCHTEC_GEN6),  /* PFXs 144XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6060, SWITCHTEC_GEN6),  /* PFXs 160XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6148, SWITCHTEC_GEN6),  /* PSXs 48XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6164, SWITCHTEC_GEN6),  /* PSXs 64XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6144, SWITCHTEC_GEN6),  /* PSXs 144XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6160, SWITCHTEC_GEN6),  /* PSXs 160XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6248, SWITCHTEC_GEN6),  /* PFX 48XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6264, SWITCHTEC_GEN6),  /* PFX 64XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6244, SWITCHTEC_GEN6),  /* PFX 144XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6260, SWITCHTEC_GEN6),  /* PFX 160XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6348, SWITCHTEC_GEN6),  /* PSX 48XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6364, SWITCHTEC_GEN6),  /* PSX 64XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6344, SWITCHTEC_GEN6),  /* PSX 144XG6 */
+	SWITCHTEC_PCI_DEVICE(0x6360, SWITCHTEC_GEN6),  /* PSX 160XG6 */
 	SWITCHTEC_PCI100X_DEVICE(0x1001, SWITCHTEC_GEN4),  /* PCI1001 16XG4 */
 	SWITCHTEC_PCI100X_DEVICE(0x1002, SWITCHTEC_GEN4),  /* PCI1002 12XG4 */
 	SWITCHTEC_PCI100X_DEVICE(0x1003, SWITCHTEC_GEN4),  /* PCI1003 16XG4 */
include/linux/switchtec.h +1 -0
index cdb58d61c1526..724da6c08bf7d 100644
@@ -42,6 +42,7 @@ enum switchtec_gen {
 	SWITCHTEC_GEN3,
 	SWITCHTEC_GEN4,
 	SWITCHTEC_GEN5,
+	SWITCHTEC_GEN6,
 };
 
 struct mrpc_regs {
Signature · 1 line
2.53.0
author maintainer
#68 lore raw

PATCH 68/1250 net: dsa: mv88e6xxx: define .pot_clear() for 6321

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Marek Behún <[email protected]>

[ Upstream commit 17826d9708a57d27011d0a6efdebb628d6f8299a ]

Commit 9e907d739cc3 ("net: dsa: mv88e6xxx: add POT operation") did not add the .pot_clear() method to the 6321 switch operations structure. Add them now.

---
 drivers/net/dsa/mv88e6xxx/chip.c | 1 +
 1 file changed, 1 insertion(+)
drivers/net/dsa/mv88e6xxx/chip.c +1 -0
index b115575f157fe..f324b88450427 100644
@@ -5228,6 +5228,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.set_egress_port = mv88e6095_g1_set_egress_port,
 	.watchdog_ops = &mv88e6390_watchdog_ops,
 	.mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
+	.pot_clear = mv88e6xxx_g2_pot_clear,
 	.hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
 	.hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
 	.reset = mv88e6352_g1_reset,
Signature · 1 line
2.53.0
author maintainer
#69 lore raw

PATCH 69/1250 media: v4l2-common: Always register clock with device-specific name

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Paul Cercueil <[email protected]>

[ Upstream commit 0b42657bea6ba635226e8ef551076d024ceacdc9 ]

If we need to register a dummy fixed-frequency clock, always register it using a device-specific name.

This supports the use case where a system has two of the same sensor, meaning two instances of the same driver, which previously both tried (and failed) to create a clock with the same name.

---
 drivers/media/v4l2-core/v4l2-common.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/media/v4l2-core/v4l2-common.c +7 -6
index c1e3bcb4c1c40..524c11e92aec5 100644
@@ -764,14 +764,15 @@ struct clk *__devm_v4l2_sensor_clk_get(struct device *dev, const char *id,
 	if (ret)
 		return ERR_PTR(ret == -EINVAL ? -EPROBE_DEFER : ret);
 
-	if (!id) {
+	if (id)
+		clk_id = kasprintf(GFP_KERNEL, "clk-%s-%s", dev_name(dev), id);
+	else
 		clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));
-		if (!clk_id)
-			return ERR_PTR(-ENOMEM);
-		id = clk_id;
-	}
 
-	clk_hw = devm_clk_hw_register_fixed_rate(dev, id, NULL, 0, rate);
+	if (!clk_id)
+		return ERR_PTR(-ENOMEM);
+
+	clk_hw = devm_clk_hw_register_fixed_rate(dev, clk_id, NULL, 0, rate);
 	if (IS_ERR(clk_hw))
 		return ERR_CAST(clk_hw);
 
Signature · 1 line
2.53.0
author maintainer
#70 lore raw

PATCH 70/1250 net: dsa: mv88e6xxx: enable .rmu_disable() for 6320 family

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Marek Behún <[email protected]>

[ Upstream commit e0fdb4157a85056bd256a7aebac4a3a2f580b201 ]

Commit 9e5baf9b3636 ("net: dsa: mv88e6xxx: add RMU disable op") did not add the .rmu_disable() method for the 6320 family. Add it now.

---
 drivers/net/dsa/mv88e6xxx/chip.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +2 -0
index f324b88450427..7e294f2104b86 100644
@@ -5179,6 +5179,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
 	.hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
 	.reset = mv88e6352_g1_reset,
+	.rmu_disable = mv88e6352_g1_rmu_disable,
 	.vtu_getnext = mv88e6352_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
@@ -5232,6 +5233,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
 	.hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
 	.reset = mv88e6352_g1_reset,
+	.rmu_disable = mv88e6352_g1_rmu_disable,
 	.vtu_getnext = mv88e6352_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
Signature · 1 line
2.53.0
author maintainer
#71 lore raw

PATCH 71/1250 media: em28xx-video: fix missing res_free() on init_usb_xfer failure

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Haoxiang Li <[email protected]>

[ Upstream commit cc20e81da6d99926f94fad7af21f75c07e865769 ]

res_get() is called before em28xx_init_usb_xfer(), but the error path of em28xx_init_usb_xfer() does not release the resource, leading to a persistent busy state.

---
 drivers/media/usb/em28xx/em28xx-video.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/media/usb/em28xx/em28xx-video.c +3 -1
index 14c35995cd952..c8514682bccda 100644
@@ -1105,8 +1105,10 @@ int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
 					  dev->max_pkt_size,
 					  dev->packet_multiplier,
 					  em28xx_urb_data_copy);
-		if (rc < 0)
+		if (rc < 0) {
+			res_free(dev, vq->type);
 			return rc;
+		}
 
 		/*
 		 * djh: it's not clear whether this code is still needed.  I'm
Signature · 1 line
2.53.0
author maintainer
#72 lore raw

PATCH 72/1250 wifi: mac80211: explicitly disable FTM responder on AP stop

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Johannes Berg <[email protected]>

[ Upstream commit 89e367a90c1a877ca9c5d75d3848582d80fd0e60 ]

When stopping the AP, explicitly disable FTM responder while disabling beaconing.

---
 net/mac80211/cfg.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
net/mac80211/cfg.c +7 -2
index f6232948bc0f4..72c9d5aceae58 100644
@@ -1811,6 +1811,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
 	struct ieee80211_link_data *link =
 		sdata_dereference(sdata->link[link_id], sdata);
 	struct ieee80211_bss_conf *link_conf = link->conf;
+	u64 changes = BSS_CHANGED_BEACON_ENABLED;
 	LIST_HEAD(keys);
 
 	lockdep_assert_wiphy(local->hw.wiphy);
@@ -1860,6 +1861,11 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
 	if (old_s1g_short_beacon)
 		kfree_rcu(old_s1g_short_beacon, rcu_head);
 
+	if (link_conf->ftm_responder) {
+		link_conf->ftm_responder = false;
+		changes |= BSS_CHANGED_FTM_RESPONDER;
+	}
+
 	kfree(link_conf->ftmr_params);
 	link_conf->ftmr_params = NULL;
 
@@ -1881,8 +1887,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
 	sdata->vif.cfg.ssid_len = 0;
 	sdata->vif.cfg.s1g = false;
 	clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state);
-	ieee80211_link_info_change_notify(sdata, link,
-					  BSS_CHANGED_BEACON_ENABLED);
+	ieee80211_link_info_change_notify(sdata, link, changes);
 
 	ieee80211_remove_link_keys(link, &keys);
 	if (!list_empty(&keys)) {
Signature · 1 line
2.53.0
author maintainer
#73 lore raw

PATCH 73/1250 rtase: Fix flow control configuration

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Justin Lai <[email protected]>

[ Upstream commit fea3521e043fa1388ec909205687db7d4b0c57ec ]

The hardware has two sets of registers controlling TX/RX flow control. The effective flow control state is determined by the logical OR of these two sets of bits.

RTASE_FORCE_TXFLOW_EN and RTASE_FORCE_RXFLOW_EN in RTASE_CPLUS_CMD are the bits used by the driver to control TX/RX flow control according to the ethtool pause configuration.

RTASE_TXFLOW_EN and RTASE_RXFLOW_EN in RTASE_GPHY_STD_00 are another set of TX/RX flow control enable bits. Clear them by default so they do not keep flow control enabled independently of the driver setting.

With the RTASE_GPHY_STD_00 bits cleared, the effective flow control state is controlled through RTASE_CPLUS_CMD, so the ethtool setting can take effect correctly.

---
 drivers/net/ethernet/realtek/rtase/rtase.h      | 4 ++++
 drivers/net/ethernet/realtek/rtase/rtase_main.c | 3 +++
 2 files changed, 7 insertions(+)
drivers/net/ethernet/realtek/rtase/rtase.h +4 -0
index 43087b17a0ff2..03b12d83f6e9d 100644
@@ -153,6 +153,10 @@ enum rtase_registers {
 #define RTASE_FORCE_TXFLOW_EN BIT(10)
 #define RTASE_RX_CHKSUM       BIT(5)
 
+	RTASE_GPHY_STD_00 = 0x6024,
+#define RTASE_RXFLOW_EN BIT(7)
+#define RTASE_TXFLOW_EN BIT(6)
+
 	RTASE_Q0_RX_DESC_ADDR0 = 0x00E4,
 	RTASE_Q0_RX_DESC_ADDR4 = 0x00E8,
 	RTASE_Q1_RX_DESC_ADDR0 = 0x4000,
drivers/net/ethernet/realtek/rtase/rtase_main.c +3 -0
index bc9b14614f7a7..e3cd4f7c13804 100644
@@ -977,6 +977,9 @@ static void rtase_hw_config(struct net_device *dev)
 	rtase_hw_set_features(dev, dev->features);
 
 	/* enable flow control */
+	reg_data16 = rtase_r16(tp, RTASE_GPHY_STD_00);
+	reg_data16 &= ~(RTASE_TXFLOW_EN | RTASE_RXFLOW_EN);
+	rtase_w16(tp, RTASE_GPHY_STD_00, reg_data16);
 	reg_data16 = rtase_r16(tp, RTASE_CPLUS_CMD);
 	reg_data16 |= (RTASE_FORCE_TXFLOW_EN | RTASE_FORCE_RXFLOW_EN);
 	rtase_w16(tp, RTASE_CPLUS_CMD, reg_data16);
Signature · 1 line
2.53.0
author maintainer
#74 lore raw

PATCH 74/1250 crypto: ixp4xx - fix buffer chain unwind on allocation failure

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ruoyu Wang <[email protected]>

[ Upstream commit 25056329384010a8672552b134f609601dc4f80e ]

chainup_buffers() builds a linked list of buffer descriptors for a scatterlist. If dma_pool_alloc() fails while constructing the list, the current code sets buf to NULL and later dereferences it unconditionally at the end of the function:

  buf->next = NULL;
  buf->phys_next = 0;

This can lead to a null-pointer dereference on allocation failure.

If the failure happens after part of the descriptor chain has already been allocated and DMA-mapped, the partially constructed chain also needs to be released.

Fix this by terminating the partially constructed chain on allocation failure and letting the callers unwind it via their existing cleanup paths. Also fix ablk_perform() to preserve the hook pointers before checking for failure, so partially built chains can be freed correctly.

---
 drivers/crypto/intel/ixp4xx/ixp4xx_crypto.c | 25 ++++++++++++---------
 1 file changed, 14 insertions(+), 11 deletions(-)
drivers/crypto/intel/ixp4xx/ixp4xx_crypto.c +14 -11
index fcc0cf4df637d..5b90cf0fb0e41 100644
@@ -884,8 +884,9 @@ static struct buffer_desc *chainup_buffers(struct device *dev,
 		ptr = sg_virt(sg);
 		next_buf = dma_pool_alloc(buffer_pool, flags, &next_buf_phys);
 		if (!next_buf) {
-			buf = NULL;
-			break;
+			buf->next = NULL;
+			buf->phys_next = 0;
+			return NULL;
 		}
 		sg_dma_address(sg) = dma_map_single(dev, ptr, len, dir);
 		buf->next = next_buf;
@@ -983,7 +984,7 @@ static int ablk_perform(struct skcipher_request *req, int encrypt)
 	unsigned int nbytes = req->cryptlen;
 	enum dma_data_direction src_direction = DMA_BIDIRECTIONAL;
 	struct ablk_ctx *req_ctx = skcipher_request_ctx(req);
-	struct buffer_desc src_hook;
+	struct buffer_desc *buf, src_hook;
 	struct device *dev = &pdev->dev;
 	unsigned int offset;
 	gfp_t flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ?
@@ -1025,22 +1026,24 @@ static int ablk_perform(struct skcipher_request *req, int encrypt)
 		/* This was never tested by Intel
 		 * for more than one dst buffer, I think. */
 		req_ctx->dst = NULL;
-		if (!chainup_buffers(dev, req->dst, nbytes, &dst_hook,
-				     flags, DMA_FROM_DEVICE))
-			goto free_buf_dest;
-		src_direction = DMA_TO_DEVICE;
+		buf = chainup_buffers(dev, req->dst, nbytes, &dst_hook,
+				      flags, DMA_FROM_DEVICE);
 		req_ctx->dst = dst_hook.next;
 		crypt->dst_buf = dst_hook.phys_next;
+		if (!buf)
+			goto free_buf_dest;
+		src_direction = DMA_TO_DEVICE;
 	} else {
 		req_ctx->dst = NULL;
 	}
 	req_ctx->src = NULL;
-	if (!chainup_buffers(dev, req->src, nbytes, &src_hook, flags,
-			     src_direction))
-		goto free_buf_src;
-
+	buf = chainup_buffers(dev, req->src, nbytes, &src_hook, flags,
+			      src_direction);
 	req_ctx->src = src_hook.next;
 	crypt->src_buf = src_hook.phys_next;
+	if (!buf)
+		goto free_buf_src;
+
 	crypt->ctl_flags |= CTL_FLAG_PERFORM_ABLK;
 	qmgr_put_entry(send_qid, crypt_virt2phys(crypt));
 	BUG_ON(qmgr_stat_overflow(send_qid));
Signature · 1 line
2.53.0
author maintainer
#75 lore raw

PATCH 75/1250 crypto: omap - add omap_des_unregister_algs helper

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Thorsten Blum <[email protected]>

[ Upstream commit 9ab1392b1163daab674484d6ddacf16f0ad4c040 ]

Add a new helper omap_des_unregister_algs() and replace two for loops in omap_des_probe() and omap_des_remove(), which also ensure ->registered is reset to 0.

---
 drivers/crypto/omap-des.c | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)
drivers/crypto/omap-des.c +16 -10
index 149ebd77710bf..16d5c617d5ee8 100644
@@ -938,6 +938,20 @@ static int omap_des_get_pdev(struct omap_des_dev *dd,
 	return 0;
 }
 
+static void omap_des_unregister_algs(const struct omap_des_pdata *pdata)
+{
+	struct omap_des_algs_info *alg_info;
+	int i;
+
+	for (i = pdata->algs_info_size - 1; i >= 0; i--) {
+		alg_info = &pdata->algs_info[i];
+
+		crypto_engine_unregister_skciphers(alg_info->algs_list,
+						   alg_info->registered);
+		alg_info->registered = 0;
+	}
+}
+
 static int omap_des_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -1043,11 +1057,7 @@ static int omap_des_probe(struct platform_device *pdev)
 	return 0;
 
 err_algs:
-	for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-		for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-			crypto_engine_unregister_skcipher(
-					&dd->pdata->algs_info[i].algs_list[j]);
-
+	omap_des_unregister_algs(dd->pdata);
 err_engine:
 	if (dd->engine)
 		crypto_engine_exit(dd->engine);
@@ -1067,16 +1077,12 @@ static int omap_des_probe(struct platform_device *pdev)
 static void omap_des_remove(struct platform_device *pdev)
 {
 	struct omap_des_dev *dd = platform_get_drvdata(pdev);
-	int i, j;
 
 	spin_lock_bh(&list_lock);
 	list_del(&dd->list);
 	spin_unlock_bh(&list_lock);
 
-	for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-		for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-			crypto_engine_unregister_skcipher(
-					&dd->pdata->algs_info[i].algs_list[j]);
+	omap_des_unregister_algs(dd->pdata);
 
 	cancel_work_sync(&dd->done_task);
 	omap_des_dma_cleanup(dd);
Signature · 1 line
2.53.0
author maintainer
#76 lore raw

PATCH 76/1250 clk: renesas: cpg-mssr: Add number of clock cells check

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Geert Uytterhoeven <[email protected]>

[ Upstream commit 7f0c422c7fbfd9294ff9321ada0c63561e5c6ea0 ]

The number of clock cells is not validated in the clock provider's clk_src_get() callback. Add the missing check.

---
 drivers/clk/renesas/renesas-cpg-mssr.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/clk/renesas/renesas-cpg-mssr.c +3 -0
index a0a68ec0490f7..87ede1ee64d7a 100644
@@ -349,6 +349,9 @@ struct clk *cpg_mssr_clk_src_twocell_get(struct of_phandle_args *clkspec,
 	struct clk *clk;
 	int range_check;
 
+	if (clkspec->args_count != 2)
+		return ERR_PTR(-EINVAL);
+
 	switch (clkspec->args[0]) {
 	case CPG_CORE:
 		type = "core";
Signature · 1 line
2.53.0
author maintainer
#77 lore raw

PATCH 77/1250 drm/bridge: tc358768: Set pre_enable_prev_first for reverse order

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Parth Pancholi <[email protected]>

[ Upstream commit 6b2bb5438bcfd7bad868665cd2aed1caf9ba3f2b ]

Enable the pre_enable_prev_first flag on the tc358768 bridge to reverse the pre-enable order, calling bridge pre_enable before panel prepare. This ensures the bridge is ready before sending panel init commands in the case of panels sending init commands in panel prepare function.

---
 drivers/gpu/drm/bridge/tc358768.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/bridge/tc358768.c +2 -0
index fbdc44e162293..b7a9d3fca07ea 100644
@@ -448,6 +448,8 @@ static int tc358768_dsi_host_attach(struct mipi_dsi_host *host,
 						    DRM_MODE_CONNECTOR_DSI);
 		if (IS_ERR(bridge))
 			return PTR_ERR(bridge);
+
+		bridge->pre_enable_prev_first = true;
 	}
 
 	priv->output.dev = dev;
Signature · 1 line
2.53.0
author maintainer
#78 lore raw

PATCH 78/1250 dlm: add usercopy whitelist to dlm_cb cache

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ziyi Guo <[email protected]>

[ Upstream commit b5314f2c6654a3616fd72777deb1ca766cc50618 ]

The dlm_cb slab cache is created with kmem_cache_create(), which provides no usercopy whitelist. When a callback carries LVB data, dlm_user_add_ast() copies the LVB into the inline lvbptr[] array within the slab-allocated struct dlm_callback and redirects ua->lksb.sb_lvbptr to point to it. copy_result_to_user() then calls copy_to_user() with this pointer. With CONFIG_HARDENED_USERCOPY enabled, this triggers usercopy_abort().

Switch to kmem_cache_create_usercopy() with a whitelist covering the lvbptr field.

---
 fs/dlm/memory.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
fs/dlm/memory.c +3 -1
index 5c35cc67aca4c..ee55994ce90d8 100644
@@ -48,8 +48,10 @@ int __init dlm_memory_init(void)
 	if (!rsb_cache)
 		goto rsb;
 
-	cb_cache = kmem_cache_create("dlm_cb", sizeof(struct dlm_callback),
+	cb_cache = kmem_cache_create_usercopy("dlm_cb", sizeof(struct dlm_callback),
 				     __alignof__(struct dlm_callback), 0,
+					 offsetof(struct dlm_callback, lvbptr),
+					 sizeof_field(struct dlm_callback, lvbptr),
 				     NULL);
 	if (!cb_cache)
 		goto cb;
Signature · 1 line
2.53.0
author maintainer
#80 lore raw

PATCH 79/1250 PCI/sysfs: Add CAP_SYS_ADMIN check to __resource_resize_store()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Krzysztof Wilczyński <[email protected]>

[ Upstream commit 25ec7f57deceec633f27bc93b615f951e2ade814 ]

Currently, the __resource_resize_store() allows writing to the resourceN_resize sysfs attribute to change a BAR's size without checking for capabilities, currently relying only on the file access check.

Resizing a BAR modifies PCI device configuration and can disrupt active drivers. After the upcoming conversion to static attributes, it will also trigger resource file updates via sysfs_update_groups().

Add a CAP_SYS_ADMIN check to prevent unprivileged users from performing BAR resize operations.

---
 drivers/pci/pci-sysfs.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/pci/pci-sysfs.c +3 -0
index f3b7f4e410a41..f456e9a2ddc9f 100644
@@ -1605,6 +1605,9 @@ static ssize_t __resource_resize_store(struct device *dev, int n,
 	int ret;
 	u16 cmd;
 
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+
 	if (kstrtoul(buf, 0, &size) < 0)
 		return -EINVAL;
 
Signature · 1 line
2.53.0
author maintainer
#81 lore raw

PATCH 80/1250 media: qcom: camss: avoid format string warning

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Arnd Bergmann <[email protected]>

[ Upstream commit 797c1cbf672f372d6a464df0dcedf476fc715969 ]

clang-22 warns about csiphy_match_clock_name() taking a variable format string that is not checked against the 'int index' argument:

drivers/media/platform/qcom/camss/camss-csiphy.c:566:44: error: diagnostic behavior may be improved by
adding the 'format(printf, 2, 3)' attribute to the declaration of 'csiphy_match_clock_name' [-Werror,-Wmissing-format-attribute]

  561 | static bool csiphy_match_clock_name(const char *clock_name, const char *format,
      | __attribute__((format(printf, 2, 3)))
  562 |                                     int index)
  563 | {
  564 |         char name[16]; /* csiphyXXX_timer\0 */
  565 |
  566 |         snprintf(name, sizeof(name), format, index);
      |                                                   ^

drivers/media/platform/qcom/camss/camss-csiphy.c:561:13: note: 'csiphy_match_clock_name' declared here
561 | static bool csiphy_match_clock_name(const char *clock_name, const char *format,
| ^

Change the function to use a snprintf() style format string that allows this to be checked at the call site.

---
 drivers/media/platform/qcom/camss/camss-csiphy.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/media/platform/qcom/camss/camss-csiphy.c +7 -3
index 2de97f58f9ae4..74c77969db7ef 100644
@@ -558,12 +558,16 @@ static int csiphy_init_formats(struct v4l2_subdev *sd,
 	return csiphy_set_format(sd, fh ? fh->state : NULL, &format);
 }
 
-static bool csiphy_match_clock_name(const char *clock_name, const char *format,
-				    int index)
+static bool __printf(2, 3)
+csiphy_match_clock_name(const char *clock_name, const char *format, ...)
 {
 	char name[16]; /* csiphyXXX_timer\0 */
+	va_list args;
+
+	va_start(args, format);
+	vsnprintf(name, sizeof(name), format, args);
+	va_end(args);
 
-	snprintf(name, sizeof(name), format, index);
 	return !strcmp(clock_name, name);
 }
 
Signature · 1 line
2.53.0
author maintainer
#82 lore raw

PATCH 81/1250 net/mlx5: Relax capability check for eswitch query paths

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Moshe Shemesh <[email protected]>

[ Upstream commit 8ca32460815f6876095be8798adcf5ab982e94de ]

Several eswitch functions that only query other functions' HCA capabilities or read cached vport state are guarded by the vhca_resource_manager capability. This capability is required for set_hca_cap operations but query_hca_cap of other functions only requires the vport_group_manager capability.

Relax the capability check from vhca_resource_manager to vport_group_manager in the following query-only paths:
- mlx5_esw_vport_caps_get() - queries other function general caps
- esw_ipsec_vf_query_generic() - queries other function ipsec cap
- mlx5_devlink_port_fn_migratable_get() - reads cached vport state
- mlx5_devlink_port_fn_roce_get() - reads cached vport state
- mlx5_devlink_port_fn_max_io_eqs_get() - queries other function caps
- mlx5_esw_vport_enable/disable() - vhca_id map/unmap

Functions that perform also set_hca_cap (migratable_set, roce_set, max_io_eqs_set, esw_ipsec_vf_set_generic, esw_ipsec_vf_set_bytype) retain the vhca_resource_manager requirement.

---
 .../net/ethernet/mellanox/mlx5/core/esw/ipsec.c    |  2 +-
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c  |  6 +++---
 .../ethernet/mellanox/mlx5/core/eswitch_offloads.c | 14 ++++++++------
 3 files changed, 12 insertions(+), 10 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/esw/ipsec.c +1 -1
index da10e04777cf7..1dbafeddd4b2f 100644
@@ -12,7 +12,7 @@ static int esw_ipsec_vf_query_generic(struct mlx5_core_dev *dev, u16 vport_num,
 	void *hca_cap, *query_cap;
 	int err;
 
-	if (!MLX5_CAP_GEN(dev, vhca_resource_manager))
+	if (!MLX5_CAP_GEN(dev, vport_group_manager))
 		return -EOPNOTSUPP;
 
 	if (!mlx5_esw_ipsec_vf_offload_supported(dev)) {
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +3 -3
index bc7ceb4c76e5c..578f4c81f5fb7 100644
@@ -799,7 +799,7 @@ static int mlx5_esw_vport_caps_get(struct mlx5_eswitch *esw, struct mlx5_vport *
 	void *hca_caps;
 	int err;
 
-	if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
+	if (!MLX5_CAP_GEN(esw->dev, vport_group_manager))
 		return 0;
 
 	query_ctx = kzalloc(query_out_sz, GFP_KERNEL);
@@ -952,7 +952,7 @@ int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
 		vport->info.trusted = true;
 
 	if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
-	    MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
+	    MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
 		ret = mlx5_esw_vport_vhca_id_map(esw, vport);
 		if (ret)
 			goto err_vhca_mapping;
@@ -999,7 +999,7 @@ void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 		arm_vport_context_events_cmd(esw->dev, vport_num, 0);
 
 	if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
-	    MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
+	    MLX5_CAP_GEN(esw->dev, vport_group_manager))
 		mlx5_esw_vport_vhca_id_unmap(esw, vport);
 
 	if (vport->vport != MLX5_VPORT_PF &&
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +8 -6
index d5fc07bab1902..fa833c9ba4744 100644
@@ -4535,8 +4535,9 @@ int mlx5_devlink_port_fn_migratable_get(struct devlink_port *port, bool *is_enab
 		return -EOPNOTSUPP;
 	}
 
-	if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
-		NL_SET_ERR_MSG_MOD(extack, "Device doesn't support VHCA management");
+	if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Device doesn't support vport group management");
 		return -EOPNOTSUPP;
 	}
 
@@ -4611,8 +4612,9 @@ int mlx5_devlink_port_fn_roce_get(struct devlink_port *port, bool *is_enabled,
 	struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
 	struct mlx5_vport *vport = mlx5_devlink_port_vport_get(port);
 
-	if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
-		NL_SET_ERR_MSG_MOD(extack, "Device doesn't support VHCA management");
+	if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Device doesn't support vport group management");
 		return -EOPNOTSUPP;
 	}
 
@@ -4876,9 +4878,9 @@ mlx5_devlink_port_fn_max_io_eqs_get(struct devlink_port *port, u32 *max_io_eqs,
 	int err;
 
 	esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
-	if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
+	if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
 		NL_SET_ERR_MSG_MOD(extack,
-				   "Device doesn't support VHCA management");
+				   "Device doesn't support vport group management");
 		return -EOPNOTSUPP;
 	}
 
Signature · 1 line
2.53.0
author maintainer
#83 lore raw

PATCH 82/1250 drm/panel-edp: Add AUO B140XTN07.5, AUO B140HAK03.5, AUO B116XTN02.3, AUO B140XTK02.4, AUO B140HAN07.7

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Terry Hsiao <[email protected]>

[ Upstream commit 4c34cdb93ea187b46d287a77a8946268a7d24286 ]

The raw EDIDs for each panel:

AUO B140XTN07.5
00 ff ff ff ff ff ff 00 06 af 90 02 00 00 00 00 00 1e 01 04 95 1f 11 78 03 c0 d5 8f 56 58 93 29 20 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ce 1d 56 e2 50 00 1e 30 26 16 36 00 35 ad 10 00 00 18 df 13 56 e2 50 00 1e 30 26 16 36 00 35 ad 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 48 ff 0f 3c 7d 48 0f 1b 7d 20 20 20 00 09

AUO B140HAK03.5
00 ff ff ff ff ff ff 00 06 af 9f 3c 00 00 00 00 00 1f 01 04 95 1f 11 78 03 f5 65 8f 55 5a 93 2a 1f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 b0 36 80 a0 70 38 24 40 10 10 3e 00 35 ae 10 00 00 18 75 24 80 a0 70 38 24 40 10 10 3e 00 35 ae 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 48 ff 0f 3c 7d 14 0e 1e 7d 20 20 20 01 02

70 20 79 02 00 22 00 14 df 22 02 84 7f 07 9f 00 0f 80 0f 00 37 04 23 00 02 00 0d 00 25 00 09 df 22 02 df 22 02 28 3c 80 81 00 10 72 1a 00 00 03 01 28 3c 00 00 60 50 60 50 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 90

AUO B116XTN02.3
00 ff ff ff ff ff ff 00 06 af ba 49 00 00 00 00 00 23 01 04 95 1a 0e 78 02 6b f5 91 55 54 91 27 22 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ce 1d 56 e2 50 00 1e 30 26 16 36 00 00 90 10 00 00 18 df 13 56 e2 50 00 1e 30 26 16 36 00 00 90 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 48 ff 0f 3c 7d 50 05 18 7d 20 20 20 00 7f

AUO B140XTK02.4
00 ff ff ff ff ff ff 00 06 af a8 67 00 00 00 00 28 20 01 04 95 1f 11 78 03 c0 d5 8f 56 58 93 29 20 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ce 1d 56 e2 50 00 1e 30 26 16 36 00 35 ad 10 00 00 18 df 13 56 e2 50 00 1e 30 26 16 36 00 35 ad 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 48 ff 0f 3c 7d 11 23 21 6e 20 20 20 00 8e

AUO B140HAN07.7
00 ff ff ff ff ff ff 00 06 af ad c7 00 00 00 00 21 21 01 04 a5 1f 11 78 03 fa 95 92 56 5a 92 2a 20 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 56 37 80 bc 70 38 28 40 10 10 3e 00 35 ae 10 00 00 18 e4 24 80 bc 70 38 28 40 10 10 3e 00 35 ae 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 3c ff 0f 3c 96 23 10 28 96 20 20 20 01 66

70 20 79 02 00 22 00 14 5b 29 02 84 7f 07 bb 00 0f 80 0f 00 37 04 27 00 02 00 0d 00 25 01 09 5b 29 02 5b 29 02 28 3c 80 81 00 10 6f 1a 00 00 03 01 28 3c 00 00 8b 11 8b 11 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 90

---
 drivers/gpu/drm/panel/panel-edp.c | 5 +++++
 1 file changed, 5 insertions(+)
drivers/gpu/drm/panel/panel-edp.c +5 -0
index 334d71e282ccd..ad4fd509692d7 100644
@@ -1892,6 +1892,7 @@ static const struct panel_delay delay_80_500_e50_d50 = {
  * Sort first by vendor, then by product ID.
  */
 static const struct edp_panel_entry edp_panels[] = {
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0x0290, &delay_200_500_e50, "B140XTN07.5"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x04a4, &delay_200_500_e50, "B122UAN01.0"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x0ba4, &delay_200_500_e50, "B140QAX01.H"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x105c, &delay_200_500_e50, "B116XTN01.0"),
@@ -1907,17 +1908,20 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x239b, &delay_200_500_e50, "B116XAN06.1"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x255c, &delay_200_500_e50, "B116XTN02.5"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x30ed, &delay_200_500_e50, "G156HAN03.0"),
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0x3c9f, &delay_200_500_e50, "B140HAK03.5"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x403d, &delay_200_500_e50, "B140HAN04.0"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAN04.0"),
 	EDP_PANEL_ENTRY2('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01.0",
 			 &auo_b116xa3_mode),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x435c, &delay_200_500_e50, "Unknown"),
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0x49ba, &delay_200_500_e50, "B116XTN02.3"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x52b0, &delay_200_500_e50, "B116XAK02.0"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x582d, &delay_200_500_e50, "B133UAN01.0"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x635c, &delay_200_500_e50, "B116XAN06.3"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x639c, &delay_200_500_e50, "B140HAK02.7"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x643d, &delay_200_500_e50, "B140HAN06.4"),
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0x67a8, &delay_200_500_e50, "B140XTK02.4"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x723c, &delay_200_500_e50, "B140XTN07.2"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x73aa, &delay_200_500_e50, "B116XTN02.3"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"),
@@ -1925,6 +1929,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xa199, &delay_200_500_e50, "B116XAN06.1"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xa7b3, &delay_200_500_e50, "B140UAN04.4"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc4b4, &delay_200_500_e50, "B116XAT04.1"),
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc7ad, &delay_200_500_e50, "B140HAN07.7"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc9a8, &delay_200_500_e50, "B140QAN08.H"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xcdba, &delay_200_500_e50, "B140UAX01.2"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xd497, &delay_200_500_e50, "B120XAN01.0"),
Signature · 1 line
2.53.0
author maintainer
#84 lore raw

PATCH 83/1250 drm/panel-edp: Add BOE NT140WHM-N4T, BOE NT140WHM-T05, BOE NV140FHM-N40

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Terry Hsiao <[email protected]>

[ Upstream commit a58ff7da4835e76a5ffc078ecfd2773de90e5d8c ]

The raw EDIDs for each panel:

BOE NT140WHM-N4T
00 ff ff ff ff ff ff 00 09 e5 0d 09 00 00 00 00 01 1e 01 04 95 1f 11 78 03 f8 45 96 57 54 92 28 23 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 a9 1d 56 d0 50 00 24 30 30 20 36 00 35 ae 10 00 00 1a c6 13 56 d0 50 00 24 30 30 20 36 00 35 ae 10 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 0d 40 ff 0a 3c 7d 11 11 21 7d 00 00 00 00 65

BOE NT140WHM-T05
00 ff ff ff ff ff ff 00 09 e5 85 0b 00 00 00 00 01 21 01 04 95 1f 11 78 03 ea a5 93 5c 58 8f 29 1d 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 c7 1d 56 e2 50 00 1e 30 30 20 36 00 35 ae 10 00 00 1a da 13 56 e2 50 00 1e 30 30 20 36 00 35 ae 10 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 0d 40 ff 0a 3c 7d 11 11 21 7d 00 00 00 00 4e

BOE NV140FHM-N40
00 ff ff ff ff ff ff 00 09 e5 6f 0c 00 00 00 00 19 21 01 04 a5 1f 11 78 03 21 35 97 59 57 8f 29 23 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 c2 37 80 cc 70 38 28 40 6c 30 aa 00 35 ae 10 00 00 1a 2c 25 80 cc 70 38 28 40 6c 30 aa 00 35 ae 10 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 0d 36 ff 0a 3c 96 09 0a 19 96 00 00 00 01 57

70 20 79 02 00 25 01 09 8c 2d 02 8c 2d 02 28 3c 80 81 00 10 6f 1a 00 00 03 01 28 3c 00 00 53 4a 53 4a 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 90

---
 drivers/gpu/drm/panel/panel-edp.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/gpu/drm/panel/panel-edp.c +3 -0
index ad4fd509692d7..cd738fa199288 100644
@@ -1966,6 +1966,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x08b2, &delay_200_500_e200, "NT140WHM-N49"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0848, &delay_200_500_e200, "Unknown"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0849, &delay_200_500_e200, "Unknown"),
+	EDP_PANEL_ENTRY('B', 'O', 'E', 0x090d, &delay_200_500_e50, "NT140WHM-N4T"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x09c3, &delay_200_500_e50, "NT116WHM-N21,836X2"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x094b, &delay_200_500_e50, "NT116WHM-N21"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0951, &delay_200_500_e80, "NV116WHM-N47"),
@@ -1991,8 +1992,10 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b43, &delay_200_500_e200, "NV140FHM-T09"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b56, &delay_200_500_e80, "NT140FHM-N47"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b66, &delay_200_500_e80, "NE140WUM-N6G"),
+	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0b85, &delay_200_500_e50, "NT140WHM-T05"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0c20, &delay_200_500_e80, "NT140FHM-N47"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0c26, &delay_200_500_p2e200, "NV140WUM-T08"),
+	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0c6f, &delay_200_500_e50, "NV140FHM-N40"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0c93, &delay_200_500_e200, "Unknown"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0cb6, &delay_200_500_e200, "NT116WHM-N44"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0cf6, &delay_200_500_e200, "NV140WUM-N64"),
Signature · 1 line
2.53.0
author maintainer
#85 lore raw

PATCH 84/1250 phy: qcom: m31-eusb2: Make USB repeater optional

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Wesley Cheng <[email protected]>

[ Upstream commit a62bfbcf2db4ae6eb7a544a40b1075a81784ea41 ]

A repeater is not required for the PHY to function. On systems with multiple PHY instances connected to a multi-port controller, some PHYs may be unconnected. All PHYs must still probe successfully even without attached repeaters, otherwise the controller probe fails.

So make it optional.

---
 drivers/phy/qualcomm/phy-qcom-m31-eusb2.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/phy/qualcomm/phy-qcom-m31-eusb2.c +1 -1
index 9434bd22ef32d..275df38256de3 100644
@@ -285,7 +285,7 @@ static int m31eusb2_phy_probe(struct platform_device *pdev)
 
 	phy_set_drvdata(phy->phy, phy);
 
-	phy->repeater = devm_of_phy_get_by_index(dev, dev->of_node, 0);
+	phy->repeater = devm_phy_optional_get(dev, NULL);
 	if (IS_ERR(phy->repeater))
 		return dev_err_probe(dev, PTR_ERR(phy->repeater),
 				     "failed to get repeater\n");
Signature · 1 line
2.53.0
author maintainer
#86 lore raw

PATCH 85/1250 ASoC: ti: omap3pandora: update board check to use DT compatible

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ethan Nelson-Moore <[email protected]>

[ Upstream commit 45efb8fbdae303539e7fb5562e147583d4ed63ad ]

The omap3pandora driver contains a check for the ARM machine ID via the machine_is_omap3_pandora() macro. The board concerned now supports only FDT booting, which does not use machine IDs, and therefore the code should be updated to check the DT compatible property instead. The legacy board file for this machine was removed in commit 7fcf7e061edd ("ARM: OMAP2+: Remove legacy booting support for Pandora"). The presence of this machine ID check prevents the removal of machine IDs no longer used by the kernel from arch/arm/tools/mach-types, because the machine_is_*() macros are generated from mach-types. To resolve this issue, use of_machine_is_compatible() instead.

---
 sound/soc/ti/omap3pandora.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
sound/soc/ti/omap3pandora.c +3 -2
index 808fb6765c05f..2ddd14e8f6b6c 100644
@@ -11,12 +11,12 @@
 #include <linux/delay.h>
 #include <linux/regulator/consumer.h>
 #include <linux/module.h>
+#include <linux/of.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
 
-#include <asm/mach-types.h>
 #include <linux/platform_data/asoc-ti-mcbsp.h>
 
 #include "omap-mcbsp.h"
@@ -223,7 +223,8 @@ static int __init omap3pandora_soc_init(void)
 {
 	int ret;
 
-	if (!machine_is_omap3_pandora())
+	if (!of_machine_is_compatible("openpandora,omap3-pandora-600mhz") &&
+		!of_machine_is_compatible("openpandora,omap3-pandora-1ghz"))
 		return -ENODEV;
 
 	pr_info("OMAP3 Pandora SoC init\n");
Signature · 1 line
2.53.0
author maintainer
#87 lore raw

PATCH 86/1250 watchdog: lenovo_se10_wdt: Add support for SE10 Gen 2 platform

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mark Pearson <[email protected]>

[ Upstream commit 7b25feb19ce8073193fff6a05a43b5a5c2854b4b ]

The Lenovo SE10 Gen 2 platform uses a watchdog chip from the same family. Watchdog functionality is the same, so update the driver with the new chip ID.

Add the Gen 2 MTM's to enable support on the platform.

Tested on SE10 G2.

---
 drivers/watchdog/lenovo_se10_wdt.c | 66 +++++++++++++++++++++++++++++-
 1 file changed, 65 insertions(+), 1 deletion(-)
drivers/watchdog/lenovo_se10_wdt.c +65 -1
index cd0500e5080b4..99ff01af41243 100644
@@ -178,7 +178,7 @@ static int se10_wdt_probe(struct platform_device *pdev)
 		return -EBUSY;
 
 	chip_id = get_chipID();
-	if (chip_id != 0x5632) {
+	if (chip_id != 0x5632 && chip_id != 0x5652) {
 		release_region(CFG_PORT, CFG_SIZE);
 		return -ENODEV;
 	}
@@ -280,6 +280,70 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 		},
 		.callback = se10_create_platform_device,
 	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13LJ"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13LK"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S1"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S2"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S3"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S4"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S5"),
+		},
+		.callback = se10_create_platform_device,
+	},
+	{
+		.ident = "LENOVO-SE10-G2",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "13S6"),
+		},
+		.callback = se10_create_platform_device,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(dmi, se10_dmi_table);
Signature · 1 line
2.53.0
author maintainer
#88 lore raw

PATCH 87/1250 watchdog: imx7ulp_wdt: Keep WDOG running until A55 enters WFI on i.MX94

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ranjani Vaidyanathan <[email protected]>

[ Upstream commit 1f5b29add64e7c1500530079bbbe359cad28cb63 ]

On i.MX94, watchdog sources clock from bus clock that will be always on during the lifecycle of Linux. There is a Low Power Clock Gating(LPCG) between the bus clock and watchdog, but the LPCG is not exported for software to control, it is hardware automatically controlled. When Cortex-A55 executes WFI during suspend flow, the LPCG will automatically gate off the clock to stop watchdog and resume clock when Cortex-A55 is woke up.

So watchdog could always be alive to protect Linux, except Cortex-A platform WFI is executed in Linux suspend flow.

Introduce a new hardware feature flag to indicate CPU low-power-mode auto clock gating support, and use it to avoid stopping the watchdog during suspend when LPCG can safely keep it running.

Add i.MX94-specific watchdog hardware data and DT compatible entry to enable this behavior.

---
 drivers/watchdog/imx7ulp_wdt.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/watchdog/imx7ulp_wdt.c +9 -1
index 03479110453ce..855dc9d5083a5 100644
@@ -56,6 +56,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
 struct imx_wdt_hw_feature {
 	bool prescaler_enable;
 	bool post_rcs_wait;
+	bool cpu_lpm_auto_cg;
 	u32 wdog_clock_rate;
 };
 
@@ -360,7 +361,7 @@ static int __maybe_unused imx7ulp_wdt_suspend_noirq(struct device *dev)
 {
 	struct imx7ulp_wdt_device *imx7ulp_wdt = dev_get_drvdata(dev);
 
-	if (watchdog_active(&imx7ulp_wdt->wdd))
+	if (watchdog_active(&imx7ulp_wdt->wdd) && !imx7ulp_wdt->hw->cpu_lpm_auto_cg)
 		imx7ulp_wdt_stop(&imx7ulp_wdt->wdd);
 
 	clk_disable_unprepare(imx7ulp_wdt->clk);
@@ -408,10 +409,17 @@ static const struct imx_wdt_hw_feature imx93_wdt_hw = {
 	.wdog_clock_rate = 125,
 };
 
+static const struct imx_wdt_hw_feature imx94_wdt_hw = {
+	.prescaler_enable = true,
+	.wdog_clock_rate = 125,
+	.cpu_lpm_auto_cg = true,
+};
+
 static const struct of_device_id imx7ulp_wdt_dt_ids[] = {
 	{ .compatible = "fsl,imx7ulp-wdt", .data = &imx7ulp_wdt_hw, },
 	{ .compatible = "fsl,imx8ulp-wdt", .data = &imx8ulp_wdt_hw, },
 	{ .compatible = "fsl,imx93-wdt", .data = &imx93_wdt_hw, },
+	{ .compatible = "fsl,imx94-wdt", .data = &imx94_wdt_hw, },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx7ulp_wdt_dt_ids);
Signature · 1 line
2.53.0
author maintainer
#89 lore raw

PATCH 88/1250 watchdog: lenovo_se10_wdt: Fix use-after-free and resource leak risk

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mark Pearson <[email protected]>

[ Upstream commit 3394e894880a60338a2981dd688fd25e88d79667 ]

Review by sashiko.dev highlighted potential use after free and resource leak instances.

Set se10_pdev to null to prevent use after free

Remove DMI call back and instead directly call se10_create_platform_device. Handle error cases appropriately

---
 drivers/watchdog/lenovo_se10_wdt.c | 32 ++++++++++++++----------------
 1 file changed, 15 insertions(+), 17 deletions(-)
drivers/watchdog/lenovo_se10_wdt.c +15 -17
index 99ff01af41243..503e220263f95 100644
@@ -224,7 +224,7 @@ static struct platform_driver se10_wdt_driver = {
 	.probe  = se10_wdt_probe,
 };
 
-static int se10_create_platform_device(const struct dmi_system_id *id)
+static int se10_create_platform_device(void)
 {
 	int err;
 
@@ -233,9 +233,10 @@ static int se10_create_platform_device(const struct dmi_system_id *id)
 		return -ENOMEM;
 
 	err = platform_device_add(se10_pdev);
-	if (err)
+	if (err) {
 		platform_device_put(se10_pdev);
-
+		se10_pdev = NULL;
+	}
 	return err;
 }
 
@@ -246,7 +247,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "12NH"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10",
@@ -254,7 +254,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "12NJ"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10",
@@ -262,7 +261,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "12NK"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10",
@@ -270,7 +268,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "12NL"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10",
@@ -278,7 +275,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "12NM"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -286,7 +282,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13LJ"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -294,7 +289,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13LK"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -302,7 +296,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S1"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -310,7 +303,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S2"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -318,7 +310,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S3"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -326,7 +317,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S4"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -334,7 +324,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S5"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{
 		.ident = "LENOVO-SE10-G2",
@@ -342,7 +331,6 @@ static const struct dmi_system_id se10_dmi_table[] __initconst = {
 			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "13S6"),
 		},
-		.callback = se10_create_platform_device,
 	},
 	{}
 };
@@ -350,10 +338,20 @@ MODULE_DEVICE_TABLE(dmi, se10_dmi_table);
 
 static int __init se10_wdt_init(void)
 {
+	int err;
+
 	if (!dmi_check_system(se10_dmi_table))
 		return -ENODEV;
 
-	return platform_driver_register(&se10_wdt_driver);
+	err = platform_driver_register(&se10_wdt_driver);
+	if (err)
+		return err;
+
+	err = se10_create_platform_device();
+	if (err)
+		platform_driver_unregister(&se10_wdt_driver);
+
+	return err;
 }
 
 static void __exit se10_wdt_exit(void)
Signature · 1 line
2.53.0
author maintainer
#90 lore raw

PATCH 89/1250 net/mlx5: HWS, Check if device is down while polling for completion

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Yevgeny Kliteynik <[email protected]>

[ Upstream commit e3ec1570895bcf81f443e8ac60059edc61dbfca3 ]

In case the device is down for any reason (e.g. FLR), the HW will no longer generate completions - no point polling and waiting for timeout.

---
 .../ethernet/mellanox/mlx5/core/steering/hws/bwc.c   | 12 ++++++++++++
 1 file changed, 12 insertions(+)
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc.c +12 -0
index 564ae98316bc9..756b87a3d68dd 100644
@@ -423,6 +423,18 @@ int mlx5hws_bwc_queue_poll(struct mlx5hws_context *ctx,
 	if (!got_comp && !drain)
 		return 0;
 
+	if (unlikely(ctx->mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
+		/* If the device is down for any reason (e.g. FLR), the HW will
+		 * no longer generate completions.
+		 * Note that ETIMEDOUT is returned here because the BWC layer
+		 * already has a special handling for timeouts - it breaks the
+		 * rehash / resize / shrink loops to avoid chain of timeouts.
+		 */
+		mlx5_core_warn_once(ctx->mdev,
+				    "BWC poll: device is down, polling for completion aborted\n");
+		return -ETIMEDOUT;
+	}
+
 	queue_full = mlx5hws_send_engine_full(&ctx->send_queue[queue_id]);
 	while (queue_full || ((got_comp || drain) && *pending_rules)) {
 		ret = mlx5hws_send_queue_poll(ctx, queue_id, comp, burst_th);
Signature · 1 line
2.53.0
author maintainer
#91 lore raw

PATCH 90/1250 net/mlx5: HWS, Handle destroying table that has a miss table

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Yevgeny Kliteynik <[email protected]>

[ Upstream commit 60e9e82f162ab7399373ff2185119289e4f6dc06 ]

If a table has a miss table that was created by 'mlx5hws_table_set_default_miss' API function, its miss_tbl keeps the table that points to it in a list.
If such table is deleted, we need to also remove it from the miss_tbl list, otherwise the node in miss_tbl list will contain garbage.

---
 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c +3 -0
index 6113383ae47bb..07a3dd1248c77 100644
@@ -282,6 +282,9 @@ int mlx5hws_table_destroy(struct mlx5hws_table *tbl)
 		goto unlock_err;
 	}
 
+	if (tbl->default_miss.miss_tbl)
+		list_del_init(&tbl->default_miss.next);
+
 	list_del_init(&tbl->tbl_list_node);
 	mutex_unlock(&ctx->ctrl_lock);
 
Signature · 1 line
2.53.0
author maintainer
#92 lore raw

PATCH 91/1250 platform/chrome: Resolve kb_wake_angle visibility race

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Tzung-Bi Shih <[email protected]>

[ Upstream commit c40f5f9927b5bf6062daa1e293ae32d83afc963e ]

A race condition exists between the probe of cros-ec-sysfs and cros-ec-sensorhub.

The kb_wake_angle attribute should only be visible if the sensor hub detects two or more accelerometers. If cros_ec_sysfs_probe() runs before cros_ec_sensorhub_register() completes sensor enumeration, the sysfs attributes are created while has_kb_wake_angle is still false, hiding kb_wake_angle incorrectly.

Store the created attribute group pointer in ec_dev->group. When the sensor hub completes sensor enumeration, it checks for this group and calls sysfs_update_group() to notify the sysfs core to re-evaluate attribute visibility. This ensures the kb_wake_angle attribute visibility is correctly updated regardless of the driver probe order.

---
 drivers/platform/chrome/cros_ec_sensorhub.c | 6 +++++-
 drivers/platform/chrome/cros_ec_sysfs.c     | 5 +++--
 include/linux/platform_data/cros_ec_proto.h | 2 ++
 3 files changed, 10 insertions(+), 3 deletions(-)
drivers/platform/chrome/cros_ec_sensorhub.c +5 -1
index 9bad8f72680ea..f938c3fc84e4f 100644
@@ -122,8 +122,12 @@ static int cros_ec_sensorhub_register(struct device *dev,
 		sensor_type[sensorhub->resp->info.type]++;
 	}
 
-	if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2)
+	if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2) {
 		ec->has_kb_wake_angle = true;
+		if (ec->group && sysfs_update_group(&ec->class_dev.kobj,
+						    ec->group))
+			dev_warn(dev, "Unable to update sysfs");
+	}
 
 	if (cros_ec_check_features(ec,
 				   EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS)) {
drivers/platform/chrome/cros_ec_sysfs.c +3 -2
index f22e9523da3e8..9d3767ab15480 100644
@@ -405,7 +405,8 @@ static int cros_ec_sysfs_probe(struct platform_device *pd)
 	struct device *dev = &pd->dev;
 	int ret;
 
-	ret = sysfs_create_group(&ec_dev->class_dev.kobj, &cros_ec_attr_group);
+	ec_dev->group = &cros_ec_attr_group;
+	ret = sysfs_create_group(&ec_dev->class_dev.kobj, ec_dev->group);
 	if (ret < 0)
 		dev_err(dev, "failed to create attributes. err=%d\n", ret);
 
@@ -416,7 +417,7 @@ static void cros_ec_sysfs_remove(struct platform_device *pd)
 {
 	struct cros_ec_dev *ec_dev = dev_get_drvdata(pd->dev.parent);
 
-	sysfs_remove_group(&ec_dev->class_dev.kobj, &cros_ec_attr_group);
+	sysfs_remove_group(&ec_dev->class_dev.kobj, ec_dev->group);
 }
 
 static const struct platform_device_id cros_ec_sysfs_id[] = {
include/linux/platform_data/cros_ec_proto.h +2 -0
index de14923720a53..6ed1c4c5ce2ef 100644
@@ -228,6 +228,7 @@ struct cros_ec_platform {
 /**
  * struct cros_ec_dev - ChromeOS EC device entry point.
  * @class_dev: Device structure used in sysfs.
+ * @group: sysfs attributes groups for this EC.
  * @ec_dev: cros_ec_device structure to talk to the physical device.
  * @dev: Pointer to the platform device.
  * @debug_info: cros_ec_debugfs structure for debugging information.
@@ -237,6 +238,7 @@ struct cros_ec_platform {
  */
 struct cros_ec_dev {
 	struct device class_dev;
+	const struct attribute_group *group;
 	struct cros_ec_device *ec_dev;
 	struct device *dev;
 	struct cros_ec_debugfs *debug_info;
Signature · 1 line
2.53.0
author maintainer
#93 lore raw

PATCH 92/1250 drm/panel/tdo-tl070wsh30: Use refcounted allocation in place of devm_kzalloc()

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Albert Esteve <[email protected]>

[ Upstream commit 928decbed75bf215a8d0eecc88aa2edc77023db2 ]

Move to using the new API devm_drm_panel_alloc() to allocate the panel. In the call to the new API, avoid using explicit type and use __typeof() for more type safety.

---
 drivers/gpu/drm/panel/panel-tdo-tl070wsh30.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/gpu/drm/panel/panel-tdo-tl070wsh30.c +7 -7
index 227f97f9b136f..13cfe252a838d 100644
@@ -162,9 +162,6 @@ static int tdo_tl070wsh30_panel_add(struct tdo_tl070wsh30_panel *tdo_tl070wsh30)
 		return err;
 	}
 
-	drm_panel_init(&tdo_tl070wsh30->base, &tdo_tl070wsh30->link->dev,
-		       &tdo_tl070wsh30_panel_funcs, DRM_MODE_CONNECTOR_DSI);
-
 	err = drm_panel_of_backlight(&tdo_tl070wsh30->base);
 	if (err)
 		return err;
@@ -183,10 +180,13 @@ static int tdo_tl070wsh30_panel_probe(struct mipi_dsi_device *dsi)
 	dsi->format = MIPI_DSI_FMT_RGB888;
 	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM;
 
-	tdo_tl070wsh30 = devm_kzalloc(&dsi->dev, sizeof(*tdo_tl070wsh30),
-				    GFP_KERNEL);
-	if (!tdo_tl070wsh30)
-		return -ENOMEM;
+	tdo_tl070wsh30 = devm_drm_panel_alloc(&dsi->dev,
+					      __typeof(*tdo_tl070wsh30), base,
+					      &tdo_tl070wsh30_panel_funcs,
+					      DRM_MODE_CONNECTOR_DSI);
+
+	if (IS_ERR(tdo_tl070wsh30))
+		return PTR_ERR(tdo_tl070wsh30);
 
 	mipi_dsi_set_drvdata(dsi, tdo_tl070wsh30);
 	tdo_tl070wsh30->link = dsi;
Signature · 1 line
2.53.0
author maintainer
#94 lore raw

PATCH 93/1250 mmc: core: Add validation for host-provided max_segs

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Shawn Lin <[email protected]>

[ Upstream commit 3e0483e93a8be320f70a1ff68d835f7f015af311 ]

The max_segs field is of type unsigned short, and if a host driver sets an excessively large value, it may be truncated to zero. This can cause mmc_alloc_sg() to call kmalloc_objs() with a zero size allocation request, which leads to undefined behavior.

Under the SLUB allocator, kmalloc(0) returns a special pointer (ZERO_SIZE_PTR). The subsequent 'if (sg)' check will evaluate to true, and sg_init_table() will then attempt to access invalid memory, resulting in a crash:

dwmmc_rockchip 2a310000.mmc: Successfully tuned phase to 133
mmc1: new UHS-I speed SDR104 SDHC card at address aaaa

Unable to handle kernel paging request at virtual address 0000001ffffffff0

Mem abort info:
ESR = 0x0000000096000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: level 0 translation fault
Data abort info:
ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
CM = 0, WnR = 0, TnD = 0, TagAccess = 0
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000102c88000 [0000001ffffffff0] pgd=0000000000000000, p4d=0000000000000000

Internal error: Oops: 0000000096000004 [#1] SMP
Modules linked in:
CPU: 2 UID: 0 PID: 102 Comm: kworker/2:1 Not tainted 7.0.0-rc6-next-20260331-00013-g4d93c25963c5-dirty #80 PREEMPT
Hardware name: Rockchip RK3576 EVB V10 Board (DT)
Workqueue: events_freezable mmc_rescan
pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : sg_init_table+0x2c/0x50
lr : sg_init_table+0x24/0x50

sp : ffff8000837db710
x29: ffff8000837db710 x28: 000000000000c000 x27: 0000000000000300
x26: 0000000000000000 x25: 0000000000000040 x24: ffff0000c46a0000
x23: 0000000000000000 x22: ffff0000c0c73c00 x21: 0000000000000010
x20: 0000000000000010 x19: 0000000000000000 x18: 000000000000002c
x17: 0000000000000000 x16: 0000000000000001 x15: 0000000000000000
x14: 0000000000000400 x13: ffff8000837dc000 x12: 0000000000000000
x11: ffff0000c0c73ca0 x10: 0000000000000040 x9 : 459ec1f0abbdbb00 x8 : 0000001fffffffe0 x7 : 0000000000000000 x6 : 000000000000003f x5 : 0000000000035579 x4 : 0000000000000901 x3 : 0000000000000000 x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000010

Call trace:
sg_init_table+0x2c/0x50 (P)
mmc_mq_init_request+0x64/0x90
blk_mq_alloc_map_and_rqs+0x3ac/0x480
blk_mq_alloc_set_map_and_rqs+0x98/0x1e0
blk_mq_alloc_tag_set+0x1c0/0x290
mmc_init_queue+0x120/0x370
mmc_blk_alloc_req+0x150/0x420

To prevent this, add a validation check in mmc_mq_init_request() to detect when sg_len (derived from max_segs) is zero. If sg_len is zero, we return an error and print an error message, allowing host driver developers to identify and fix incorrect max_segs configuration.

This is a defensive measure that ensures the MMC core fails gracefully when host drivers provide invalid max_segs values, rather than crashing with a page fault.

---
 drivers/mmc/core/queue.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/mmc/core/queue.c +7 -1
index eb1053d8cae72..eb25a0825adcf 100644
@@ -214,8 +214,14 @@ static int mmc_mq_init_request(struct blk_mq_tag_set *set, struct request *req,
 	struct mmc_queue *mq = set->driver_data;
 	struct mmc_card *card = mq->card;
 	struct mmc_host *host = card->host;
+	u16 sg_len = mmc_get_max_segments(host);
 
-	mq_rq->sg = mmc_alloc_sg(mmc_get_max_segments(host), GFP_KERNEL);
+	if (!sg_len) {
+		dev_err(mmc_dev(host), "Wrong max_segs assigned\n");
+		return -EINVAL;
+	}
+
+	mq_rq->sg = mmc_alloc_sg(sg_len, GFP_KERNEL);
 	if (!mq_rq->sg)
 		return -ENOMEM;
 
Signature · 1 line
2.53.0
author maintainer
#95 lore raw

PATCH 94/1250 genirq/proc: Size interrupt directory names for 10-digit interrupt numbers

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Pengpeng Hou <[email protected]>

[ Upstream commit c2c7983c93f5d86962318be7e7298f1bc3feb1a6 ]

/proc/irq/<n>/ directory names are built in char name[10] buffers with sprintf(name, "%u", irq).

Ten-digit IRQ numbers already need 11 bytes including the trailing NUL, and current sparse-IRQ configurations allow interrupt numbers in that range.

Size the temporary name buffer for the current decimal form and switch to bounded formatting when creating or removing the proc entry.

---
 kernel/irq/proc.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
kernel/irq/proc.c +4 -3
index 29c2404e743be..0537d330abb82 100644
@@ -10,6 +10,7 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/interrupt.h>
+#include <linux/kernel.h>
 #include <linux/kernel_stat.h>
 #include <linux/mutex.h>
 
@@ -323,7 +324,7 @@ void register_handler_proc(unsigned int irq, struct irqaction *action)
 
 #undef MAX_NAMELEN
 
-#define MAX_NAMELEN 10
+#define MAX_NAMELEN 11
 
 void register_irq_proc(unsigned int irq, struct irq_desc *desc)
 {
@@ -345,7 +346,7 @@ void register_irq_proc(unsigned int irq, struct irq_desc *desc)
 		return;
 
 	/* create /proc/irq/1234 */
-	sprintf(name, "%u", irq);
+	snprintf(name, MAX_NAMELEN, "%u", irq);
 	desc->dir = proc_mkdir(name, root_irq_dir);
 	if (!desc->dir)
 		return;
@@ -398,7 +399,7 @@ void unregister_irq_proc(unsigned int irq, struct irq_desc *desc)
 #endif
 	remove_proc_entry("spurious", desc->dir);
 
-	sprintf(name, "%u", irq);
+	snprintf(name, MAX_NAMELEN, "%u", irq);
 	remove_proc_entry(name, root_irq_dir);
 }
 
Signature · 1 line
2.53.0
author maintainer
#96 lore raw

PATCH 95/1250 serial: 8250_port: recognize UPIO_AU

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Manuel Lauss <[email protected]>

[ Upstream commit 49fa670efdfdd27e29145cbd2beef065c08717ef ]

My MIPS Alchemy systems generate the following warning during probe of the 8250 driver:

WARNING: drivers/tty/serial/8250/8250_port.c:462 at set_io_from_upio+0xfc/0x124, CPU#0: swapper/0/1
Unsupported UART type 4
[...]
[<80521d40>] set_io_from_upio+0xfc/0x124
[<80521dfc>] serial8250_set_defaults+0x94/0xe0
[<80520fb4>] serial8250_register_8250_port+0x288/0x51c
[<805214ec>] serial8250_probe+0x160/0x1e8
[<8053b5f0>] platform_probe+0x64/0x90

The least invasive fix is to recognize UPIO_AU (type 4) in set_io_from_upio() and do nothing, since all parameters have already been set up in 8250_rt288x.c::au_platform_setup().

Run-tested on Alchemy Au1300 platform.

---
 drivers/tty/serial/8250/8250_port.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/tty/serial/8250/8250_port.c +2 -0
index d3ffba16c0f96..9564a5d9b4d02 100644
@@ -458,6 +458,8 @@ static void set_io_from_upio(struct uart_port *p)
 		p->serial_out = io_serial_out;
 		break;
 #endif
+	case UPIO_AU:
+		break;
 	default:
 		WARN(p->iotype != UPIO_PORT || p->iobase,
 		     "Unsupported UART type %x\n", p->iotype);
Signature · 1 line
2.53.0
author maintainer
#97 lore raw

PATCH 96/1250 mmc: davinci: avoid NULL deref of host->data in IRQ handler

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Stepan Ionichev <[email protected]>

[ Upstream commit 4f28846aaf8db9668e338b8987973f8935edff34 ]

mmc_davinci_irq() returns early only when both host->cmd and host->data are NULL:

  if (host->cmd == NULL && host->data == NULL) {
          ...
          return IRQ_NONE;
  }

So we may legitimately reach the rest of the handler with host->data == NULL (and therefore data == NULL). The DATDNE branch already guards against this with an explicit "if (data != NULL)" check, but the subsequent TOUTRD ("read data timeout") and CRCWR/CRCRD ("data CRC error") branches dereference data unconditionally:

  if (qstatus & MMCST0_TOUTRD) {
          data->error = -ETIMEDOUT;        <-- NULL deref
          ...
          davinci_abort_data(host, data);
  }

  if (qstatus & (MMCST0_CRCWR | MMCST0_CRCRD)) {
          data->error = -EILSEQ;           <-- NULL deref
          ...
  }

If either bit is set in qstatus while host->data is NULL, the kernel will crash inside the IRQ handler. smatch flags this:

drivers/mmc/host/davinci_mmc.c:933 mmc_davinci_irq() error: we
previously assumed 'data' could be null (see line 914)

Gate both branches on a non-NULL data, matching the existing pattern used by the DATDNE branch.

No functional change for callers where data is non-NULL, which is the only case in which these branches did meaningful work before this change.

---
 drivers/mmc/host/davinci_mmc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mmc/host/davinci_mmc.c +2 -2
index 2b7d6d9bcde51..00adc15956fd2 100644
@@ -928,7 +928,7 @@ static irqreturn_t mmc_davinci_irq(int irq, void *dev_id)
 		}
 	}
 
-	if (qstatus & MMCST0_TOUTRD) {
+	if (data && (qstatus & MMCST0_TOUTRD)) {
 		/* Read data timeout */
 		data->error = -ETIMEDOUT;
 		end_transfer = 1;
@@ -940,7 +940,7 @@ static irqreturn_t mmc_davinci_irq(int irq, void *dev_id)
 		davinci_abort_data(host, data);
 	}
 
-	if (qstatus & (MMCST0_CRCWR | MMCST0_CRCRD)) {
+	if (data && (qstatus & (MMCST0_CRCWR | MMCST0_CRCRD))) {
 		/* Data CRC error */
 		data->error = -EILSEQ;
 		end_transfer = 1;
Signature · 1 line
2.53.0
author maintainer
#98 lore raw

PATCH 97/1250 platform/x86: sel3350-platform: Retain LED state on load and unload

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Brodie Abrew <[email protected]>

[ Upstream commit 18bc6ce6bb618e1dff4473d7dd528d22519abbd7 ]

When the platform driver is loaded or unloaded, it overwrites the existing LED states. This can cause a loss of early boot state when the driver loads, and it can cause the ALARM contact to change state or flicker.

Explicitly retain the existing LED state to prevent overwriting on driver load and unload.

---
 drivers/platform/x86/sel3350-platform.c | 136 ++++++++++++++++++------
 1 file changed, 103 insertions(+), 33 deletions(-)
drivers/platform/x86/sel3350-platform.c +103 -33
index 02e2081e2333b..f3a3142356325 100644
@@ -9,6 +9,8 @@
  */
 
 #include <linux/acpi.h>
+#include <linux/array_size.h>
+#include <linux/err.h>
 #include <linux/gpio/consumer.h>
 #include <linux/gpio/machine.h>
 #include <linux/leds.h>
@@ -30,19 +32,82 @@
 #define SEL_PS_B_DETECT "sel_ps_b_detect"
 #define SEL_PS_B_GOOD   "sel_ps_b_good"
 
+#define AUX_LED_GRN1        "sel_aux_led_grn1"
+#define AUX_LED_GRN2        "sel_aux_led_grn2"
+#define AUX_LED_GRN3        "sel_aux_led_grn3"
+#define AUX_LED_GRN4        "sel_aux_led_grn4"
+#define ALARM_STATE_USER    "sel_alarm_state_user"
+#define ENABLE_STATE_USER   "sel_enable_state_user"
+#define AUX_LED_RED1        "sel_aux_led_red1"
+#define AUX_LED_RED2        "sel_aux_led_red2"
+#define AUX_LED_RED3        "sel_aux_led_red3"
+#define AUX_LED_RED4        "sel_aux_led_red4"
+
+static const char *const sel3350_leds_gpio_names[] = {
+	AUX_LED_GRN1,
+	AUX_LED_GRN2,
+	AUX_LED_GRN3,
+	AUX_LED_GRN4,
+	ALARM_STATE_USER,
+	ENABLE_STATE_USER,
+	AUX_LED_RED1,
+	AUX_LED_RED2,
+	AUX_LED_RED3,
+	AUX_LED_RED4,
+};
+
 /* LEDs */
-static const struct gpio_led sel3350_leds[] = {
-	{ .name = "sel:green:aux1" },
-	{ .name = "sel:green:aux2" },
-	{ .name = "sel:green:aux3" },
-	{ .name = "sel:green:aux4" },
-	{ .name = "sel:red:alarm" },
+static struct gpio_led sel3350_leds[] = {
+	{ .name = "sel:green:aux1",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:green:aux2",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:green:aux3",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:green:aux4",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:red:alarm",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
 	{ .name = "sel:green:enabled",
-	  .default_state = LEDS_GPIO_DEFSTATE_ON },
-	{ .name = "sel:red:aux1" },
-	{ .name = "sel:red:aux2" },
-	{ .name = "sel:red:aux3" },
-	{ .name = "sel:red:aux4" },
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:red:aux1",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:red:aux2",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:red:aux3",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
+	{ .name = "sel:red:aux4",
+	  .default_state = LEDS_GPIO_DEFSTATE_KEEP,
+	  .retain_state_suspended = 1,
+	  .retain_state_shutdown = 1,
+	},
 };
 
 static const struct gpio_led_platform_data sel3350_leds_pdata = {
@@ -50,25 +115,6 @@ static const struct gpio_led_platform_data sel3350_leds_pdata = {
 	.leds = sel3350_leds,
 };
 
-/* Map GPIOs to LEDs */
-static struct gpiod_lookup_table sel3350_leds_table = {
-	.dev_id = "leds-gpio",
-	.table = {
-		GPIO_LOOKUP_IDX(BXT_NW, 49, NULL, 0, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_NW, 50, NULL, 1, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_NW, 51, NULL, 2, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_NW, 52, NULL, 3, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_W,  20, NULL, 4, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_W,  21, NULL, 5, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_SW, 37, NULL, 6, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_SW, 38, NULL, 7, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_SW, 39, NULL, 8, GPIO_ACTIVE_HIGH),
-		GPIO_LOOKUP_IDX(BXT_SW, 40, NULL, 9, GPIO_ACTIVE_HIGH),
-		{},
-	}
-};
-
-/* Map GPIOs to power supplies */
 static struct gpiod_lookup_table sel3350_gpios_table = {
 	.dev_id = B2093_GPIO_ACPI_ID ":00",
 	.table = {
@@ -76,6 +122,16 @@ static struct gpiod_lookup_table sel3350_gpios_table = {
 		GPIO_LOOKUP(BXT_NW, 45, SEL_PS_A_GOOD,   GPIO_ACTIVE_LOW),
 		GPIO_LOOKUP(BXT_NW, 46, SEL_PS_B_DETECT, GPIO_ACTIVE_LOW),
 		GPIO_LOOKUP(BXT_NW, 47, SEL_PS_B_GOOD,   GPIO_ACTIVE_LOW),
+		GPIO_LOOKUP(BXT_NW, 49, AUX_LED_GRN1, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_NW, 50, AUX_LED_GRN2, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_NW, 51, AUX_LED_GRN3, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_NW, 52, AUX_LED_GRN4, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_W,  20, ALARM_STATE_USER, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_W,  21, ENABLE_STATE_USER, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_SW, 37, AUX_LED_RED1, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_SW, 38, AUX_LED_RED2, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_SW, 39, AUX_LED_RED3, GPIO_ACTIVE_HIGH),
+		GPIO_LOOKUP(BXT_SW, 40, AUX_LED_RED4, GPIO_ACTIVE_HIGH),
 		{},
 	}
 };
@@ -149,6 +205,7 @@ struct sel3350_data {
 static int sel3350_probe(struct platform_device *pdev)
 {
 	int rs;
+	int i;
 	struct sel3350_data *sel3350;
 	struct power_supply_config ps_cfg = {};
 
@@ -158,9 +215,19 @@ static int sel3350_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, sel3350);
 
-	gpiod_add_lookup_table(&sel3350_leds_table);
 	gpiod_add_lookup_table(&sel3350_gpios_table);
 
+	for (i = 0; i < ARRAY_SIZE(sel3350_leds); ++i) {
+		sel3350_leds[i].gpiod = devm_gpiod_get(&pdev->dev,
+						       sel3350_leds_gpio_names[i],
+						       GPIOD_ASIS);
+		if (IS_ERR_OR_NULL(sel3350_leds[i].gpiod)) {
+			rs = -EPROBE_DEFER;
+			goto err_gpio_loop;
+		}
+		gpiod_set_consumer_name(sel3350_leds[i].gpiod, sel3350_leds[i].name);
+	}
+
 	sel3350->leds_pdev = platform_device_register_data(
 			NULL,
 			"leds-gpio",
@@ -209,11 +276,15 @@ static int sel3350_probe(struct platform_device *pdev)
 
 	return 0;
 
+err_gpio_loop:
+	while (i--)
+		devm_gpiod_put(&pdev->dev, sel3350_leds[i].gpiod);
+	goto err_platform;
+
 err_ps:
 	platform_device_unregister(sel3350->leds_pdev);
 err_platform:
 	gpiod_remove_lookup_table(&sel3350_gpios_table);
-	gpiod_remove_lookup_table(&sel3350_leds_table);
 
 	return rs;
 }
@@ -224,7 +295,6 @@ static void sel3350_remove(struct platform_device *pdev)
 
 	platform_device_unregister(sel3350->leds_pdev);
 	gpiod_remove_lookup_table(&sel3350_gpios_table);
-	gpiod_remove_lookup_table(&sel3350_leds_table);
 }
 
 static const struct acpi_device_id sel3350_device_ids[] = {
Signature · 1 line
2.53.0
author maintainer
#99 lore raw

PATCH 98/1250 drm/amd/display: Fix CRC open failure during active rendering

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Tom Chung <[email protected]>

[ Upstream commit 5eb2fdafeb6f4a442643b77a21a4c9e70586a146 ]

[Why]
Opening the CRC data file during active rendering can fail with -EINVAL. The wait for commit->hw_done returns remaining jiffies on success, but the CRC path was treating that as an error.

[How]
Handle wait_for_completion_interruptible_timeout() correctly:
positive return as success, 0 as timeout, and negative as error.

---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c +6 -1
index e20aa74380665..596a97092e0dd 100644
@@ -584,8 +584,13 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name)
 		 */
 		ret = wait_for_completion_interruptible_timeout(
 			&commit->hw_done, 10 * HZ);
-		if (ret)
+		if (ret < 0)
+			goto cleanup;
+
+		if (ret == 0) {
+			ret = -ETIMEDOUT;
 			goto cleanup;
+		}
 	}
 
 	enable = amdgpu_dm_is_valid_crc_source(source);
Signature · 1 line
2.53.0
author maintainer
#100 lore raw

PATCH 99/1250 pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Chen-Yu Tsai <[email protected]>

[ Upstream commit c87c9046c4e00d599454e033a477176c4d73ac2a ]

pinctrl_gpio_direction_input() / pinctrl_gpio_direction_output() take the pinctrl mutex. This causes a gpiochip operations to need to sleep. Worse yet, the .can_sleep field in the gpiochip is not set. This causes the shared GPIO proxy to trip over, as it uses gpiod_cansleep() to check whether it can use a spinlock or needs a mutex. In this case, it ends up taking a spinlock, then calls pinctrl_gpio_direction_output(), which takes a mutex. This causes a huge warning.

While this class of Mediatek hardware does not have separate clear/set registers, the pinctrl context has a spinlock that is taken whenever a register read-modify-write is done. Also, once the GPIO function is selected / muxed in, further GPIO operations do not involve pinctrl operations or state. The GPIO direction and level values do not require toggling the pinmux or any other pin config options.

Switch to directly calling mtk_pinmux_gpio_set_direction() in the GPIO set direction callbacks to avoid taking the pinctrl mutex. Drop the .gpio_set_direction field in mtk_pmxops to signal we are no longer using the pinctrl GPIO layer for setting the direction.

---
 drivers/pinctrl/mediatek/pinctrl-paris.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/pinctrl/mediatek/pinctrl-paris.c +5 -3
index 6bf37d8085fae..23f04b24fd65e 100644
@@ -771,7 +771,6 @@ static const struct pinmux_ops mtk_pmxops = {
 	.get_function_name	= mtk_pmx_get_func_name,
 	.get_function_groups	= mtk_pmx_get_func_groups,
 	.set_mux		= mtk_pmx_set_mux,
-	.gpio_set_direction	= mtk_pinmux_gpio_set_direction,
 	.gpio_request_enable	= mtk_pinmux_gpio_request_enable,
 };
 
@@ -886,19 +885,22 @@ static int mtk_gpio_set(struct gpio_chip *chip, unsigned int gpio, int value)
 
 static int mtk_gpio_direction_input(struct gpio_chip *chip, unsigned int gpio)
 {
-	return pinctrl_gpio_direction_input(chip, gpio);
+	struct mtk_pinctrl *hw = gpiochip_get_data(chip);
+
+	return mtk_pinmux_gpio_set_direction(hw->pctrl, NULL, gpio, true);
 }
 
 static int mtk_gpio_direction_output(struct gpio_chip *chip, unsigned int gpio,
 				     int value)
 {
+	struct mtk_pinctrl *hw = gpiochip_get_data(chip);
 	int ret;
 
 	ret = mtk_gpio_set(chip, gpio, value);
 	if (ret)
 		return ret;
 
-	return pinctrl_gpio_direction_output(chip, gpio);
+	return mtk_pinmux_gpio_set_direction(hw->pctrl, NULL, gpio, false);
 }
 
 static int mtk_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
Signature · 1 line
2.53.0
author maintainer
#101 lore raw

PATCH 100/1250 pinctrl: mediatek: common-v1: bypass pinctrl GPIO layer in set GPIO direction

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Chen-Yu Tsai <[email protected]>

[ Upstream commit 3982db2df3ed4c195e5f0a9a4513545a15901107 ]

pinctrl_gpio_direction_input() / pinctrl_gpio_direction_output() take the pinctrl mutex. This causes a gpiochip operations to need to sleep. Worse yet, the .can_sleep field in the gpiochip is not set. This causes the shared GPIO proxy to trip over, as it uses gpiod_cansleep() to check whether it can use a spinlock or needs a mutex. In this case, it ends up taking a spinlock, then calls pinctrl_gpio_direction_output(), which takes a mutex. This causes a huge warning.

Since the Mediatek hardware has separate clear/set registers, there is no risk of clobbering other bits like with a read-modify-write pattern. Also, once the GPIO function is selected / muxed in, further GPIO operations do not involve pinctrl operations or state. The GPIO direction and level values do not require toggling the pinmux or any other pin config options.

Switch to directly calling mtk_pmx_gpio_set_direction() in the GPIO set direction callbacks to avoid taking the pinctrl mutex. Drop the .gpio_set_direction field in mtk_pmx_ops to signal we are no longer using the pinctrl GPIO layer for setting the direction.

---
 drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/pinctrl/mediatek/pinctrl-mtk-common.c +10 -3
index 3f518dce6d23f..dd2c8aa039385 100644
@@ -802,20 +802,27 @@ static const struct pinmux_ops mtk_pmx_ops = {
 	.get_function_name	= mtk_pmx_get_func_name,
 	.get_function_groups	= mtk_pmx_get_func_groups,
 	.set_mux		= mtk_pmx_set_mux,
-	.gpio_set_direction	= mtk_pmx_gpio_set_direction,
 	.gpio_request_enable	= mtk_pmx_gpio_request_enable,
 };
 
+static int mtk_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
+{
+	struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
+
+	return mtk_pmx_gpio_set_direction(pctl->pctl_dev, NULL, offset, true);
+}
+
 static int mtk_gpio_direction_output(struct gpio_chip *chip,
 					unsigned offset, int value)
 {
+	struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
 	int ret;
 
 	ret = mtk_gpio_set(chip, offset, value);
 	if (ret)
 		return ret;
 
-	return pinctrl_gpio_direction_output(chip, offset);
+	return mtk_pmx_gpio_set_direction(pctl->pctl_dev, NULL, offset, false);
 }
 
 static int mtk_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
@@ -895,7 +902,7 @@ static const struct gpio_chip mtk_gpio_chip = {
 	.request		= gpiochip_generic_request,
 	.free			= gpiochip_generic_free,
 	.get_direction		= mtk_gpio_get_direction,
-	.direction_input	= pinctrl_gpio_direction_input,
+	.direction_input	= mtk_gpio_direction_input,
 	.direction_output	= mtk_gpio_direction_output,
 	.get			= mtk_gpio_get,
 	.set			= mtk_gpio_set,
Signature · 1 line
2.53.0
author maintainer
#102 lore raw

PATCH 101/1250 drm/amd/ras: Fix CPER ring debugfs read overflow

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Xiang Liu <[email protected]>

[ Upstream commit 1e40ef87ffdc291e05ccdade8b9170cc9c1c4249 ]

The legacy CPER debugfs reader can reach the payload path without a valid pointer snapshot. The remaining user byte count is also treated as the ring occupancy in dwords, so reads past the header can copy more than requested.

Take the CPER lock before sampling pointers. Resample rptr/wptr for payload reads, bound the payload copy by available dwords and the remaining user size, and advance the file position for each dword copied.

---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 29 +++++++++++++++++-------
 1 file changed, 21 insertions(+), 8 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +21 -8
index 304564ec2f59a..431cc39ea0178 100644
@@ -498,8 +498,9 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
 					size_t size, loff_t *pos)
 {
 	struct amdgpu_ring *ring = file_inode(f)->i_private;
-	uint32_t value, result, early[3];
+	u32 value, result, early[3] = { 0 };
 	uint64_t p;
+	u32 avail_dw, start_dw, read_dw;
 	loff_t i;
 	int r;
 
@@ -508,10 +509,10 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
 
 	result = 0;
 
-	if (*pos < 12) {
-		if (ring->funcs->type == AMDGPU_RING_TYPE_CPER)
-			mutex_lock(&ring->adev->cper.ring_lock);
+	if (ring->funcs->type == AMDGPU_RING_TYPE_CPER)
+		mutex_lock(&ring->adev->cper.ring_lock);
 
+	if (*pos < 12) {
 		early[0] = amdgpu_ring_get_rptr(ring) & ring->buf_mask;
 		early[1] = amdgpu_ring_get_wptr(ring) & ring->buf_mask;
 		early[2] = ring->wptr & ring->buf_mask;
@@ -543,13 +544,24 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
 			*pos += 4;
 		}
 	} else {
+		early[0] = amdgpu_ring_get_rptr(ring) & ring->buf_mask;
+		early[1] = amdgpu_ring_get_wptr(ring) & ring->buf_mask;
+
 		p = early[0];
 		if (early[0] <= early[1])
-			size = (early[1] - early[0]);
+			avail_dw = early[1] - early[0];
 		else
-			size = ring->ring_size - (early[0] - early[1]);
+			avail_dw = ring->buf_mask + 1 - (early[0] - early[1]);
 
-		while (size) {
+		start_dw = (*pos > 12) ? ((*pos - 12) >> 2) : 0;
+		if (start_dw >= avail_dw)
+			goto out;
+
+		p = (p + start_dw) & ring->ptr_mask;
+		avail_dw -= start_dw;
+		read_dw = min_t(u32, avail_dw, size >> 2);
+
+		while (read_dw) {
 			if (p == early[1])
 				goto out;
 
@@ -562,9 +574,10 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
 
 			buf += 4;
 			result += 4;
-			size--;
+			read_dw--;
 			p++;
 			p &= ring->ptr_mask;
+			*pos += 4;
 		}
 	}
 
Signature · 1 line
2.53.0
author maintainer
#103 lore raw

PATCH 102/1250 PCI: intel-gw: Enable clock before PHY init

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Florian Eckert <[email protected]>

[ Upstream commit febf9ed3c35e5eec7ea384ebbd55a5296e3ca5e9 ]

To ensure that the boot sequence is correct, the DWC PCIe core clock must be switched on before PHY init call [1]. This changes are based on patched kernel sources of the MaxLinear SDK.

The reason why the MaxLinear SDK is used as a reference here is, that this PCIe DWC IP is used in the URX851 and URX850 SoC. This SoC was originally developed by Intel when they acquired Lantiq’s home networking division in 2015 [2]. In 2020 the home network division was sold to MaxLinear [3]. Since then, this SoC belongs to MaxLinear. They use their own SDK, which runs on kernel version '5.15.x'.

[1] https://github.com/maxlinear/linux/blob/updk_9.1.90/drivers/pci/controller/dwc/pcie-intel-gw.c#L544
[2] https://www.intc.com/news-events/press-releases/detail/364/intel-to-acquire-lantiq-advancing-the-connected-home
[3] https://investors.maxlinear.com/press-releases/detail/395/maxlinear-to-acquire-intels-home-gateway-platform

---
 drivers/pci/controller/dwc/pcie-intel-gw.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/pci/controller/dwc/pcie-intel-gw.c +10 -9
index c21906eced618..8b51eb30112d9 100644
@@ -285,13 +285,9 @@ static int intel_pcie_host_setup(struct intel_pcie *pcie)
 
 	intel_pcie_core_rst_assert(pcie);
 	intel_pcie_device_rst_assert(pcie);
-
-	ret = phy_init(pcie->phy);
-	if (ret)
-		return ret;
-
 	intel_pcie_core_rst_deassert(pcie);
 
+	/* Controller clock must be provided earlier than PHY */
 	ret = clk_prepare_enable(pcie->core_clk);
 	if (ret) {
 		dev_err(pcie->pci.dev, "Core clock enable failed: %d\n", ret);
@@ -300,13 +296,17 @@ static int intel_pcie_host_setup(struct intel_pcie *pcie)
 
 	pci->atu_base = pci->dbi_base + 0xC0000;
 
+	ret = phy_init(pcie->phy);
+	if (ret)
+		goto phy_err;
+
 	intel_pcie_ltssm_disable(pcie);
 	intel_pcie_link_setup(pcie);
 	intel_pcie_init_n_fts(pci);
 
 	ret = dw_pcie_setup_rc(&pci->pp);
 	if (ret)
-		goto app_init_err;
+		goto err;
 
 	dw_pcie_upconfig_setup(pci);
 
@@ -315,7 +315,7 @@ static int intel_pcie_host_setup(struct intel_pcie *pcie)
 
 	ret = dw_pcie_wait_for_link(pci);
 	if (ret)
-		goto app_init_err;
+		goto err;
 
 	/* Enable integrated interrupts */
 	pcie_app_wr_mask(pcie, PCIE_APP_IRNEN, PCIE_APP_IRN_INT,
@@ -323,11 +323,12 @@ static int intel_pcie_host_setup(struct intel_pcie *pcie)
 
 	return 0;
 
-app_init_err:
+err:
+	phy_exit(pcie->phy);
+phy_err:
 	clk_disable_unprepare(pcie->core_clk);
 clk_err:
 	intel_pcie_core_rst_assert(pcie);
-	phy_exit(pcie->phy);
 
 	return ret;
 }
Signature · 1 line
2.53.0
author maintainer
#104 lore raw

PATCH 103/1250 hfsplus: rework hfsplus_readdir() logic

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Viacheslav Dubeyko <[email protected]>

[ Upstream commit 4b0496432844628ad05a5b1efce329a3340174d2 ]

The xfstests' test-case generic/637 fails with error:

FSTYP -- hfsplus
PLATFORM -- Linux/x86_64 hfsplus-testing-0001 6.15.0-rc4+ #8 SMP PREEMPT_DYNAMIC Thu May 1 16:43:22 PDT 2025 MKFS_OPTIONS -- /dev/loop51
MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch

QA output created by 637
entries 7 and 8 have duplicate d_off 8
Found unlinked files in open dir (see xfstests-dev/results//generic/637.full for details)

Debugging of the hfsplus_readdir() logic showed this:

hfsplus: hfsplus_readdir(): 163 ctx->pos 0
hfsplus: hfsplus_readdir(): 189 ctx->pos 1
hfsplus: hfsplus_readdir(): 264 ctx->pos 2, ino 18
hfsplus: hfsplus_readdir(): 264 ctx->pos 3, ino 19
hfsplus: hfsplus_readdir(): 264 ctx->pos 4, ino 28
hfsplus: hfsplus_readdir(): 264 ctx->pos 5, ino 118
hfsplus: hfsplus_readdir(): 264 ctx->pos 6, ino 29
hfsplus: hfsplus_readdir(): 264 ctx->pos 7, ino 30
hfsplus: hfsplus_readdir(): 264 ctx->pos 8, ino 31
hfsplus: hfsplus_readdir(): 304 ctx->pos 8
hfsplus: hfsplus_unlink():420 dir->i_ino 17, inode->i_ino 28
hfsplus: hfsplus_readdir(): 141 ctx->pos 7
hfsplus: hfsplus_readdir(): 264 ctx->pos 7, ino 31
hfsplus: hfsplus_readdir(): 264 ctx->pos 8, ino 32
hfsplus: hfsplus_readdir(): 264 ctx->pos 9, ino 33

It means that hfsplus_readdir() stopped the processing of folder's items on ctx->pos 8, then, item with ino 28 has been deleted and hfsplus_readdir() re-started the logic from ctx->pos 7. As a result, previous and new sets of folder's items have overlapping values for the case of d_off 8.

Currently, HFS+ has very complicated and fragile logic of rd->file->f_pos correction in hfsplus_delete_cat(). This patch removes this logic and it stores the current pos into hfsplus_readdir_data. Finally, if rd->pos == ctx->pos then hfsplus_readdir() tries to find the position in b-tree's node by means of hfsplus_cat_key. This position is used to re-start the folder's content traversal.

sudo ./check generic/637

FSTYP         -- hfsplus
PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 7.1.0-rc1+ #44 SMP PREEMPT_DYNAMIC Mon May  4 15:58:45 PDT 2026
MKFS_OPTIONS  -- /dev/loop51

MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch

generic/637 22s ... 22s
Ran: generic/637
Passed all 1 tests

---
 fs/hfsplus/catalog.c    | 11 -----------
 fs/hfsplus/dir.c        | 28 +++++++++++-----------------
 fs/hfsplus/hfsplus_fs.h |  5 +----
 fs/hfsplus/inode.c      |  2 --
 fs/hfsplus/super.c      |  2 --
 5 files changed, 12 insertions(+), 36 deletions(-)
fs/hfsplus/catalog.c +0 -11
index 32eb1283d7d05..97333ca50ec8f 100644
@@ -332,7 +332,6 @@ int hfsplus_delete_cat(u32 cnid, struct inode *dir, const struct qstr *str)
 	struct super_block *sb = dir->i_sb;
 	struct hfs_find_data fd;
 	struct hfsplus_fork_raw fork;
-	struct list_head *pos;
 	int err, off;
 	u16 type;
 
@@ -390,16 +389,6 @@ int hfsplus_delete_cat(u32 cnid, struct inode *dir, const struct qstr *str)
 		hfsplus_free_fork(sb, cnid, &fork, HFSPLUS_TYPE_RSRC);
 	}
 
-	/* we only need to take spinlock for exclusion with ->release() */
-	spin_lock(&HFSPLUS_I(dir)->open_dir_lock);
-	list_for_each(pos, &HFSPLUS_I(dir)->open_dir_list) {
-		struct hfsplus_readdir_data *rd =
-			list_entry(pos, struct hfsplus_readdir_data, list);
-		if (fd.tree->keycmp(fd.search_key, (void *)&rd->key) < 0)
-			rd->file->f_pos--;
-	}
-	spin_unlock(&HFSPLUS_I(dir)->open_dir_lock);
-
 	err = hfs_brec_remove(&fd);
 	if (err)
 		goto out;
fs/hfsplus/dir.c +11 -17
index 8aeb861969d37..8254d6c92eb94 100644
@@ -185,7 +185,15 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx)
 	}
 	if (ctx->pos >= inode->i_size)
 		goto out;
-	err = hfs_brec_goto(&fd, ctx->pos - 1);
+	rd = file->private_data;
+	if (rd && rd->pos == ctx->pos) {
+		memcpy(fd.search_key, &rd->key, sizeof(struct hfsplus_cat_key));
+		err = hfs_brec_find(&fd, hfs_find_rec_by_key);
+		if (err == -ENOENT)
+			err = hfs_brec_goto(&fd, 1);
+	} else {
+		err = hfs_brec_goto(&fd, ctx->pos - 1);
+	}
 	if (err)
 		goto out;
 	for (;;) {
@@ -261,7 +269,6 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx)
 		if (err)
 			goto out;
 	}
-	rd = file->private_data;
 	if (!rd) {
 		rd = kmalloc(sizeof(struct hfsplus_readdir_data), GFP_KERNEL);
 		if (!rd) {
@@ -269,15 +276,8 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx)
 			goto out;
 		}
 		file->private_data = rd;
-		rd->file = file;
-		spin_lock(&HFSPLUS_I(inode)->open_dir_lock);
-		list_add(&rd->list, &HFSPLUS_I(inode)->open_dir_list);
-		spin_unlock(&HFSPLUS_I(inode)->open_dir_lock);
 	}
-	/*
-	 * Can be done after the list insertion; exclusion with
-	 * hfsplus_delete_cat() is provided by directory lock.
-	 */
+	rd->pos = ctx->pos;
 	memcpy(&rd->key, fd.key, sizeof(struct hfsplus_cat_key));
 out:
 	kfree(strbuf);
@@ -287,13 +287,7 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx)
 
 static int hfsplus_dir_release(struct inode *inode, struct file *file)
 {
-	struct hfsplus_readdir_data *rd = file->private_data;
-	if (rd) {
-		spin_lock(&HFSPLUS_I(inode)->open_dir_lock);
-		list_del(&rd->list);
-		spin_unlock(&HFSPLUS_I(inode)->open_dir_lock);
-		kfree(rd);
-	}
+	kfree(file->private_data);
 	return 0;
 }
 
fs/hfsplus/hfsplus_fs.h +1 -4
index e66773cbb3336..08ed2381c719f 100644
@@ -215,8 +215,6 @@ struct hfsplus_inode_info {
 	sector_t fs_blocks;
 	u8 userflags;		/* BSD user file flags */
 	u32 subfolders;		/* Subfolder count (HFSX only) */
-	struct list_head open_dir_list;
-	spinlock_t open_dir_lock;
 	loff_t phys_size;
 
 	struct inode vfs_inode;
@@ -266,8 +264,7 @@ struct hfs_find_data {
 };
 
 struct hfsplus_readdir_data {
-	struct list_head list;
-	struct file *file;
+	loff_t pos;
 	struct hfsplus_cat_key key;
 };
 
fs/hfsplus/inode.c +0 -2
index 7e6cc4dde9f26..ab1c343955b10 100644
@@ -459,8 +459,6 @@ struct inode *hfsplus_new_inode(struct super_block *sb, struct inode *dir,
 	simple_inode_init_ts(inode);
 
 	hip = HFSPLUS_I(inode);
-	INIT_LIST_HEAD(&hip->open_dir_list);
-	spin_lock_init(&hip->open_dir_lock);
 	mutex_init(&hip->extents_lock);
 	atomic_set(&hip->opencnt, 0);
 	hip->extent_state = 0;
fs/hfsplus/super.c +0 -2
index e1e2833f528d1..d031c77fb4eb3 100644
@@ -91,8 +91,6 @@ struct inode *hfsplus_iget(struct super_block *sb, unsigned long ino)
 	HFSPLUS_I(inode)->fs_blocks = 0;
 	HFSPLUS_I(inode)->userflags = 0;
 	HFSPLUS_I(inode)->subfolders = 0;
-	INIT_LIST_HEAD(&HFSPLUS_I(inode)->open_dir_list);
-	spin_lock_init(&HFSPLUS_I(inode)->open_dir_lock);
 	HFSPLUS_I(inode)->phys_size = 0;
 
 	if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID ||
Signature · 1 line
2.53.0
author maintainer
#105 lore raw

PATCH 104/1250 net: phy: motorcomm: use device properties for firmware tuning

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: chunzhi.lin <[email protected]>

[ Upstream commit fffedfece2b46bb99b00740697f6c0c874de3cf4 ]

The Motorcomm PHY driver reads optional firmware properties via of_property_read_*() from phydev->mdio.dev.of_node. This works for Device Tree based systems, but causes ACPI platforms to ignore the same properties when they are supplied through _DSD.

As a result, ACPI-described Motorcomm PHY devices fall back to default settings instead of applying firmware-provided tuning such as rx/tx internal delay, drive strength, clock output frequency, and optional boolean controls like auto-sleep-disabled, keep-pll-enabled, and tx clock inversion.

Switch these lookups to device_property_read_*() so the driver uses the generic firmware node interface and can consume the same property names from either Device Tree or ACPI.

This keeps the existing DT behavior unchanged while allowing ACPI platforms to honor PHY configuration from firmware.

We have completed testing on Sophgo RISC-V architecture server SD3-10. This server has a 64-core Thead C920 CPU whose DWMAC is connected to Motorcomm's PHY YT8531. This server supports UEFI boot and it would like to use the ACPI table.

---
 drivers/net/phy/motorcomm.c | 41 ++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 21 deletions(-)
drivers/net/phy/motorcomm.c +20 -21
index b49897500a592..b76011b227c46 100644
@@ -10,7 +10,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/phy.h>
-#include <linux/of.h>
+#include <linux/property.h>
 
 #define PHY_ID_YT8511		0x0000010a
 #define PHY_ID_YT8521		0x0000011a
@@ -843,12 +843,12 @@ static u32 ytphy_get_delay_reg_value(struct phy_device *phydev,
 				     u16 *rxc_dly_en,
 				     u32 dflt)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	int tb_size_half = tb_size / 2;
 	u32 val;
 	int i;
 
-	if (of_property_read_u32(node, prop_name, &val))
+	if (device_property_read_u32(dev, prop_name, &val))
 		goto err_dts_val;
 
 	/* when rxc_dly_en is NULL, it is get the delay for tx, only half of
@@ -992,12 +992,12 @@ static int yt8531_get_ds_map(struct phy_device *phydev, u32 cur)
 
 static int yt8531_set_ds(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	u32 ds_field_low, ds_field_hi, val;
 	int ret, ds;
 
 	/* set rgmii rx clk driver strength */
-	if (!of_property_read_u32(node, "motorcomm,rx-clk-drv-microamp", &val)) {
+	if (!device_property_read_u32(dev, "motorcomm,rx-clk-drv-microamp", &val)) {
 		ds = yt8531_get_ds_map(phydev, val);
 		if (ds < 0)
 			return dev_err_probe(&phydev->mdio.dev, ds,
@@ -1014,7 +1014,7 @@ static int yt8531_set_ds(struct phy_device *phydev)
 		return ret;
 
 	/* set rgmii rx data driver strength */
-	if (!of_property_read_u32(node, "motorcomm,rx-data-drv-microamp", &val)) {
+	if (!device_property_read_u32(dev, "motorcomm,rx-data-drv-microamp", &val)) {
 		ds = yt8531_get_ds_map(phydev, val);
 		if (ds < 0)
 			return dev_err_probe(&phydev->mdio.dev, ds,
@@ -1047,7 +1047,6 @@ static int yt8531_set_ds(struct phy_device *phydev)
  */
 static int yt8521_probe(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
 	struct device *dev = &phydev->mdio.dev;
 	struct yt8521_priv *priv;
 	int chip_config;
@@ -1097,7 +1096,7 @@ static int yt8521_probe(struct phy_device *phydev)
 			return ret;
 	}
 
-	if (of_property_read_u32(node, "motorcomm,clk-out-frequency-hz", &freq))
+	if (device_property_read_u32(dev, "motorcomm,clk-out-frequency-hz", &freq))
 		freq = YTPHY_DTS_OUTPUT_CLK_DIS;
 
 	if (phydev->drv->phy_id == PHY_ID_YT8521) {
@@ -1165,11 +1164,11 @@ static int yt8521_probe(struct phy_device *phydev)
 
 static int yt8531_probe(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	u16 mask, val;
 	u32 freq;
 
-	if (of_property_read_u32(node, "motorcomm,clk-out-frequency-hz", &freq))
+	if (device_property_read_u32(dev, "motorcomm,clk-out-frequency-hz", &freq))
 		freq = YTPHY_DTS_OUTPUT_CLK_DIS;
 
 	switch (freq) {
@@ -1661,7 +1660,7 @@ static int yt8521_resume(struct phy_device *phydev)
  */
 static int yt8521_config_init(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	int old_page;
 	int ret = 0;
 
@@ -1676,7 +1675,7 @@ static int yt8521_config_init(struct phy_device *phydev)
 			goto err_restore_page;
 	}
 
-	if (of_property_read_bool(node, "motorcomm,auto-sleep-disabled")) {
+	if (device_property_read_bool(dev, "motorcomm,auto-sleep-disabled")) {
 		/* disable auto sleep */
 		ret = ytphy_modify_ext(phydev, YT8521_EXTREG_SLEEP_CONTROL1_REG,
 				       YT8521_ESC1R_SLEEP_SW, 0);
@@ -1684,7 +1683,7 @@ static int yt8521_config_init(struct phy_device *phydev)
 			goto err_restore_page;
 	}
 
-	if (of_property_read_bool(node, "motorcomm,keep-pll-enabled")) {
+	if (device_property_read_bool(dev, "motorcomm,keep-pll-enabled")) {
 		/* enable RXC clock when no wire plug */
 		ret = ytphy_modify_ext(phydev, YT8521_CLOCK_GATING_REG,
 				       YT8521_CGR_RX_CLK_EN, 0);
@@ -1797,14 +1796,14 @@ static int yt8521_led_hw_control_get(struct phy_device *phydev, u8 index,
 
 static int yt8531_config_init(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	int ret;
 
 	ret = ytphy_rgmii_clk_delay_config_with_lock(phydev);
 	if (ret < 0)
 		return ret;
 
-	if (of_property_read_bool(node, "motorcomm,auto-sleep-disabled")) {
+	if (device_property_read_bool(dev, "motorcomm,auto-sleep-disabled")) {
 		/* disable auto sleep */
 		ret = ytphy_modify_ext_with_lock(phydev,
 						 YT8521_EXTREG_SLEEP_CONTROL1_REG,
@@ -1813,7 +1812,7 @@ static int yt8531_config_init(struct phy_device *phydev)
 			return ret;
 	}
 
-	if (of_property_read_bool(node, "motorcomm,keep-pll-enabled")) {
+	if (device_property_read_bool(dev, "motorcomm,keep-pll-enabled")) {
 		/* enable RXC clock when no wire plug */
 		ret = ytphy_modify_ext_with_lock(phydev,
 						 YT8521_CLOCK_GATING_REG,
@@ -1840,7 +1839,7 @@ static int yt8531_config_init(struct phy_device *phydev)
  */
 static void yt8531_link_change_notify(struct phy_device *phydev)
 {
-	struct device_node *node = phydev->mdio.dev.of_node;
+	struct device *dev = &phydev->mdio.dev;
 	bool tx_clk_1000_inverted = false;
 	bool tx_clk_100_inverted = false;
 	bool tx_clk_10_inverted = false;
@@ -1848,17 +1847,17 @@ static void yt8531_link_change_notify(struct phy_device *phydev)
 	u16 val = 0;
 	int ret;
 
-	if (of_property_read_bool(node, "motorcomm,tx-clk-adj-enabled"))
+	if (device_property_read_bool(dev, "motorcomm,tx-clk-adj-enabled"))
 		tx_clk_adj_enabled = true;
 
 	if (!tx_clk_adj_enabled)
 		return;
 
-	if (of_property_read_bool(node, "motorcomm,tx-clk-10-inverted"))
+	if (device_property_read_bool(dev, "motorcomm,tx-clk-10-inverted"))
 		tx_clk_10_inverted = true;
-	if (of_property_read_bool(node, "motorcomm,tx-clk-100-inverted"))
+	if (device_property_read_bool(dev, "motorcomm,tx-clk-100-inverted"))
 		tx_clk_100_inverted = true;
-	if (of_property_read_bool(node, "motorcomm,tx-clk-1000-inverted"))
+	if (device_property_read_bool(dev, "motorcomm,tx-clk-1000-inverted"))
 		tx_clk_1000_inverted = true;
 
 	if (phydev->speed < 0)
Signature · 1 line
2.53.0
author maintainer
#106 lore raw

PATCH 105/1250 drm/gud: Add RCade Display Adapter VID/PID pair

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Sophie D <[email protected]>

[ Upstream commit ac5ac0acf11df04295eb1811066097b7022d6c7f ]

The RCade Display Adapter is a hardware device that allows driving an Arcade CRT display via the GUD protocol. Currently it spoofs an existing GUD VID/PID pair. However, now that it has its own pair assigned, it makes sense to add this to the list of pairs that GUD supports natively.

More information can be found in the project repositories:
https://gitlab.scd31.com/stephen/stm32-usb-vga-adapter-hardware
https://gitlab.scd31.com/stephen/stm32-usb-vga-rcade-adapter

---
 drivers/gpu/drm/gud/gud_drv.c | 1 +
 1 file changed, 1 insertion(+)
drivers/gpu/drm/gud/gud_drv.c +1 -0
index a2000991ecbe4..4f0906f677b2a 100644
@@ -684,6 +684,7 @@ static int gud_resume(struct usb_interface *intf)
 static const struct usb_device_id gud_id_table[] = {
 	{ USB_DEVICE_INTERFACE_CLASS(0x1d50, 0x614d, USB_CLASS_VENDOR_SPEC) },
 	{ USB_DEVICE_INTERFACE_CLASS(0x16d0, 0x10a9, USB_CLASS_VENDOR_SPEC) },
+	{ USB_DEVICE_INTERFACE_CLASS(0x1209, 0x4fb3, USB_CLASS_VENDOR_SPEC) },
 	{ }
 };
 
Signature · 1 line
2.53.0
author maintainer
#107 lore raw

PATCH 106/1250 media: chips-media: wave5: Add range checks for dec_output_info

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ricardo Ribalda <[email protected]>

[ Upstream commit 79aef69bb0903616f4867f0168aea717a11c439c ]

If the driver's dec_output_info contains invalid data the driver can write in invalid memory. Add a range check for that.

This fixes this smatch error:
drivers/media/platform/chips-media/wave5/wave5-vpuapi.c:588 wave5_vpu_dec_get_output_info() error: buffer overflow 'inst->frame_buf' 64 <= 127

---
 .../media/platform/chips-media/wave5/wave5-vpuapi.c   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/media/platform/chips-media/wave5/wave5-vpuapi.c +9 -2
index e94d6ebc9f816..e7ea2f6a99d5b 100644
@@ -559,8 +559,15 @@ int wave5_vpu_dec_get_output_info(struct vpu_instance *inst, struct dec_output_i
 		p_dec_info->num_of_decoding_fbs : p_dec_info->num_of_display_fbs;
 
 	if (info->index_frame_display >= 0 &&
-	    info->index_frame_display < (int)max_dec_index)
-		info->disp_frame = inst->frame_buf[val + info->index_frame_display];
+	    info->index_frame_display < (int)max_dec_index) {
+		u32 idx = val + info->index_frame_display;
+
+		if (WARN_ON(idx >= MAX_REG_FRAME)) {
+			ret = -EINVAL;
+			goto err_out;
+		}
+		info->disp_frame = inst->frame_buf[idx];
+	}
 
 	info->rd_ptr = p_dec_info->stream_rd_ptr;
 	info->wr_ptr = p_dec_info->stream_wr_ptr;
Signature · 1 line
2.53.0
author maintainer
#108 lore raw

PATCH 107/1250 media: video-i2c: use vb2_video_unregister_device on driver removal

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Arash Golgol <[email protected]>

[ Upstream commit 56384b486b80ce4a2bc93689aae49995f908f90d ]

The driver uses vb2_fop_release() as its file release operation, so vb2_video_unregister_device() should be used instead of video_unregister_device() during driver removal.

This ensures that the vb2 queue is properly disconnected before the video device is unregistered.

---
 drivers/media/i2c/video-i2c.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/video-i2c.c +1 -1
index 8909b5173eb42..20889f94610cb 100644
@@ -892,7 +892,7 @@ static void video_i2c_remove(struct i2c_client *client)
 	if (data->chip->set_power)
 		data->chip->set_power(data, false);
 
-	video_unregister_device(&data->vdev);
+	vb2_video_unregister_device(&data->vdev);
 }
 
 #ifdef CONFIG_PM
Signature · 1 line
2.53.0
author maintainer
#109 lore raw

PATCH 108/1250 bus: mhi: host: pci_generic: Round up nr_irqs to power of two

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Javier Achirica <[email protected]>

[ Upstream commit 86f6dc05ea051fa03ebc03174bc00f734593465d ]

When an MHI device uses standard MSI, the PCI core requires the allocated number of vectors to be a strict power of two. But devices will only ask for the irqs they need, so they might not be properly aligned.

Make sure a power-of-2 number of vectors is requested.

---
 drivers/bus/mhi/host/pci_generic.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/bus/mhi/host/pci_generic.c +2 -1
index 646f3bcdc636a..a5b47728f9aba 100644
@@ -1139,7 +1139,8 @@ static int mhi_pci_get_irqs(struct mhi_controller *mhi_cntrl,
 	 */
 	mhi_cntrl->nr_irqs = 1 + mhi_cntrl_config->num_events;
 
-	nr_vectors = pci_alloc_irq_vectors(pdev, 1, mhi_cntrl->nr_irqs, PCI_IRQ_MSIX | PCI_IRQ_MSI);
+	nr_vectors = pci_alloc_irq_vectors(pdev, 1, roundup_pow_of_two(mhi_cntrl->nr_irqs),
+					   PCI_IRQ_MSIX | PCI_IRQ_MSI);
 	if (nr_vectors < 0) {
 		dev_err(&pdev->dev, "Error allocating MSI vectors %d\n",
 			nr_vectors);
Signature · 1 line
2.53.0
author maintainer
#110 lore raw

PATCH 109/1250 drm/panel-edp: Add AUO B133HAN06.6 and BOE NV133FHM-N4F V8.0

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Chen-Yu Tsai <[email protected]>

[ Upstream commit 5dd1ff95c623b8118ccaae3242119b8552f7b98f ]

These two panels are found in MT8195 Dojo, a.k.a. the HP Chromebook x360 13b-ca0xxx laptop.

Only the BOE entry was tested on an actual device. The AUO entry is solely based on the provided datasheet.

raw EDIDs:

AUO B133HAN06.6 (from the datasheet)

00 ff ff ff ff ff ff 00 06 af 8f cb 00 00 00 00 2f 1d 01 04 95 1d 11 78 03 93 05 92 58 59 90 29 1d 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 14 37 80 b8 70 38 24 40 10 10 3e 00 25 a5 10 00 00 18 b8 24 80 b8 70 38 24 40 10 10 3e 00 25 a5 10 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 10 48 ff 0f 3c 7d 14 0e 1d 7d 20 20 20 00 77

BOE NV133FHM-N4F V8.0 (from an actual panel)

00 ff ff ff ff ff ff 00 09 e5 25 0a 00 00 00 00 2c 1f 01 04 95 1d 11 78 03 28 65 97 59 54 8e 27 1e 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 a4 39 80 c8 70 38 50 40 30 20 36 00 26 a5 10 00 00 1a 6d 26 80 c8 70 38 50 40 30 20 36 00 26 a5 10 00 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 0d 40 ff 0a 3c 7d 0f 0f 1f 7d 00 00 00 00 d2

---
 drivers/gpu/drm/panel/panel-edp.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/panel/panel-edp.c +2 -0
index cd738fa199288..a8f327553e62e 100644
@@ -1931,6 +1931,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc4b4, &delay_200_500_e50, "B116XAT04.1"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc7ad, &delay_200_500_e50, "B140HAN07.7"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xc9a8, &delay_200_500_e50, "B140QAN08.H"),
+	EDP_PANEL_ENTRY('A', 'U', 'O', 0xcb8f, &delay_200_500_e50, "B133HAN06.6"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xcdba, &delay_200_500_e50, "B140UAX01.2"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xd497, &delay_200_500_e50, "B120XAN01.0"),
 	EDP_PANEL_ENTRY('A', 'U', 'O', 0xf390, &delay_200_500_e50, "B140XTN07.7"),
@@ -1980,6 +1981,7 @@ static const struct edp_panel_entry edp_panels[] = {
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x09ae, &delay_200_500_e200, "NT140FHM-N45"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x09dd, &delay_200_500_e50, "NT116WHM-N21"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a1b, &delay_200_500_e50, "NV133WUM-N63"),
+	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a25, &delay_200_500_e50_po2e200, "NV133FHM-N4F V8.0"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a36, &delay_200_500_e200, "Unknown"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a3e, &delay_200_500_e80_d50, "NV116WHM-N49"),
 	EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a5d, &delay_200_500_e50, "NV116WHM-N45"),
Signature · 1 line
2.53.0
author maintainer
#111 lore raw

PATCH 110/1250 HID: multitouch: Fix Yoga Book 9 14IAH10 touchscreen misclassification

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Dave Carey <[email protected]>

[ Upstream commit f1bd44b9b62c6fbdaacdd5d115ebe3fe543fcfa1 ]

The Lenovo Yoga Book 9 14IAH10 (83KJ) (17EF:6161) firmware includes a HID_DG_TOUCHPAD application collection designed for the Windows inbox HID driver's Win8 PTP touchpad mode. On Linux the HID_DG_TOUCHSCREEN collections provide the correct direct-touch interface. The presence of the touchpad collection causes hid-multitouch to misclassify the touchscreen nodes as indirect buttonpads, leaving them non-functional.

Within the touchpad collection:
- HID_UP_BUTTON usages trigger the touchscreen-with-buttons heuristic that sets INPUT_MT_POINTER on the touchscreen applications.
- The HID_DG_TOUCHPAD application itself sets INPUT_MT_POINTER via mt_allocate_application(), propagating to all touchscreen nodes.
- A HID_DG_BUTTONTYPE feature (report 0x51) returns MT_BUTTONTYPE_CLICKPAD, setting td->is_buttonpad = true for the entire device.

Additionally, the firmware resets if any USB control request arrives while the CDC-ACM interface is initialising (~1.18 s after enumeration). The Win8 compliance blob (0xff00:0xc5) and Contact Count Max feature reports in the touchscreen collections trigger GET_REPORT calls at probe that hit this window. Surface Switch (0x57) and Button Switch (0x58) feature reports are sent by mt_set_modes() on every input-device open and close, repeatedly hitting this window throughout device lifetime.

The firmware also leaves a persistent ghost contact in its contact buffer (contact ID 2, fixed coordinates, tip always asserted) on every enumeration. This ghost occupies a multitouch slot and prevents KWin from seeing a clean finger-lift, causing stuck touch state. The ghost is cleared when Input Mode is set via HID_REQ_SET_REPORT at probe.

Fix using a report descriptor fixup in mt_report_fixup() and a class definition update:

1. Remove the entire HID_DG_TOUCHPAD application collection. Parsing HID short items from its header to the matching End Collection and closing the gap with memmove eliminates all three BUTTONPAD heuristics and the feature reports within the collection.

2. Neutralize the Win8 compliance blob feature reports remaining in the touchscreen collections by changing Usage Page 0xff00 to 0x0f00, preventing the case 0xff0000c5 branch in mt_feature_mapping() from issuing GET_REPORT.

3. Neutralize the Contact Count Max feature reports by changing usage 0x55 to 0x00; set maxcontacts = 10 in the class definition so the driver uses the correct contact limit without querying the device.

4. Neutralize Surface Switch (0x57) and Button Switch (0x58) feature report usages in the Device Configuration collection so mt_set_modes() does not issue HID_REQ_SET_REPORT for these on every input-device open/close. Input Mode (0x52) is intentionally left intact: the single HID_REQ_SET_REPORT at probe flushes the firmware's contact buffer and clears the persistent ghost contact. By probe time the cdc-acm driver has already satisfied the CDC-ACM init watchdog (~130 ms), so this request arrives safely after the reset window has closed.

5. Add MT_QUIRK_NOT_SEEN_MEANS_UP to the MT_CLS_YOGABOOK9I class so that contacts not present in a frame are released via INPUT_MT_DROP_UNUSED, preventing stale multitouch slots from lingering if the firmware omits a contact from a report.

---
 drivers/hid/hid-multitouch.c | 146 ++++++++++++++++++++++++++++++++++-
 1 file changed, 145 insertions(+), 1 deletion(-)
drivers/hid/hid-multitouch.c +145 -1
index fd1b45ece4544..fbf6f4b9e588f 100644
@@ -440,11 +440,13 @@ static const struct mt_class mt_classes[] = {
 			MT_QUIRK_CONTACT_CNT_ACCURATE,
 	},
 		{ .name = MT_CLS_YOGABOOK9I,
-		.quirks = MT_QUIRK_ALWAYS_VALID |
+		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
+			MT_QUIRK_ALWAYS_VALID |
 			MT_QUIRK_FORCE_MULTI_INPUT |
 			MT_QUIRK_SEPARATE_APP_REPORT |
 			MT_QUIRK_HOVERING |
 			MT_QUIRK_YOGABOOK9I,
+		.maxcontacts = 10,
 		.export_all_inputs = true
 	},
 	{ .name = MT_CLS_EGALAX_P80H84,
@@ -1564,6 +1566,144 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,
 	return 0;
 }
 
+/*
+ * Yoga Book 9 14IAH10 descriptor fixup.
+ *
+ * The device includes a HID_DG_TOUCHPAD application collection designed for
+ * the Windows inbox HID driver's Win8 PTP touchpad mode.  On Linux we want
+ * only the HID_DG_TOUCHSCREEN collections.  The touchpad collection (and the
+ * HID_DG_BUTTONTYPE and Win8 compliance blob features it contains) must be
+ * removed so hid-multitouch does not misclassify the touchscreen nodes as
+ * indirect buttonpads.
+ *
+ * The firmware also resets if any USB control request is received while the
+ * CDC-ACM interface is initialising (~1.18 s after enumeration).  Dropping
+ * the Win8 blob and Contact Count Max feature reports prevents the
+ * GET_REPORT calls that hid-multitouch issues at probe.
+ */
+static void mt_yogabook9_fixup(struct hid_device *hdev, __u8 *rdesc,
+			       unsigned int *size)
+{
+	/* Usage Page (Digitizer), Usage (Touch Pad), Collection (Application) */
+	static const __u8 tp_app_hdr[] = { 0x05, 0x0d, 0x09, 0x05, 0xa1, 0x01 };
+	/* Vendor Usage Page 0xff00 (Win8 compliance blob header) */
+	static const __u8 win8_page[] = { 0x06, 0x00, 0xff };
+	/* Usage (Contact Count Max = 0x55) */
+	static const __u8 ccmax_usage[] = { 0x09, 0x55 };
+	unsigned int i;
+
+	/*
+	 * Step 1: find and remove the Touch Pad application collection.
+	 * Walk HID short items from the collection header to its matching
+	 * End Collection, then close the gap with memmove.
+	 */
+	for (i = 0; i + sizeof(tp_app_hdr) <= *size; i++) {
+		if (memcmp(rdesc + i, tp_app_hdr, sizeof(tp_app_hdr)) == 0) {
+			__u8 *start = rdesc + i;
+			__u8 *coll_end = NULL;
+			__u8 *p = start;
+			unsigned int drop;
+			int depth = 0;
+
+			while (p < rdesc + *size) {
+				__u8 b = *p;
+				int ds = b & 3;
+				int item_len;
+
+				if (b == 0xfe) { /* long item */
+					if (p + 2 >= rdesc + *size)
+						break;
+					item_len = p[1] + 3;
+				} else {
+					item_len = (ds == 3) ? 5 : ds + 1;
+				}
+				if (p + item_len > rdesc + *size)
+					break;
+
+				if ((b & 0xfc) == 0xa0)
+					depth++; /* Collection */
+				else if (b == 0xc0) {
+					depth--; /* End Collection */
+					if (depth == 0) {
+						coll_end = p;
+						break;
+					}
+				}
+				p += item_len;
+			}
+
+			if (!coll_end) {
+				hid_err(hdev,
+					"Yoga Book 9: Touch Pad End Collection not found\n");
+				break;
+			}
+
+			drop = coll_end - start + 1;
+			memmove(start, coll_end + 1, rdesc + *size - coll_end - 1);
+			*size -= drop;
+			hid_dbg(hdev,
+				"Yoga Book 9: dropped Touch Pad collection (%u bytes)\n",
+				drop);
+			break;
+		}
+	}
+
+	/*
+	 * Step 2: neutralize Win8 compliance blob feature reports remaining
+	 * in the touchscreen collections.  Change Usage Page 0xff00 to 0x0f00
+	 * so the case 0xff0000c5 branch in mt_feature_mapping() is not reached
+	 * and no GET_REPORT is issued.
+	 */
+	for (i = 0; i + sizeof(win8_page) <= *size; i++) {
+		if (memcmp(rdesc + i, win8_page, sizeof(win8_page)) == 0) {
+			rdesc[i + 2] = 0x0f; /* 0xff00 -> 0x0f00 */
+			hid_dbg(hdev,
+				"Yoga Book 9: neutralized Win8 blob at offset %u\n",
+				i);
+		}
+	}
+
+	/*
+	 * Step 3: neutralize Contact Count Max feature reports.  Change usage
+	 * 0x55 (HID_DG_CONTACTMAX) to 0x00 so mt_feature_mapping() does not
+	 * issue GET_REPORT.  The class maxcontacts field provides the value.
+	 */
+	for (i = 0; i + sizeof(ccmax_usage) <= *size; i++) {
+		if (memcmp(rdesc + i, ccmax_usage, sizeof(ccmax_usage)) == 0) {
+			rdesc[i + 1] = 0x00;
+			hid_dbg(hdev,
+				"Yoga Book 9: neutralized ContactMax at offset %u\n",
+				i);
+		}
+	}
+
+	/*
+	 * Step 4: neutralize Surface Switch (0x57) and Button Switch (0x58)
+	 * feature report usages in the Device Configuration collection.
+	 * mt_set_modes() issues HID_REQ_SET_REPORT for these on every
+	 * input-device open/close; those repeated control requests hit the
+	 * firmware's CDC-ACM init window and trigger resets.
+	 *
+	 * Input Mode (0x52) is intentionally left intact.  mt_set_modes()
+	 * sends it once at probe to set the device into touchscreen mode,
+	 * which flushes the firmware's contact buffer and clears a persistent
+	 * ghost contact (cid 2, fixed coordinates) that otherwise appears on
+	 * every enumeration.  By probe time cdc_acm has already satisfied the
+	 * CDC-ACM init watchdog (~130 ms), so the single SET_REPORT for Input
+	 * Mode arrives safely after the reset window has closed.
+	 */
+	for (i = 0; i + 2 <= *size; i++) {
+		if (rdesc[i] == 0x09 &&
+		    (rdesc[i + 1] == 0x57 ||
+		     rdesc[i + 1] == 0x58)) {
+			hid_dbg(hdev,
+				"Yoga Book 9: neutralized set-modes usage 0x%02x at offset %u\n",
+				rdesc[i + 1], i);
+			rdesc[i + 1] = 0x00;
+		}
+	}
+}
+
 static const __u8 *mt_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 			     unsigned int *size)
 {
@@ -1593,6 +1733,10 @@ got: %x\n",
 		}
 	}
 
+	if (hdev->vendor == USB_VENDOR_ID_LENOVO &&
+	    hdev->product == USB_DEVICE_ID_LENOVO_YOGABOOK9I)
+		mt_yogabook9_fixup(hdev, rdesc, size);
+
 	return rdesc;
 }
 
Signature · 1 line
2.53.0
author maintainer
#112 lore raw

PATCH 111/1250 wifi: rtw89: phy: check length before parsing PHY status IE

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Ping-Ke Shih <[email protected]>

[ Upstream commit 884495c39de1a02f42bd40051b921e2311d6ac91 ]

Hardware might report PHY status IE with unexpected length, and parser might access out of range. Check the length ahead.

---
 drivers/net/wireless/realtek/rtw89/core.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/wireless/realtek/rtw89/core.c +3 -1
index fa277c8e899fd..def596703c371 100644
@@ -2026,13 +2026,15 @@ static int rtw89_core_rx_parse_phy_sts(struct rtw89_dev *rtwdev,
 		const struct rtw89_phy_sts_iehdr *iehdr = pos;
 
 		ie_len = rtw89_core_get_phy_status_ie_len(rtwdev, iehdr);
-		rtw89_core_process_phy_status_ie(rtwdev, iehdr, phy_ppdu);
 		pos += ie_len;
 		if (pos > end || ie_len == 0) {
 			rtw89_debug(rtwdev, RTW89_DBG_TXRX,
 				    "phy status parse failed\n");
+
 			return -EINVAL;
 		}
+
+		rtw89_core_process_phy_status_ie(rtwdev, iehdr, phy_ppdu);
 	}
 
 	rtw89_chip_convert_rpl_to_rssi(rtwdev, phy_ppdu);
Signature · 1 line
2.53.0
author maintainer
#113 lore raw

PATCH 112/1250 net: dsa: realtek: rtl8365mb: add support for RTL8367SB

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Mieczyslaw Nalewaj <[email protected]>

[ Upstream commit 28702a215c96917d85558ad6309a57ab224808c0 ]

Add chip info entry for the Realtek RTL8367SB switch. This device has chip ID 0x6367 and version 0x0010. It exposes two external interfaces:
port 6 supports MII, TMII, RMII, RGMII, SGMII and HSGMII, while port 7 supports MII, TMII, RMII and RGMII. Use the existing 8365MB-VC jam table for initialization.

---
 drivers/net/dsa/realtek/rtl8365mb.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
drivers/net/dsa/realtek/rtl8365mb.c +14 -0
index e10a789e22022..c806a24dcd031 100644
@@ -544,6 +544,20 @@ static const struct rtl8365mb_chip_info rtl8365mb_chip_infos[] = {
 		.jam_table = rtl8365mb_init_jam_8365mb_vc,
 		.jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc),
 	},
+	{
+		.name = "RTL8367SB",
+		.chip_id = 0x6367,
+		.chip_ver = 0x0010,
+		.extints = {
+			{ 6, 1, PHY_INTF(MII) | PHY_INTF(TMII) |
+				PHY_INTF(RMII) | PHY_INTF(RGMII) |
+				PHY_INTF(SGMII) | PHY_INTF(HSGMII) },
+			{ 7, 2, PHY_INTF(MII) | PHY_INTF(TMII) |
+				PHY_INTF(RMII) | PHY_INTF(RGMII) },
+		},
+		.jam_table = rtl8365mb_init_jam_8365mb_vc,
+		.jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc),
+	},
 	{
 		.name = "RTL8367RB-VB",
 		.chip_id = 0x6367,
Signature · 1 line
2.53.0
author maintainer
#114 lore raw

PATCH 113/1250 integrity: Check for NULL returned by asymmetric_key_public_key

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Stefan Berger <[email protected]>

[ Upstream commit c93a5f038ccc11ed8558ce642f62d5ede701a348 ]

Check for a NULL pointer returned by asymmetric_key_public_key and return -ENOKEY in this case.

---
 security/integrity/digsig_asymmetric.c | 4 ++++
 1 file changed, 4 insertions(+)
security/integrity/digsig_asymmetric.c +4 -0
index 457c0a396caf3..17219424a34dd 100644
@@ -108,6 +108,10 @@ int asymmetric_verify(struct key *keyring, const char *sig,
 	pks.hash_algo = hash_algo_name[hdr->hash_algo];
 
 	pk = asymmetric_key_public_key(key);
+	if (!pk) {
+		ret = -ENOKEY;
+		goto out;
+	}
 	pks.pkey_algo = pk->pkey_algo;
 	if (!strcmp(pk->pkey_algo, "rsa")) {
 		pks.encoding = "pkcs1";
Signature · 1 line
2.53.0
author maintainer
#115 lore raw

PATCH 114/1250 drivers/of: validate live-tree string properties before string use

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Pengpeng Hou <[email protected]>

[ Upstream commit 1e54c31b9cbbb42162e2e4317c18c8a8b350a79d ]

populate_properties() stores live-tree property values as raw byte sequences plus a separate length. They are not globally guaranteed to be NUL-terminated.

of_prop_next_string() iterates string-list properties by walking raw bytes, __of_node_is_type() checks device_type, __of_device_is_status() checks status, and of_alias_from_compatible() reads the first compatible entry. These paths must validate that the relevant string fits within the property bounds before they hand it to C string helpers.

Validate these live-tree string properties within their declared bounds. In particular, make of_prop_next_string() reject malformed entries before returning them, keep the device_type check inside the existing no-lock helper path, and add unit coverage for malformed first and trailing string-list entries.

---
 drivers/of/base.c     | 43 ++++++++++++++++++++++++++-----------------
 drivers/of/property.c | 27 +++++++++++++++++++++------
 drivers/of/unittest.c | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 79 insertions(+), 23 deletions(-)
drivers/of/base.c +26 -17
index 25529235c1a6a..ffd1d51dff38b 100644
@@ -82,9 +82,17 @@ EXPORT_SYMBOL(of_node_name_prefix);
 
 static bool __of_node_is_type(const struct device_node *np, const char *type)
 {
-	const char *match = __of_get_property(np, "device_type", NULL);
+	const char *match;
+	int len;
+
+	if (!np || !type)
+		return false;
+
+	match = __of_get_property(np, "device_type", &len);
+	if (!match || len <= 0 || strnlen(match, len) >= len)
+		return false;
 
-	return np && match && type && !strcmp(match, type);
+	return !strcmp(match, type);
 }
 
 #define EXCLUDED_DEFAULT_CELLS_PLATFORMS ( \
@@ -444,22 +452,22 @@ static bool __of_device_is_status(const struct device_node *device,
 		return false;
 
 	status = __of_get_property(device, "status", &statlen);
-	if (status == NULL)
+	if (!status || statlen <= 0)
+		return false;
+	if (strnlen(status, statlen) >= statlen)
 		return false;
 
-	if (statlen > 0) {
-		while (*strings) {
-			unsigned int len = strlen(*strings);
+	while (*strings) {
+		unsigned int len = strlen(*strings);
 
-			if ((*strings)[len - 1] == '-') {
-				if (!strncmp(status, *strings, len))
-					return true;
-			} else {
-				if (!strcmp(status, *strings))
-					return true;
-			}
-			strings++;
+		if ((*strings)[len - 1] == '-') {
+			if (!strncmp(status, *strings, len))
+				return true;
+		} else {
+			if (!strcmp(status, *strings))
+				return true;
 		}
+		strings++;
 	}
 
 	return false;
@@ -1170,10 +1178,11 @@ EXPORT_SYMBOL(of_find_matching_node_and_match);
 int of_alias_from_compatible(const struct device_node *node, char *alias, int len)
 {
 	const char *compatible, *p;
-	int cplen;
+	int ret;
 
-	compatible = of_get_property(node, "compatible", &cplen);
-	if (!compatible || strlen(compatible) > cplen)
+	ret = of_property_read_string_index(node, "compatible", 0,
+					    &compatible);
+	if (ret)
 		return -ENODEV;
 	p = strchr(compatible, ',');
 	strscpy(alias, p ? p + 1 : compatible, len);
drivers/of/property.c +21 -6
index c1feb631e3831..71322b5bda267 100644
@@ -614,16 +614,31 @@ EXPORT_SYMBOL_GPL(of_prop_next_u32);
 
 const char *of_prop_next_string(const struct property *prop, const char *cur)
 {
-	const void *curv = cur;
+	const char *curv;
+	const char *end;
+	size_t len;
 
-	if (!prop)
+	if (!prop || !prop->value || !prop->length)
 		return NULL;
 
-	if (!cur)
-		return prop->value;
+	curv = cur ? cur : prop->value;
+	end = prop->value + prop->length;
 
-	curv += strlen(cur) + 1;
-	if (curv >= prop->value + prop->length)
+	if (curv < (const char *)prop->value || curv >= end)
+		return NULL;
+
+	if (cur) {
+		len = strnlen(curv, end - curv);
+		if (len >= end - curv)
+			return NULL;
+
+		curv += len + 1;
+		if (curv >= end)
+			return NULL;
+	}
+
+	len = strnlen(curv, end - curv);
+	if (len >= end - curv)
 		return NULL;
 
 	return curv;
drivers/of/unittest.c +32 -0
index 02b780b6e8e25..729813d54c22d 100644
@@ -713,6 +713,7 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
 static void __init of_unittest_property_string(void)
 {
 	const char *strings[4];
+	const struct property *prop;
 	struct device_node *np;
 	int rc;
 
@@ -789,6 +790,37 @@ static void __init of_unittest_property_string(void)
 	strings[1] = NULL;
 	rc = of_property_read_string_array(np, "phandle-list-names", strings, 1);
 	unittest(rc == 1 && strings[1] == NULL, "Overwrote end of string array; rc=%i, str='%s'\n", rc, strings[1]);
+
+	/* of_prop_next_string() tests */
+	prop = of_find_property(np, "phandle-list-names", NULL);
+	strings[0] = of_prop_next_string(prop, NULL);
+	unittest(strings[0] && !strcmp(strings[0], "first"),
+		 "of_prop_next_string() failure; got '%s'\n", strings[0]);
+	strings[0] = of_prop_next_string(prop, strings[0]);
+	unittest(strings[0] && !strcmp(strings[0], "second"),
+		 "of_prop_next_string() failure; got '%s'\n", strings[0]);
+	strings[0] = of_prop_next_string(prop, strings[0]);
+	unittest(strings[0] && !strcmp(strings[0], "third"),
+		 "of_prop_next_string() failure; got '%s'\n", strings[0]);
+	strings[0] = of_prop_next_string(prop, strings[0]);
+	unittest(!strings[0],
+		 "of_prop_next_string() should return NULL at end of list\n");
+
+	prop = of_find_property(np, "unterminated-string", NULL);
+	strings[0] = of_prop_next_string(prop, NULL);
+	unittest(!strings[0],
+		 "of_prop_next_string() should reject unterminated first string\n");
+
+	prop = of_find_property(np, "unterminated-string-list", NULL);
+	strings[0] = of_prop_next_string(prop, NULL);
+	unittest(strings[0] && !strcmp(strings[0], "first"),
+		 "of_prop_next_string() failure; got '%s'\n", strings[0]);
+	strings[0] = of_prop_next_string(prop, strings[0]);
+	unittest(strings[0] && !strcmp(strings[0], "second"),
+		 "of_prop_next_string() failure; got '%s'\n", strings[0]);
+	strings[0] = of_prop_next_string(prop, strings[0]);
+	unittest(!strings[0],
+		 "of_prop_next_string() should reject unterminated trailing string\n");
 }
 
 #define propcmp(p1, p2) (((p1)->length == (p2)->length) && \
Signature · 1 line
2.53.0
author maintainer
#116 lore raw

PATCH 115/1250 drivers/of: validate status properties in reconfig state changes

In reply to Greg Kroah-Hartman

6.18-stable review patch. If anyone has any objections, please let me know.

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

From: Pengpeng Hou <[email protected]>

[ Upstream commit 0b6b12c5dcce16e604d4cde953bef46531b98571 ]

Live-tree reconfiguration properties also carry raw values plus explicit lengths. of_reconfig_get_state_change() currently treats status property values as NUL-terminated strings and feeds them straight into strcmp().

Factor the "okay" / "ok" check out into a helper that first verifies that the property contains a bounded C string within prop->length. Malformed status updates should be treated as not enabling the node.

---
 drivers/of/dynamic.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
drivers/of/dynamic.c +16 -4
index b5be7484fb36d..3e08484d351b4 100644
@@ -74,6 +74,20 @@ static const char *action_names[] = {
 	[OF_RECONFIG_UPDATE_PROPERTY] = "UPDATE_PROPERTY",
 };
 
+static bool of_property_status_ok(const struct property *prop)
+{
+	const char *status;
+
+	if (!prop || !prop->value || prop->length <= 0)
+		return false;
+
+	status = prop->value;
+	if (strnlen(status, prop->length) >= prop->length)
+		return false;
+
+	return !strcmp(status, "okay") || !strcmp(status, "ok");
+}
+
 #define _do_print(func, prefix, action, node, prop, ...) ({	\
 	func("changeset: " prefix "%-15s %pOF%s%s\n",		\
 	     ##__VA_ARGS__, action_names[action], node,		\
@@ -135,11 +149,9 @@ int of_reconfig_get_state_change(unsigned long action, struct of_reconfig_data *
 
 	if (prop && !strcmp(prop->name, "status")) {
 		is_status = 1;
-		status_state = !strcmp(prop->value, "okay") ||
-			       !strcmp(prop->value, "ok");
+		status_state = of_property_status_ok(prop);
 		if (old_prop)
-			old_status_state = !strcmp(old_prop->value, "okay") ||
-					   !strcmp(old_prop->value, "ok");
+			old_status_state = of_property_status_ok(old_prop);
 	}
 
 	switch (action) {
Signature · 1 line
2.53.0