Skip to contentSkip to conversation

7.2.6-rc1 review

PATCH Applied Greg Kroah-Hartman 19 participants 1,845 messages Sep 12 – Sep 16 Page 1 of 14

Subsystems (3)
lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

cover 7.2.6-rc1 review

This is the start of the stable review cycle for the 7.2.6 release. There are 1815 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 Mon, 14 Sep 2026 06:54:17 +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/v7.x/stable-review/patch-7.2.6-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-7.2.y
and the diffstat can be found below.

thanks,

greg k-h

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

Greg Kroah-Hartman <[email protected]>

    Linux 7.2.6-rc1

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

Pavel Begunkov <[email protected]>
tcp: reject non zerocopy devmem tx

Steffen Klassert <[email protected]>
Revert "esp: do not unref managed frag pages in esp_ssg_unref()"

Ben Cressey <[email protected]>
dm-integrity: fix buffer overflow with keyed discard

Jamal Hadi Salim <[email protected]>
net/sched: sch_htb: limit htb_classify inner-class filter hops

Jiayuan Chen <[email protected]>
tcp: fix corruption of urgent data on multi-segment retransmit

Deepanshu Kartikey <[email protected]>
usb: atm: usbatm: fix invalid ci_range initialization

bui duc phuc <[email protected]>
net: fec: only stop PTP if it was initialized

Eric Dumazet <[email protected]>
slip: remove slip_hangup() to fix use-after-free in slip_receive_buf()

Jamal Hadi Salim <[email protected]>
net/sched: bound qdisc_pkt_len to prevent qdisc soft lockup

Edoardo Pinci <[email protected]>
net: dsa: mxl862xx: enable assisted learning on CPU port

Pascal Kneuper <[email protected]>
net: stmmac: restore NET_IP_ALIGN in the RX DMA offset

Lorenzo Bianconi <[email protected]>
net: stmmac: drop gso_enabled_types and rely on netdev features

Maxime Chevallier <[email protected]>
net: stmmac: selftests: Don't test flow control for small rx fifos

Maxime Chevallier <[email protected]>
net: stmmac: selftests: Account for the UC filter list for filtering tests

Maxime Chevallier <[email protected]>
net: stmmac: dwxgmac: Account for the primary MAC address for UC filtering

Maxime Chevallier <[email protected]>
net: stmmac: dwmac4: Account for the primary MAC address for UC filtering

Maxime Chevallier <[email protected]>
net: stmmac: dwmac1000: Account for the primary MAC address for UC filtering

Maxime Chevallier <[email protected]>
net: stmmac: selftests: Check multiple MMC counters

Anoop Vijay <[email protected]>
drm/xe/sysctrl: Read mailbox phase bit from hardware

Riana Tauro <[email protected]>
drm/xe/xe_ras: Add support to get error counter value

Riana Tauro <[email protected]>
drm/xe/uapi: Add additional error components to xe drm_ras

Daniel Pawlik <[email protected]>
net: airoha: npu: fix missing streaming DMA mask

Muhammad Usama Anjum <[email protected]>
selftests/arm64: Fix MTE prctl TAP plan

Muhammad Usama Anjum <[email protected]>
selftests/arm64: Treat KSM merge_across_nodes as optional

Muhammad Usama Anjum <[email protected]>
selftests/arm64: Print missing MTE TAP headers

Takashi Iwai <[email protected]>
ALSA: control: Don't add invalid kcontrols to LED layer

Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: skip double clone set expressions on element insert

Pablo Neira Ayuso <[email protected]>
netfilter: x_tables: replace pr_{info,err}() by pr_info_ratelimited()

Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: move hardware offload step after building the chain blob

Alice Mikityanska <[email protected]>
virtio-net: Ensure that TCP packets don't overflow gso_segs

Arvind Yadav <[email protected]>
drm/xe: Reject page faults from non-fault-mode scratch VMs

Balasubramani Vivekanandan <[email protected]>
drm/xe/xe_gt_idle: Add CCS to the powergating info print

Daniele Ceraolo Spurio <[email protected]>

    drm/xe: Do not apply WA 14025883347 to media 3503

Maxime Chevallier <[email protected]>
net: stmmac: selftests: Pass the IP proto mask in the TC selftest

Jiawen Wu <[email protected]>
net: wangxun: use BIT_ULL() to prevent shift overflow on 32-bit archs

Vitaliy Sochnev <[email protected]>
net: phy: air_en8811h: move LED GPIO configuration to config_init

Yifei Chu <[email protected]>
net/smc: release the internal TCP sock on IPPROTO_SMC socket creation failure

bui duc phuc <[email protected]>
net: ethernet: sun4i-emac: Fix IRQ error handling

Shengyu Qu <[email protected]>
ASoC: amd: acp-config: change quirks to cover all ASUS FA401EA variants

Haotian Zhang <[email protected]>
samples/ftrace: Fix kthread_stop() on ERR_PTR in ftrace-direct-multi-modify

Haotian Zhang <[email protected]>
samples/ftrace: Fix kthread_stop() on ERR_PTR in ftrace-direct-modify

Aleksandr Nogikh <[email protected]>
libceph: validate banner payload length

Xiubo Li <[email protected]>
ceph: revalidate ki_pos for O_APPEND writes after cap acquisition

Hongling Zeng <[email protected]>
ceph: Fix ERR_PTR(0) in ceph_mkdir()

HyeongJun An <[email protected]>
ASoC: dapm: Fix off-by-one check on the second enum channel

Fuad Tabba <[email protected]>
of/irq: Fix device node refcount leak in of_irq_get_affinity()

John Johansen <[email protected]>
apparmor: policy_int make sure list heads are initialized before fail path

Jérémy Jean <[email protected]>
crypto: acomp - allocate async request context when cloning

Ruoyu Wang <[email protected]>
tpm: st33zp24: Validate locality read result

Ruoyu Wang <[email protected]>
tpm: st33zp24: Return zero on status read failure

Victor Nogueira <[email protected]>

    net/sched: sch_teql: restore skb->dev on the slave failure path

Jamal Hadi Salim <[email protected]>
net/sched: sfq: clamp quantum to avoid signed overflow soft lockup

Jamal Hadi Salim <[email protected]>
net/sched: hhf: clamp quantum before hhf_change() to avoid overflow

Jamal Hadi Salim <[email protected]>
net/sched: fq_pie: clamp default quantum to avoid signed overflow

Jamal Hadi Salim <[email protected]>
net/sched: sch_codel: clamp default mtu to avoid disabling CoDel

Jamal Hadi Salim <[email protected]>
net/sched: fq_codel: clamp default quantum and mtu

Jamal Hadi Salim <[email protected]>
net/sched: fq: add overflow bounds to quantum and initial quantum

Tetsuo Handa <[email protected]>
net: fix a resource leak in copy_net_ns() error handling path

Mina Almasry <[email protected]>
net: core: check skb_frags_readable before uncloning in skb_copy_ubufs

Eric Dumazet <[email protected]>
net/sched: act_skbmod: fix length calculations and avoid invalid header warnings

Karl Mehltretter <[email protected]>
selftests/proc: make proc-maps-race work with READ_IMPLIES_EXEC

Liam R. Howlett (Oracle) <[email protected]>
maple_tree: fix argument name in header

Liam R. Howlett (Oracle) <[email protected]>
maple_tree: catch race in mas_alloc_cyclic()

Usama Arif <[email protected]>
mm/memcontrol: avoid false sharing between vmstats and events

Hongfu Li <[email protected]>
selftests/mm: fix read_file() return value check

Muhammad Usama Anjum <[email protected]>
selftests/mm: skip COW tmpfile cases when fallocate() is unsupported

Ze Tan <[email protected]>
smb/client: preserve open info type across compound queries

Frank Sorenson <[email protected]>
cifs: fix clearing stats for fastest execution of each smb2 command

Sai Krishna <[email protected]>
octeontx2-af: fix cn20k mailbox lifetime on repeated rvu_mbox_init()

Suman Ghosh <[email protected]>
octeontx2-pf: fix NULL deref of af_xdp_zc_qidx on rep setup

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

Long Li <[email protected]>
net: mana: Cap MSI-X vectors to the device MSI-X table size

Victor Nogueira <[email protected]>
net/sched: act_ife: Only operate on Ethernet frames

Wei Fang <[email protected]>
net: enetc: restore RX ring congestion mode for ENETC v4

Wei Fang <[email protected]>
net: enetc: remove invalid code from enetc4_pl_mac_link_up()

Wei Fang <[email protected]>
net: enetc: improve MAFT entry management with bitmap tracking

Wei Fang <[email protected]>
net: enetc: convert ndo_set_rx_mode() to ndo_set_rx_mode_async()

Wei Fang <[email protected]>
net: enetc: extract common helpers for MAC hash filter configuration

Wei Fang <[email protected]>
net: enetc: extract common helpers for MAC promiscuous mode setting

Wei Fang <[email protected]>
net: enetc: restore RX ring congestion mode after ring reconfiguration

Naveen Mamindlapalli <[email protected]>
octeontx2-af: Fix TL3/TL2 link config ENA clearing

Xiang Mei <[email protected]>

    net: qualcomm: rmnet: restore skb->dev on deaggregated frames

Anshumali Gaur <[email protected]>
octeontx2-vf: fix workqueue and netdev race in probe/remove

Anshumali Gaur <[email protected]>
octeontx2-af: fix out-of-bounds read setting MSI-X irq affinity

Anshumali Gaur <[email protected]>
octeontx2-af: fix NULL deref in NIX TM tree debugfs read path

Cen Zhang (Microsoft) <[email protected]>
gtp: add synchronize_net() in gtp_newlink() error path to prevent use-after-free

Stanislav Fomichev <[email protected]>
xsk: honor XDP_TX_METADATA in zero-copy path

Stanislav Fomichev <[email protected]>
xsk: align TX metadata layout across ABIs

Radek Podgorny <[email protected]>
Bluetooth: do not leak an hci_conn when a second LE connect is rejected

Hyunwoo Kim <[email protected]>
Bluetooth: RFCOMM: Validate MTU in rfcomm_apply_pn() to prevent infinite loop

Ali Ahmet Memis <[email protected]>
Bluetooth: btnxpuart: Validate the FW dump header length

Pauli Virtanen <[email protected]>
Bluetooth: hci_sync: add conditional locking annotations

Chris Lu <[email protected]>
Bluetooth: btmtksdio: Fix out-of-bounds DMA read in the TX path

Chris Lu <[email protected]>
Bluetooth: btmtksdio: Take exclusive ownership of the SKB before TX

Ismail Tarim <[email protected]>
Bluetooth: btmtk: Do not discard the subsystem reset timeout

Ismail Tarim <[email protected]>
Bluetooth: btmtk: Do not report success when subsys reset fails

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: fix race l2cap_sock_cleanup_listen() vs. put_chan

Pavel Shpakovskiy <[email protected]>

    Bluetooth: mgmt: fix 'hdev->discovery.uuids' NULL dereference

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: reject accept queue add unless BT_LISTEN

Pauli Virtanen <[email protected]>

    Bluetooth: L2CAP: access chan->conn safely in get/setsockopt

Seongjae Jeong <[email protected]>
f2fs: use adjusted write range after f2fs_write_checks()

Vladimir Murzin <[email protected]>
arm64: process: Fix context switching MTE store-only tag check

Wei-Lin Chang <[email protected]>
arm64: ptdump: Make note_page_flush() range aware

Bernd Schubert <[email protected]>
fuse: Fix the condition to enable over-io-uring

Joanne Koong <[email protected]>

    fuse: use release/acquire for fch->initialized

Baokun Li <[email protected]>
fuse: invalidate the correct range after O_APPEND direct write

Geert Uytterhoeven <[email protected]>
erofs: Fix EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS default logic

Dan Carpenter <[email protected]>
scsi: qla2xxx: Fix an loop timeout test

Michael Kelley <[email protected]>
Drivers: hv: vmbus: Skip VMBus module cleanup for non-nested root partition

Giuseppe Piscitelli <[email protected]>
net/sched: sch_cake: fix autorate reconfiguration throttling

Jian Shen <[email protected]>
net: hibmcge: fix page_pool DMA direction mismatch

Eric Dumazet <[email protected]>
net_sched: sch_fq: fix pacing delay underflow with pacing offload

Rong Zhang <[email protected]>
net: page_pool: Remove zone/policy GFP flags when allocating XArray entries

Jiawen Wu <[email protected]>
net: libwx: fix concurrent bitmap overwrite in PTP setup

Jiawen Wu <[email protected]>
net: txgbe: fix MISC interrupt unmasking in non-MSI-X mode and device shutdown

Daniel Machon <[email protected]>
net: sparx5: fix sleep in atomic context in MAC table access

Daniel Machon <[email protected]>
net: microchip: vcap: use port number instead of netdev name for debugfs

Jamal Hadi Salim <[email protected]>
net/sched: account classifier filter allocations to memcg

Wei Fang <[email protected]>
ptp: netc: fix period truncation and potential divide-by-zero in PEROUT

Thomas Walsh <[email protected]>
bnxt_en: Gate TPH enablement behind BNXT_SUPPORTS_QUEUE_API check

Guenter Roeck <[email protected]>
bnxt_en: Fix call to hardware monitoring event handler

Julian Braha <[email protected]>
ASoC: fix unmet dependencies on PPC_BESTCOMM and SND_SOC_AC97_BUS

Cosmo Chou <[email protected]>
rtc: pcf85363: Add error checking to regmap calls in probe()

Junrui Luo <[email protected]>
NFSv4/pnfs: key the data server cache on the NFS version

Junrui Luo <[email protected]>
NFSv4.2: fix LAYOUTSTATS send buffer exhaustion

Jérémy Jean <[email protected]>
NFSv4.1: zero referring call lists before decoding

Nikolay Aleksandrov <[email protected]>
vxlan: fix reading neigh ha

Nikolay Aleksandrov <[email protected]>
net: bridge: arp/nd proxy: fix reading neigh ha

Mahanta Jambigi <[email protected]>
net/smc: free pending qentry in smc_llc_flow_stop() before memset

Mahanta Jambigi <[email protected]>
net/smc: free stashed qentry before overwrite in REQ_ADD_LINK to ADD_LINK transition

Li, Yifan <[email protected]>
powercap: intel_rapl: Sign-extend the PMU delta on counter wraparound

Jamal Hadi Salim <[email protected]>
net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue

Mina Almasry <[email protected]>
net: tcp: block mixing readable and unreadable frags

Eric Dumazet <[email protected]>
inetpeer: randomize RB-tree node comparison using SipHash

Eric Dumazet <[email protected]>
ip6mr: do not clone dst in ip6mr_cache_report()

Pengpeng Hou <[email protected]>
net: qlcnic: validate unified ROM sections before loading

Tetsuo Handa <[email protected]>
net: add missing ref_tracker_dir_exit() to net_passive_dec()

Cen Zhang (Microsoft) <[email protected]>
ipv6: avoid divide by zero in rt6_multipath_rebalance

Eric Dumazet <[email protected]>
netdevsim: update queue NAPI association on queue reset

Ruoyu Wang <[email protected]>
net: ipa: balance runtime PM reference on remove error

Marek Czernohous <[email protected]>
forcedeth: stop the tx_timeout register dump past the requested window

Or Har-Toov <[email protected]>
net/mlx5: E-Switch, preserve max tx speed on vport state modification

Or Har-Toov <[email protected]>
net/mlx5: Move vport DOWN state check out of mlx5_query_vport_max_tx_speed()

Mark Bloch <[email protected]>
net/mlx5: E-Switch, use state lock for vport state changes

Fan Ye <[email protected]>
net: thunderbolt: Count delivered packets in rx_packets and rx_bytes

Victor Nogueira <[email protected]>
net/sched: add get_fill_size callbacks for actions missing them

Ruoyu Wang <[email protected]>
net: bridge: Reject descending VLAN tunnel ranges

Cen Zhang (Microsoft) <[email protected]>
xsk: fix NULL pointer dereference in __xsk_rcv()

Rustam Adilov <[email protected]>
irqchip/irq-realtek-rtl: Use readl_be()/writel_be() instead of readl()/writel()

Markus Stockhausen <[email protected]>
irqchip/irq-realtek-rtl: Add mask for interrupt handling

Markus Stockhausen <[email protected]>
irqchip/irq-realtek-rtl: Add interrupt data structure

Markus Stockhausen <[email protected]>
irqchip/irq-realtek-rtl: Split out parent setup code

Namjae Jeon <[email protected]>
smb: server: remove unused DES crypto header

Thomas Huth <[email protected]>
smb: server: Remove obsolete "select CRYPTO_LIB_DES" from Kconfig file

Runyu Xiao <[email protected]>
ALSA: mtpav: shut down output timer before card teardown

Nitin Gote <[email protected]>
drm/xe: don't WARN on kernel job timeout when device already wedged

Geert Uytterhoeven <[email protected]>
spi: amlogic-spisg: Make sure clk_init_data is fully initialized

Serhat Kumral <[email protected]>
RDMA/ucma: Allow path records to exactly fit the output buffer

Dennis Tighe <[email protected]>
ntfs: validate usa_ofs before preserving the update sequence number

Dennis Tighe <[email protected]>
ntfs: fix off-by-one page overflow in ntfs_decompress()

Sebastian Andrzej Siewior <[email protected]>
sched/topology: Add a cpus_read_lock to rebuild_sched_domains()

Haotian Zhang <[email protected]>
ALSA: ice1712: Fix the card leak at probe error with the auto-cleanup

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Defer default SPI and LPI IAFFID programming

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Use logical cpu 0 irs_data for dynamic IST allocation

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Release IRS iomem region on driver init failure

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Fix gicv5_init_common() error paths

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Disable IRSes on probe failures

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Check for NULL LPI domain on domain teardown

Lorenzo Pieralisi <[email protected]>
irqchip/gic-v5: Check get_logical_index() return value in MADT IAFFID parsing

Sascha Bischoff <[email protected]>
irqchip/gic-v5: Synchronize CPU interface disable

Sascha Bischoff <[email protected]>
irqchip/gic-v5: Clear per-CPU IRS data on teardown

Michael Pesa <[email protected]>
irqchip/ast2700-intc: Disable all interrupt merge banks on probe

Geert Uytterhoeven <[email protected]>
clk: visconti: Make sure clk_init_data is fully initialized

Geert Uytterhoeven <[email protected]>
clk: ti: Make sure clk_init_data is fully initialized

Bradley Morgan <[email protected]>
prctl: fix PR_SET_MM_AUXV losing the forced AT_NULL terminator

Karl Mehltretter <[email protected]>
lib/interval_tree: fix allocation warning messages

Linkai Gong <[email protected]>
rtc: gamecube: check return value of devm_rtc_register_device()

Ruoyu Wang <[email protected]>
i2c: ocores: Disable clock on failed resume

Ryan Chen <[email protected]>
irqchip/ast2700-intc: Avoid allocating in the irq_domain activate() callback

Biju Das <[email protected]>
irqchip/renesas-rzg2l: Fix loss of interrupt

Pengpeng Hou <[email protected]>
rtc: zynqmp: Return optional clock lookup errors

Frank Sorenson <[email protected]>
cifs: remove dead size-update blocks in cifs_setattr_unix/nounix

Christopher Lusk <[email protected]>
smb: client: set replay flag on the read send-error retry path

Christopher Lusk <[email protected]>
smb: client: fix request buffer leak in smb2_new_read_req()

ChenXiaoSong <[email protected]>
smb/client: return EOPNOTSUPP for unsupported O_TMPFILE

Surendra Singh Chouhan <[email protected]>
rtc: spacemit: handle regmap_test_bits() error return

Yi Ding <[email protected]>
rtc: pcf8563: fix clock provider leak on unbind

GuoHan Zhao <[email protected]>
virtio: rtc: time out alarm requests

Li RongQing <[email protected]>
vdpa/mlx5: fix wrong list iterated in add_direct_chain error path

Li RongQing <[email protected]>
virtio_pci: fix wrong queue index for admin vq in intx path

Yufeng Wang <[email protected]>
vhost/net: fix clear_user start address in VHOST_GET_FEATURES_ARRAY

Denis V. Lunev <[email protected]>
virtio_balloon: quiesce balloon work before device shutdown

Denis V. Lunev <[email protected]>
virtio_balloon: factor out virtballoon_quiesce()

Denis V. Lunev <[email protected]>
virtio: add virtio_device_shutdown() helper

Linfeng Sun  <[email protected]>
vdpa_sim: fix cleanup after worker creation failure

Michael S. Tsirkin <[email protected]>
virtio_balloon: disable indirect descriptors

Baolin Liu <[email protected]>
ntfs: do not update ctime when setxattr fails

Hyeontae Lee <[email protected]>
ntfs: serialize resident iomap reads with mrec_lock

Joanne Koong <[email protected]>

    ntfs: convert iomap ops to ->iomap_next()

Joanne Koong <[email protected]>

    iomap: add ->iomap_next()

Joanne Koong <[email protected]>
iomap: split iomap_iter() logic into iomap_iter_next()

Namjae Jeon <[email protected]>
ntfs: allow index root relocation

Pisit Preechapramoth <[email protected]>
ntfs: reject unprivileged writes to reserved $LX* xattrs

Namjae Jeon <[email protected]>
ntfs: respect per-file chmod mode over mount masks

Namjae Jeon <[email protected]>
ntfs: apply Windows name checks only with windows_names

Alexandro Calo <[email protected]>
ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()

Namjae Jeon <[email protected]>
ntfs: fix kmap_local_page() usage in compress

Matthew Wilcox (Oracle) <[email protected]>

    ntfs: Remove references to page->__folio_index

Matthew Wilcox (Oracle) <[email protected]>
ntfs: Use zero_user_segment() in handle_bounds_compressed_page()

Matthew Wilcox (Oracle) <[email protected]>
ntfs: Remove use of __folio_index in handle_bounds_compressed_page()

Matthew Wilcox (Oracle) <[email protected]>
ntfs: Inline zero_partial_compressed_page()

Namjae Jeon <[email protected]>
ntfs: rewrite EA stream before updating metadata

Namjae Jeon <[email protected]>
ntfs: remove empty EA attribute pair

Namjae Jeon <[email protected]>
ntfs: validate final EA attribute size

Besar Wicaksono <[email protected]>

    perf vendor events arm64: Fix Tegra410 Olympus event 0x0197

Saurav Sachidanand <[email protected]>
perf vendor events arm64: fix swapped MetricGroup for Tegra410 L1 prefetcher metrics

Jian-Ming Liao <[email protected]>
i3c: mipi-i3c-hci: Fix missing STAT_IBI_STATUS_THLD in PIO mode

Tetsuo Handa <[email protected]>
net: add missing ref_tracker_dir_exit() to alloc_netdev_mqs()

Ruoyu Wang <[email protected]>
bonding: initialize err for empty target lists

Nikolay Kulikov <[email protected]>
mlxbf-bootctl: fix the build error with FIELD_PREP()

Hemanth Selam <[email protected]>
platform/x86/amd/hsmp: Reject negative power cap writes in hwmon

Guangshuo Li <[email protected]>
platform/x86: hp-bioscfg: fix password encoding bounds check

Nguyen Dinh Phi <[email protected]>
vsock: use sock_error() to consume sk_err after a failed connect

Nguyen Dinh Phi <[email protected]>
vsock: don't check the listener's sk_err in vsock_accept()

HyeongJun An <[email protected]>
platform/x86: dell-wmi-sysman: Fix instance ID bounds

Mahanta Jambigi <[email protected]>
net/smc: hash socket only after full initialisation in smc_sk_init()

Karl Mehltretter <[email protected]>
8139cp: fix Rx and Tx not being disabled in cp_suspend

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

Xu Rao <[email protected]>
ALSA: hda: Fix connection list comparison in proc output

Baokun Li <[email protected]>
fuse: check for NULL root inode in fuse_fill_super_submount

Daniel Baluta <[email protected]>
soc: qcom: ubwc: Fix missing include

Baokun Li <[email protected]>
fuse: reject a duplicate fd= mount option

Weiming Shi <[email protected]>

    fs/ntfs3: validate ef->size covers the record's name and value

Konstantin Komarov <[email protected]>
fs/ntfs3: fix out-of-bounds read in read_log_rec_buf()

Baokun Li <[email protected]>
cuse: wait for pending RCU callbacks on module exit

Nikolay Aleksandrov <[email protected]>
net: bridge: vlan: fix inverted default vlan notification

Maximilian Immanuel Brandtner <[email protected]>
tls: fix RX desync on overlapping skbs

Ruoyu Wang <[email protected]>
net: dsa: mv88e6xxx: Fix PCS link check on CMODE read error

Xiang Mei <[email protected]>
vxlan: vnifilter: enforce exact length of GROUP/GROUP6 attributes

Joas Antonio dos Santos <[email protected]>
ipvs: fix integer overflow in ftp helper port/address parsing

Pablo Neira Ayuso <[email protected]>
netfilter: ctnetlink: do not expose expectation DEAD flag

Florian Westphal <[email protected]>
netfilter: ipset: remove need to allocate memory on delete operations

Chao Yu <[email protected]>
f2fs: fix to avoid pinfile fragment on fragment:{block, segment} mode

Chao Yu <[email protected]>

    f2fs: cleanup w/ f2fs_need_rand_{blk, seg, seg_blk}

Anton Protopopov <[email protected]>
virtio_net: Fix resize of the RX ring

Xin Xie <[email protected]>
net: hsr: free learned nodes on device setup failure

Qingfang Deng <[email protected]>
pppox: drain queued packets on channel handoff

Vladimir Oltean <[email protected]>
net: dsa: b53: fix error propagation from b53_fdb_dump()

Junseo Lim <[email protected]>
net: kcm: Hold RCU read lock while running BPF parser

Petr Oros <[email protected]>
dpll: fix NULL deref in dpll_device_ops() during teardown race

Prabu Thayalan <[email protected]>
ionic: fix completion descriptor access with 2x desc size

Eric Joyner <[email protected]>
ionic: add missing dma_rmb() after the completion publish check

Wei Fang <[email protected]>
ptp: netc: skip PEROUT disable if channel is not enabled

Dan Carpenter <[email protected]>
drm/xe: tests: fix error message in xe_migrate_sanity_test()

Fan Gong <[email protected]>
hinic3: Fix skb linearization mismatch and drop skb when skb_checksum_help() failed

Karl Mehltretter <[email protected]>
octeontx2-af: initialize lmac_bmap in rvu_mcs_set_lmac_bmap()

bui duc phuc <[email protected]>
can: m_can: Use of_property_present() for wakeup-source

Jiayuan Chen <[email protected]>
bpf, xdp: move offload check into dev_xdp_install()

Mario Rugiero <[email protected]>
regulator: tps65185: wait for the IC to wake before the first I2C access

Mathieu Dubois-Briand <[email protected]>
clk: ti: mux: resolve parent clocks by DT index, not by name

Onur Özkan <[email protected]>
clk: devres: fix cleanup in devm_clk_get_optional_enabled_with_rate()

Michael Nemanov <[email protected]>
nfs: fix ENXIO on O_CREAT open of existing symlink over NFSv3

Zhansong Gao <[email protected]>
NFSv4: Fix incorrect argument passed to nfs4_delete_lease() in nfs4_add_lease()

Jeuk Kim <[email protected]>
NFSv4/flexfiles: fix NULL dereference for NFSv4.0 data servers

Guangshuo Li <[email protected]>
NFS: Fix delayed delegation return list handling

ZhangGuoDong <[email protected]>
pnfs/blocklayout: Fix device leaks on parse failure

Ruoyu Wang <[email protected]>
NFSv4: remove callback IDR entry on client allocation failure

Arnaud Bonnet <[email protected]>
nfs: refactor pNFS functions using clear_and_wake_up_bit

Arnaud Bonnet <[email protected]>
nfs: replace atomic bitops sequence with clear_and_wake_up_bit helper

Andrii Nakryiko <[email protected]>
selftests/bpf: Retry stat generation in cgroup_iter_memcg

Ze Tan <[email protected]>
smb/server: fix session counter on session removal

Ze Tan <[email protected]>
smb/server: update session counter under sessions table lock

Ze Tan <[email protected]>
smb/server: warn if ksmbd_proc_create() fails

Namjae Jeon <[email protected]>
ksmbd: add procfs monitoring for active shares

Ze Tan <[email protected]>
smb/server: fix session leak in ksmbd_session_register()

Hang Nan <[email protected]>
ksmbd: bound smb_check_perm_dacl() ACE walks by DACL size

Namjae Jeon <[email protected]>
ksmbd: handle encrypted compressed requests

Namjae Jeon <[email protected]>
ksmbd: decrypt requests from expired encrypted sessions

Namjae Jeon <[email protected]>
ksmbd: disconnect on SMB3 decryption failure

Namjae Jeon <[email protected]>
ksmbd: scope session state changes to bound connections

Namjae Jeon <[email protected]>
ksmbd: fix encrypted request lookup on bound channels

Namjae Jeon <[email protected]>
ksmbd: expire SMB sessions when Kerberos tickets expire

Namjae Jeon <[email protected]>
ksmbd: validate SMB2 write offsets

Namjae Jeon <[email protected]>
ksmbd: detach blocked lock requests before freeing

Namjae Jeon <[email protected]>
ksmbd: safely discard unregistered deferred locks

Junseo Lim <[email protected]>
bpf: Reject negative optlen in cgroup getsockopt hook

Andreas Schwab <[email protected]>
m68k: nfcon: Do not call console_is_registered() in nfcon_device()

Junseo Lim <[email protected]>
bpf: Disallow bpf_{g,s}etsockopt() in cgroup UNIX getname hooks

Ojaswin Mujoo <[email protected]>
erofs: fix unused pcluster_pools for higher page sizes

Junseo Lim <[email protected]>
lwt_bpf: Restore reserved headroom after xmit program

Josh Poimboeuf <[email protected]>
objtool/klp: Fix vmlinux klp relocations for EXPORT_SYMBOL_FOR_MODULES()

Gao Xiang <[email protected]>
erofs: guard on-disk algorithm IDs against Z_EROFS_COMPRESSION_MAX

Gao Xiang <[email protected]>
erofs: fix interlaced ztailpacking pclusters

Ilan Dudnik <[email protected]>
ksmbd: defer publishing granted locks to prevent UAF/double-free race

Namjae Jeon <[email protected]>
ksmbd: recognize replayed SMB2 lock sequences

ZhangGuoDong <[email protected]>
smb/server: preserve error status in smb2_handle_negotiate()

ZhangGuoDong <[email protected]>
smb/server: call ksmbd_proc_cleanup() on module init failure

ZhangGuoDong <[email protected]>
smb/server: abort initialization when proc setup fails

ZhangGuoDong <[email protected]>
smb/server: fix invalid pointer dereference in ksmbd_stop_durable_scavenger()

ZhangGuoDong <[email protected]>
smb/server: fix null-ptr-deref in ksmbd_ipc_tree_connect_request()

Namjae Jeon <[email protected]>
ksmbd: serialize oplock close with pending break ownership

Namjae Jeon <[email protected]>
ksmbd: add SMB3 request replay support

Namjae Jeon <[email protected]>
ksmbd: retain connection for pending notify work

Gael Blivet <[email protected]>
ksmbd: defer CHANGE_NOTIFY completion instead of STATUS_NOT_IMPLEMENTED

Gael Blivet <[email protected]>
ksmbd: add AAPL kAAPL_SERVER_QUERY create context support

Gael Blivet <[email protected]>

    ksmbd: fix durable handle v2 default timeout units (60 -> 60000)

Namjae Jeon <[email protected]>
ksmbd: support access-based directory enumeration

Namjae Jeon <[email protected]>
ksmbd: free preauth sessions on connection teardown

Namjae Jeon <[email protected]>
ksmbd: do not advertise unimplemented CA support

Yunseong Kim <[email protected]>
ksmbd: validate ipc response length before dereferencing its fields

Yunseong Kim <[email protected]>
smb: smbdirect: release pending child sockets outside the handler lock

Yunseong Kim <[email protected]>
smb: smbdirect: avoid recursive listen.lock during cleanup

Yunseong Kim <[email protected]>
smb: smbdirect: destroy QP before mem pools on accept failure

Yunseong Kim <[email protected]>
smb: smbdirect: free completion queues with ib_free_cq()

Yunseong Kim <[email protected]>
ksmbd: fix slab-out-of-bounds read in ksmbd_alloc_user()

Enzo Matsumiya <[email protected]>
smb: server: fix leak of ksmbd_ipc_login_request_ext() returned buffer

Guangshuo Li <[email protected]>
ksmbd: Do not skip lock checks for single-byte ranges

Yiyang Chen <[email protected]>
bpf: Check pointer type for all atomic RMW paths

Marius Cristea <[email protected]>
hwmon: (emc1403) Drop hysteresis for low limit temperature

Szymon Wilczek <[email protected]>
hwmon: (coretemp) Fix core_data leak on CPUs without PTS

John Johansen <[email protected]>
apparmor: fix deadlock in complain-mode change_hat

Mike Rapoport (Microsoft) <[email protected]>
selftests/mm: thuge-gen: fix test_shmget() for PAGE_SIZE check

Hongyan Xu <[email protected]>
block: mtip32xx: synchronize ioctls with device removal

Yao Sang <[email protected]>
ublk: avoid teardown retry loop on xarray allocation failure

Yao Sang <[email protected]>
ublk: reject non-power-of-2 zone sizes in SET_PARAMS

Usama Arif <[email protected]>
blk-iocost: clear delay state when freeing policy data

Usama Arif <[email protected]>
blk-iolatency: clear delay state when freeing policy data

Niklas Cassel <[email protected]>
null_blk: serialize configfs attribute updates with device setup

Zizhi Wo <[email protected]>
null_blk: serialize configfs attribute stores with the lock

Zizhi Wo <[email protected]>
null_blk: reject per-device queue resize for shared tag set

Zizhi Wo <[email protected]>
null_blk: free zones array on device power-off

Zizhi Wo <[email protected]>
null_blk: free global tag_set on init error path

Zizhi Wo <[email protected]>
null_blk: register configfs subsystem after creating default devices

Zizhi Wo <[email protected]>
null_blk: use DEFINE_MUTEX for the file-scope mutex

Pengpeng Hou <[email protected]>
mailbox: riscv-sbi-mpxy: validate RPMI notification lengths

Huisong Li <[email protected]>
mailbox: pcc: Fix command timeout due to missed interrupt

Linmao Li <[email protected]>
mailbox: rockchip: disable pclk on probe failure and unbind

Jia Yang <[email protected]>
mailbox: qcom-cpucp: handle NULL data in send_data callback

Jia Yang <[email protected]>
mailbox: qcom-cpucp: fix PREEMPT_RT self-deadlock in IRQ handler

Arnaldo Carvalho de Melo <[email protected]>
perf dso: Replace assert with runtime check in dso__read_symbol()

Arnaldo Carvalho de Melo <[email protected]>
perf dso: Guard against cache underflow on short reads in dso_cache__memcpy()

Arnaldo Carvalho de Melo <[email protected]>
perf dso: Use stored fd error instead of stale errno in file_read() and file_size()

Arnaldo Carvalho de Melo <[email protected]>
perf dso: Guard close() against invalid fd in dso__decompress_kmodule_path()

Arnaldo Carvalho de Melo <[email protected]>

    perf dso: Guard against errno==0 when dso__get_filename() returns NULL

Tejun Heo <[email protected]>
sched_ext: Make SCHED_CLASS_EXT select GENERIC_ALLOCATOR

Tao Cui <[email protected]>
sched_ext/scx_flatcg: Fix cvtime true-up on slice expiry

Tejun Heo <[email protected]>
sched_ext: Drop unlocked scx_rq_clock_invalidate() from scx_root_disable()

Karl Mehltretter <[email protected]>
crypto: lskcipher - propagate errors from unaligned crypt

Zhushuai Yin <[email protected]>
crypto: hisilicon/sec2 - fix CCM algorithm long packet failure

Michal Blaszczyk <[email protected]>
selftests/sched_ext: Fix flaky ddsp failure tests on busy systems

Israel Téllez García <[email protected]>
bpf: Fix pending_pos walk on 32-bit ring position wrap

Ihor Solodrai <[email protected]>
selftests/bpf: Fix selftest build after filter.h update

Rafael J. Wysocki <[email protected]>
ACPI: scan: Use acpi_bus_get_primary_device()

Rafael J. Wysocki <[email protected]>
ACPI: platform: Use acpi_bus_get_primary_device()

Rafael J. Wysocki <[email protected]>
ACPI: bus: Introduce acpi_bus_get_primary_device()

Hongyan Xu <[email protected]>
ACPI: scan: fix bus ID cleanup on device_add() failures

Vincent Donnefort <[email protected]>
ring-buffer: Remove trace_buffer::cpus

Pu Lehui <[email protected]>
riscv, bpf: Fix missing sign-ext for signed 1-byte and 2-byte kfunc args

Mykyta Yatsenko <[email protected]>
bpf: Fix arm64 KASAN false positive after bpf_throw

Andrii Nakryiko <[email protected]>
selftests/bpf: Use ping_command() for IPv6 pings in lwt_ip_encap

Linmao Li <[email protected]>
HID: tmff: Use 64-bit arithmetic for force feedback scaling

Xianglin Lin <[email protected]>
HID: multitouch: reclassify HTIX5288 to WIN_8_FORCE_MULTI_INPUT_NSMU

Pengpeng Hou <[email protected]>
ASoC: SOF: validate topology volume range before allocation

Steven Rostedt <[email protected]>
tracing: Have trace_event_update_all() only handle module that is loading

Karl Mehltretter <[email protected]>
HID: haptic: don't write an uninitialized value to unhandled usages

Aleksandr Nogikh <[email protected]>
ALSA: core: Fix use-after-free in snd_card_do_free()

Zhan Xusheng <[email protected]>
fs/ntfs3: reject out-of-range evcn in mi_enum_attr()

Zhan Xusheng <[email protected]>
fs/ntfs3: fix integer overflow in MFT cluster validation

Puranjay Mohan <[email protected]>
bpf, arm64: Fix stack-passed arguments for indirect trampolines

Jijie Shao <[email protected]>
net: page_pool: fix UAF in __page_pool_release_netmem_dma on xa_cmpxchg race

Bart Van Assche <[email protected]>
scsi: ufs: core: Set task state before io_schedule_timeout()

Chandrakanth Patil <[email protected]>
scsi: mpt3sas: Avoid freeing unallocated PCIe SGL buffers

Eduard Zingerman <[email protected]>
selftests/bpf: Fix for veristat file/prog filters processing

Phillip Lougher <[email protected]>
Squashfs: check block offset is not negative

Krystian Kaniewski <[email protected]>
ocfs2: fix circular locking dependency in ocfs2_init_acl()

ZhengYuan Huang <[email protected]>
ocfs2: validate DIO orphan slot during inode read

ZhengYuan Huang <[email protected]>
ocfs2: validate orphan slot during inode read

Yuan Chen <[email protected]>
bpftool: Fix double close in map dump

Bijan Tabatabai <[email protected]>
x86/pkeys: Fix pkey_alloc() return value when pkeys are not supported

Rui Qi <[email protected]>
selftests/cgroup: Preserve CPU hotplug write errors

Maurizio Lombardi <[email protected]>
nvmet: fix max_qid race between configfs and controller allocation

John Keeping <[email protected]>
ALSA: seq: midi: Serialize input teardown with event_input

Takashi Iwai <[email protected]>
ALSA: seq: midi: Optimize event_input locking with RCU

Yuho Choi <[email protected]>
clocksource/drivers/armada: Unwind timer clock on init failure

Marek Szyprowski <[email protected]>
clocksource/drivers/samsung_pwm: Switch to raw_spinlock_t type

Guangshuo Li <[email protected]>
clocksource/drivers/clps711x: Do not unmap clocksource MMIO

Peter Oberparleiter <[email protected]>
s390/debug: Fix deadlock during unregister

Yuho Choi <[email protected]>
xenbus: Unregister reboot notifier on init failure

Waiman Long <[email protected]>
sched/isolation: Defer freeing of cpumask memblock memory to initcall

Ricardo B. Marlière (SUSE) <[email protected]>
selftests/namespaces: Fix racy pipe handshake in timens and pidns_separate

Hui Zhu <[email protected]>
bpf: Fix UAF in bpf_trampoline_multi_attach_free on update failure

Willem de Bruijn <[email protected]>
selftests: drv-net: so_txtime: fix qdisc replace with handle

Henrik Grimler <[email protected]>
power: supply: bq27xxx: bq27z561: fix invalid AverageEnergy address

Henrik Grimler <[email protected]>
power: supply: bq27xxx: bq28z610: fix invalid AverageEnergy address

Henrik Grimler <[email protected]>
power: supply: bq27xxx: bq27520g4: fix REG_TTES address

Matti Vaittinen <[email protected]>
power: supply: bd99954: Drop bad register fields

Matti Vaittinen <[email protected]>
power: supply: bd71828: Do not hide errors

Matti Vaittinen <[email protected]>
power: supply: bd71828: Drop duplicate power-supply property

Matti Vaittinen <[email protected]>
power: supply: bd71828: Fix current direction

Matti Vaittinen <[email protected]>
power: supply: bd71815: Fix temperature reading

Josh Poimboeuf <[email protected]>
objtool/klp: Fix .kcfi_traps special section extraction

Puranjay Mohan <[email protected]>
objtool/klp: Fix vmlinux .klp.symid link error for .exitcall.exit symbols

Krishna Chaitanya Chundru <[email protected]>
PCI/ASPM: Disable/restore ASPM on every function for multi-function devices

Felix Gu <[email protected]>
spi: img-spfi: don't disable runtime PM on DMA deferred probe

bui duc phuc <[email protected]>
ASoC: spacemit: advertise only DMA-backed DAI streams

Vineet Gupta <[email protected]>
selftests/bpf: vmtest.sh: Preserve command quoting when running in the VM

David Matlack <[email protected]>
selftests: harness: Mark test fixture objects __maybe_unused

Daniel Borkmann <[email protected]>
bpf, s390: Clear fetch destination on faulting arena atomic

Daniel Borkmann <[email protected]>
bpf, arm64: Clear fetch destination on faulting arena atomic

Daniel Borkmann <[email protected]>
bpf, x86: Clear fetch destination on faulting arena atomic

Daniel Borkmann <[email protected]>
bpf: Derive the atomic load register in one place

Daniel Borkmann <[email protected]>
bpf, riscv: Clear fetch destination on faulting arena atomic

Mohammad Abu-Khader <[email protected]>
kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix

Dan Carpenter <[email protected]>
drm/amd/pm: silence uninitialized variable warnings

Arnaldo Carvalho de Melo <[email protected]>
perf build: Remove leftover feature tests for removed cxx and clang support

Julian Braha <[email protected]>
backlight: ktd2801: Fix unmet dependency on GPIOLIB

Junjie Cao <[email protected]>
backlight: aw99706: Validate all DT property values consistently

Charles Keepax <[email protected]>
mfd: cs42l43: Fix regmap defaults ordering

Will Deacon <[email protected]>
arm64/efi: Avoid voluntary preemption with efi_mm installed

Christoph Hellwig <[email protected]>
iomap: iomap_bio_read_folio_range_sync is missing a call to bio_uninit

Karl Mehltretter <[email protected]>
super: fix dying superblock warning messages

Krishna Chaitanya Chundru <[email protected]>
PCI/ASPM: Use pcie_capability_clear_and_set_word() for ASPM disable/restore

Josh Poimboeuf <[email protected]>
objtool/klp: Fix relocations for EXPORT_SYMBOL_FOR_MODULES() symbols

Josh Poimboeuf <[email protected]>
objtool/klp: Don't match local symbols against exports

Josh Poimboeuf <[email protected]>
objtool/klp: Fix cross-module klp relocation section naming

Takashi Sakamoto <[email protected]>
firewire: core: fix memory leak in error path of build_tree()

Takashi Sakamoto <[email protected]>
firewire: core: validate parent port count before allocating nodes in build_tree()

Takashi Sakamoto <[email protected]>
firewire: core: consolidate port counting in build_tree()

Takashi Sakamoto <[email protected]>
firewire: core: add KUnit tests for failure of tree building

Takashi Sakamoto <[email protected]>
firewire: core: add KUnit tests for successful tree building

Takashi Sakamoto <[email protected]>
firewire: core: add KUnit test skeleton for node tree

Ran Hongyun <[email protected]>
UBI: fix two issues in the ubi.mtd MODULE_PARM_DESC

Rosen Penev <[email protected]>
ASoC: xilinx: formatter_pcm: fix stream_data leak on open error

Yuho Choi <[email protected]>
mtd: ubi: Release device reference on busy detach

Josh Poimboeuf <[email protected]>
objtool/klp: Ignore replacement offset of empty x86 alternatives

Josh Poimboeuf <[email protected]>
objtool/klp: Fix size of empty special section entries

Josh Poimboeuf <[email protected]>
objtool/klp: Fix vmlinux .klp.symid link error for .no_trim_symbol symbols

Yuho Choi <[email protected]>
ubi: Fix rollback for explicit UBI device numbers

Ning Ding <[email protected]>
bpf: Compare iterator types during state pruning

Zhihao Cheng <[email protected]>
UBI: fastmap: Pass to_be_tortured when reusing old fastmap PEBs

Zhihao Cheng <[email protected]>
UBI: Preserve torture flag when rescheduling failed erasures

LiangCheng Wang <[email protected]>
ASoC: fsl-asoc-card: defer probe when the CPU DAI device is not ready

bui duc phuc <[email protected]>
ASoC: pxa: Use devm_clk_get_optional() for extclk clock

Willem de Bruijn <[email protected]>
idpf: add missing cpu_to_le32 in idpf_tx_splitq_build_flow_desc

Robert Malz <[email protected]>
ice: acquire NVM lock around each flash read

Petr Oros <[email protected]>
ice: clear the default forwarding VSI rule when releasing a VSI

Przemyslaw Korba <[email protected]>
ice: fall back to SBQ when LL PHY timer interface times out

Zhu Yanjun <[email protected]>
RDMA/cma: Fix WARNING in res_to_rt

Fan Wu <[email protected]>
RDMA/cxgb4: Free debugfs on registration failure

Guangshuo Li <[email protected]>
dmaengine: qcom-bam-dma: fix autosuspend cleanup during removal

Cristian Ciocaltea <[email protected]>
phy: rockchip: samsung-hdptx: Handle uncommitted PHY config changes

Cristian Ciocaltea <[email protected]>
phy: rockchip: samsung-hdptx: Fix rate recalculation for 3.2GHz FRL

Cristian Ciocaltea <[email protected]>
phy: rockchip: samsung-hdptx: Guard against clk rate integer underflow

Cristian Ciocaltea <[email protected]>
phy: rockchip: samsung-hdptx: Prevent divide-by-zero when computing clk rate

Cristian Ciocaltea <[email protected]>
phy: rockchip: samsung-hdptx: Fix rate recalculation for high bpc

HyeongJun An <[email protected]>
ALSA: seq: Don't leak the extension cell pointer in the bounce payload

Yun Zhou <[email protected]>
nfc: nci: fix use of uninitialized memory in CORE_INIT_RSP parsing

Linmao Li <[email protected]>
nfc: digital: Do not dump a NULL response in command completion

Yinhao Hu <[email protected]>
nfc: pn533: hold a reference to the request skb during send_frame

Doruk Tan Ozturk <[email protected]>
nfc: llcp: bound SNL TLV parsing to the skb and add length checks

Zhenghang Xiao <[email protected]>
nfc: nci: fix double completion race in nci_data_exchange_complete

Breno Leitao <[email protected]>

    nfc: llcp: read llcp_sock->local under the socket lock in getsockopt

Breno Leitao <[email protected]>
nfc: llcp: avoid userspace overflow on invalid optlen

Liang Hao <[email protected]>
hrtimer: Account nr_retries on recovered interrupt retries

Chao Shi <[email protected]>
nvme: reject passthrough of driver-managed Set Features

Yang Xiuwei <[email protected]>
nvme/ioctl: check SUBMIT_IO with nvme_cmd_allowed()

Guixin Liu <[email protected]>
nvmet: fix NULL pointer dereference in nvmet_execute_identify_ns_zns()

Sven Peter <[email protected]>
nvme-apple: Drop the PRP null check chicken bit

Sven Peter <[email protected]>
nvme-apple: Require page aligned buffers on the admin queue

Sven Peter <[email protected]>
nvme: Add a quirk for page aligned admin queue buffers

Sven Peter <[email protected]>
nvme-apple: Never set the opcode in the NVMMU TCB

Sven Peter <[email protected]>
nvme-apple: Don't set a DMA direction for commands without a data transfer

Sven Peter <[email protected]>
nvme-apple: Destroy the admin queue on removal

Guixin Liu <[email protected]>
nvmet: fix heap out-of-bounds read in nvmet_auth_negotiate()

Ilya Leoshkevich <[email protected]>
s390/irqflags: Add out-of-line definitions of arch_local_irq_*() for KMSAN

Josh Poimboeuf <[email protected]>
arm64: bti: Disable in-kernel BTI with recent versions of Clang

Jorijn van der Graaf <[email protected]>
ASoC: qcom: q6apm: keep the graph start count in sync with the DSP

Babanpreet Singh <[email protected]>
spi: sprd-adi: Fix probe succeeding without registering the controller

Vladimir Murzin <[email protected]>
arm64: entry: Avoid unnecessary local_irq_disable() on kernel exit

Esteban Urrutia <[email protected]>
phy: qcom: qmp-combo: Drop qmp_v4_calibrate_dp_phy

Esteban Urrutia <[email protected]>
phy: qcom: qmp-combo: Correct pre-emphasis table for QMP v4 DP PHYs

Lad Prabhakar <[email protected]>
phy: renesas: rcar-gen3-usb2: Ignore missing VBUS regulator

Mukesh Kumar Chaurasiya (IBM) <[email protected]>
rust: uapi: replace direct asm-generic/ioctl.h include with linux/ioctl.h

Vasant Hegde <[email protected]>
iommu/amd: Fix incorrect device ID in invalid PASID error message

John Johansen <[email protected]>
apparmor: fix unconfined user namespace restriction forced stack

Michael Walle <[email protected]>
powerpc/configs: enable CONFIG_RAS to fix EDAC support

Willem de Bruijn <[email protected]>
selftests: drv-net: so_txtime: only send test traffic to sch_etf

Mohsin Bashir <[email protected]>
selftests: drv-net: Test queue stall upon reconfig

Jia Wang <[email protected]>
PCI: ultrarisc: Get and enable DP1000 PCIe controller clocks

Kuniyuki Iwashima <[email protected]>
amt: Don't support cross-netns setup.

Simon Glass <[email protected]>
pinctrl: rockchip: Decode drive strength in the get function

Liang Luo <[email protected]>
selftests/sched_ext: Check skeleton open failure in exit test

Rui Qi <[email protected]>
selftests/cgroup: Avoid awk -e in cpuset tests

Guopeng Zhang <[email protected]>
cgroup/cpuset: Use WRITE_ONCE() for shared prs_err updates

Guixin Liu <[email protected]>
nvme-pci: release descriptor pools on probe failure

Guixin Liu <[email protected]>
nvmet: propagate percpu_ref_init() failure in nvmet_ns_enable()

Zhengrong Li <[email protected]>
nvmet: fix Reservation Register Replace for unregistered host with IEKEY

Chuck Lever <[email protected]>
NFS: Return a delegation the client fails to record

Runyu Xiao <[email protected]>
sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE

Weiming Shi <[email protected]>
SUNRPC: check rpc_sockaddr2uaddr() return value in rpcb_register_inet4/6

surendra <[email protected]>
hwmon: (pmbus/ltc4283) Add missing MODULE_DEVICE_TABLE for OF match table

Thomas Weißschuh <[email protected]>
hwmon: (cros_ec) Synchronize EC access from the thermal device callbacks

Thomas Weißschuh <[email protected]>
hwmon: (cros_ec) Store the hwmon device in cros_ec_hwmon_priv

Thomas Weißschuh <[email protected]>
hwmon: (cros_ec) Register the thermal devices after the hwmon ones

Marco Elver <[email protected]>
arm64: Disable KCSAN instrumentation in delay.o

Chuck Lever <[email protected]>
xdrgen: Fix opaque and string encoders for unbounded members

Chuck Lever <[email protected]>
xdrgen: Add XDR width macros for short integer types

Chuck Lever <[email protected]>
xdrgen: Do not declare union XDR functions in the definitions header

Chuck Lever <[email protected]>
xdrgen: Emit a blank line ahead of enum declarations

Chuck Lever <[email protected]>
lockd: Regenerate NLMv4 XDR code

Jeff Layton <[email protected]>
nfsd: add protocol support for CB_NOTIFY

Chuck Lever <[email protected]>
NFSD: Release the export reference when reaping open stateids

Pablo Neira Ayuso <[email protected]>
netfilter: nft_ct: move custom expectation support to helper

Florian Westphal <[email protected]>
netfilter: nft_ct: support expectation creation for natted flows

Karl Mehltretter <[email protected]>
m68k: Fix backtraces for non-running tasks

Yifei Gao <[email protected]>
media: amd: isp4: fix self-deadlock in isp4sd_pwron_and_init() error path

Yifei Gao <[email protected]>
media: amd: isp4: release partial allocations in isp4if_alloc_fw_gpumem()

Yuho Choi <[email protected]>
hwrng: imx-rngc - Disable clock on registration failure

Ahsan Atta <[email protected]>
crypto: qat - remove dead ADF_HEX code

Thorsten Blum <[email protected]>
crypto: qat - use 2-arg strscpy where destination size is known

Lu Baolu <[email protected]>
iommu/vt-d: Flush context cache with correct SID when tearing down aliases

Lu Baolu <[email protected]>
iommu/vt-d: Tear down scalable-mode context on probe failure

Lu Baolu <[email protected]>
iommu/vt-d: Fix iopf_refcount leak on RID domain replacement

Lu Baolu <[email protected]>
iommu/vt-d: Clear Present bit before tearing down copied context entry

Desnes Nunes <[email protected]>
iommu/vt-d: Fix UCTP context table slot when copying root entries

Andrew Jones <[email protected]>
iommu/dma: Restore locking around msi_page_list

Karl Mehltretter <[email protected]>
fbdev: clps711x-fb: Remove unreachable unregister_framebuffer() call

Danila Chernetsov <[email protected]>
fbdev: kyro: Validate overlay viewport coordinates

Myeonghun Pak <[email protected]>
fbdev: tdfxfb: fix PCI enable cleanup with pcim_enable_device()

Fabrice Derepas <[email protected]>
apparmor: fix integer overflow in verify_tags() bounds check

Ian Rogers <[email protected]>
perf synthetic-events: Fix divide by zero in perf_event__synthesize_threads

Ian Rogers <[email protected]>
perf python: Fix memory leak in pyrf__metrics_cb

Ian Rogers <[email protected]>
perf python: Fix count_values memory leak in pyrf_evsel__read

Ian Rogers <[email protected]>
perf python: Validate attribute setters in pyrf_evsel

Ian Rogers <[email protected]>
perf python: Validate CPU and thread maps in pyrf_evsel__open

Ian Rogers <[email protected]>
perf python: Handle Py_None for thread and cpu maps

Ian Rogers <[email protected]>
perf python: Check counts_values size in set_values

Ian Rogers <[email protected]>
perf test: Fix skiplist leak in cmd_test

Ian Rogers <[email protected]>
perf synthetic-events: Fix uninitialized pthread_join

Ian Rogers <[email protected]>
perf python: Fix memory leak in pyrf_evlist__get_pollfd

Ian Rogers <[email protected]>
perf tools: Fix sb_evlist leaks in top and record

Ian Rogers <[email protected]>
perf stat: Fix evsel_list leak in cmd_stat

Ian Rogers <[email protected]>
perf script: Fix metric_evlist leak in script_find_metrics

Rosen Penev <[email protected]>
ARM: dts: helios4: add SATA regulator supplies

Rosen Penev <[email protected]>
ARM: dts: helios4: add vcc-supply to GPIO expander

Rosen Penev <[email protected]>
ARM: dts: helios4: add vcc-supply to EEPROM

Tomáš Macholda <[email protected]>
arm64: dts: turris-mox: fix usb3 phys

Tommaso Merciai <[email protected]>
i3c: renesas: Don't register devices when ENTDAA times out

Claudiu Beznea <[email protected]>
i3c: renesas: Follow a unified pattern for transfer and command initialization

Claudiu Beznea <[email protected]>
i3c: renesas: Return immediately if there is no transfer

Sanghyun Park <[email protected]>
bpf: Fix mmap_lock leak in irq_work path

Guodong Xu <[email protected]>
riscv: cpufeature: Clarify ISA spec version for canonical order

Victor Nogueira <[email protected]>
net/sched: cls_api: fix teardown of an adopted proto on insert-race loss

Nikhil Gautam <[email protected]>
iio: light: gp2ap002: re-enable irq if runtime suspend fails

Nikhil Gautam <[email protected]>
iio: light: gp2ap002: Fix unbalanced runtime PM on repeated event writes

Vidhu Sarwal <[email protected]>
iio: light: opt4060: Fix pointer type passed to div_u64_rem()

Pu Lehui <[email protected]>
bpf, cgroup: Fix storage null-ptr-deref after replacing prog

Alvin Šipraga <[email protected]>
pinctrl: fix PINCTRL_GENERIC_MUX not always being selectable

Ali Ahmet Memis <[email protected]>
Bluetooth: MSFT: validate evt_prefix_len against the response length

Guangshuo Li <[email protected]>
Bluetooth: btmtksdio: fix usage_count leak when autosuspend_delay is negative

Linmao Li <[email protected]>
Bluetooth: MGMT: free the HCI command when it is cancelled

Linmao Li <[email protected]>
Bluetooth: MGMT: free the mesh send cancel command when it is cancelled

Linmao Li <[email protected]>
Bluetooth: hci_sync: free the advertising instance on the failure and cancel paths

Linmao Li <[email protected]>
Bluetooth: hci_conn: fix the SCO setup context lifetime

Zijun Hu <[email protected]>
Bluetooth: btintel: Fix diagnostics event detection

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: use proto_lock for l2cap_data to fix l2cap_disconn_ind

HyeongJun An <[email protected]>
Bluetooth: virtio_bt: avoid OOB read of build info string

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: fix edge-triggered interrupts handling

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: fix IRQ mask/unmask code

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: add missed IRQ resource helpers

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: fix getting gpiochip/pinctrl pointers in the IRQ handling code

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: add missed get_direction() function for gpio_chip

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: an7583: fix spi group pins

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: an7583: fix muxing of non-gpio default pins

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: an7581: fix mux/conf of pcie_reset pins

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: an7583: fix I2C0_SDA_PD register bit order

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: an7581: fix pinconf of i2c_scl/i2c_sda pins

Mikhail Kshevetskiy <[email protected]>
pinctrl: airoha: fix mdio bitfield names

Aaron Tomlin <[email protected]>
perf sched: Handle missing trace samples in pipe mode

Aaron Tomlin <[email protected]>
perf sched: Suppress latency table output when trace samples are missing

Qu Wenruo <[email protected]>
btrfs: qgroup: fix a wrong length calculation in qgroup_free_reserved_data()

Qu Wenruo <[email protected]>
btrfs: use aligned range for locking in extent_fiemap()

Johannes Thumshirn <[email protected]>
btrfs: zoned: don't clobber the extent buffer when zeroing it out

Johannes Thumshirn <[email protected]>
btrfs: zoned: flush active metadata block group at btree_writepages() start

Yichong Chen <[email protected]>
btrfs: retry verity reads for not-uptodate Merkle folios

Leo Martins <[email protected]>
btrfs: replace writeback inhibition xarray with a fixed inline buffer

Sun YangKai <[email protected]>
btrfs: check if root is readonly when setting posix acl

Qu Wenruo <[email protected]>
btrfs: make sure EXTENT_BUFFER_READING is cleared under refs_lock

Qu Wenruo <[email protected]>
btrfs: fix a lockdep caused by path resolution during device scan

Qu Wenruo <[email protected]>
btrfs: always wait for ordered extents to avoid OE races

Filipe Manana <[email protected]>
btrfs: defrag: fix deadlock between defrag and delalloc space reservation

Johannes Thumshirn <[email protected]>
btrfs: zoned: don't force read-only on transient -EAGAIN from reloc merge

Yang Xiuwei <[email protected]>
scsi: sd: Fix sd_done() sense handling condition

Yang Xiuwei <[email protected]>
scsi: sd: Fix special_vec mempool leak when scsi_alloc_sgtables() fails

Yang Xiuwei <[email protected]>
scsi: sd: Fix error handling in sd_probe() after large pool creation failure

Tanushree Shah <[email protected]>
perf trace-event: Fix integer truncation in do_read() and skip()

Zijun Hu <[email protected]>
Bluetooth: btusb: QCA: Fix populating devcoredump fields on unenabled devices

Zijun Hu <[email protected]>
Bluetooth: btusb: Record matched usb_device_id into btusb_data

Zijun Hu <[email protected]>
Bluetooth: btusb: Fix BD_ADDR byte order in btusb_set_bdaddr_wcn6855()

Zijun Hu <[email protected]>
Bluetooth: btqca: Fix qca_set_bdaddr() waiting for wrong HCI event

Ricardo Neri <[email protected]>
sched/fair: Check CPU capacity before comparing group types during load balance

Ricardo Neri <[email protected]>
sched/fair: Also gate overloaded status update for SD_ASYM_CPUCAPACITY

Adrian Hunter <[email protected]>
perf/x86/intel/pt: Fix stop/start with no update

Adrian Hunter <[email protected]>
perf/x86/intel/pt: Use bitwise access for PERF_HES_STOPPED

Adrian Hunter <[email protected]>
perf/x86/intel/pt: Factor out pt_config_enable()

Yuho Choi <[email protected]>
ACPI: video: Release PCI device reference after lookup

surendra <[email protected]>
thermal/drivers/spacemit: Validate clamped trip thresholds

Kazuma Kondo <[email protected]>
ACPI: PCI: Avoid misleading _OSC messages for non-PCIe host bridges without _OSC

Peter Ujfalusi <[email protected]>
ASoC: tas675x: sort the register default table

Kamal Wadhwa <[email protected]>
regulator: qcom-rpmh: Fix PMIC5 BOB bypass mode handling

Daniel Borkmann <[email protected]>
bpf, arm64: Fix exception table metadata for arena load-acquire

Daniel Borkmann <[email protected]>
bpf, x86: Fix exception table metadata for arena load-acquire

Daniel Borkmann <[email protected]>
bpf, riscv: Add and use bpf_atomic_is_load_acq() helper

Daniel Borkmann <[email protected]>
bpf: Reject load-acquire from pointers requiring fault protection

Ben Horgan <[email protected]>
arm_mpam: Disable driver unbind to avoid UAF

Ben Horgan <[email protected]>
arm_mpam: Fix a NULL pointer dereference on unbinding after an error interrupt

James Clark <[email protected]>
perf: arm_pmuv3: Zero initialize hw_id branch stack field

Yeoreum Yun <[email protected]>
coresight: etm4x: missing cscfg_csdev_disable_active_config() in perf enable

Yeoreum Yun <[email protected]>
coresight: etm4x: fix leaked trace id

Yeoreum Yun <[email protected]>
coresight: etm4x: fix underflow for usage of (nrseqstate - 1)

Yeoreum Yun <[email protected]>
coresight: etm4x: fix wrong check of etm4x_sspcicrn_present()

Bruce Johnston <[email protected]>
md/raid1: don't set array_frozen in raid1_takeover()

Yu Kuai <[email protected]>
md/md-llbitmap: stop daemon timer rearm on destroy

Yu Kuai <[email protected]>
md/md-llbitmap: prevent create failure bitmap UAF

Yu Kuai <[email protected]>
md: avoid stale clone I/O accounting timestamps

Yu Kuai <[email protected]>
md: wait for behind writes before destroying bitmap

Yu Kuai <[email protected]>
md/raid5: round bitmap stripes with sector division

Esteban Urrutia <[email protected]>
phy: qcom: qmp-pcie: Add pcs_lane1 offset to V5 offsets

Loic Poulain <[email protected]>
phy: qcom: qmp-usb: Fix possible NULL-deref on early runtime suspend

Loic Poulain <[email protected]>
phy: qcom: snps-femto-v2: Fix possible NULL-deref on early runtime suspend

Loic Poulain <[email protected]>
phy: qcom: qmp-usb-legacy: Fix possible NULL-deref on early runtime suspend

Mohd Ayaan Anwar <[email protected]>
phy: qcom: sgmii-eth: vote for both voltage rails with correct current loads

Linkai Gong <[email protected]>
soc: fsl: qe: check platform_driver_register() in qe_ic_of_init()

Jan Kara <[email protected]>
ext4: fix transaction overflow during writeback

Jan Kara <[email protected]>
ext4: teach ext4_meta_trans_blocks() about number of allocated extents

Muhammad Usama Anjum <[email protected]>
selftests/mm: unpoison pages in memory-failure teardown

Yichong Chen <[email protected]>
hugetlbfs: release subpool on fill_super failure

Simon Glass <[email protected]>
pinctrl: rockchip: Restrict the RV1103B 2-bit drive type to bank 2

Simon Glass <[email protected]>
pinctrl: rockchip: Reset the pin count when recalculating SoC data

Prathamesh Shete <[email protected]>
pinctrl: tegra264: fix DAP2 DIN/DOUT pin assignment

Mukesh Ojha <[email protected]>
firmware_loader: do not queue completed sysfs fallback requests

Manish Rangankar <[email protected]>
scsi: qla2xxx: Remove redundant VPD flash read in sysfs read path

Aksh Garg <[email protected]>
PCI: cadence: Fix host/endpoint dependencies for cadence-plat driver

Timur Kristóf <[email protected]>
drm/amdgpu/gfx6: Use PFP on the compute queues too

Timur Kristóf <[email protected]>
drm/amdgpu/gfx6: Fixup emitting SWITCH_BUFFER packets

Tanushree Shah <[email protected]>
perf trace-event: Fix buffer overflow in read_string()

Gerald Loacker <[email protected]>
phy: rockchip: phy-rockchip-inno-csidphy: fix rk1808 hsfreq table

Felix Gu <[email protected]>
phy: sunplus: fix error handling in sp_uphy_init()

Felix Gu <[email protected]>
phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure

Biju Das <[email protected]>
phy: renesas: phy-rcar-gen3-usb2: Fix devm action registration for disabled VBUS regulator

Meghana Malladi <[email protected]>
arm64: dts: ti: k3-am64: Fix MDIO clock reference for ICSSG0 node

Takashi Iwai <[email protected]>
ALSA: hda: cix-ipbloq: Avoid build with 32bit archs

Jan Kara <[email protected]>
ext4: fix spurious message about orphan cleanup on RO fs

Harry Wentland <[email protected]>
drm/amd/display: Resize MST HDCP per-connector arrays to 32

Timur Kristóf <[email protected]>
drm/amdgpu/gfx6: Fixup emit_cntxcntl()

Steve Dunnagan <[email protected]>
leds: gpio: Clear error pointers for skipped LEDs

Arnd Bergmann <[email protected]>
leds: gpio: Make legacy gpiolib interface optional

Sven Peter <[email protected]>
mfd: macsmc: Fix key count endianness annotation

Qiang Yu <[email protected]>
drm/amdgpu: read TRUNCATE_COORD_MODE on gfx12

Alex Deucher <[email protected]>
drm/gfx12: Program DB_RING_CONTROL

Pengpeng Hou <[email protected]>
mfd: iqs62x: Reject zero-length firmware records

Mark Brown <[email protected]>
tools: Ensure tools copy of linux/filter.h exports the UAPI

Pengpeng Hou <[email protected]>
mfd: rave-sp: validate received frame payload lengths

Vladimir Murzin <[email protected]>
arm64: hibernate: Restore DAIF state on error

Ada Couprie Diaz <[email protected]>
arm64: hibernate: mask DAIF before restoring hibernated kernel

Felix Fietkau <[email protected]>
wifi: mac80211: skip default WMM setup for AP_VLAN links

Leon Romanovsky <[email protected]>
RDMA/erdma: restrict the driver to little-endian systems

Petr Pavlu <[email protected]>
module/dups: Fix use-after-free in kmod_dup_req lifetime handling

Petr Pavlu <[email protected]>
module/dups: Inform duplicate requests about the result directly

Naveen Kumar Chaudhary <[email protected]>
module: use strscpy() to copy module names in stats and dup tracking

Shuangpeng Bai <[email protected]>
RDMA/siw: Fix use-after-free in siw_accept()

Yehyeong Lee <[email protected]>
IB/isert: post the full-feature receive buffers after session registration

Yehyeong Lee <[email protected]>
IB/isert: delay the final Login Response until the session is registered

Bard Liao <[email protected]>
soundwire: cadence_master: add BRA_NumBytes[8] support

Karl Mehltretter <[email protected]>
cpufreq: imx6q: fix out-of-bounds write when probed more than once

Karl Mehltretter <[email protected]>
cpufreq: imx6q: fix devres accumulation across driver rebind

Priya Bala Govindasamy <[email protected]>
rust: cpufreq: Fix temporary write in Registration::bios_limit_callback

Priya Bala Govindasamy <[email protected]>
rust: cpufreq: Add CPUFREQ_TABLE_END as last table entry in TableBuilder::to_table

Jernej Skrabec <[email protected]>
drm/sun4i: hdmi-phy: Fix H6 8-bit MPLL config at 594 MHz

Jernej Skrabec <[email protected]>
drm/sun4i: Drop node references while building component list

Jernej Skrabec <[email protected]>
drm/sun4i: dw-hdmi: Drop TCON TOP port reference

Jernej Skrabec <[email protected]>
drm/sun4i: tcon: Drop remote endpoint reference

Jernej Skrabec <[email protected]>
drm/sun4i: crtc: Propagate layer initialization error

Jernej Skrabec <[email protected]>
drm/sun4i: hdmi: Don't leak sync polarity bits into packet control

Jernej Skrabec <[email protected]>
drm/sun4i: tcon: Drop TCON TOP device reference

Jernej Skrabec <[email protected]>
drm/sun4i: tcon: Set output mux for DSI and LVDS

Jernej Skrabec <[email protected]>
drm/sun4i: tcon-top: Keep mixer routes distinct

Jernej Skrabec <[email protected]>
drm/sun4i: vi scaler: Restore opaque alpha in video modes

Jernej Skrabec <[email protected]>
drm/sun4i: vi scaler: Fix coefficient selection

Jernej Skrabec <[email protected]>
drm/sun4i: Fix V3s YUV scanline size

Arnaldo Carvalho de Melo <[email protected]>
perf c2c: Clean up registered formats on c2c_hists__init() and c2c_hists__reinit() failure

Arnaldo Carvalho de Melo <[email protected]>
perf c2c: Fix error masking, OOM, and unchecked caller errors in hpp_list__parse()

Alexey Charkov <[email protected]>
clk: rockchip: rk3576: fix source muxes for SPI0..SPI4

Leon Hwang <[email protected]>
bpf: Fix sleepable check for tracing/lsm prog

Jiri Olsa <[email protected]>
bpf: Clear buf on error in __bpf_get_task_stack

Jiri Olsa <[email protected]>
bpf: Remove trace_in argument from __bpf_get_stack

Jiri Olsa <[email protected]>
bpf: Factor callchain_finalize function from __bpf_get_stack

Jiri Olsa <[email protected]>
bpf: Factor callchain_store function from __bpf_get_stack

Cen Zhang <[email protected]>
ocfs2: o2hb: quiesce negotiate handlers and timeout work

Cen Zhang <[email protected]>
ocfs2: synchronize heartbeat callbacks with o2net teardown

Arnaldo Carvalho de Melo <[email protected]>
perf libbfd: Fix memory leaks and NULL fclose in BPF disassembly

Arnaldo Carvalho de Melo <[email protected]>
perf bpf: Add PROG_TAGS to required arrays in __bpf_event__print_bpf_prog_info()

Arnaldo Carvalho de Melo <[email protected]>
perf header: Use write lock when translating BPF prog info pointers

Arnaldo Carvalho de Melo <[email protected]>
perf libbfd: Validate BPF prog info arrays before pointer cast

Farhan Ali <[email protected]>
vfio/pci: Avoid mapping BARs for devices with non-mappable BARs

Xie Yuanbin <[email protected]>
ARM: 9485/1: mm: acquire mmap write lock around show_pte() for user faults

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

Karl Mehltretter <[email protected]>

    ARM: 9483/1: select HAVE_POSIX_CPU_TIMERS_TASK_WORK

Linus Walleij <[email protected]>
ARM: 9481/2: breakpoint: CFI breakpoints only on demand

Yehyeong Lee <[email protected]>
RDMA/srp: fix heap information leak on a truncated SRP_CRED_REQ

Cheng Xu <[email protected]>
RDMA/erdma: Hold QP references for AE and CM processing

Cheng Xu <[email protected]>
RDMA/erdma: Hold CQ references when processing EQ events

Yuntao Wang <[email protected]>
kbuild: fix modules.builtin(.modinfo) targets in the top-level Makefile

Robertus Diawan Chris <[email protected]>
modpost: prevent leak when early return no suffix .o in read_symbols()

Sergei Litvin <[email protected]>
scripts/tags.sh: Prevent binary files appearing in cscope.files

Rafael J. Wysocki <[email protected]>
intel_idle: Avoid using deep idle states during initialization

Marek Marczykowski-Górecki <[email protected]>
xen/xenbus: check otherend_id only after it has been initialized

Rafael J. Wysocki <[email protected]>
thermal: hwmon: Remove hwmon class device along with its parent

Daniel Borkmann <[email protected]>
bpf: Check load-acquire src ptr type before the load

Eliot Courtney <[email protected]>
gpu: nova-core: correct FRTS vidmem offset calculation

John Hubbard <[email protected]>
gpu: nova-core: clean up FSP FRTS comments

Zhi Wang <[email protected]>
gpu: nova-core: factor out common FSP message header

Mika Westerberg <[email protected]>
thunderbolt: stream: Fix possible short reads/writes

Mika Westerberg <[email protected]>
thunderbolt: stream: Restore consumer if copying from iter fails

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: talos-evk: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sa8155p-adp: Fix swapped USB and UFS QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: eliza-mtp: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: lemans: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: glymur: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: kaanapali: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sar2130p: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8750: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8650: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: purwa: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: hamoa: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>

    arm64: dts: qcom: sc8180x: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sc7280: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sc7180: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm7225-fairphone-fp4: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs6490: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcm6490: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs8550-aim300: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8550: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8450: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8350: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8250: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8150: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sdm850: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sdm845: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sa8540p: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Manivannan Sadhasivam <[email protected]>

    arm64: dts: qcom: sc8280xp-blackrock: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies

Sayali Patil <[email protected]>
selftests/mm: fix ternary operator precedence in ksm_tests

Sayali Patil <[email protected]>
selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes

Sayali Patil <[email protected]>
selftests/mm: handle EINVAL when configuring gigantic hugepages

Hongfu Li <[email protected]>
selftests/mm: fix memleak in migration benchmark

Pu Lehui <[email protected]>
bpf, cgroup: Fix invalid storage access after __cgroup_bpf_attach failed

Mukesh Ojha <[email protected]>
remoteproc: fix OOB read via signed offset in rsc_table_for_each_entry()

Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Add lockdown checks to legacy I/O and memory handlers

Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Return -EINVAL for unsupported I/O BAR mmap

Jackie Dong <[email protected]>
ALSA: hda/realtek: ALC269 fixup for Yoga/Legion Mic noise

Imran Shaik <[email protected]>
arm64: dts: qcom: agatti: Add missing CX power domain to DISPCC

Christoph Hellwig <[email protected]>
block: handle nogenerate/noverify properly in fs-integrity

Christoph Hellwig <[email protected]>
block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h

Christoph Hellwig <[email protected]>
block: remove bip_should_check

Yang Xiuwei <[email protected]>

    ublk: clear auto buf reg before updating io->buf in batch commit

Andreas Kemnade <[email protected]>
drm/omap: dsi: Do not copy isr table

Inochi Amaoto <[email protected]>

    riscv: dts: sophgo: cv180x: Allow the DMA multiplexer to set channel number for DMA controller

Ning Ding <[email protected]>
bpf: Invalidate RCU pointers after final spin unlock

Yichong Chen <[email protected]>
fat: release buffer head after rebuilding parent

Guangshuo Li <[email protected]>

    rapidio: clear mport->net when rio_add_net() fails

Dmitry Antipov <[email protected]>
ocfs2: do not use make_bad_inode() in ocfs2_read_inode_block_full()

Cen Zhang <[email protected]>
ocfs2: validate external xattr entries when reading metadata

Cen Zhang <[email protected]>
ocfs2: validate inline xattrs during inode block validation

Calvin Owens <[email protected]>
pps-gpio: remove dead capture_clear code

Michael Byczkowski <[email protected]>
pps: pps-gpio: split IRQ handler into hardirq timestamper + threaded handler

Calvin Owens <[email protected]>
pps: don't try to wait for negative timeouts in PPS_FETCH

Bradley Morgan <[email protected]>
lib/string: fix memchr_inv() for large ranges

Cen Zhang <[email protected]>
ocfs2/cluster: keep heartbeat local node stable

Yang Xiuwei <[email protected]>
ublk: validate auto buf reg before taking uring_cmd

Caleb Sander Mateos <[email protected]>
ublk: check for ublk_unmap_io() returning 0

Caleb Sander Mateos <[email protected]>
ublk: check import_ubuf() return value

Tao Cui <[email protected]>
block/kyber-iosched: flush per-cpu latency buckets over possible CPUs

Tao Cui <[email protected]>
block/blk-iocost: collect per-cpu latency stats over possible CPUs

Tao Cui <[email protected]>
block/blk-iolatency: account per-cpu latency stats over possible CPUs

Tao Cui <[email protected]>
block/blk-stat: drain per-cpu callback stats over possible CPUs

Zheng Qixing <[email protected]>
blk-cgroup: skip dying blkg in blkcg_activate_policy()

Zheng Qixing <[email protected]>
blk-cgroup: fix race between policy activation and blkg destruction

Breno Leitao <[email protected]>
phonet: pep: do not write beyond optlen in getsockopt

Zxyan Zhu <[email protected]>
net: stmmac: Skip PHY attach if custom PCS is in use

Sang-Heon Jeon <[email protected]>
iio: light: tsl2583: return zero in write_raw() on success

Sang-Heon Jeon <[email protected]>
iio: light: isl29028: return zero in write_raw() on success

Yuanshen Cao <[email protected]>
iio: light: tsl2772: fix ALS calibscale readback

Arnaldo Carvalho de Melo <[email protected]>
perf arm-spe: Reject zero nr_cpu in metadata to prevent division by zero

Arnaldo Carvalho de Melo <[email protected]>
perf intel-bts: Fix off-by-one in auxtrace_info minimum size check

Arnaldo Carvalho de Melo <[email protected]>
perf intel-pt: Fix off-by-one in auxtrace_info minimum size check

Arnaldo Carvalho de Melo <[email protected]>
perf auxtrace: Fix queue grow overflow and old array leak

Arnaldo Carvalho de Melo <[email protected]>
perf thread-stack: Fix heap buffer overflow on branch stack wrap copy

Jiancheng Huang <[email protected]>
HID: lg4ff: validate report length before fixed offsets

Chao Huang <[email protected]>
HID: i2c-hid: goodix: Disable VDD on VDDIO enable failure

Rosalie Wanders <[email protected]>
HID: sony: add missing __packed to struct with static_assert()

Vicki Pfau <[email protected]>
HID: steam: Reject short reads

Vicki Pfau <[email protected]>
HID: steam: Improve logging and other cleanup

Vicki Pfau <[email protected]>
HID: steam: Add support for sensor events on the Steam Controller (2015)

Vicki Pfau <[email protected]>
HID: steam: Rename some constants that got renamed upstream

Vicki Pfau <[email protected]>
HID: steam: Refactor and clean up report parsing

Ai Chao <[email protected]>
HID: i2c-hid: Fix "(null)" output when reading report descriptor fails

Yousef Alhouseen <[email protected]>
HID: synchronize input before cleaning up a failed probe

谢致邦 (XIE Zhibang) <[email protected]>
HID: i2c-hid: Refactor _DSM helper and add i2c-hid-acpi-prp0001 driver

Haoxiang Li <[email protected]>
HID: logitech-hidpp: Fix FF device cleanup on init failure

Denis Benato <[email protected]>
HID: asus: fix a off-by-one in mcu_parse_version_string() validation

Denis Benato <[email protected]>
HID: asus: refactor the two workqueues and init sequence

Niklas Cassel <[email protected]>
PCI: dwc: ep: Fix unmap potentially unmapping the wrong iATU

Linmao Li <[email protected]>
platform: arm64: qcom-hamoa-ec: reject incomplete responses

Niklas Cassel <[email protected]>
PCI: dwc: ep: Flush cached MSI write before unmapping the iATU

Niklas Cassel <[email protected]>
misc: pci_endpoint_test: Check SUCCESS bit for doorbell status

Shukai Ni <[email protected]>
dm-integrity: replace forgeable discard filler with a keyed sector marker

Karl Mehltretter <[email protected]>
tty: clear cdev pointer after cdev_add() failure

Karl Mehltretter <[email protected]>
tty: skip cdev_del() when no cdev is registered

Karl Mehltretter <[email protected]>
serial: core: clear freed pointers on uart_register_driver() failure

Karl Mehltretter <[email protected]>
serial: core: do fallible allocations before the console can be registered

Karl Mehltretter <[email protected]>
serial: amba-pl011: keep console clock enabled for atomic writes

Karl Mehltretter <[email protected]>
serial: amba-pl011: unprepare console clock on unregister

Thomas Bogendoerfer <[email protected]>
MIPS: ptrace: Fix syscall skipping via PTRACE_SYSCALL

Christophe Leroy (CS GROUP) <[email protected]>
soc: fsl: qe: implement get_direction()

Christophe Leroy (CS GROUP) <[email protected]>
soc: fsl: qe: properly scan GPIO nodes at startup

Saket Kumar Bhaskar <[email protected]>
powerpc/irq: Fix missing r2 clobber in PCREL inline assembly

Saket Kumar Bhaskar <[email protected]>
powerpc64/bpf: Fix build break for arch_bpf_timed_may_goto

Madhavan Srinivasan <[email protected]>
powerpc64/bpf: Fix build break in bpf_jit_emit_func_call_rel()

Mukesh Kumar Chaurasiya (IBM) <[email protected]>
powerpc/syscall: Fix syscall skip handling for seccomp and ptrace

Gou Hao <[email protected]>
powerpc/smp: add NULL guard for cause_ipi in smp_muxed_ipi_message_pass

Gou Hao <[email protected]>
powerpc/xive: propagate IPI init errors to prevent use-after-free

Gou Hao <[email protected]>
powerpc/xive: add error return value to xive_smp_probe()

Gou Hao <[email protected]>
powerpc/xive: make xive IPI allocation NULL-safe

Troy Mitchell <[email protected]>
pinctrl: spacemit: validate pins in pinconf callbacks

Surendra Singh Chouhan <[email protected]>
pinctrl: generic: free maps on pinctrl_generic_to_map() failure

Yulin Lu <[email protected]>
pinctrl: eswin: Fix Handling of PIN_CONFIG_PERSIST_STATE

Josh Poimboeuf <[email protected]>
objtool/klp: Fix symbol resolution for duplicate data symbols

Josh Poimboeuf <[email protected]>
objtool/klp: Add .klp.symid for sympos disambiguation

Josh Poimboeuf <[email protected]>
objtool/klp: Fix false module dependencies caused by dead relocs

Joe Lawrence <[email protected]>
objtool/klp: Normalize Module.symvers paths to module names

Josh Poimboeuf <[email protected]>
objtool/klp: Fix module name normalization for paths with dots

Laxman Acharya Padhya <[email protected]>
firmware: coreboot: Validate table bounds

Jiayuan Chen <[email protected]>
bpf: Fix mmap_lock deadlock on arena lock failure

Zhao Li <[email protected]>
wifi: cfg80211: stop PMSR before P2P and NAN teardown

Johannes Berg <[email protected]>
wifi: mac80211: disconnect on CSA to channel 0

Jason Huang <[email protected]>
wifi: brcmfmac: fix P2P action frame handling without device vif

Namhyung Kim <[email protected]>
perf build: Fix a build error on 32-bit x86

Zhao Li <[email protected]>
wifi: mac80211: skip unused probe response countdown offsets

Slawomir Stepien <[email protected]>
wifi: zd1211rw: reject secondary interfaces to prevent conflicts

Zhao Li <[email protected]>
wifi: nl80211: clean up color-change beacon data on errors

Zhao Li <[email protected]>
wifi: mac80211: send TWT teardown to peer after setup TX failure

Davidlohr Bueso <[email protected]>
perf/cxlpmu: Fix 64-bit write to 32-bit HDM filter register

Pranjal Shrivastava <[email protected]>
iommu/arm-smmu-v3: Convert to use atomic poll timeout

Mark Brown <[email protected]>
kselftest/arm64: Don't write to P0 in irritator on SME only systems

Will Deacon <[email protected]>
arm64: ptrace: Keep 'orig_x0' in-sync with x0 on syscall entry

Karl Mehltretter <[email protected]>
kselftest/arm64: fp-ptrace: Fix checks for inactive SVE and SSVE regsets

Karl Mehltretter <[email protected]>
arm64/fpsimd: ptrace: Fix inactive SVE and SSVE regsets

Shanker Donthineni <[email protected]>
arm_mpam: Apply T241-MPAM-6 to 63-bit counters

Vladimir Murzin <[email protected]>
arm64: smp: Fix IPI teardown for GICv5 flow

Jose Ignacio Tornos Martinez <[email protected]>
wifi: mt76: mt7996: remove beacon_int_min_gcd from ADHOC interface combinations

Linghui Wu <[email protected]>
wifi: ath10k: snoc: use memcpy_fromio() for MSA ramdump

Reshma Immaculate Rajkumar <[email protected]>
wifi: ath12k: fix encrypted EAPOL TX in encap offload mode

Felix Fietkau <[email protected]>

    wifi: mt76: mt7996: fix out-of-bounds link array access in mt7996_tx()

Felix Fietkau <[email protected]>
wifi: mt76: reject out-of-range link ids in mt76_vif_link()

shengwei.lu <[email protected]>
wifi: mt76: mt7925: Fix EHT Beamformee SS subfields to meet 802.11be minimum

Peter Chiu <[email protected]>
wifi: mt76: fix queue assignment for disassoc packets

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: report RX chain signal for all RX paths

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: fix chainmask handling for non-dbdc phys on band 1

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: do not leave state behind after a failed WED attach

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: do not attach hif2 WED when the main WED attach failed

StanleyYP Wang <[email protected]>
wifi: mt76: mt7996: fix reg addr remap when addr is 0

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: release hif2 reference on probe IRQ failure

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: fix ext PHY use-after-free on register error path

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: fix double hif2 init on the non-WED path

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: fix MIB TX aggregation counter registers for mt7990

Felix Fietkau <[email protected]>
wifi: mt76: set MT76_SCANNING when starting a hw scan

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: clear stale link state on full reset

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: free vif links after clearing wcid entries on full reset

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: wake MCU waiters before aborting scan in L1 SER

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: skip key upload when adding an offchannel link

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: unlink TWT flow if the MCU rejects the agreement

Yonghong Song <[email protected]>
bpf, x86: Fix trampoline stack size for 128-bit arguments

Yonghong Song <[email protected]>
bpf: Reject >8 byte return values on return-reading trampoline paths

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Check snprintf truncation for guest kallsyms path

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Free scandir entries in guest kernel map creation

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Reset errno before strtol in guest kernel map creation

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Don't abort guest map creation on first inaccessible dir

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Check snprintf truncation in machines__findnew()

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Guard against NULL strlist in machines__findnew()

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Fix NULL parent dereference in fork event processing

Arnaldo Carvalho de Melo <[email protected]>
perf machine: Fix fd leak on bounds check in maps__set_modules_path_dir()

Michael Liang <[email protected]>
perf libdw: Fix outer-frame name resolution and spurious "(inlined)" tag

Alessio Podda <[email protected]>
perf unwind-libdw: Fix unwinding of multi-threaded processes

Charles Keepax <[email protected]>
ASoC: SDCA: Add missing stub for sdca_fdl_free_state()

Joy Zou <[email protected]>
regulator: core: use system_freezable_wq for init complete work

Ashish Mhetre <[email protected]>
arm64: tegra: Fix CMDQV interrupt type on Tegra264

Yuho Choi <[email protected]>
ARM: tegra: Fix OF node reference leaks in IRQ init

Andrey Golovko <[email protected]>
ASoC: tas2783-sdw: drop stale regcache on uninitialized re-attach

Pengpeng Hou <[email protected]>
ASoC: codecs: tas2783-sdw: Propagate regcache_sync() errors

Jeff Johnson <[email protected]>
wifi: ath11k: fix leak in ath11k_service_ready_ext_event()

Konrad Dybcio <[email protected]>
drm/msm/dsi: Drop dev_pm_opp_set_rate(0)

Konrad Dybcio <[email protected]>

    drm/msm/dp: Drop dev_pm_opp_set_rate(0)

Konrad Dybcio <[email protected]>
drm/msm/dpu: Drop sneaky dev_pm_opp_set_rate(0)

Leo Yan <[email protected]>
perf: arm_spe: Make wakeup range check overflow safe

Dmitry Baryshkov <[email protected]>
drm/msm/dp: do not reject wide-bus modes while a YUV420 mode is active

Dmitry Baryshkov <[email protected]>
drm/msm/dp: reject YUV420-only modes without VSC SDP support

Dmitry Baryshkov <[email protected]>
drm/msm: don't tear down KMS twice when KMS init fails

Yongxing Mou <[email protected]>
drm/msm/dpu: Fix DMA SSPP REC block offsets on DPU v13

Can Peng <[email protected]>
ACPI: processor: Unregister cpufreq notifier on init failure

Felix Fietkau <[email protected]>
wifi: mt76: only consume the WO drop bit on WED v2 devices

StanleyYP Wang <[email protected]>
wifi: mt76: mt7996: add missing rdd_idx check when enabling background radar

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: use little-endian for bss_info_ra wire fields

Felix Fietkau <[email protected]>
wifi: mt76: report data NSS for STBC frames in RX rate decode

Felix Fietkau <[email protected]>
wifi: mt76: cancel reset and rc work on device unregister

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: don't leak MLD group index on remap alloc failure

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: reserve space for the CSA-abort countdown TLV

Felix Fietkau <[email protected]>
wifi: mt76: fix ER-SU 106-tone RU check in RX rate decode

Felix Fietkau <[email protected]>
wifi: mt76: decode the full VHT Rx STBC capability field

Felix Fietkau <[email protected]>

    wifi: mt76: mt7996: hold dev->mt76.mutex while disabling tx worker in SER

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: unwind state on add_interface failure

Felix Fietkau <[email protected]>
wifi: mt76: fix out-of-bounds access in mmio copy helpers

Felix Fietkau <[email protected]>

    wifi: mt76: mt7996: bound TLV walk in mt7996_mcu_get_chip_config

Felix Fietkau <[email protected]>
wifi: mt76: fix HE DCM max-RU capability encoding

Rex Lu <[email protected]>
wifi: mt76: check txfree done event on the WED hw path

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: poll the correct SLP CTRL register for the second adie

Felix Fietkau <[email protected]>
wifi: mt76: fix RXDMAD_C buffer recycling race

Felix Fietkau <[email protected]>
wifi: mt76: fix uninitialised RXDMAD_C descriptor info

Felix Fietkau <[email protected]>
wifi: mt76: fix stranded frames in mt76_txq_schedule_pending

Felix Fietkau <[email protected]>
wifi: mt76: fix 4th chain ACK RSSI bitmask in sta_poll

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: write RX header translation bit to the correct register

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: don't report a zero TX bitrate

Felix Fietkau <[email protected]>

    wifi: mt76: mt7915: avoid nss underflow in mt7915_mcu_get_sta_nss

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: clear wcid mask under mutex after RCU pointer clear

Felix Fietkau <[email protected]>
wifi: mt76: mt7996: set MT76_MCU_RESET before waking MCU waiters on full reset

Felix Fietkau <[email protected]>

    wifi: mt76: mt7996: validate RX band_idx before dereferencing phys[]

Michael-CY Lee <[email protected]>
wifi: mt76: assign link_id when sending probe request during scan

Michael-CY Lee <[email protected]>
wifi: mt76: fix non-AQL packet accounting for MLO stations

Peter Chiu <[email protected]>
wifi: mt76: mt7996: fix MLD ID in MAC TXD and HIF TXP

Rex Lu <[email protected]>
wifi: mt76: fix RX data queuing of RRO 3.0

Shayne Chen <[email protected]>
wifi: mt76: mt7996: fix capability of EHT-MCS 15 in MRU

Chad Monroe <[email protected]>
wifi: mt76: mt7996: fix non-MLD station num_sta leak

Chad Monroe <[email protected]>
wifi: mt76: mt7996: fix EAPOL source BSS for non-MLD stations

Eason Lai <[email protected]>
wifi: mt76: mt792x: Fix memory leak in SDIO TX path

Jared.Huang <[email protected]>
wifi: mt76: mt7925: fix msg len mismatch between driver and firmware

Jared.Huang <[email protected]>
wifi: mt76: mt7925: update clc before setting sar power table

Sean Wang <[email protected]>
wifi: mt76: mt7927: set band index for sniffer mode

Eason Lai <[email protected]>
wifi: mt76: mt7921: Add PCIe AER handler support to prevent system crash

Eason Lai <[email protected]>
wifi: mt76: mt792x: fix use-after-free in mt76_rx_poll_complete

Sean Wang <[email protected]>
wifi: mt76: add init_wiphy callback

Sean Wang <[email protected]>
wifi: mt76: mt7925: add NAN MCU helpers

Sean Wang <[email protected]>
wifi: mt76: connac: add NAN connection type

Zhi-Jun You <[email protected]>

    wifi: mt76: mt7915: fix net_fill_forward_path for non-DBDC mt7986

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

Sean Wang <[email protected]>
wifi: mt76: mt792x: stop USB register access after bus hang

Shayne Chen <[email protected]>
wifi: mt76: fix handling channel context with different bands in mt76_switch_vif_chanctx()

Devin Wittmayer <[email protected]>
wifi: mt76: mt76x02: do not WARN on invalid rx descriptor length

Dmitry Gomzyakov <[email protected]>

    wifi: mt76: connac: add MT7991A (0x7991) to is_mt7996()

Yichong Chen <[email protected]>
fanotify: report full event length for FIONREAD

Muhammad Usama Anjum <[email protected]>
misc: sgi-gru: remove interrupt-context page-table walks

Abdun Nihaal <[email protected]>
misc: vmc_vmci: Fix potential memory leak in vmci_event_subscribe()

Jinjie Ruan <[email protected]>
powerpc/crash: Fix possible memory leak in update_crash_elfcorehdr()

Rosen Penev <[email protected]>
powerpc/44x: Set GPIO chip parent

Christophe Leroy (CS GROUP) <[email protected]>
powerpc: implement get_direction() in cpm2

Mukesh Kumar Chaurasiya (IBM) <[email protected]>
dma-resv: Fix undefined symbol when CONFIG_DMA_SHARED_BUFFER is disabled

Brian Foster <[email protected]>
iomap: release the folio batch on iomap callback failures

Karl Mehltretter <[email protected]>
dcache: keep shrink_dcache_for_umount() making progress on busy roots

Naveen Kumar Chaudhary <[email protected]>
locking/lockdep: Fix NULL pointer dereference in __lock_set_class()

Komal Bajaj <[email protected]>
pinctrl: qcom: shikra: Fix intr_target_width for summary interrupt routing

Martin Wilck <[email protected]>
md/raid1: create serial pool adding rdev to array with serialize_policy=1

Yu Peng <[email protected]>
fs: annotate inode timestamp accessors

Can Peng <[email protected]>
i3c: master: adi: add OF module alias for autoloading

Jakub Kicinski <[email protected]>
i3c: dw: avoid shift-out-of-bounds when DAA assigns no devices

Aneesh Kumar K.V (Arm) <[email protected]>
swiotlb: Preserve allocation virtual address for dynamic pools

Aneesh Kumar K.V (Arm) <[email protected]>
iommu/dma: Check atomic pool allocation result directly

Chen Cheng <[email protected]>
md: scope memalloc_noio to allocation critical sections

Chen Cheng <[email protected]>
md/bitmap: resume array on backlog_store() error path

Vladimir Zapolskiy <[email protected]>
clk: qcom: Return expected ENOMEM error on dynamic allocation failure

Imran Shaik <[email protected]>
clk: qcom: gpucc-qcm2290: Park RCG's clk source at XO during disable

Imran Shaik <[email protected]>
clk: qcom: gpucc-qcm2290: Keep the critical clocks always-on from probe

Imran Shaik <[email protected]>
clk: qcom: gpucc-qcm2290: Move to the latest common qcom_cc_probe() model

Imran Shaik <[email protected]>
clk: qcom: gpucc-qcm2290: Drop pm_clk handling

Imran Shaik <[email protected]>
clk: qcom: qcm2290: Update DISPCC and GPUCC GDSC *wait_val values

Imran Shaik <[email protected]>
clk: qcom: qcm2290: Add RETAIN_FF_ENABLE flag for DISPCC and GPUCC GDSCs

Imran Shaik <[email protected]>
clk: qcom: qcm2290: Set POLL_CFG_GDSCR flag for DISPCC and GPUCC GDSCs

Imran Shaik <[email protected]>
clk: qcom: dispcc-qcm2290: Enable runtime PM support

Imran Shaik <[email protected]>
clk: qcom: dispcc-qcm2290: Move to the latest common qcom_cc_probe() model

Taniya Das <[email protected]>
clk: qcom: negcc-nord: keep GPU2 CFG clock enabled via critical CBCR

Taniya Das <[email protected]>
clk: qcom: gcc-nord: mark PCIe link clocks as critical

Taniya Das <[email protected]>
clk: qcom: negcc-nord: use clk_regmap_phy_mux for USB3 pipe clock srcs

Taniya Das <[email protected]>
clk: qcom: nord: use BRANCH_HALT_SKIP for PHY pipe clocks

Abel Vesa <[email protected]>
arm64: dts: qcom: eliza: Add fallback compatible for ADSP remoteproc

Stanislav Kinsburskii <[email protected]>
lib/test_hmm: fail dmirror_fault() when the mirrored mm is gone

Alexis Savery <[email protected]>
platform/chrome: lightbar: Limit payload to max packet size

Pu Lehui <[email protected]>
bpf: Fix potential UAF when reading bpf link info

Pu Lehui <[email protected]>
bpf: Fix potential UAF in bpf_netns_link_update_prog

Hongyan Xu <[email protected]>
power: supply: sc2731_charger: cancel work on remove

Hongyan Xu <[email protected]>
power: supply: isp1704_charger: cancel work on remove

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs6490-rb3gen2-industrial-mezzanine: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs6490-rb3gen2: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs6490-thundercomm-minipc-g1iot: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: qcs6490-radxa-dragon-q6a: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: lemans-evk-ifp-mezzanine: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: monaco-evk-ifp-mezzanine: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: monaco-monza-som: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: monaco: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: lemans: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: talos: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8750: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8650: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8550: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8450: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8350: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8250: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sm8150: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sdm845: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>

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

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: sar2130p: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: kodiak: Fix the PCIe iommu-map entries

Manivannan Sadhasivam <[email protected]>
arm64: dts: qcom: kaanapali: Fix the PCIe iommu-map entries

Dawid Wróbel <[email protected]>
arm64: dts: qcom: sm8250-xiaomi-elish: correct the board ID

Imran Shaik <[email protected]>
arm64: dts: qcom: talos: Fix cpu6 1094.4MHz OPP frequency typo

Konrad Dybcio <[email protected]>
arm64: dts: qcom: glymur: Fix PDC IRQ mapping

Keith Busch <[email protected]>
block: fix dio leak on metadata mapping error

Mukesh Ojha <[email protected]>
firmware: qcom: scm: Fix tzmem state on probe retry

Mukesh Ojha <[email protected]>
firmware: qcom: scm: Fix reserved memory cleanup on probe failure

Mukesh Ojha <[email protected]>
firmware: qcom: scm: Fix NULL dereference in IRQ handler before __scm is published

Yuvaraj Ranganathan <[email protected]>
firmware: qcom: scm: instrument SMC call path with tracepoints

Yuvaraj Ranganathan <[email protected]>
firmware: qcom: scm: add trace events for the SMC call interface

Konrad Dybcio <[email protected]>

    arm64: dts: qcom: sc8280xp-crd: Fix the pin index for misc_3p3_reg_en

Pradyot Kumar Nayak <[email protected]>
arm64: dts: qcom: glymur-crd: Add FocalTech ft3d81 touchscreen support

Konrad Dybcio <[email protected]>
soc: qcom: pmic_glink_altmode: Define the TBT extradata properly

Dmitry Baryshkov <[email protected]>
clk: qcom: gcc-qcm2290: don't park QUP RCGs upon registration

Krishna Kurapati <[email protected]>
arm64: dts: qcom: qcs404: Fix DTBS Check errors in usb controller nodes

Konrad Dybcio <[email protected]>
arm64: dts: qcom: sdm632-motorola-ocean: Fix LED default trigger property

Konrad Dybcio <[email protected]>
arm64: dts: qcom: msm8976-longcheer-l9360: Fix accidental node override

Konrad Dybcio <[email protected]>
arm64: dts: qcom: msm8998: Don't pull-up I2C pins by default in sleep

Itai Handler <[email protected]>

    rcu: Mark accesses to ->rcu_urgent_qs and ->rcu_need_heavy_qs

Manivannan Sadhasivam <[email protected]>
PCI: dwc: ep: Clear MSI iATU mapping in dw_pcie_ep_cleanup()

Abd-Alrhman Masalkhi <[email protected]>
md/raid10: consistently fail atomic writes that require splitting

Abd-Alrhman Masalkhi <[email protected]>
md/raid1: restrict atomic write limits and handle runtime constraints

Jeff Johnson <[email protected]>
wifi: ath11k: fix stride mismatch in mac_phy_caps_parse()

Jeff Johnson <[email protected]>
wifi: ath12k: fix stride mismatch in mac_phy_caps_parse()

Fushuai Wang <[email protected]>
Revert "serial: 8250: Clear CON_PRINTBUFFER on port re-registration"

Cheng-Han Wu <[email protected]>
selftests/zram: fix kernel_gte() for POSIX sh

Abd-Alrhman Masalkhi <[email protected]>
md: recheck spare changes before starting sync

Abd-Alrhman Masalkhi <[email protected]>
md: remove REQ_NOWAIT support from raid1/10/456

Thomas Weißschuh <[email protected]>
tools/nolibc/powerpc: mark ctr and xer as clobbered by system call

Yichong Chen <[email protected]>
fanotify: stop permission watchdog when timeout is zero

Chen Cheng <[email protected]>
md/raid5: protect lockless recovery_offset accesses during reshape

Lorenzo Bianconi <[email protected]>
net: airoha: fix ETS QoS stats counter underflow and cross-channel corruption

Chen Cheng <[email protected]>
md/raid5: fix lockless max_nr_stripes reads

Sajal Gupta <[email protected]>
md/raid5-ppl: fix use-after-free in ppl_do_flush()

Chen Cheng <[email protected]>
md/raid5: protect bitmap batch counters aka seq_flush/seq_write consistency

Yuho Choi <[email protected]>
bus: mhi: host: Fix controller cleanup on EDL sysfs failure

Manivannan Sadhasivam <[email protected]>
bus: mhi: host: Flush the posted write after writing to MHI_SOC_RESET_REQ_OFFSET

Abdun Nihaal <[email protected]>
wifi: rtlwifi: pci: fix error path in rtl_pci_probe()

Hongyan Xu <[email protected]>
platform/chrome: cros_ec_debugfs: Unregister panic notifier

Hongyan Xu <[email protected]>
platform/chrome: cros_ec_debugfs: Clean up console log on probe failure

Surendra Singh Chouhan <[email protected]>
regulator: tps65185: handle gpiod_get_value_cansleep() error returns

Jens Remus <[email protected]>

    s390/vdso: Pass --eh-frame-hdr to the linker

Dan Carpenter <[email protected]>
media: stm32: dcmi: fix some error handling bugs in probe()

Hungyu Lin <[email protected]>
media: qcom: iris: handle runtime PM resume failure in core deinit

Dikshita Agarwal <[email protected]>
media: qcom: iris: Remove duplicate HFI_PROP_OPB_ENABLE entry

Dikshita Agarwal <[email protected]>
media: qcom: iris: Fix bitmask test in iris_allow_cmd()

Anna Maniscalco <[email protected]>
drm/msm: remove objects from evit list after pinning them

Ali Tariq <[email protected]>
PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe

Ali Tariq <[email protected]>
PCI: starfive: Fix Runtime PM handling and teardown ordering

Jeff Johnson <[email protected]>
wifi: ath12k: validate TLV length in process_tpc_stats()

Jeff Johnson <[email protected]>
wifi: ath11k: fix overreads in ath11k_wmi_process_csa_switch_count_event()

Jeff Johnson <[email protected]>
wifi: ath12k: fix overreads in ath12k_wmi_process_csa_switch_count_event()

Adrián Larumbe <[email protected]>
drm/panthor: Add vm_bind region with kbo range overlap check

Fan Wu <[email protected]>
spi: davinci: switch to managed controller allocation

Guixin Liu <[email protected]>
nvmet: reject out-of-range mdts values in configfs store

Guixin Liu <[email protected]>
nvme-pci: return error when parsing a quirk string fails

Guixin Liu <[email protected]>
nvme-fc: unmap cmd_iu DMA on rsp_iu mapping failure in init_request

Guixin Liu <[email protected]>
nvmet: fix return status of RMI log page on allocation failure

Yehyeong Lee <[email protected]>
IB/isert: reject login PDUs declaring more data than was received

Yehyeong Lee <[email protected]>
IB/isert: reject PDUs declaring more data than was received

Cong Nguyen <[email protected]>
media: staging/ipu7: fix async notifier leak on init error

Leon Romanovsky <[email protected]>
RDMA/cxgb4: free STAG index when TPT entry write fails

Leon Romanovsky <[email protected]>
RDMA/mlx5: Send cong param changes to the resolved port mdev

Leon Romanovsky <[email protected]>
RDMA/mlx5: Fix stack out-of-bounds read in cc_params debugfs

Leon Romanovsky <[email protected]>
RDMA/cxgb4: Fix dereg_skb leak and double free in write_tpt_entry()

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Make dtschema recognize the etherent PHY correctly on K3 com260 board

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Make dtschema recognize the etherent PHY correctly on K3 pico-itx board

Troy Mitchell <[email protected]>
clk: spacemit: k3: fix missing /2 factor in i2s sysclk dividers

David Strahan <[email protected]>
scsi: smartpqi: Fix AIO retry marker cleared by SCSI core between dispatches.

Ryusuke Konishi <[email protected]>
nilfs2: fix BUG in nilfs_copy_dirty_pages() on dirty state mismatch

David Lee <[email protected]>
nilfs2: prevent out-of-bounds read in super root block parsing

Joshua Crofts <[email protected]>
nilfs2: fix infinite loop in nilfs_clean_segments()

Alexey Charkov <[email protected]>
clk: rockchip: Fractional PLL coefficient on RK3588/RK3576 is two's complement

Alexey Charkov <[email protected]>
clk: rockchip: Fix the fractional part denominator on RK3588/RK3576 PLLs

Gary Guo <[email protected]>
PCI: Fix UAF when probe runs concurrent to dyn ID removal

Gary Guo <[email protected]>
PCI: Fix dyn_id add TOCTOU

Gary Guo <[email protected]>
PCI: Make pci_match_one_device() match on ID instead of device

Akari Tsuyukusa <[email protected]>
clk: mediatek: mt8135: Fix inverted gate control for devapc_ck

longlong yan <[email protected]>
clk/x86: pmc_atom: add kasprintf return value check

Myeonghun Pak <[email protected]>
clk: palmas: Manage external-control prepare with devm

Kostas Damaskinakis <[email protected]>
clk: eswin: Zero-initialize stack-allocated clk_init_data

Louis-Alexis Eyraud <[email protected]>
clk: mediatek: pllfh: Fix IO remapping leak in register_pllfhs error path

Guangshuo Li <[email protected]>
clk: tegra: tegra124-emc: put EMC node on register failure

Ondrej Jirman <[email protected]>
arm64: dts: allwinner: sun50i-a64-pinephone: Fix mpu6050 mount matrix

Zhao Li <[email protected]>
wifi: mac80211: fix per-STA profile length in cross-link CSA parsing

Alain Volmat <[email protected]>
media: stm32: dcmi: fix error handling on MDMA pool alloc failure

Yonatan Nachum <[email protected]>
RDMA/efa: Fix PBL chunk length computation

Peiyang He <[email protected]>
RDMA/rxe: Fix UAF in ODP init error-handling path

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Fix VINTF0 leak on the init-failure path

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Require exactly one Stream ID for a vSID

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Free the error IRQ before tearing down VINTFs

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Don't fall back to a freed smmu after devm_krealloc()

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Don't run the error ISR before probe sets up vintfs

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Synchronize the error ISR against VINTF (de)init

Nicolin Chen <[email protected]>
iommu/tegra241-cmdqv: Publish an LVCMDQ only after it is fully initialized

Weiming Shi <[email protected]>
fs/ntfs3: reject restart table growth beyond U16_MAX entries

Ivy Lopez <[email protected]>
staging: rtl8723bs: use kfree_sensitive() for key material

Ananthu C V <[email protected]>
arm64: dts: qcom: glymur: fix SoCCP memory mappings

Bjorn Andersson <[email protected]>
remoteproc: qcom: q6v5: Request shutdown if crash is triggered host-side

Jingyi Wang <[email protected]>
remoteproc: qcom: pas: Add late attach support for subsystems

Bjorn Andersson <[email protected]>
remoteproc: Prevent crash handling to race with rproc_del()

Jingyi Wang <[email protected]>
remoteproc: core: Attach rproc asynchronously in rproc_add() path via schedule_work()

Bjorn Andersson <[email protected]>
remoteproc: Allow shutdown of crashed processors

K Prateek Nayak <[email protected]>
cpufreq/amd-pstate: Set min_limit_freq based on bios_min_perf

Ian Rogers <[email protected]>
perf annotate: Be robust to annotating without a thread

Ian Rogers <[email protected]>
perf ui hists: In report UI ensure thread is set with reference counting

Alexandre Courbot <[email protected]>
gpu: nova-core: fix packed registry table size

Zhi Wang <[email protected]>
gpu: nova-core: build SetRegistry entries dynamically

Tejun Heo <[email protected]>
sched_ext: Abort directly from the hardlockup handler

Cheng-Yang Chou <[email protected]>
sched_ext: Fix exit_cpu accuracy for lockup paths

Babanpreet Singh <[email protected]>

    w1: ds2482: Fix signedness bug in ds2482_w1_triplet()

Fan Wu <[email protected]>
spi: oc-tiny: switch to managed controller allocation

Myeonghun Pak <[email protected]>
clk: mediatek: mt6735: Unregister PLLs on probe failure

Manivannan Sadhasivam <[email protected]>
PCI/pwrctrl: tc9563: Power off only the external ports in tc9563_pwrctrl_disable_port()

Manivannan Sadhasivam <[email protected]>
PCI/pwrctrl: tc9563: Fix parsing the integrated Ethernet MAC Endpoint node

Yichong Chen <[email protected]>
isofs: release zisofs block pointer buffer head

Sumeet Pawnikar <[email protected]>
powercap: intel_rapl_tpmi: Handle PMU registration failure during probe

Rakesh Kota <[email protected]>
thermal/drivers/qcom-spmi-adc-tm5: Drop IIO_VAL_INT check in adc_tm5_get_temp

Christian Marangi <[email protected]>
thermal/drivers/airoha: Fix copy paste error for sen internal

Christian Marangi <[email protected]>
thermal/drivers/airoha: Fix copy paste error on clamp_t low temp

Rafael J. Wysocki <[email protected]>
ACPI: bus: Avoid confusing complaints regarding missing _OSC features

Maher Sanalla <[email protected]>
RDMA/mlx5: Fix integer overflow of user QP buffer size

Can Peng <[email protected]>
crypto: keembay - publish OF module alias for OCS AES/SM4

Linmao Li <[email protected]>
crypto: keembay - Initialize completion before requesting IRQ

Li Qiang <[email protected]>
scsi: ufs: debugfs: Reserve space for a string terminator

Li Qiang <[email protected]>
scsi: ufs: rpmb: Validate request frame length before parsing

Li Qiang <[email protected]>
scsi: ufs: core: Validate connected lane counts

Li Qiang <[email protected]>
scsi: ufs: Avoid NULL CQE dereference when reporting invalid tags

Li Qiang <[email protected]>
scsi: ufs: core: Validate string descriptors

Babanpreet Singh <[email protected]>
power: supply: sbs-battery: Use a per-device serial number buffer

Kohei Enju <[email protected]>
arm64: RSI: fix field-spanning write warning in attestation token init

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Fix phy id check for the phy on com260 board

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Fix phy id check for the phy on pico-itx board

James Clark <[email protected]>
tools/build: Allow versioning of all LLVM tools defined in Makefile.include

Justin Yeh <[email protected]>
pinctrl: mediatek: free EINT resources on unbind

Justin Yeh <[email protected]>
pinctrl: mediatek: use devm_gpiochip_add_data() for GPIO chip

David Matlack <[email protected]>
liveupdate: Remember FLB retrieve() status

David Matlack <[email protected]>
liveupdate: Reference count outgoing FLB data

Jackie Liu <[email protected]>
liveupdate: reject nonzero reserved value for SESSION_FINISH

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Add enough deassert time for the PHY on com260 board

Inochi Amaoto <[email protected]>
riscv: dts: spacemit: Add enough deassert time for the PHY on PICO ITX

Aurelien Jarno <[email protected]>
riscv: dts: spacemit: improve RTL8211F PHY configuration on K3 Pico-ITX board

Shivendra Pratap <[email protected]>
power: reset: reboot-mode: Remove devres based allocations

Alison Schofield <[email protected]>
cxl/region: Fix use-after-free in find_pos_and_ways() error path

Julian Braha <[email protected]>
pinctrl: fix unmet dependencies from missing GPIOLIB

Feng Yang <[email protected]>
selftests/bpf: Fix memory leak on subtest_states reallocation

Feng Yang <[email protected]>
selftests/bpf: Fix missing allocation null checks in test_progs.c

Feng Yang <[email protected]>
selftests/bpf: Fix incorrect error checking for pthread_create

Leon Hwang <[email protected]>
bpf: Fix WARNING in bpf_tracing_link_release

Karl Mehltretter <[email protected]>
ARM: lpc32xx: only run SoC init on LPC32xx hardware

Mykyta Yatsenko <[email protected]>
bpf: Fix CFI mismatch in task work callback

Fabio Estevam <[email protected]>
arm64: dts: rockchip: Fix rk3566-bigtreetech-cb2 touchscreen property

Fabio Estevam <[email protected]>
arm64: dts: rockchip: Fix Gru WLAN sideband interrupt

Damon Ding <[email protected]>
arm64: dts: rockchip: Add missing hclk for RK3588 eDP1

Damon Ding <[email protected]>
arm64: dts: rockchip: Add missing hclk for RK3588 eDP0

Namjae Jeon <[email protected]>
exfat: fix valid_size extension over a shared writable mapping

Osama Abdelkader <[email protected]>
drm/panthor: return PTR_ERR() from devm_drm_dev_alloc()

Weiming Wu <[email protected]>
fs/ntfs3: fix out-of-bounds read of INDEX_ROOT in reparse/objid init

Florian Westphal <[email protected]>
netfilter: nf_nat_sip: rewind offset when NAT shrinks the packet

Can Peng <[email protected]>
drm/tve200: add OF module alias for autoloading

Aaron Tomlin <[email protected]>
perf trace: Correct default cpumask formatting to hexadecimal

Ian Rogers <[email protected]>
perf cap: Remove used_root parameter and simplify capability checks

Troy Mitchell <[email protected]>
ASoC: spacemit: rename clock inputs to match binding

Jerome Brunet <[email protected]>
clk: sunxi-ng: mux: fix determine helper rate propagation

Cosmo Chou <[email protected]>
leds: pca9532: Fix phantom device registration on missing hardware

Malaya Kumar Rout <[email protected]>
PM: hibernate: Fix memory leak in snapshot_write_next() error path

Leon Romanovsky <[email protected]>
RDMA/erdma: complete object teardown when the destroy command fails

Sanghyun Park <[email protected]>
xfrm: Fix skb double-free in xfrm_dev_direct_output()

Leo Yan <[email protected]>
perf cs-etm: Avoid truncating AUX buffer sizes to int

Leo Yan <[email protected]>
perf cs-etm: Flush thread stacks after decoder reset

Eliot Courtney <[email protected]>
gpu: nova-core: correct RISC-V HALTED field

Icenowy Zheng <[email protected]>
riscv: dts: thead: th1520: remove pclk for I2C1

Junhui Liu <[email protected]>
riscv: dts: spacemit: k1: Split gmac_clk_ref into independent pinctrl groups

Aurelien Jarno <[email protected]>
riscv: dts: spacemit: set console baud rate on K3 Pico-ITX board

Christophe Leroy (CS GROUP) <[email protected]>
bitmap: Properly initialise destination bitmap for scatter & gather test

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unrequest devices if driver registration fails

Sudeep Holla <[email protected]>
firmware: arm_scmi: Roll back partial protocol table registration

EDAMAMEX <[email protected]>
cpufreq/amd-pstate: handle missing policy in dynamic EPP callbacks

Marco Scardovi <[email protected]>
cpufreq/amd-pstate: Toggle auto_sel in active mode on shared memory systems

Marco Scardovi <[email protected]>
cpufreq/amd-pstate: Fix EPP return type and handle errors during initialization

Qianheng Peng <[email protected]>
cpufreq: amd-pstate-ut: Skip tests when amd-pstate driver is not active

Andre Przywara <[email protected]>
ARM: dts: allwinner: a10: Fix PMU interrupt

Zhang Yi <[email protected]>
ext4: skip tail block zeroing for inline data files

Xiang Mei <[email protected]>
ext4: check dir entry fits before reading the hash trailer in ext4_search_dir()

Guanghui Yang <[email protected]>
ext4: fix buffer_head leak in ext4_init_orphan_info

Selvin Xavier <[email protected]>
RDMA/bnxt_re: Clear VM_MAYWRITE on DBR/toggle page mmap

Jeff Johnson <[email protected]>
wifi: ath11k: Avoid buffer overread in ath11k_wmi_tlv_op_rx()

Jeff Johnson <[email protected]>
wifi: ath12k: Avoid buffer overread in ath12k_wmi_op_rx()

Matthew Leach <[email protected]>
wifi: ath12k: fix survey indexing across bands

Jeff Johnson <[email protected]>
wifi: ath11k: Correctly copy the hint BSSID in WMI scan request

Jeff Johnson <[email protected]>
wifi: ath12k: Correctly copy the hint BSSID in WMI scan request

Aaradhana Sahu <[email protected]>
wifi: ath12k: allocate HOST_DDR and BDF regions after Q6 RO region

Aaradhana Sahu <[email protected]>
wifi: ath12k: refactor QMI memory assignment

Aaradhana Sahu <[email protected]>
wifi: ath12k: switch to name-based reserved memory lookup

Jeff Johnson <[email protected]>
wifi: ath6kl: avoid buffer overreads in WMI event handlers

Miaoqing Pan <[email protected]>
wifi: ath12k: fix ML-STA authentication timeout on QCC2072

Manish Dharanenthiran <[email protected]>
wifi: ath12k: advertise ieee_link_id in vdev start MLO params

Tamizh Chelvam Raja <[email protected]>
wifi: ath12k: Set IEEE80211_OFFLOAD_ENCAP_4ADDR after tx_encap_type vdev param

Tamizh Chelvam Raja <[email protected]>
wifi: ath12k: Advertise multicast Ethernet encapsulation offload support

Yao Kai <[email protected]>
ext4: validate readdir offset before accessing dirent

Aditya Prakash Srivastava <[email protected]>
ext4: use fsdata to track inline data write state and fix race

Baokun Li <[email protected]>
ext4: drain in-flight DIO before buffered write fallback

Gerald Yang <[email protected]>
ext4: clear stale xarray tags on folios skipped during writeback

Aditya Prakash Srivastava <[email protected]>
ext4: fix ABBA deadlock in ext4_xattr_inode_cache_find()

Pengpeng Hou <[email protected]>
thermal: intel: int3400: clean up ODVP on probe failures

Nicolin Chen <[email protected]>
iommu/arm-smmu-v3: Declare eats_s1chk and eats_trans as host-endian u64

Mukesh Ojha <[email protected]>
iommu/qcom: Fix inverted fault report check in qcom_iommu_fault()

Haoxiang Li <[email protected]>
iommu/qcom: Remove sysfs device on probe failure path

Li RongQing <[email protected]>
iommu/amd: Fix undefined behavior in devid_write debugfs function

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix requested device removal race

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in ib_dealloc_pd_user()

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in uverbs_free_dmah()

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in ib_free_cq()

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in counter_release()

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in ib_destroy_srq_user()

Patrisious Haddad <[email protected]>
RDMA/core: Fix potential use after free in ib_destroy_cq_user()

Patrisious Haddad <[email protected]>
RDMA/core: Fix use after free in ib_query_qp()

Patrisious Haddad <[email protected]>
RDMA/core: Add rdma_restrack_begin/abort/commit_del() operations

Leon Romanovsky <[email protected]>
RDMA/mana_ib: drain QP references after partial table insertion

Myeonghun Pak <[email protected]>
RDMA/erdma: Fix CEQ tasklet use-after-free on removal

Takuma Fujiwara <[email protected]>
PCI: j721e: Fix incorrect max_lanes for J7200

Leon Romanovsky <[email protected]>
RDMA/srpt: Pass the mapped task attribute to target_init_cmd()

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark bpf_refcount field as unique

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Preserve unique-field state across nested structs

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Fix offset warn check for bpf_res_spin_lock

Kohei Enju <[email protected]>
virt: arm-cca-guest: use migrate_disable() for attestation token requests

Rafael J. Wysocki <[email protected]>
ACPI: battery: Adjust charging status validation check

Feng Jiang <[email protected]>
bpf, riscv: Fix extable handling for arena load_acquire

Pu Lehui <[email protected]>
riscv, bpf: Fix kernel stack corruption in tailcall with CFI

Pu Lehui <[email protected]>
riscv, bpf: Fix memory leak in bpf_jit_free

Ricardo B. Marlière <[email protected]>
libbpf: Search /lib64 and /lib in resolve_full_path()

Ricardo B. Marlière <[email protected]>
selftests/bpf: Fix lsm_bdev dev_t encoding mismatch

Ricardo B. Marlière <[email protected]>
selftests/bpf: Fix make install target

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Zero queue and stack outputs on lock failure

Yousef Alhouseen <[email protected]>
platform/x86: acer-wmi: reject missing gaming WMI results

Yun Zhou <[email protected]>
ext4: skip extra isize expansion during mount to prevent deadlock

Xiang Mei <[email protected]>
ext4: fix out-of-bounds read in ext4_read_inline_dir()

Yun Zhou <[email protected]>
ext4: fix circular lock dependency in ext4_ext_migrate

Chen Pei <[email protected]>
ACPI: PCI: Clear driver_data on all paths that free the acpi_pci_root

Pengpeng Hou <[email protected]>
ACPI: processor: validate MADT IOAPIC entry bounds

Zhu Ling <[email protected]>
ACPI: EC: Avoid _REG disconnect on GPIO IRQ defer

Pengpeng Hou <[email protected]>
RDMA/nldev: validate dynamic counter attribute length

Kemeng Shi <[email protected]>
irqchip/gic-v3-its: Prevent leak in its_vpe_irq_domain_alloc()

Gary Guo <[email protected]>
samples: rust: debugfs: fix excessive stack use

Gary Guo <[email protected]>
rust: device: make lifetime on Core and CoreInternal invariant

Viktor Malik <[email protected]>
selftests/bpf: Silence maybe-uninitialized compiler warning in libarena

Viktor Malik <[email protected]>
selftests/bpf: Silence array bounds warning in global_map_resize

Viktor Malik <[email protected]>
selftests/bpf: Check malloc result with ASSERT_NEQ in test_sha256

Viktor Malik <[email protected]>
selftests/bpf: Check malloc result with ASSERT_NEQ in test_loader

Pawan Gupta <[email protected]>
x86/bugs: Don't use cpu-type matching in cpu_vuln_blacklist

Frank Li <[email protected]>
arm64: dts: imx8-ss-audio: Fix LPCG clock indices for ASRC0

Marco Elver <[email protected]>
kcsan: avoid unintended access checking in NMIs

TanZheng <[email protected]>
RDMA/srpt: Fix srpt_alloc_rw_ctxs() unwind counters

Leon Romanovsky <[email protected]>
RDMA/bnxt_re: Validate udata before executing commands

Jacob Moroni <[email protected]>
RDMA/core: Add ib_no_udata_io() helper

Ibrahim Hashimov <[email protected]>

    RDMA/rxe: Validate num_sge/cur_sge before indexing wqe->dma.sge[]

Danila Chernetsov <[email protected]>
RDMA/hfi1: Propagate sdma_txinit_ahg() errors

Jun Yan <[email protected]>
arm64: dts: amlogic: meson-axg-s400: enable mipi_pcie_analog_dphy for PCIe

Jun Yan <[email protected]>
arm64: dts: amlogic: meson-axg: Add missing nand_rb0 pin to nand_all_pins

Can Peng <[email protected]>
phy: starfive: Fix runtime PM cleanup in JH7110 DPHY RX probe

Can Peng <[email protected]>
phy: starfive: Fix runtime PM cleanup in JH7110 DPHY TX probe

Rodrigo Alencar <[email protected]>
iio: dac: ad5686: missing NULL check on match data

Linmao Li <[email protected]>
ASoC: meson: Keep link pointers valid on realloc failure

Koichiro Den <[email protected]>
dmaengine: dw-edma: Clear stale requests on termination

Koichiro Den <[email protected]>
dmaengine: dw-edma: Serialize channel state checks

Koichiro Den <[email protected]>
dmaengine: dw-edma: Serialize abort state updates

Koichiro Den <[email protected]>
dmaengine: dw-edma: Terminate all descriptors without callbacks

Leon Hwang <[email protected]>
bpf: Disallow interpreter fallback for BPF_ADDR_PERCPU insn

Leon Hwang <[email protected]>
bpf: Disallow interpreter fallback for gotox insn

Leon Hwang <[email protected]>
bpf: Disallow interpreter fallback for arena-related insns

Yiyang Chen <[email protected]>
bpf: Reject arena frees below the arena base

Abel Vesa <[email protected]>
arm64: dts: qcom: glymur: Add CX power domain to GCC

Puranam V G Tejaswi <[email protected]>
drm/msm/a6xx: Fix RBBM_CLOCK_CNTL3_TP0 value in a730_hwcg

Yuho Choi <[email protected]>
driver core: soc: Unregister bus on early device registration failure

Alban Bedel <[email protected]>
software node: Fix software_node_get_reference_args() with index -1

Ewan D. Milne <[email protected]>
drivers: base: Remove statistics group if encryption group not created

Maíra Canal <[email protected]>
drm/v3d: Associate BOs with every job that accesses them

Maíra Canal <[email protected]>
drm/v3d: Convert submit helpers to operate on struct v3d_submit

Maíra Canal <[email protected]>
drm/v3d: Make v3d_get_cpu_indirect_csd_params() a pure parser

Maíra Canal <[email protected]>
drm/v3d: Introduce struct v3d_submit and convert CL/TFU/CSD ioctls

Maíra Canal <[email protected]>
drm/v3d: Migrate BO reservation locking to DRM exec

Maíra Canal <[email protected]>
drm/v3d: Extract v3d_job_add_syncobjs() helper

Maíra Canal <[email protected]>
drm/v3d: Drop unused drm_encoder.h include from v3d_drv.h

Namhyung Kim <[email protected]>
perf build: Fix compiler errors with old capstone

Ian Rogers <[email protected]>
perf ui hists: Fix uninitialized stack memory free on pstack allocation failure

zhouminqiang <[email protected]>
mtd: part: reject MTDPART_OFS_RETAIN in mtd_add_partition()

Ruoyu Wang <[email protected]>
mtd: mtdswap: Avoid freeing registered blktrans device twice

Guangshuo Li <[email protected]>
mtd: intel-dg: Fix runtime PM error path in probe

Pengpeng Hou <[email protected]>
soc: ti: knav_qmss: Remove debugfs file on teardown

Xiang Mei <[email protected]>

    vfio/pci: clear vdev->msi_perm after freeing it on init failure

Alex Mastro <[email protected]>
vfio: selftests: Avoid VLAs

Myeonghun Pak <[email protected]>
char: xilinx_hwicap: unregister class on init errors

Pei Xiao <[email protected]>
ipack: ipoctal: fix UAF, null-ptr-deref, and use-after-free in cleanup on remove

Linmao Li <[email protected]>
ppdev: prevent overflow when setting port timeout

Breno Leitao <[email protected]>
cacheinfo: don't propagate DT/ACPI error when arch supplies info (arm64)

Pengpeng Hou <[email protected]>
misc: lan966x_pci: depopulate children on populate failure

Pengpeng Hou <[email protected]>
misc: ad525x_dpot: use driver core groups for sysfs files

Gleb Markov <[email protected]>
misc: rtsx: add missing write register handling

Gui-Dong Han <[email protected]>
misc: bcm-vk: Use acquire/release for msgq_inited

Uwe Kleine-König (The Capable Hub) <[email protected]>
misc: pch_phub: Complete enum usage for device identification

Alexander Usyskin <[email protected]>
mei: lb: fix incorrect type in assignment

Pavel Zhigulin <[email protected]>
speakup: keyhelp: guard letter_offsets possible out-of-range indexing

Christophe JAILLET <[email protected]>
accessibility: speakup: Fix incorrect string length computation in report_char_chartab_status()

Yuho Choi <[email protected]>
uio: Fix stale info pointer in failed registration path

Arnd Bergmann <[email protected]>
gpib: use 'static inline' instead of 'extern inline'

Gui-Dong Han <[email protected]>
gpib: Move stuck SRQ update under lock

Alexander A. Klimov <[email protected]>
tlclk: if sscanf() fails, fall back to 0, not random value

Cong Nguyen <[email protected]>
staging: rtl8723bs: fix xmit_frame/xmit_buf leaks on mgnt-frame error paths

David Lee <[email protected]>
UDF symlink pathComponent header OOB read

Karl Mehltretter <[email protected]>
tty: hvc: restrict HVC_DCC to ARMv6+ and ARM64

Xu Yang <[email protected]>
usb: gadget: f_uac1_legacy: remove broken string configfs attributes

Rafael J. Wysocki <[email protected]>
ACPI: processor: idle: Expand _LPI package sanity checks

Narasimharao Vadlamudi <[email protected]>
crypto: aspeed - Propagate platform_get_irq() errors

Thorsten Blum <[email protected]>
crypto: sl3516 - drop invalid sg_dma_len checks before DMA mapping

Chia-Yuan Li <[email protected]>
wifi: rtw89: fw: use MAC source for IO offload delay command

Can Guo <[email protected]>
scsi: ufs: core: Avoid possible memory reclaim deadlock in TX EQTR context

Pu Lehui <[email protected]>
bpf: Sync tail_call_reachable with callee state on entry

Ruoyu Wang <[email protected]>
drm/msm: Only fini scheduler after successful init

Jie Zhang <[email protected]>
drm/msm: Fix task_struct reference leak in recover_worker

Jie Zhang <[email protected]>
drm/msm/a6xx: Fix IRQ storm during msm_recovery test

Jie Zhang <[email protected]>
drm/msm/a6xx: Fix A621 GPUCC register list for state capture

Jie Zhang <[email protected]>
drm/msm/a6xx: Fix A663 GPUCC register list for state capture

Jie Zhang <[email protected]>
drm/msm: Recover HW before retire hung submit

Shivam Rawat <[email protected]>
drm/msm/a6xx: Fix stale rpmh votes after suspend

Dan Carpenter <[email protected]>
drm/msm/adreno: fix use after free on error path in a6xx_gpu_init()

Mikko Perttunen <[email protected]>
gpu: host1x: Avoid stack over-read in debug output helpers

Mikko Perttunen <[email protected]>
gpu: host1x: Fix offset calculation in trace_write_gather

Mikko Perttunen <[email protected]>
gpu: host1x: Avoid double device_add when clients already present

Avraham Stern <[email protected]>
wifi: iwlwifi: mei: pass correct argument to function

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: guard against division by zero in iwl_dbg_tlv_alloc_fragments

Avraham Stern <[email protected]>
wifi: iwlwifi: mei: check SAP message length before reading it

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix off-by-one in TXF key sanitiser

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: fix counter type in iwl_fwrt_dump_error_logs

Namhyung Kim <[email protected]>
perf stat: Fix duplicate output with --for-each-cgroup

Praveen Talari <[email protected]>
spi: geni-qcom: Fix sticky ret causing wrong return value on invalid proto

Iker Pedrosa <[email protected]>
drm/solomon: remove unneeded variables in blit functions

Geert Uytterhoeven <[email protected]>
soc: renesas: r8a78000: Drop duplicate "default ARCH_RENESAS"

Abel Vesa <[email protected]>
clk: qcom: gcc-glymur: Enable runtime PM

Ian Rogers <[email protected]>
perf jevents: Add more components to the metric sorting order

Namhyung Kim <[email protected]>
perf sched: Free subcommand string after perf sched stats

Namhyung Kim <[email protected]>
perf sched: Fix memory leaks in perf sched stats report

Namhyung Kim <[email protected]>
perf sched: Add missing perf_session__delete()

Luca Weiss <[email protected]>
arm64: dts: qcom: milos: Add reset for sdhc_2

Dmitry Baryshkov <[email protected]>
arm64: dts: qcom: sm8250: correct frequencies in the Iris OPP table

Dmitry Baryshkov <[email protected]>
arm64: dts: qcom: sm8250: sort out Iris power domains

George Moussalem <[email protected]>
arm64: qcom: ipq5018: Add GEPHY RX and TX clocks

George Moussalem <[email protected]>
arm64: dts: qcom: ipq5018: Correct CMN PLL reference clock rate

Gopikrishna Garmidi <[email protected]>
arm64: dts: qcom: glymur-crd: merge duplicate &pmh0101_gpios node extensions

Abel Vesa <[email protected]>
arm64: dts: qcom: eliza: Enable first QUPv3 wrapper by default

Pengyu Luo <[email protected]>

    arm64: dts: qcom: sc8280xp-x13s: Fix the drive-strength of mclk pin

Konrad Dybcio <[email protected]>
arm64: dts: qcom: msm8996-xiaomi-gemini: Fix up ti,drv2604 enable GPIO

Denis V. Lunev <[email protected]>
x86/mm/pat: Take cpa_lock around large-page collapse

Maoyi Xie <[email protected]>
drm/bridge: tc358767: clamp the reported AUX read size to the request

Hongling Zeng <[email protected]>
perf: evsel: Fix error handling in tp_format lookup

Uday Khare <[email protected]>

    remoteproc: qcom: Fix glink->node reference leak in qcom_add_glink_subdev

Stephan Gerhold <[email protected]>
remoteproc: qcom_q6v5_mss: Fix MDM9607 subsystem control instance ID

Stephan Gerhold <[email protected]>
remoteproc: qcom_q6v5_mss: Make ssctl_id configurable per platform

Zhongqiu Han <[email protected]>
cpufreq: schedutil: Fix self-contradictory comment in sugov_iowait_apply()

Rafael J. Wysocki <[email protected]>
cpufreq: intel_pstate: Fix setting minimum P-state at init time

Anas Khan <[email protected]>
drm/amd/display: remove duplicate link_dp_panel_replay.h include

Dyllan Kobal <[email protected]>
drm/amd/display: fix wrong register field in dccg35_set_hdmistreamclk_src_new

Gleb Markov <[email protected]>
drm/amd/display: Remove unused-but-set variable hubp from

Geoffrey McRae <[email protected]>
drm/amd/display: Fix DM I2C teardown race

Gregor Herburger <[email protected]>
OPP: Fix cleanup ordering

Ruoyu Wang <[email protected]>
media: ipu6: Do not free aux device pdata after init

Eugen Hristev <[email protected]>
media: bcm2835-unicam: Fix asc leaked in error/remove path

Julian Braha <[email protected]>
media: platform: amd: fix unmet dependency for VIDEO_V4L2_SUBDEV_API

Biren Pandya <[email protected]>
media: i2c: rdacm21: Fix missing media_entity_cleanup()

Yemike Abhilash Chandra <[email protected]>
media: ti: vpe: Select V4L2_FWNODE for VIP

Qingshuang Fu <[email protected]>
irqchip/renesas-irqc: Fix generic interrupt chip leak on remove

Yuho Choi <[email protected]>
PCI: keystone: Fix OF node reference leak in init

Yuho Choi <[email protected]>
PCI: xgene: Drop unnecessary OF node reference

Dan Carpenter <[email protected]>
cpufreq: spear: Fix an IS_ERR() vs NULL bug in spear1340_set_cpu_rate()

John Groves <[email protected]>
dax: fix holder_ops race in fs_put_dax()

John Groves <[email protected]>
dax: read holder_ops once in dax_holder_notify_failure()

John Groves <[email protected]>
dax/fsdev: fail probe on invalid pgmap offset

John Groves <[email protected]>
dax/fsdev: use __va(phys) for kaddr in direct_access

John Groves <[email protected]>
dax/fsdev: clear pgmap ops and owner on unbind

John Groves <[email protected]>

    dax/fsdev: don't leave a dangling dev_dax->pgmap on probe failure

John Groves <[email protected]>
dax/fsdev: clear vmemmap_shift when binding static pgmap

John Groves <[email protected]>
dax/fsdev: fix multi-range offset in memory_failure handler

John Groves <[email protected]>
dax: fix misleading comment about share/index union in dax_folio_reset_order()

Bryam Vargas <[email protected]>
libnvdimm/labels: Bound the on-media label size before the shift

Liang Luo <[email protected]>
tools/sched_ext: scx_qmap: Fix stale API name in comment

Dan Carpenter <[email protected]>

    regulator: adp5055: Fix error code in adp5055_of_parse_cb()

Richard Cheng <[email protected]>
cxl/features: Clamp Get Feature output size to the remaining buffer

Richard Cheng <[email protected]>
cxl/features: Reject Set Features output buffer smaller than the header

Richard Cheng <[email protected]>
cxl/features: Reject Get Feature count larger than the output buffer

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix transport device teardown lookup

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix SCMI device destroy lifetimes

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unwind P2A receiver mailbox setup failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unwind TX receiver mailbox setup failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix OF node reference handling

Sudeep Holla <[email protected]>
firmware: arm_scmi: Clear SystemPower flag on create failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Drop handle on protocol bind failures

Sudeep Holla <[email protected]>
firmware: arm_scmi: Protect device request lookup with RCU

Sudeep Holla <[email protected]>
firmware: arm_scmi: Use channel ID for transport teardown

Sudeep Holla <[email protected]>
firmware: arm_scmi: Reject out of range DT protocol IDs

Sudeep Holla <[email protected]>
firmware: arm_scmi: Avoid IDR updates while cleaning channels

Sudeep Holla <[email protected]>
firmware: arm_scmi: Free transport channel on IDR failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Clean up channels on setup failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Quiesce notifications before teardown

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unregister device notifier before IDR teardown

Sudeep Holla <[email protected]>
firmware: arm_scmi: Publish channel state before callbacks

David Stevens <[email protected]>
x86/entry/fred: Encode frame pointer on entry

Baochen Qiang <[email protected]>
wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate

Wei Zhang <[email protected]>
wifi: ath12k: fix rx_mpdu_start layout for QCC2072

Baochen Qiang <[email protected]>
wifi: ath12k: fix MLO peer delete race

Baochen Qiang <[email protected]>
wifi: ath12k: fix dp_link_peer dangling references on AP vdev rollback

Kyle Zeng <[email protected]>
hfsplus: validate thread record before delete key rebuild

Alison Schofield <[email protected]>
cxl/port: Restart port enumeration when a sibling adds the dport first

Dave Jiang <[email protected]>
cxl/features: Serialize multi-part Get/Set Feature transfers

Dave Jiang <[email protected]>
cxl/pci: Honor -EPROBE_DEFER from component register setup

Dave Jiang <[email protected]>
cxl/mbox: Break poison list loop on an empty payload

Guzebing <[email protected]>
cxl/memdev: Fix firmware upload exact-fit handling

Li Ming <[email protected]>
cxl/test: Rework cxl_type2_mem_init() to use cxl_mock_platform_device_add()

Jason Gunthorpe <[email protected]>
iommufd: Simplify iommufd_device_remove_vdev()

Lad Prabhakar <[email protected]>
arm64: dts: renesas: r9a09g047: Fix PCIe dma-ranges memory space code

Lad Prabhakar <[email protected]>
arm64: dts: renesas: r9a09g056: Fix PCIe dma-ranges memory space code

Lad Prabhakar <[email protected]>
arm64: dts: renesas: rzt2h-n2h-evk: Remove unused MII/GMII pins

Vishnu Santhosh <[email protected]>
rpmsg: glink: fix deadlock in endpoint destroy during driver detach

Reinette Chatre <[email protected]>
fs/resctrl: Fix UAF from worker threads when domains are removed

Dmitry Ilvokhin <[email protected]>
perf record: Fix multiple PERF_RECORD_COMPRESSED2 records per push

Dmitry Ilvokhin <[email protected]>
perf record: Return the written size from process_comp_header()

Reinette Chatre <[email protected]>
fs/resctrl: Prevent use-after-free in rdtgroup_kn_put()

Liang Luo <[email protected]>
tools/sched_ext: scx_flatcg: Fix uninitialized stats on allocation failure

Hans Verkuil <[email protected]>
media: v4l2-async: Unregister sub-device if asc_list is empty

Sami Tolvanen <[email protected]>
rust: drm: gpuvm: require Send + Sync for the driver's associated data

yeeli <[email protected]>
iommufd/selftest: Fix dmabuf leak in iommufd_test_dmabuf_get()

Samuel Moelius <[email protected]>
iommufd/selftest: Avoid selftest dirty bitmap size wrap

Xiang Mei <[email protected]>
isofs: fix out-of-bounds page array access on empty zisofs block

James Calligeros <[email protected]>
ASoC: apple: mca: increase SERDES reset delay

Leon Romanovsky <[email protected]>
RDMA/hfi1: Initialize debugfs after probe completes

Leon Romanovsky <[email protected]>
RDMA/hfi1: Stop flushing the global IB workqueue

Leon Romanovsky <[email protected]>
RDMA/hfi1: Free RX data on late probe failure

Leon Romanovsky <[email protected]>
RDMA/hfi1: Preserve unit 0 on allocation failure

Leon Romanovsky <[email protected]>
RDMA/rvt: Return NULL after port allocation failure

Sean Rhodes <[email protected]>
misc: rtsx_usb: avoid USB I/O in runtime autosuspend

Pengpeng Hou <[email protected]>
pmdomain: bcm: bcm2835: handle genpd provider registration errors

Evgenii Burenchev <[email protected]>
ALSA: hpi: Check transport errors during HPI6000 adapter initialization

Maher Azzouzi <[email protected]>
esp: do not unref managed frag pages in esp_ssg_unref()

Xiang Mei <[email protected]>
xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full

Guangshuo Li <[email protected]>
crash_dump: release keyring reference at the correct time

Yuho Choi <[email protected]>
hwrng: ks-sa - Fix runtime PM cleanup on registration failure

Atish Patra <[email protected]>
crypto: ccp - Fix memory leak in SEV INIT_EX path

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

Dmitry Baryshkov <[email protected]>
Revert "drm/msm: dsi: fix PLL init in bonded mode"

Jens Glathe <[email protected]>
drm/msm/dp: add missing drm_edid_connector_update() before add_modes on cached EDID

Allison Henderson <[email protected]>
RDMA/rxe: Avoid reprocessing the current packet after the QP enters the error state

Leon Romanovsky <[email protected]>
RDMA/ipoib: Drain RCU callbacks during module teardown

Leon Romanovsky <[email protected]>
RDMA/mlx5: Drain RCU callbacks during module teardown

Leon Romanovsky <[email protected]>
RDMA/core: Wait for RCU callbacks before unloading ib_core

Mert Seftali <[email protected]>
iio: accel: dmard09: Implement IIO_CHAN_INFO_SCALE

Chih-Kang Chang <[email protected]>
wifi: rtw89: 8852a: fix RSSI report when average beacon RSSI is not ready

Leon Hwang <[email protected]>
bpf: Mark tracing_multi trampolines as ftrace managed

Nicholas Dudar <[email protected]>
bpf: Require a BPF cpumask for bpf_cpumask_populate()

Brian Masney <[email protected]>

    clk: qcom: camcc-sc8280xp: unregister CAMCC_GDSC_CLK

Pengpeng Hou <[email protected]>
bus: qcom-ebi2: use managed resources for clocks and children

Pengpeng Hou <[email protected]>
soc: qcom: rpmh-rsc: manage PM notifiers with devres

Yu Peng <[email protected]>
perf metricgroup: Fix metric expression copy leaks

Yixun Lan <[email protected]>
clk: spacemit: k3: fix parent clock of UFS aclk

Ian Rogers <[email protected]>
perf record: Fix teardown hang on system-wide multi-threaded sessions

Laxman Acharya Padhya <[email protected]>
drm/panel: samsung-s6d16d0: Power off on prepare failure

Xu Yang <[email protected]>
usb: chipidea: imx: fix missing ret assignment for dev_err_probe

Pengpeng Hou <[email protected]>
usb: typec: ucsi: gaokun: unwind notifier on UCSI register failure

Biju Das <[email protected]>
usb: renesas_usbhs: Fix power-off ordering on unbind

Fei Shao <[email protected]>
usb: mtu3: allow system suspend during active gadget connection

Linmao Li <[email protected]>
platform/surface: acpi-notify: Check ACPI companion before use

Linmao Li <[email protected]>
platform/mellanox: mlxbf-pmc: Check ACPI_COMPANION() against NULL

Marco Scardovi <[email protected]>
platform/x86: asus-wmi: fix resource leaks on probe failure

Gary Guo <[email protected]>
usb: fix UAF when probe runs concurrent to dyn ID removal

Ruoyu Wang <[email protected]>
usb: gadget: aspeed_udc: check endpoint DMA allocation

Maoyi Xie <[email protected]>
usb: ljca: bound bank_num in ljca_enumerate_gpio()

Xu Rao <[email protected]>
usb: typec: tcpm: fix EPR AVS APDO maximum voltage decoding

Michael Bommarito <[email protected]>
usb: gadget: configfs: fix out-of-bounds read of qw_sign

Nuno Sá <[email protected]>
usb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths

Qing Ming <[email protected]>
usb: gadget: uac: validate rate list length before storing

Guangshuo Li <[email protected]>
serial: qcom-geni: do not advance stale DMA completions

Yuho Choi <[email protected]>
serial: ma35d1: Fix OF node reference leaks in console init

Fushuai Wang <[email protected]>
serial: 8250: Clear CON_PRINTBUFFER on port re-registration

Ricardo Ribalda <[email protected]>
media: platform: amd: use refcount_t instead of atomic_t

Praveen Talari <[email protected]>
spi: qcom-geni: Fix missing error check on pm_runtime_get_sync()

Linmao Li <[email protected]>
platform/x86: asus-wireless: Fail probe when there is no ACPI match

Tengda Wu <[email protected]>
perf capstone: Fix kernel map reference count leak

Liang Luo <[email protected]>
selftests/sched_ext: Fix bpf_link leak on early return in prog_run

Wolfram Sang <[email protected]>
hwspinlock: propagate errno when registering single lock

Nicholas Dudar <[email protected]>
bpf: Reject rdonly/rdwr_buf_size kfunc arguments that exceed u32 max

Val Packett <[email protected]>
remoteproc: qcom_wcnss: Fix handling the lack of PD regulators in v3

Felix Gu <[email protected]>
remoteproc: qcom_q6v5_adsp: Fix reference leak for device node

Daniel Borkmann <[email protected]>
bpf: Drop scalar id on sign-extending narrowing stack fills

Armin Wolf <[email protected]>
platform/x86: lg-laptop: Fix LED resource handling

Armin Wolf <[email protected]>
platform/x86: dell-wmi-base: Fix handling of ultra performance key

Armin Wolf <[email protected]>
platform/x86: dell-wmi-base: Fix resource leak on module load failure

Armin Wolf <[email protected]>
platform/x86: dell-privacy: Fix race condition

Lorenzo Pieralisi <[email protected]>
ACPI: RISC-V: Fix riscv_acpi_add_prt_dep() loop handling

Lorenzo Pieralisi <[email protected]>
ACPI: RISC-V: Check acpi_get_handle() status in riscv_acpi_add_prt_dep()

Lorenzo Pieralisi <[email protected]>
ACPI: RISC-V: Fix riscv_acpi_irq_get_dep() loop termination

John Ogness <[email protected]>
printk: Fix possible console use-after-free

Manuel Fombuena <[email protected]>
leds: st1202: Validate LED reg property against channel count

Manuel Fombuena <[email protected]>
leds: st1202: Disable channel when brightness is set to zero

Manuel Fombuena <[email protected]>
leds: st1202: Fix brightness having no effect while pattern mode is active

Manuel Fombuena <[email protected]>
leds: st1202: Set all pattern PWM slots to full after clearing pattern

Manuel Fombuena <[email protected]>
leds: st1202: Fix spurious pattern sequence start in setup

Manuel Fombuena <[email protected]>
leds: st1202: Fix pattern duration prescaler and pattern_clear skip marker

Manuel Fombuena <[email protected]>
leds: st1202: Stop pattern sequence before reprogramming

Cosmo Chou <[email protected]>
leds: pca9532: Fix inverted GPIO output polarity

AngeloGioacchino Del Regno <[email protected]>
arm64: dts: mediatek: tungsten-smarc: Remove unnecessary cells

Wei Wang <[email protected]>
iommu/amd: Fix false positive in SB IOAPIC IVRS validation

Wei Wang <[email protected]>
iommu/amd: Prevent SB IOAPIC from overriding IVRS validation errors

Vladimir Zapolskiy <[email protected]>
iommu/msm: Return -ENOMEM on memory allocation failure in probe

Daniel Borkmann <[email protected]>
bpf: Fix security_bpf_map_create error handling

Akari Tsuyukusa <[email protected]>
iommu/mediatek-v1: Fix off-by-one in MT2701_LARB_NR_MAX

Tiezhu Yang <[email protected]>
bpf: Reject programs with inlined helpers if JIT is not available

Tiezhu Yang <[email protected]>
bpf: Introduce jit_required flag and remove bpf_prog_has_kfunc_call()

Yuho Choi <[email protected]>
bus: mhi: ep: Fix device refcount leak in the error path of MHI device creation

Sanghyun Park <[email protected]>
bpf: Fix use-after-free on mm_struct in bpf_find_vma()

Breno Leitao <[email protected]>
efi: fix stale reference to efi_recover_from_page_fault()

Daniel Borkmann <[email protected]>
bpf: Fix vmlinux BTF prep race in bpf_get_btf_vmlinux

Tanushree Shah <[email protected]>
perf dso: Fix kallsyms DSO detection with fallback logic

Sandipan Das <[email protected]>
perf vendor events amd: Reintroduce deprecated Zen 5 core events

Geoffrey McRae <[email protected]>
drm/amdgpu/mes: Fix hung_queue_db_array loop limit for multi-XCC

Daniel Borkmann <[email protected]>
bpftool: Check EVP_Digest when computing excl_prog_hash

Aleksandr Nogikh <[email protected]>
udf: Mark LVID buffer as uptodate before marking it dirty

Hongyan Xu <[email protected]>
usb: gadget: r8a66597: avoid double free of ep0_req in probe error path

Bjorn Andersson <[email protected]>
usb: typec: ucsi: unregister debugfs entries on teardown

Dan Carpenter <[email protected]>
thermal/drivers/rcar: Fix error checking in probe()

Vidhu Sarwal <[email protected]>
staging: media: ipu7: fix pm_runtime refcount leak in ipu7_resume()

Vidhu Sarwal <[email protected]>
staging: media: ipu7: fix pm_runtime refcount leak in ipu7_init_fw_code_region_by_sys()

Nicholas Dudar <[email protected]>
bpf: Reject writes through untrusted BTF pointers

Tanushree Shah <[email protected]>
perf data convert json: Fix trace_seq memory leak in process_sample_event()

Jiawei Sun <[email protected]>
perf record: fix poll storm when monitored threads exit

Loic Poulain <[email protected]>
clk: qcom: gcc-qcs8300: Use retention for USB power domains

Loic Poulain <[email protected]>
clk: qcom: gcc-qcs8300: Use retention for PCIe power domains

Konrad Dybcio <[email protected]>

    arm64: dts: qcom: sc8180x-lenovo-flex-5g: Describe the display power net

Konrad Dybcio <[email protected]>

    arm64: dts: qcom: sc8180x-lenovo-flex-5g: Rename regulator nodes

Konrad Dybcio <[email protected]>

    arm64: dts: qcom: sc8180x-primus: Describe the display power net

Konrad Dybcio <[email protected]>

    arm64: dts: qcom: sc8180x-primus: Rename regulator nodes

Richard Acayan <[email protected]>
arm64: dts: qcom: sdm670-google: add lpi reserved gpios

Yedaya Katsman <[email protected]>
arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Fixup panel compatible

Jérôme de Bretagne <[email protected]>

    arm64: dts: qcom: sc8280xp-arcata: Fix top USB-C DP alt mode

Herman van Hazendonk <[email protected]>
clk: qcom: gdsc: tear down per-domain genpds in gdsc_unregister()

Herman van Hazendonk <[email protected]>
clk: qcom: gdsc: propagate gdsc_enable() failure for ALWAYS_ON domains

Herman van Hazendonk <[email protected]>
clk: qcom: gdsc: propagate gdsc_check_status() errors from gdsc_poll_status

Brian Norris <[email protected]>
arm64: dts: qcom: Add #{address,size}-cells to Chromium-based /firmware

David Woodhouse <[email protected]>
timekeeping: Account for monotonicity adjustment in ntp_error

Thomas Weißschuh <[email protected]>

    y2038: uapi: Use 64-bit __kernel_old_timespec::tv_nsec on x32

Malaya Kumar Rout <[email protected]>
time/namespace: Validate nanosecond field in proc_timens_set_offset()

Malaya Kumar Rout <[email protected]>
timers/migration: Fix memory leak in tmigr_setup_groups() error path

Yuho Choi <[email protected]>
timekeeping: Unwind aux clock sysfs children on failure

Yuho Choi <[email protected]>
clocksource: Unregister subsystem on device registration failure

Jiangshan Yi <[email protected]>
selftests: timers: leap-a-day: Fix -w option and update usage comment

Kemeng Shi <[email protected]>
irqchip/gic-v3-its: Fix its node leak in gic_acpi_parse_madt_its()

Kemeng Shi <[email protected]>
irqchip/gic-v3-its: Fix memleak in its_probe_one()

Wang Yan <[email protected]>
selftests/lsm: Fix memory leak in attr_lsm_count

Feng Yang <[email protected]>
selftests/bpf: Fix memory leak in msg_alloc_iov

Maxim Khmelevskii <[email protected]>
s390/bpf: Replace ly instruction with llgf

Yiyang Chen <[email protected]>
bpf: Reject MEM_ALLOC BTF accesses past object bounds

Malaya Kumar Rout <[email protected]>
selftests/bpf: Fix memory leak in msg_alloc_iov error path

Emil Tsalapatis <[email protected]>
selftests/bpf: libarena: Clean up allocation state before buddy tests

Evgenii Burenchev <[email protected]>
ALSA: via82xx: Remove unreachable branch in snd_via686_pcm_pointer()

Thomas Weißschuh <[email protected]>
kbuild: unset sub_make_done before calling kselftest build system

Dawei Feng <[email protected]>
staging: rtl8723bs: fix mismatched free of HalData in rtw_sdio_if1_init()

Ayush Mukkanwar <[email protected]>
staging: octeon: add missing napi_disable in cvm_oct_rx_shutdown

Ayush Mukkanwar <[email protected]>
staging: octeon: add missing tasklet_kill in cvm_oct_tx_shutdown

Dan Carpenter <[email protected]>
staging: fbtft: Use sysfs_emit_at() to print to sysfs file

Bryam Vargas <[email protected]>
greybus: audio: bound the topology section sizes against the fetched size

Rong Zhang <[email protected]>
staging: sm750fb: Add missing Kconfig dependency

Ahmet Sezgin Duran <[email protected]>
staging: sm750fb: gate dualview dataflow using g_dualview

Alexander A. Klimov <[email protected]>
staging: greybus: audio: correct sscanf() return value check

Cen Zhang <[email protected]>
wifi: mac80211_hwsim: avoid NULL skb in stop queue drain

Manivannan Sadhasivam <[email protected]>
PCI: qcom: Skip PERST# GPIOs provided by downstream PCIe devices

Ruoyu Wang <[email protected]>
bus: qcom-ebi2: Fix clock leak on probe failure

Dmitry Baryshkov <[email protected]>

    arm64: dts: qcom: sc8280xp: sort reserved memory regions

Taniya Das <[email protected]>
clk: qcom: gcc-glymur: Move EVA clocks to critical clock list

Pradyot Kumar Nayak <[email protected]>
arm64: dts: glymur-crd: Add reset GPIO to touchscreen node

Gopikrishna Garmidi <[email protected]>
arm64: dts: qcom: glymur-crd: Move common board nodes to shared DTSI

Sibi Sankar <[email protected]>
arm64: dts: qcom: glymur-crd: Add Embedded controller node

Gopikrishna Garmidi <[email protected]>
arm64: dts: qcom: glymur: Fix gcc clock specifier for usb_mp_qmpphy nodes

Gopikrishna Garmidi <[email protected]>
arm64: dts: qcom: glymur: Fix unit-address mismatch for spmi_bus2

Konrad Dybcio <[email protected]>
arm64: dts: qcom: hamoa: Fix clocks for HSPHYs

Biswapriyo Nath <[email protected]>

    arm64: dts: qcom: sm6125: Use 64 bit addressing

Luca Weiss <[email protected]>
arm64: dts: qcom: sm7225-fairphone-fp4: Fix address in fb node name

Jens Glathe <[email protected]>

    arm64: dts: qcom: sc8280xp-blackrock: switch to uefi rtc offset

Jie Gan <[email protected]>
arm64: dts: qcom: monaco: fix wrong connection for the replicator

Taniya Das <[email protected]>
clk: qcom: gxclkctl: Use custom disable callback for gx_gdsc

Jagadeesh Kona <[email protected]>
clk: qcom: gdsc: Add custom disable callback for GX GDSC

Waiman Long <[email protected]>
cgroup/cpuset: Make nr_deadline_tasks an atomic_t

Haowen Tu <[email protected]>
PM: sleep: Fix off-by-one in wakelocks number limit check

Yuho Choi <[email protected]>
bus: ti-sysc: Fix /chosen node reference leak

Shin'ichiro Kawasaki <[email protected]>
nvmet-rdma: fix response resource leak on queue teardown

Shin'ichiro Kawasaki <[email protected]>
nvmet-rdma: factor out response resource cleanup

Gui-Dong Han <[email protected]>
nvme-apple: Use acquire/release for queue enabled state

Miklos Szeredi <[email protected]>
fuse: move "epoch" from dentry.d_time to fuse_dentry.epoch

Pengpeng Hou <[email protected]>
RDMA/bng_re: return a timeout when firmware responses stall

Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: talos: Fix GMU unit address

Kuldeep Singh <[email protected]>
arm64: dts: qcom: sm8750: wire UFS to ice instance

Jacob Moroni <[email protected]>
RDMA/irdma: Add refcounting to user ring MRs

Jacob Moroni <[email protected]>
RDMA/irdma: Add irdma_cq fields to track pbl allocations

Jacob Moroni <[email protected]>
RDMA/irdma: Add a refcount to track user ring MR associations

Jacob Moroni <[email protected]>
RDMA/irdma: Deduplicate the irdma_del_memlist logic

Myeonghun Pak <[email protected]>
crypto: keembay - Fix AEAD unregister count in error path

Pengpeng Hou <[email protected]>
crypto: rk3288 - fail ahash requests on HASH idle timeout

Myeonghun Pak <[email protected]>
hwrng: omap - Fix probe error path cleanup

Pengpeng Hou <[email protected]>
hwrng: xilinx-trng - propagate timeout before any data is read

Pengpeng Hou <[email protected]>
crypto: sa2ul - stop probe if context pool creation fails

Lothar Rubusch <[email protected]>
crypto: atmel-sha204a - fix heap info leak on I2C transfer failure

Thorsten Blum <[email protected]>
crypto: atmel-ecc - reject hardware ECDH without a public key

Giovanni Cabiddu <[email protected]>
crypto: qat - clear AES key schedule from stack

Giovanni Cabiddu <[email protected]>
crypto: qat - cancel work on re-enable SR-IOV timeout

Manos Pitsidianakis <[email protected]>
hwrng: core - fix rng list on registration error

Sandipan Das <[email protected]>
perf vendor events amd: Update Zen 6 core events

Sandipan Das <[email protected]>
perf vendor events amd: Update Zen 5 core events

Ondrej Mosnacek <[email protected]>
perf test amd ibs: avoid using executable heap

Sandipan Das <[email protected]>
perf/x86/amd/uncore: Add group validation

Jiri Olsa <[email protected]>
libbpf: Detect uprobe syscall with new error

Jiri Olsa <[email protected]>
libbpf: Change has_nop_combo to work on top of nop10

Leo Yan <[email protected]>
perf cs-etm: Filter synthesized branch samples

Leo Yan <[email protected]>
perf cs-etm: Fix thread leaks on trace queue init failure

Thomas Weißschuh <[email protected]>
tools/nolibc: mark arg1 operand in __nolibc_syscall0() as write-only

Xuanqiang Luo <[email protected]>
fanotify: initialize permission event watchdog state

Jiri Olsa <[email protected]>
uprobes/x86: Move optimized uprobe from nop5 to nop10

Jiri Olsa <[email protected]>
uprobes/x86: Allow to copy uprobe trampolines on fork

Jiri Olsa <[email protected]>
uprobes/x86: Do not leak trampoline vma mapping on optimization failure

Jiri Olsa <[email protected]>
uprobes/x86: Remove struct uprobe_trampoline object

Pengpeng Hou <[email protected]>
wifi: rtw89: fix HE extended capability length check

Dmitry Morgun <[email protected]>
wifi: rtw89: check return values in rtw89_ops_start_ap()

Zong-Zhe Yang <[email protected]>
wifi: rtw89: fw: fix link ID filling for LPS MLO common info

Tzung-Bi Shih <[email protected]>
platform/chrome: sensorhub: Fix memory overread in ring handler

Wentao Guan <[email protected]>
wifi: rtw89: fw: correct preload field of w2 in rtw89_fw_h2c_default_cmac_tbl_be()

Dan Carpenter <[email protected]>
wifi: rtw89: debug: fix off by on in rtw89_ppdu_str()

Hisam Mehboob <[email protected]>
selftests/rseq: Replace glibc-specific __GNUC_PREREQ with portable check

Hanlin Song <[email protected]>
csky: Fix a4/a5 restoration in syscall trace path

Sanjay Chitroda <[email protected]>
iio: orientation: hid-sensor-rotation: Avoid race between callback setup and device exposure

Srinivas Kandagatla <[email protected]>
soundwire: qcom: Fix port exhaustion check in stream_alloc_ports

Alex Bereza <[email protected]>
dmaengine: xilinx_dma: Fix CPU stall in xilinx_dma_poll_timeout

Vladimir Zapolskiy <[email protected]>
dmaengine: hisilicon: Return -ENOMEM on dynamic memory allocation in probe

Golla Nagendra <[email protected]>
dmaengine: zynqmp_dma: fix race between runtime PM and device removal

Suraj Gupta <[email protected]>
dmaengine: xilinx_dma: Fix channel idle state management in AXIDMA and MCDMA interrupt handlers

Vladimir Zapolskiy <[email protected]>
dmaengine: mediatek: mtk-uart-apdma: Return -ENOMEM on memory allocation failure

Christophe JAILLET <[email protected]>
leds: lp5860-spi: Fix an error handling path

Christophe JAILLET <[email protected]>
leds: lp5860: Fix a potential double-unlock

Gregory Price <[email protected]>
mm/mm_init: handle alloc_percpu failure in free_area_init_core_hotplug

Sechang Lim <[email protected]>
bpf,lsm: Drop bpf_prog_free from sleepable_lsm_hooks

Guillaume Maudoux <[email protected]>
selftests/bpf: Mask socket type flags in mptcpify prog

Leon Hwang <[email protected]>
bpf: Copy per-CPU map value padding in copy_map_value_long()

Yichong Chen <[email protected]>
tools/bpf/bpftool: Reset vmlinux BTF after struct_ops commands

Yichong Chen <[email protected]>
tools/bpf/bpftool: Reset vmlinux BTF after map commands

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

Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in CRTC reset function

Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in plane reset function

bui duc phuc <[email protected]>
ASoC: ti: j721e-evm: Avoid mixing goto with guard()

bui duc phuc <[email protected]>
ASoC: samsung: i2s: Avoid mixing goto with guard()

Asad Kamal <[email protected]>
drm/amdgpu/pm/powerplay: bounds-check voltage index in Vega10 lookup

Asad Kamal <[email protected]>
drm/amdgpu/pm/powerplay: bounds-check voltage index in SMU7 lookup

Asad Kamal <[email protected]>
drm/amd/powerplay: fix VoltageObjectInfo zero-stride loop and OOB read

Uday Khare <[email protected]>
regulator: tps6594: Fix device node reference leaks in multiphase loop

Arnd Bergmann <[email protected]>
PCI: imx6: Fix building against PCI_PWRCTRL_GENERIC

Arnd Bergmann <[email protected]>
PCI: imx6: Fix building against PCI_HOST_COMMON

Ian Rogers <[email protected]>
perf tests: Fix flakiness in branch stack sampling tests

Ian Rogers <[email protected]>
perf tests: Fix flakiness in BPF counters test on hybrid systems

Ian Rogers <[email protected]>
perf tests: Fix flakiness in trace record and replay test

Ian Rogers <[email protected]>
perf tests: Add robust record retry helper and use subsecond workloads

Ian Rogers <[email protected]>
perf tests: Fix Python JIT dump profiling test failure

Ian Rogers <[email protected]>
perf tests: Skip metrics validation if system-wide recording lacks permission

Ian Rogers <[email protected]>
perf test: Truncate test description to fit terminal width

Ian Rogers <[email protected]>
perf parse-events: Restrict core PMU bypass to --cputype option

Ian Rogers <[email protected]>
perf evlist: Add reference count checking

Ian Rogers <[email protected]>
perf evsel: Add reference count

Ian Rogers <[email protected]>
perf evlist: Add reference count

Ian Rogers <[email protected]>
perf util: Sort includes and add missed explicit dependencies

Ian Rogers <[email protected]>
perf pmu: Recognize default_core as a core PMU in more places

Aaradhana Sahu <[email protected]>
wifi: ath12k: correct monitor destination ring size

Miaoqing Pan <[email protected]>
wifi: ath12k: fix TLV32 length mask

Sean Young <[email protected]>
media: keymaps: Remove obsolete RC_MAP_HAUPPAUGE_NEW keymap define

Sean Young <[email protected]>
media: keymaps: Remove obsolete RC_MAP_RC5_TV keymap define

Dave Jiang <[email protected]>
cxl/test: Propagate -ENOMEM on platform_device_alloc() failures

Dave Jiang <[email protected]>
cxl/test: Add hierarchy enumeration support for type2 device

Dave Jiang <[email protected]>
cxl/test: Refactor platform device enumerations

Dave Jiang <[email protected]>
cxl/test: Add test for module parameters

Thomas Richter <[email protected]>
perf test: Skip failing 'perf test aslr' test case

Breno Leitao <[email protected]>
workqueue: only show running workers in stall diagnostics

Jinjie Ruan <[email protected]>
riscv: kexec_file: Fix crashk_low_res not exclude bug

Akash Goel <[email protected]>
drm/panthor: Fix NPD issue on partial unmap of an evicted BO

Adrián Larumbe <[email protected]>
drm/panthor: Support sparse mappings

Adrián Larumbe <[email protected]>
drm/panthor: Pass vm_bind_op to vm_prepare_map_op_ctx

Daniel McCarthy <[email protected]>
pinctrl: bcm2835: Don't remove an unregistered GPIO chip

Dapeng Mi <[email protected]>
perf/x86/intel: Keep cap_user_rdpmc in sync with RDPMC user-disable state

Felix Gu <[email protected]>
pinctrl: imx1: fix device_node leak in dt_is_flat_functions()

Zide Chen <[email protected]>
perf/x86/intel/uncore: Fix uncore_box ref/unref ordering

Zide Chen <[email protected]>
perf/x86/intel/uncore: Introduce PMU flags and broken state

Zide Chen <[email protected]>
perf/x86/intel/uncore: Factor out box setup code

Zide Chen <[email protected]>
perf/x86/intel/uncore: Let init_box() callback report failures

Zide Chen <[email protected]>
perf/x86/intel/uncore: Fix refcnt and other cleanups

Zide Chen <[email protected]>
perf/x86/intel/uncore: Fix PCI PMU cleanup on setup failure

Zide Chen <[email protected]>
perf/x86/intel/uncore: Keep PCI PMUs working when MMIO/MSR setup fails

Chen, Yu C <[email protected]>
sched/fair: Fix overflow in update_tg_cfs_runnable()

Peter Zijlstra <[email protected]>
sched/core: Fix inter-class wakeup_preempt()

Wei Yang <[email protected]>
mm/mm_init: fix incorrect node_spanned_pages

Henrik Grimler <[email protected]>
drm/lima: call drm_mm_init() with a valid allocation range

Brian Masney <[email protected]>
clk: imx: scu: drop redundant init.ops variable assignment

Shengjiu Wang <[email protected]>
arm64: dts: imx8mp-ab2: Enable MU2 for DSP communication

Francesco Dolcini <[email protected]>
arm64: dts: freescale: imx95-toradex-smarc: add alias for lpuart5

Frieder Schrempf <[email protected]>

    arm64: dts: imx93-kontron: set memory node to 0x80000000/1GiB

Li Jun <[email protected]>
firmware: imx: sm-misc: Add NULL check for kmalloc in syslog_show

Yuho Choi <[email protected]>
ARM: OMAP2+: Fix OF node reference leaks in omap_hwmod

Weigang He <[email protected]>
ARM: imx: fix device_node refcount leaks in imx7_src_init()

Weigang He <[email protected]>
ARM: imx: fix device_node refcount leak in imx_src_init()

Min zhang <[email protected]>
clk: hisilicon: reset: Use devm_kzalloc to initialize hisi_reset_controller

Philipp Zabel <[email protected]>
arm64: dts: imx8mp-frdm: Add missing HDMI DDC pinctrl

Shengjiu Wang <[email protected]>
ASoC: fsl_audmix: rework runtime PM handling in probe

Runyu Xiao <[email protected]>
ASoC: rt700-sdw: always drain jack work on remove

Rosen Penev <[email protected]>
clk: stm32: add missing bitfield.h header

Joey Lu <[email protected]>
clk: nuvoton: ma35d1: fix ma35d1_clk_pll_determine_rate logic

Joey Lu <[email protected]>
clk: nuvoton: ma35d1: fix PLL_CTL1_FRAC bit field width and fractional calc

Joey Lu <[email protected]>
clk: nuvoton: ma35d1: fix ignored div_u64 return values in PLL freq calculation

Alexander A. Klimov <[email protected]>
clk: moxart: remove unused variables, fix refcount leak

Xuyang Dong <[email protected]>
clk: eswin: Add CLK_IGNORE_UNUSED to NoC clock

David Carlier <[email protected]>
clk: canaan: Clear rate fields before reprogramming dividers

Myeonghun Pak <[email protected]>
clk: versaclock7: Fix APLL clock leak on probe failure

Yuho Choi <[email protected]>
ARM: imx: avic: Fix OF node reference leaks

Wei Hou <[email protected]>
cxl/pci: Remove incorrect mbox.valid check in cxl_pci_type3_init_mailbox()

Richard Zhu <[email protected]>
arm64: dts: imx943: Correct PCIe outbound address space configuration

Richard Zhu <[email protected]>
arm64: dts: imx94: Correct PCIe outbound address space configuration

Richard Cheng <[email protected]>
cxl/mbox: Clamp mailbox output allocation to the payload size

Mert Seftali <[email protected]>
ASoC: SOF: ipc4-topology: Return error for invalid number of formats

Miquel Raynal (DAVE) <[email protected]>
mtd: rawnand: pl353: Fix debug prints

Gui-Dong Han <[email protected]>
media: cec-pin: Fix event FIFO ordering

Weigang He <[email protected]>
soc: samsung: exynos-pmu: fix of_node refcount leak in exynos_get_pmu_regmap()

Michael Bommarito <[email protected]>
HID: roccat: bound device-supplied profile index

Christos Maragkos <[email protected]>
HID: nintendo: Fix imu_timestamp_us double increment per report

Philipp Weber <[email protected]>
HID: core: quiesce input in hid_hw_stop() to prevent use-after-free

Amin Vakil <[email protected]>
selftests: proc: include fcntl.h in proc-pidns

Maoyi Xie <[email protected]>
platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count

Jens Remus <[email protected]>
x86/cfi: Use symmetric SYM_START and SYM_END in __CFI_TYPE()

Damon Ding <[email protected]>
drm/bridge: of-display-mode-bridge: Fix missing static const for the bridge funcs

Wanwu Li <[email protected]>
sched_ext/scx_flatcg: Fix cvtime_delta race and add hweight scaling to bypass charging

Waiman Long <[email protected]>
cgroup/cpuset: Avoid unnecessary cpus & mems update in cpuset_hotplug_update_tasks()

Konstantin Andreev <[email protected]>
smack: restrict smackfs/{direct,mapped} values to 0-255

Konstantin Andreev <[email protected]>
smack: deduplicate smackfs/{direct,mapped} file_operations

Dmitry Antipov <[email protected]>
smack: simplify write handlers of sysfs entries

Konstantin Andreev <[email protected]>
smack: fix incorrect task context in smack_msg_queue_msgrcv

Maxime Ripard <[email protected]>
drm/bridge: cdns-mhdp8546: Return an error pointer on allocation failure

Maxime Ripard <[email protected]>
drm/bridge: cdns-dsi: Return an error pointer on allocation failure

Deborah Brouwer <[email protected]>
rust: drm: gpuvm: update DriverGpuVm for DeviceContext

Nicolas Frattaroli <[email protected]>
drm/rockchip: vop2: Recognise 10-bit YUV422 as YUV format

Nicolas Frattaroli <[email protected]>
drm/rockchip: vop2: Add RK3576 to the RG swap special case

Nicolas Frattaroli <[email protected]>
drm/display: hdmi-state-helper: Try subsampling in mode_valid

Maíra Canal <[email protected]>

    drm/v3d: Clear queue->active_job when v3d_fence_create() fails

Alexandre Courbot <[email protected]>
gpu: nova-core: gsp: tu102: keep unloading if FWSEC-SB fails

Dmitry Baryshkov <[email protected]>
drm/bridge: display-connector: trigger initial HPD event for DP

Dmitry Baryshkov <[email protected]>
drm/bridge: display-connector: don't autoenable HPD IRQ

Damon Ding <[email protected]>
drm/rockchip: analogix_dp: Fix OF node reference leak via auto cleanup

Damon Ding <[email protected]>
drm/rockchip: analogix_dp: Enable hclk for RK3588

Cristian Ciocaltea <[email protected]>
drm/rockchip: vop2: Wait for layer cfg done before switching LAYERSEL_REGDONE_SEL

Cristian Ciocaltea <[email protected]>
drm/rockchip: vop2: Fix wrong wait target in layer cfg done check

Cristian Ciocaltea <[email protected]>
drm/rockchip: dw_dp: Release core resources

Cristian Ciocaltea <[email protected]>
drm/rockchip: dw_dp: Add missing newline in dev_err_probe() message

Cristian Ciocaltea <[email protected]>
drm/bridge: synopsys: dw-dp: Support unregistering the AUX channel

Paul Kocialkowski <[email protected]>
drm: lcdif: Wait for vblank before disabling DMA

Svyatoslav Ryhel <[email protected]>
drm/tegra: dsi: Re-add clear enable register if DSI was powered by bootloader

Maxime Ripard <[email protected]>
drm/atomic: Drop drm_private_obj.state assignment from create_state

Yicong Hui <[email protected]>
drm: Remove unused header in drm_dumb_buffers.c

Casey Schaufler <[email protected]>
Smack: Fix error in capability bypass

Yosry Ahmed <[email protected]>
KVM: x86: Check EFER validity on KVM_SET_SREGS*

Sean Christopherson <[email protected]>
KVM: x86: Move the bulk of register specific code from x86.c to regs.c

Sean Christopherson <[email protected]>

    KVM: x86: Rename __{g,s}et_sregs2() => kvm_vcpu_ioctl_x86_{g,s}et_sregs2()

Sean Christopherson <[email protected]>
KVM: x86: Move get_segment_base() to regs.h, as kvm_get_segment_base()

Sean Christopherson <[email protected]>
KVM: x86: Extract REGS and SREGS runtime sync code to helpers

Imran Shaik <[email protected]>
clk: qcom: Fix test_ctl_hi field for DEFAULT_EVO PLLs

Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: reset unfaulted VMA page offset for MREMAP_DONTUNMAP

Li Chen <[email protected]>
nvdimm: virtio_pmem: refcount requests for token lifetime

Li Chen <[email protected]>
nvdimm: virtio_pmem: use READ_ONCE()/WRITE_ONCE() for wait flags

Li Chen <[email protected]>
nvdimm: virtio_pmem: always wake -ENOSPC waiters

Li Chen <[email protected]>
nvdimm: virtio_pmem: stop allocating child flush bio

Li Chen <[email protected]>
nvdimm: pmem: keep PREFLUSH before data writes

Li Chen <[email protected]>
nvdimm: preserve flush callback -ENOMEM

Shakeel Butt <[email protected]>
memcg: move LRU size accounting on reparenting instead of copying it

Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
ksmbd: fix tree connection use-after-free in smb2_tree_connect()

Ze Tan <[email protected]>
smb/server: fix tree connection leak in smb2_tree_connect()

Namjae Jeon <[email protected]>
ksmbd: fix maximum allowed access checks

Leo Martins <[email protected]>
btrfs: abort transaction before releasing tree_log_mutex on commit failure

Masami Hiramatsu (Google) <[email protected]>
tracing/probes: Fix BTF kflag check for anonymous struct member access

Martin Kaiser <[email protected]>
tracing/probes: ignore id update from btf_type_skip_modifiers

Muhammad Bilal <[email protected]>
staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit()

Jan Kara <[email protected]>
udf: Fix data loss when converting inline inodes to out of line

Jan Kara <[email protected]>
udf: Move udf_map_block() up

Bryam Vargas <[email protected]>
dm-pcache: validate the persisted dirty_tail chain at load

Adrian Hunter <[email protected]>
i3c: master: Do not treat master device as a duplicate target

Adrian Hunter <[email protected]>

    i3c: master: Fix use-after-free of master->this

Bryam Vargas <[email protected]>
dm-pcache: validate seg_id fields from persistent memory

Adrian Hunter <[email protected]>
i3c: master: Fix recursive locking during device registration

Adrian Hunter <[email protected]>
i3c: master: Fix device_register() error path

SJ Park <[email protected]>
mm/damon/core: skip aging from repeated aggressive merging

Sven Eckelmann <[email protected]>
batman-adv: bla: avoid CRC corruption due to parallel claim add

Sven Eckelmann <[email protected]>
batman-adv: dat: atomically update mac addresses

Akhmed Zhitaev <[email protected]>
drm/amd/display: Scale custom brightness curve from full range

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

Diffstat:

 .../ABI/testing/configfs-usb-gadget-uac1_legacy    |    3 -
 Documentation/admin-guide/device-mapper/dm-ima.rst |    7 +-
 .../admin-guide/device-mapper/dm-integrity.rst     |   13 +
 Documentation/hwmon/emc1403.rst                    |    8 +-
 Documentation/leds/leds-st1202.rst                 |    2 +-
 Documentation/sunrpc/xdr/nfs4_1.x                  |  241 +++-
 Documentation/usb/gadget-testing.rst               |    3 -
 Makefile                                           |   10 +-
 arch/arm/Kconfig                                   |    1 +
 arch/arm/boot/dts/allwinner/sun4i-a10.dtsi         |    2 +-
 arch/arm/boot/dts/marvell/armada-388-helios4.dts   |   13 +
 arch/arm/kernel/hw_breakpoint.c                    |   11 +-
 arch/arm/mach-imx/avic.c                           |    2 +
 arch/arm/mach-imx/src.c                            |    3 +
 arch/arm/mach-lpc32xx/common.c                     |    5 +-
 arch/arm/mach-lpc32xx/common.h                     |    2 +
 arch/arm/mach-lpc32xx/phy3250.c                    |    2 +
 arch/arm/mach-lpc32xx/pm.c                         |    5 +-
 arch/arm/mach-omap2/omap_hwmod.c                   |   26 +-
 arch/arm/mach-tegra/irq.c                          |    9 +-
 arch/arm/mm/fault.c                                |   22 +-
 arch/arm64/Kconfig                                 |    2 +
 .../boot/dts/allwinner/sun50i-a64-pinephone.dtsi   |    4 +-
 arch/arm64/boot/dts/amlogic/meson-axg-s400.dts     |    4 +
 arch/arm64/boot/dts/amlogic/meson-axg.dtsi         |    3 +-
 arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi   |    8 +-
 arch/arm64/boot/dts/freescale/imx8mp-ab2.dts       |    4 +
 arch/arm64/boot/dts/freescale/imx8mp-frdm.dts      |    2 +
 .../boot/dts/freescale/imx93-kontron-osm-s.dtsi    |    4 +-
 arch/arm64/boot/dts/freescale/imx94.dtsi           |    5 +-
 arch/arm64/boot/dts/freescale/imx943.dtsi          |    5 +-
 .../boot/dts/freescale/imx95-toradex-smarc.dtsi    |    1 +
 .../boot/dts/marvell/armada-3720-turris-mox.dts    |    3 +-
 .../boot/dts/mediatek/mt8390-tungsten-smarc.dtsi   |    4 -
 arch/arm64/boot/dts/nvidia/tegra264.dtsi           |   10 +-
 arch/arm64/boot/dts/qcom/agatti.dtsi               |    1 +
 arch/arm64/boot/dts/qcom/eliza-mtp.dts             |    4 +-
 arch/arm64/boot/dts/qcom/eliza.dtsi                |    4 +-
 arch/arm64/boot/dts/qcom/glymur-crd.dts            |  399 ------
 arch/arm64/boot/dts/qcom/glymur-crd.dtsi           |  434 ++++++-
 arch/arm64/boot/dts/qcom/glymur.dtsi               |   25 +-
 arch/arm64/boot/dts/qcom/hamoa-iot-som.dtsi        |   20 +-
 .../qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts  |   20 +-
 arch/arm64/boot/dts/qcom/hamoa.dtsi                |    4 +-
 arch/arm64/boot/dts/qcom/ipq5018.dtsi              |    5 +-
 arch/arm64/boot/dts/qcom/kaanapali-mtp.dts         |    4 +-
 arch/arm64/boot/dts/qcom/kaanapali-qrd.dts         |    4 +-
 arch/arm64/boot/dts/qcom/kaanapali.dtsi            |    4 +-
 arch/arm64/boot/dts/qcom/kodiak.dtsi               |    8 +-
 .../boot/dts/qcom/lemans-evk-ifp-mezzanine.dtso    |   18 +-
 arch/arm64/boot/dts/qcom/lemans-evk.dts            |    4 +-
 arch/arm64/boot/dts/qcom/lemans-ride-common.dtsi   |    8 +-
 arch/arm64/boot/dts/qcom/lemans.dtsi               |    8 +-
 arch/arm64/boot/dts/qcom/milos.dtsi                |    2 +
 .../boot/dts/qcom/monaco-evk-ifp-mezzanine.dtso    |   18 +-
 arch/arm64/boot/dts/qcom/monaco-monza-som.dtsi     |   16 +-
 arch/arm64/boot/dts/qcom/monaco.dtsi               |   24 +-
 .../boot/dts/qcom/msm8976-longcheer-l9360.dts      |    4 +-
 arch/arm64/boot/dts/qcom/msm8996-xiaomi-gemini.dts |    2 +-
 .../boot/dts/qcom/msm8998-sony-xperia-yoshino.dtsi |    4 -
 arch/arm64/boot/dts/qcom/msm8998-xiaomi-sagit.dts  |    5 -
 arch/arm64/boot/dts/qcom/msm8998.dtsi              |   24 +-
 arch/arm64/boot/dts/qcom/purwa-iot-som.dtsi        |   20 +-
 arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts |    4 +-
 arch/arm64/boot/dts/qcom/qcm6490-idp.dts           |    4 +-
 .../boot/dts/qcom/qcm6490-particle-tachyon.dts     |    4 +-
 arch/arm64/boot/dts/qcom/qcm6490-shift-otter.dts   |    4 +-
 arch/arm64/boot/dts/qcom/qcs404.dtsi               |   16 +-
 .../boot/dts/qcom/qcs6490-radxa-dragon-q6a.dts     |   18 +-
 .../qcom/qcs6490-rb3gen2-industrial-mezzanine.dtso |   50 +-
 arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts       |   22 +-
 .../dts/qcom/qcs6490-thundercomm-minipc-g1iot.dts  |   22 +-
 .../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts |    4 +-
 arch/arm64/boot/dts/qcom/qcs8550-aim300.dtsi       |    4 +-
 arch/arm64/boot/dts/qcom/qrb5165-rb5.dts           |    8 +-
 arch/arm64/boot/dts/qcom/sa8155p-adp.dts           |    8 +-
 arch/arm64/boot/dts/qcom/sa8295p-adp.dts           |   16 +-
 arch/arm64/boot/dts/qcom/sa8540p-ride.dts          |    8 +-
 arch/arm64/boot/dts/qcom/sar2130p-qar2130p.dts     |    4 +-
 arch/arm64/boot/dts/qcom/sar2130p.dtsi             |    8 +-
 arch/arm64/boot/dts/qcom/sc7180-acer-aspire1.dts   |    4 +-
 arch/arm64/boot/dts/qcom/sc7180-ecs-liva-qc710.dts |    4 +-
 arch/arm64/boot/dts/qcom/sc7180-idp.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sc7180-trogdor.dtsi       |    9 +-
 arch/arm64/boot/dts/qcom/sc7280-herobrine.dtsi     |    5 +
 arch/arm64/boot/dts/qcom/sc7280-idp.dtsi           |    4 +-
 arch/arm64/boot/dts/qcom/sc7280-qcard.dtsi         |    4 +-
 .../arm64/boot/dts/qcom/sc8180x-lenovo-flex-5g.dts |   73 +-
 arch/arm64/boot/dts/qcom/sc8180x-primus.dts        |   72 +-
 arch/arm64/boot/dts/qcom/sc8180x.dtsi              |   16 +-
 arch/arm64/boot/dts/qcom/sc8280xp-crd.dts          |    4 +-
 .../dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts     |    2 +-
 .../boot/dts/qcom/sc8280xp-microsoft-arcata.dts    |    4 +-
 .../boot/dts/qcom/sc8280xp-microsoft-blackrock.dts |   19 +-
 arch/arm64/boot/dts/qcom/sc8280xp.dtsi             |   10 +-
 arch/arm64/boot/dts/qcom/sdm632-motorola-ocean.dts |    2 +-
 arch/arm64/boot/dts/qcom/sdm670-google-common.dtsi |    5 +
 arch/arm64/boot/dts/qcom/sdm845-db845c.dts         |    8 +-
 arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi |    4 +-
 arch/arm64/boot/dts/qcom/sdm845-lg-common.dtsi     |    4 +-
 arch/arm64/boot/dts/qcom/sdm845-mtp.dts            |    8 +-
 .../boot/dts/qcom/sdm845-samsung-starqltechn.dts   |    4 +-
 arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts  |    4 +-
 .../dts/qcom/sdm845-xiaomi-beryllium-common.dtsi   |    4 +-
 arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts |    4 +-
 arch/arm64/boot/dts/qcom/sdm845.dtsi               |   64 +-
 .../dts/qcom/sdm850-huawei-matebook-e-2019.dts     |    8 +-
 .../boot/dts/qcom/sdm850-lenovo-yoga-c630.dts      |    8 +-
 arch/arm64/boot/dts/qcom/sdm850-samsung-w737.dts   |    8 +-
 .../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts  |    2 +-
 arch/arm64/boot/dts/qcom/sm6125.dtsi               |  153 +--
 arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts  |    6 +-
 arch/arm64/boot/dts/qcom/sm8150-hdk.dts            |    8 +-
 .../boot/dts/qcom/sm8150-microsoft-surface-duo.dts |    4 +-
 arch/arm64/boot/dts/qcom/sm8150-mtp.dts            |    4 +-
 .../boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi   |    4 +-
 arch/arm64/boot/dts/qcom/sm8150.dtsi               |    8 +-
 arch/arm64/boot/dts/qcom/sm8250-hdk.dts            |    8 +-
 arch/arm64/boot/dts/qcom/sm8250-mtp.dts            |    8 +-
 .../boot/dts/qcom/sm8250-sony-xperia-edo.dtsi      |    4 +-
 .../boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi  |    2 +-
 arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa.dts    |    4 +-
 arch/arm64/boot/dts/qcom/sm8250.dtsi               |   48 +-
 arch/arm64/boot/dts/qcom/sm8350-hdk.dts            |    8 +-
 .../dts/qcom/sm8350-microsoft-surface-duo2.dts     |    8 +-
 arch/arm64/boot/dts/qcom/sm8350-mtp.dts            |    8 +-
 .../boot/dts/qcom/sm8350-sony-xperia-sagami.dtsi   |    4 +-
 arch/arm64/boot/dts/qcom/sm8350.dtsi               |    8 +-
 arch/arm64/boot/dts/qcom/sm8450-hdk.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8450-qrd.dts            |    4 +-
 .../boot/dts/qcom/sm8450-sony-xperia-nagara.dtsi   |    4 +-
 arch/arm64/boot/dts/qcom/sm8450.dtsi               |    8 +-
 arch/arm64/boot/dts/qcom/sm8550-hdk.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8550-mtp.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8550-qrd.dts            |    4 +-
 .../dts/qcom/sm8550-sony-xperia-yodo-pdx234.dts    |    4 +-
 arch/arm64/boot/dts/qcom/sm8550.dtsi               |    8 +-
 .../boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts      |    4 +-
 arch/arm64/boot/dts/qcom/sm8650-hdk.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8650-mtp.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8650-qrd.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8650.dtsi               |    8 +-
 arch/arm64/boot/dts/qcom/sm8750-mtp.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8750-qrd.dts            |    4 +-
 arch/arm64/boot/dts/qcom/sm8750.dtsi               |    5 +-
 arch/arm64/boot/dts/qcom/talos-evk-som.dtsi        |    4 +-
 arch/arm64/boot/dts/qcom/talos.dtsi                |    8 +-
 arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi |   20 +-
 arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi  |   20 +-
 arch/arm64/boot/dts/qcom/x1-crd.dtsi               |   20 +-
 arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi        |   16 +-
 arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi   |   12 +-
 arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi  |    8 +-
 arch/arm64/boot/dts/qcom/x1e001de-devkit.dts       |   20 +-
 .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi    |   20 +-
 .../boot/dts/qcom/x1e80100-dell-xps13-9345.dts     |   16 +-
 .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts  |   12 +-
 .../dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts    |   16 +-
 .../boot/dts/qcom/x1e80100-microsoft-romulus.dtsi  |   16 +-
 arch/arm64/boot/dts/qcom/x1e80100-qcp.dts          |   20 +-
 .../boot/dts/qcom/x1p42100-lenovo-thinkbook-16.dts |   20 +-
 arch/arm64/boot/dts/renesas/r9a09g047.dtsi         |    2 +-
 arch/arm64/boot/dts/renesas/r9a09g056.dtsi         |    2 +-
 .../boot/dts/renesas/r9a09g077m44-rzt2h-evk.dts    |   14 +-
 .../boot/dts/renesas/r9a09g087m44-rzn2h-evk.dts    |   15 +-
 .../boot/dts/rockchip/rk3399-gru-chromebook.dtsi   |    3 +-
 .../boot/dts/rockchip/rk3566-bigtreetech-cb2.dtsi  |    2 +-
 arch/arm64/boot/dts/rockchip/rk3588-base.dtsi      |    4 +-
 arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi     |    4 +-
 arch/arm64/boot/dts/ti/k3-am64-main.dtsi           |    2 +-
 arch/arm64/include/asm/processor.h                 |    2 +-
 arch/arm64/include/asm/ptdump.h                    |    2 +
 arch/arm64/include/asm/rsi_cmds.h                  |   27 +-
 arch/arm64/kernel/efi.c                            |    4 +-
 arch/arm64/kernel/entry-common.c                   |   30 +-
 arch/arm64/kernel/hibernate.c                      |   16 +-
 arch/arm64/kernel/ptrace.c                         |   54 +-
 arch/arm64/kernel/smp.c                            |    2 +-
 arch/arm64/lib/Makefile                            |    4 +
 arch/arm64/mm/ptdump.c                             |   14 +-
 arch/arm64/net/bpf_jit_comp.c                      |   68 +-
 arch/csky/kernel/entry.S                           |    6 +-
 arch/m68k/emu/nfcon.c                              |    2 +-
 arch/m68k/kernel/traps.c                           |    4 +-
 arch/mips/kernel/ptrace.c                          |    6 +-
 arch/powerpc/configs/85xx-hw.config                |    1 +
 arch/powerpc/include/asm/syscall.h                 |    6 +
 arch/powerpc/include/asm/thread_info.h             |    1 +
 arch/powerpc/include/asm/xive.h                    |    4 +-
 arch/powerpc/kernel/irq.c                          |   16 +-
 arch/powerpc/kernel/smp.c                          |    3 +
 arch/powerpc/kernel/syscall.c                      |    3 +
 arch/powerpc/kexec/crash.c                         |    2 +-
 arch/powerpc/net/bpf_jit_comp64.c                  |    6 +-
 arch/powerpc/net/bpf_timed_may_goto.S              |    2 +-
 arch/powerpc/platforms/44x/gpio.c                  |    1 +
 arch/powerpc/platforms/powernv/smp.c               |    8 +-
 arch/powerpc/platforms/pseries/smp.c               |    8 +-
 arch/powerpc/sysdev/cpm_common.c                   |   13 +
 arch/powerpc/sysdev/xive/common.c                  |   22 +-
 arch/riscv/boot/dts/sophgo/cv180x.dtsi             |    2 +-
 arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts    |    4 +-
 arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts  |    4 +-
 arch/riscv/boot/dts/spacemit/k1-musepi-pro.dts     |    2 +-
 arch/riscv/boot/dts/spacemit/k1-orangepi-r2s.dts   |    4 +-
 arch/riscv/boot/dts/spacemit/k1-pinctrl.dtsi       |   24 +-
 arch/riscv/boot/dts/spacemit/k3-com260.dtsi        |    6 +-
 arch/riscv/boot/dts/spacemit/k3-pico-itx.dts       |   10 +-
 arch/riscv/boot/dts/thead/th1520.dtsi              |    3 +-
 arch/riscv/kernel/cpufeature.c                     |    3 +-
 arch/riscv/kernel/machine_kexec_file.c             |   14 +-
 arch/riscv/net/bpf_jit_comp64.c                    |   28 +-
 arch/riscv/net/bpf_jit_core.c                      |    1 +
 arch/s390/include/asm/irqflags.h                   |   20 +-
 arch/s390/kernel/Makefile                          |    1 +
 arch/s390/kernel/debug.c                           |   10 +-
 arch/s390/kernel/irqflags.c                        |   28 +
 arch/s390/kernel/vdso/Makefile                     |    3 +-
 arch/s390/net/bpf_jit_comp.c                       |   15 +-
 arch/x86/entry/entry_64_fred.S                     |    2 +
 arch/x86/events/amd/uncore.c                       |   31 +
 arch/x86/events/core.c                             |    3 +-
 arch/x86/events/intel/core.c                       |    6 +-
 arch/x86/events/intel/pt.c                         |   96 +-
 arch/x86/events/intel/uncore.c                     |  151 ++-
 arch/x86/events/intel/uncore.h                     |   33 +-
 arch/x86/events/intel/uncore_discovery.c           |   21 +-
 arch/x86/events/intel/uncore_discovery.h           |    6 +-
 arch/x86/events/intel/uncore_nhmex.c               |    3 +-
 arch/x86/events/intel/uncore_snb.c                 |   82 +-
 arch/x86/events/intel/uncore_snbep.c               |   77 +-
 arch/x86/events/perf_event.h                       |    2 +-
 arch/x86/include/asm/linkage.h                     |    2 +-
 arch/x86/include/asm/pkeys.h                       |    3 +
 arch/x86/kernel/cpu/common.c                       |   25 +-
 arch/x86/kernel/uprobes.c                          |  408 ++++---
 arch/x86/kvm/Makefile                              |    4 +-
 arch/x86/kvm/regs.c                                |  874 ++++++++++++++
 arch/x86/kvm/regs.h                                |   30 +
 arch/x86/kvm/x86.c                                 |  885 +-------------
 arch/x86/kvm/x86.h                                 |    2 +
 arch/x86/mm/pat/set_memory.c                       |    8 +-
 arch/x86/net/bpf_jit_comp.c                        |   49 +-
 block/bio-integrity-auto.c                         |   10 +-
 block/bio-integrity-fs.c                           |    6 +-
 block/blk-cgroup.c                                 |    5 +
 block/blk-iocost.c                                 |    9 +-
 block/blk-iolatency.c                              |   13 +-
 block/blk-stat.c                                   |    2 +-
 block/fops.c                                       |    6 +-
 block/kyber-iosched.c                              |    2 +-
 crypto/acompress.c                                 |   16 +-
 crypto/lskcipher.c                                 |    1 -
 drivers/accessibility/speakup/keyhelp.c            |   17 +-
 drivers/accessibility/speakup/kobjects.c           |    6 +-
 drivers/acpi/acpi_platform.c                       |   16 +-
 drivers/acpi/battery.c                             |   44 +-
 drivers/acpi/bus.c                                 |   68 +-
 drivers/acpi/ec.c                                  |   40 +-
 drivers/acpi/pci_root.c                            |   14 +-
 drivers/acpi/processor_core.c                      |   31 +-
 drivers/acpi/processor_driver.c                    |    6 +
 drivers/acpi/processor_idle.c                      |   28 +-
 drivers/acpi/riscv/irq.c                           |   33 +-
 drivers/acpi/scan.c                                |   33 +-
 drivers/acpi/video_detect.c                        |    4 +-
 drivers/base/cacheinfo.c                           |    9 +-
 drivers/base/firmware_loader/fallback.c            |   10 +
 drivers/base/soc.c                                 |   15 +-
 drivers/base/swnode.c                              |    2 +-
 drivers/base/transport_class.c                     |    5 +-
 drivers/block/mtip32xx/mtip32xx.c                  |    7 +
 drivers/block/mtip32xx/mtip32xx.h                  |    2 +
 drivers/block/null_blk/main.c                      |   78 +-
 drivers/block/ublk_drv.c                           |  127 +-
 drivers/bluetooth/btintel.c                        |    2 +-
 drivers/bluetooth/btmtk.c                          |   11 +-
 drivers/bluetooth/btmtksdio.c                      |   40 +-
 drivers/bluetooth/btnxpuart.c                      |   15 +-
 drivers/bluetooth/btqca.c                          |    3 +-
 drivers/bluetooth/btusb.c                          |   17 +-
 drivers/bluetooth/virtio_bt.c                      |    8 +-
 drivers/bus/mhi/ep/main.c                          |   15 +-
 drivers/bus/mhi/host/init.c                        |    4 +-
 drivers/bus/mhi/host/main.c                        |    6 +
 drivers/bus/qcom-ebi2.c                            |   44 +-
 drivers/bus/ti-sysc.c                              |   12 +-
 drivers/char/hw_random/core.c                      |    4 +-
 drivers/char/hw_random/imx-rngc.c                  |    4 +-
 drivers/char/hw_random/ks-sa-rng.c                 |    9 +-
 drivers/char/hw_random/omap-rng.c                  |   30 +-
 drivers/char/hw_random/xilinx-trng.c               |   32 +-
 drivers/char/ppdev.c                               |   10 +-
 drivers/char/tlclk.c                               |   36 +-
 drivers/char/tpm/st33zp24/st33zp24.c               |    8 +-
 drivers/char/xilinx_hwicap/xilinx_hwicap.c         |    5 +-
 drivers/clk/clk-devres.c                           |   12 +-
 drivers/clk/clk-k230.c                             |    4 +
 drivers/clk/clk-moxart.c                           |   14 -
 drivers/clk/clk-palmas.c                           |   14 +-
 drivers/clk/clk-versaclock7.c                      |    2 +-
 drivers/clk/eswin/clk-eic7700.c                    |    3 +-
 drivers/clk/eswin/clk.c                            |    4 +-
 drivers/clk/hisilicon/reset.c                      |    2 +-
 drivers/clk/imx/clk-scu.c                          |    1 -
 drivers/clk/mediatek/clk-mt6735-apmixedsys.c       |    5 +-
 drivers/clk/mediatek/clk-mt8135.c                  |    5 +-
 drivers/clk/mediatek/clk-pllfh.c                   |   98 +-
 drivers/clk/nuvoton/clk-ma35d1-pll.c               |   42 +-
 drivers/clk/qcom/camcc-sc8280xp.c                  |   19 -
 drivers/clk/qcom/common.c                          |    4 +-
 drivers/clk/qcom/dispcc-qcm2290.c                  |   44 +-
 drivers/clk/qcom/gcc-glymur.c                      |   33 +-
 drivers/clk/qcom/gcc-nord.c                        |   45 +-
 drivers/clk/qcom/gcc-qcm2290.c                     |   18 +-
 drivers/clk/qcom/gcc-qcs8300.c                     |    8 +-
 drivers/clk/qcom/gcc-sm6115.c                      |    6 +-
 drivers/clk/qcom/gdsc.c                            |   47 +-
 drivers/clk/qcom/gdsc.h                            |    1 +
 drivers/clk/qcom/gpucc-qcm2290.c                   |   89 +-
 drivers/clk/qcom/gxclkctl-kaanapali.c              |    1 +
 drivers/clk/qcom/negcc-nord.c                      |   75 +-
 drivers/clk/rockchip/clk-pll.c                     |   16 +-
 drivers/clk/rockchip/clk-rk3576.c                  |   15 +-
 drivers/clk/rockchip/clk-rk3588.c                  |    4 +-
 drivers/clk/rockchip/clk.h                         |    8 +-
 drivers/clk/spacemit/ccu-k3.c                      |   17 +-
 drivers/clk/stm32/clk-stm32mp21.c                  |    1 +
 drivers/clk/stm32/clk-stm32mp25.c                  |    1 +
 drivers/clk/sunxi-ng/ccu_mux.c                     |   57 +-
 drivers/clk/tegra/clk-tegra124-emc.c               |    1 +
 drivers/clk/ti/adpll.c                             |    4 +-
 drivers/clk/ti/divider.c                           |    2 +-
 drivers/clk/ti/mux.c                               |   22 +-
 drivers/clk/visconti/clkc.c                        |    2 +-
 drivers/clk/x86/clk-pmc-atom.c                     |    3 +
 drivers/clocksource/clps711x-timer.c               |    2 +-
 drivers/clocksource/samsung_pwm_timer.c            |   22 +-
 drivers/clocksource/timer-armada-370-xp.c          |   18 +-
 drivers/cpufreq/amd-pstate-ut.c                    |    5 +
 drivers/cpufreq/amd-pstate.c                       |   47 +-
 drivers/cpufreq/imx6q-cpufreq.c                    |    6 +-
 drivers/cpufreq/intel_pstate.c                     |   19 +-
 drivers/cpufreq/spear-cpufreq.c                    |    4 +-
 drivers/crypto/aspeed/aspeed-acry.c                |    2 +-
 drivers/crypto/aspeed/aspeed-hace.c                |    2 +-
 drivers/crypto/atmel-ecc.c                         |    3 +
 drivers/crypto/atmel-sha204a.c                     |    6 +-
 drivers/crypto/ccp/sev-dev.c                       |   19 +-
 drivers/crypto/gemini/sl3516-ce-cipher.c           |    8 -
 drivers/crypto/hisilicon/sec2/sec_crypto.c         |   12 +-
 .../crypto/intel/keembay/keembay-ocs-aes-core.c    |    9 +-
 drivers/crypto/intel/qat/qat_common/adf_aer.c      |    2 +
 drivers/crypto/intel/qat/qat_common/adf_cfg.c      |   10 +-
 .../crypto/intel/qat/qat_common/adf_cfg_common.h   |    1 -
 .../crypto/intel/qat/qat_common/adf_cfg_services.c |    2 +-
 .../crypto/intel/qat/qat_common/adf_mstate_mgr.c   |    3 +-
 .../intel/qat/qat_common/adf_transport_debug.c     |    3 +-
 drivers/crypto/intel/qat/qat_common/qat_algs.c     |    1 +
 .../crypto/intel/qat/qat_common/qat_compression.c  |    3 +-
 drivers/crypto/rockchip/rk3288_crypto_ahash.c      |    7 +-
 drivers/crypto/sa2ul.c                             |    6 +-
 drivers/cxl/core/features.c                        |   15 +-
 drivers/cxl/core/mbox.c                            |   12 +-
 drivers/cxl/core/memdev.c                          |    2 +-
 drivers/cxl/core/port.c                            |    4 +-
 drivers/cxl/core/region.c                          |    7 +-
 drivers/cxl/pci.c                                  |   13 +-
 drivers/dax/dax-private.h                          |    2 -
 drivers/dax/fsdev.c                                |  139 ++-
 drivers/dax/super.c                                |   54 +-
 drivers/dma/dw-edma/dw-edma-core.c                 |  104 +-
 drivers/dma/hisi_dma.c                             |    2 +-
 drivers/dma/mediatek/mtk-uart-apdma.c              |    2 +-
 drivers/dma/qcom/bam_dma.c                         |    1 +
 drivers/dma/xilinx/xilinx_dma.c                    |   26 +-
 drivers/dma/xilinx/zynqmp_dma.c                    |    4 +-
 drivers/dpll/dpll_core.c                           |   24 +-
 drivers/dpll/dpll_netlink.c                        |   59 +-
 drivers/firewire/.kunitconfig                      |    1 +
 drivers/firewire/Kconfig                           |   15 +
 drivers/firewire/core-topology.c                   |   62 +-
 drivers/firewire/node-tree-test.c                  |  607 ++++++++++
 drivers/firmware/arm_scmi/bus.c                    |  182 +--
 drivers/firmware/arm_scmi/common.h                 |    2 +
 drivers/firmware/arm_scmi/driver.c                 |   81 +-
 drivers/firmware/arm_scmi/notify.c                 |   21 +
 drivers/firmware/arm_scmi/notify.h                 |    1 +
 drivers/firmware/arm_scmi/transports/mailbox.c     |   26 +-
 drivers/firmware/arm_scmi/transports/smc.c         |   15 +-
 drivers/firmware/google/coreboot_table.c           |   17 +-
 drivers/firmware/imx/sm-misc.c                     |    3 +
 drivers/firmware/qcom/Makefile                     |    1 +
 drivers/firmware/qcom/qcom_scm-smc.c               |   12 +-
 drivers/firmware/qcom/qcom_scm.c                   |   42 +-
 drivers/firmware/qcom/qcom_scm.h                   |    2 +-
 drivers/firmware/qcom/qcom_scm_trace.h             |  143 +++
 drivers/firmware/qcom/qcom_tzmem.c                 |   13 +-
 drivers/gpib/common/gpib_os.c                      |   21 +-
 drivers/gpib/common/iblib.c                        |    3 -
 drivers/gpib/include/amccs5933.h                   |   10 +-
 drivers/gpib/tnt4882/mite.h                        |    4 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c            |    2 +-
 drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c             |   15 +
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c              |   74 +-
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  |   22 +-
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h  |    7 +
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c |    8 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c |   10 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h |   10 +-
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c    |   12 +-
 .../gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c |    2 +-
 .../gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.c |    3 +-
 .../dc/link/protocols/link_dp_irq_handler.c        |    1 -
 .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c    |   10 +-
 .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomfwctrl.c  |   11 +-
 .../gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c    |   24 +
 .../gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c  |   35 +-
 .../gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_8_ppt.c   |    5 +-
 drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c     |    2 +-
 .../gpu/drm/bridge/cadence/cdns-mhdp8546-core.c    |    2 +-
 drivers/gpu/drm/bridge/display-connector.c         |   36 +
 drivers/gpu/drm/bridge/of-display-mode-bridge.c    |    2 +-
 drivers/gpu/drm/bridge/synopsys/dw-dp.c            |    6 +
 drivers/gpu/drm/bridge/tc358767.c                  |    2 +-
 drivers/gpu/drm/display/drm_hdmi_state_helper.c    |   15 +-
 drivers/gpu/drm/drm_atomic_state_helper.c          |    2 -
 drivers/gpu/drm/drm_dumb_buffers.c                 |    1 -
 drivers/gpu/drm/lima/lima_device.c                 |   12 +-
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c              |    5 +
 drivers/gpu/drm/msm/adreno/a6xx_catalog.c          |    2 +-
 drivers/gpu/drm/msm/adreno/a6xx_gmu.c              |    5 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c              |    8 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c        |    5 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h        |   12 +
 drivers/gpu/drm/msm/adreno/a8xx_gpu.c              |    5 +-
 .../drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h |   12 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c      |    4 +
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c        |    3 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c     |   12 +
 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c           |   22 +-
 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c           |   11 +-
 drivers/gpu/drm/msm/dp/dp_ctrl.c                   |    5 +-
 drivers/gpu/drm/msm/dp/dp_display.c                |   28 +-
 drivers/gpu/drm/msm/dp/dp_panel.c                  |    4 +-
 drivers/gpu/drm/msm/dsi/dsi_host.c                 |    2 -
 drivers/gpu/drm/msm/dsi/phy/dsi_phy.h              |    1 +
 drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c          |   18 +-
 drivers/gpu/drm/msm/msm_drv.h                      |    8 -
 drivers/gpu/drm/msm/msm_gem_vma.c                  |    2 +
 drivers/gpu/drm/msm/msm_gpu.c                      |    8 +-
 drivers/gpu/drm/msm/msm_ringbuffer.c               |    7 +-
 drivers/gpu/drm/msm/msm_ringbuffer.h               |    1 +
 drivers/gpu/drm/mxsfb/lcdif_kms.c                  |   15 +-
 drivers/gpu/drm/omapdrm/dss/dsi.c                  |    7 +-
 drivers/gpu/drm/omapdrm/dss/dsi.h                  |    2 -
 drivers/gpu/drm/panel/panel-samsung-s6d16d0.c      |   10 +-
 drivers/gpu/drm/panthor/panthor_drv.c              |    2 +-
 drivers/gpu/drm/panthor/panthor_gem.c              |   18 +
 drivers/gpu/drm/panthor/panthor_gem.h              |    2 +
 drivers/gpu/drm/panthor/panthor_mmu.c              |  251 +++-
 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c    |   22 +-
 drivers/gpu/drm/rockchip/dw_dp-rockchip.c          |   15 +-
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c       |    5 +-
 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c       |   21 +-
 drivers/gpu/drm/solomon/ssd130x.c                  |    9 +-
 drivers/gpu/drm/sun4i/sun4i_crtc.c                 |    2 +-
 drivers/gpu/drm/sun4i/sun4i_drv.c                  |    3 +
 drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c             |    2 +-
 drivers/gpu/drm/sun4i/sun4i_tcon.c                 |   22 +-
 drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c              |    2 +
 drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c             |    2 +-
 drivers/gpu/drm/sun4i/sun8i_mixer.c                |    2 +-
 drivers/gpu/drm/sun4i/sun8i_tcon_top.c             |   71 +-
 drivers/gpu/drm/sun4i/sun8i_tcon_top.h             |    6 +
 drivers/gpu/drm/sun4i/sun8i_vi_scaler.c            |   20 +-
 drivers/gpu/drm/sun4i/sun8i_vi_scaler.h            |    1 +
 drivers/gpu/drm/tegra/dsi.c                        |    9 +
 drivers/gpu/drm/tve200/tve200_drv.c                |    1 +
 drivers/gpu/drm/v3d/Kconfig                        |    1 +
 drivers/gpu/drm/v3d/v3d_drv.h                      |   39 +-
 drivers/gpu/drm/v3d/v3d_sched.c                    |   60 +-
 drivers/gpu/drm/v3d/v3d_submit.c                   |  737 ++++++------
 drivers/gpu/drm/xe/tests/xe_migrate.c              |    3 +-
 drivers/gpu/drm/xe/xe_gt_idle.c                    |    3 +-
 drivers/gpu/drm/xe/xe_guc_submit.c                 |    6 +
 drivers/gpu/drm/xe/xe_pagefault.c                  |    2 +-
 drivers/gpu/drm/xe/xe_ras.c                        |   91 ++
 drivers/gpu/drm/xe/xe_ras.h                        |    3 +
 drivers/gpu/drm/xe/xe_ras_types.h                  |   26 +
 drivers/gpu/drm/xe/xe_sysctrl.c                    |    7 +-
 drivers/gpu/drm/xe/xe_sysctrl_mailbox.c            |   36 +-
 drivers/gpu/drm/xe/xe_sysctrl_mailbox.h            |    4 +-
 drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h      |    2 +
 drivers/gpu/drm/xe/xe_sysctrl_types.h              |    3 -
 drivers/gpu/drm/xe/xe_wa_oob.rules                 |    2 +-
 drivers/gpu/host1x/bus.c                           |    2 +-
 drivers/gpu/host1x/debug.c                         |    4 +-
 drivers/gpu/host1x/hw/channel_hw.c                 |    5 +-
 drivers/gpu/nova-core/fb/hal/gb100.rs              |    1 +
 drivers/gpu/nova-core/fb/hal/gb202.rs              |    1 +
 drivers/gpu/nova-core/fsp.rs                       |   87 +-
 drivers/gpu/nova-core/fsp/hal.rs                   |    4 +
 drivers/gpu/nova-core/fsp/hal/gb100.rs             |    6 +
 drivers/gpu/nova-core/fsp/hal/gb202.rs             |    9 +-
 drivers/gpu/nova-core/fsp/hal/gh100.rs             |    9 +-
 drivers/gpu/nova-core/gpu.rs                       |    6 +-
 drivers/gpu/nova-core/gsp/boot.rs                  |    2 +-
 drivers/gpu/nova-core/gsp/commands.rs              |   73 +-
 drivers/gpu/nova-core/gsp/hal/tu102.rs             |   19 +-
 drivers/gpu/nova-core/regs.rs                      |    2 +-
 drivers/hid/hid-asus.c                             |  430 +++++--
 drivers/hid/hid-core.c                             |    9 +
 drivers/hid/hid-haptic.c                           |    2 +-
 drivers/hid/hid-lg4ff.c                            |    8 +
 drivers/hid/hid-logitech-hidpp.c                   |   23 +-
 drivers/hid/hid-multitouch.c                       |    2 +-
 drivers/hid/hid-nintendo.c                         |    1 -
 drivers/hid/hid-roccat-kone.c                      |    8 +-
 drivers/hid/hid-sony.c                             |    2 +-
 drivers/hid/hid-steam.c                            |  516 +++++---
 drivers/hid/hid-tmff.c                             |    9 +-
 drivers/hid/i2c-hid/Makefile                       |    2 +-
 drivers/hid/i2c-hid/i2c-hid-acpi-prp0001.c         |  104 ++
 drivers/hid/i2c-hid/i2c-hid-acpi.c                 |   54 +-
 drivers/hid/i2c-hid/i2c-hid-acpi.h                 |   33 +
 drivers/hid/i2c-hid/i2c-hid-core.c                 |    2 +-
 drivers/hid/i2c-hid/i2c-hid-of-goodix.c            |    4 +-
 drivers/hv/vmbus_drv.c                             |   15 +
 drivers/hwmon/coretemp.c                           |    1 +
 drivers/hwmon/cros_ec_hwmon.c                      |   17 +-
 drivers/hwmon/emc1403.c                            |   27 +-
 drivers/hwmon/ltc4283.c                            |    1 +
 drivers/hwspinlock/hwspinlock_core.c               |    2 +-
 drivers/hwtracing/coresight/coresight-etm4x-cfg.c  |    2 +-
 drivers/hwtracing/coresight/coresight-etm4x-core.c |   59 +-
 .../hwtracing/coresight/coresight-etm4x-sysfs.c    |    6 +-
 drivers/hwtracing/coresight/coresight-etm4x.h      |    7 +-
 drivers/i2c/busses/i2c-ocores.c                    |    6 +-
 drivers/i3c/master.c                               |   63 +-
 drivers/i3c/master/adi-i3c-master.c                |    1 +
 drivers/i3c/master/dw-i3c-master.c                 |   10 +-
 drivers/i3c/master/mipi-i3c-hci/pio.c              |    7 +-
 drivers/i3c/master/renesas-i3c.c                   |   28 +-
 drivers/idle/intel_idle.c                          |   23 +
 drivers/iio/accel/dmard09.c                        |    7 +
 drivers/iio/dac/ad5686-spi.c                       |    9 +-
 drivers/iio/dac/ad5696-i2c.c                       |    9 +-
 drivers/iio/light/gp2ap002.c                       |   14 +-
 drivers/iio/light/isl29028.c                       |    2 +-
 drivers/iio/light/opt4060.c                        |    4 +-
 drivers/iio/light/tsl2583.c                        |    2 +-
 drivers/iio/light/tsl2772.c                        |    2 +-
 drivers/iio/orientation/hid-sensor-rotation.c      |   20 +-
 drivers/infiniband/core/cma.c                      |    6 +-
 drivers/infiniband/core/counters.c                 |    5 +-
 drivers/infiniband/core/cq.c                       |    2 +-
 drivers/infiniband/core/device.c                   |    1 +
 drivers/infiniband/core/nldev.c                    |    5 +
 drivers/infiniband/core/restrack.c                 |  165 ++-
 drivers/infiniband/core/restrack.h                 |    3 +
 drivers/infiniband/core/ucma.c                     |    2 +-
 drivers/infiniband/core/uverbs_std_types_dmah.c    |    7 +-
 drivers/infiniband/core/verbs.c                    |   32 +-
 drivers/infiniband/hw/bng_re/bng_fw.c              |   10 +-
 drivers/infiniband/hw/bnxt_re/ib_verbs.c           |   71 +-
 drivers/infiniband/hw/cxgb4/device.c               |    2 +-
 drivers/infiniband/hw/cxgb4/mem.c                  |   50 +-
 drivers/infiniband/hw/efa/efa_verbs.c              |   15 +-
 drivers/infiniband/hw/erdma/Kconfig                |    2 +-
 drivers/infiniband/hw/erdma/erdma_cm.c             |    6 +-
 drivers/infiniband/hw/erdma/erdma_eq.c             |   10 +-
 drivers/infiniband/hw/erdma/erdma_verbs.c          |   39 +-
 drivers/infiniband/hw/erdma/erdma_verbs.h          |   40 +-
 drivers/infiniband/hw/hfi1/init.c                  |   16 +-
 drivers/infiniband/hw/hfi1/user_sdma.c             |   13 +-
 drivers/infiniband/hw/irdma/utils.c                |    6 +
 drivers/infiniband/hw/irdma/verbs.c                |  116 +-
 drivers/infiniband/hw/irdma/verbs.h                |    3 +
 drivers/infiniband/hw/mana/qp.c                    |   10 +-
 drivers/infiniband/hw/mlx5/cong.c                  |    8 +-
 drivers/infiniband/hw/mlx5/main.c                  |    7 +-
 drivers/infiniband/hw/mlx5/qp.c                    |   25 +-
 drivers/infiniband/sw/rdmavt/vt.c                  |    4 +-
 drivers/infiniband/sw/rxe/rxe_odp.c                |    1 +
 drivers/infiniband/sw/rxe/rxe_req.c                |   15 +
 drivers/infiniband/sw/rxe/rxe_resp.c               |    9 +-
 drivers/infiniband/sw/siw/siw_cm.c                 |    2 +-
 drivers/infiniband/ulp/ipoib/ipoib_main.c          |    2 +
 drivers/infiniband/ulp/isert/ib_isert.c            |   85 +-
 drivers/infiniband/ulp/isert/ib_isert.h            |    1 +
 drivers/infiniband/ulp/srp/ib_srp.c                |   45 +-
 drivers/infiniband/ulp/srpt/ib_srpt.c              |    9 +-
 drivers/iommu/amd/debugfs.c                        |   12 +-
 drivers/iommu/amd/init.c                           |   36 +-
 drivers/iommu/amd/ppr.c                            |    2 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |    9 +-
 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c     |  173 ++-
 drivers/iommu/arm/arm-smmu/qcom_iommu.c            |    6 +-
 drivers/iommu/dma-iommu.c                          |   26 +-
 drivers/iommu/intel/iommu.c                        |   32 +-
 drivers/iommu/intel/iommu.h                        |    2 +-
 drivers/iommu/intel/pasid.c                        |    9 +-
 drivers/iommu/iommufd/device.c                     |   13 +-
 drivers/iommu/iommufd/iommufd_private.h            |    9 +-
 drivers/iommu/iommufd/main.c                       |   20 +
 drivers/iommu/iommufd/selftest.c                   |   12 +-
 drivers/iommu/msm_iommu.c                          |    2 +-
 drivers/iommu/mtk_iommu_v1.c                       |    2 +-
 drivers/ipack/devices/ipoctal.c                    |   56 +-
 drivers/irqchip/irq-ast2700-intc0.c                |    4 +-
 drivers/irqchip/irq-ast2700-intc1.c                |    3 +-
 drivers/irqchip/irq-gic-v3-its.c                   |   23 +-
 drivers/irqchip/irq-gic-v5-irs.c                   |   38 +-
 drivers/irqchip/irq-gic-v5.c                       |   29 +-
 drivers/irqchip/irq-realtek-rtl.c                  |  127 +-
 drivers/irqchip/irq-renesas-irqc.c                 |    1 +
 drivers/irqchip/irq-renesas-rzg2l.c                |    4 +-
 drivers/leds/leds-gpio.c                           |   53 +-
 drivers/leds/leds-pca9532.c                        |   18 +-
 drivers/leds/leds-st1202.c                         |   96 +-
 drivers/leds/rgb/leds-lp5860-core.c                |    3 +-
 drivers/leds/rgb/leds-lp5860-spi.c                 |   10 +-
 drivers/mailbox/pcc.c                              |   41 +-
 drivers/mailbox/qcom-cpucp-mbox.c                  |   25 +-
 drivers/mailbox/riscv-sbi-mpxy-mbox.c              |   12 +-
 drivers/mailbox/rockchip-mailbox.c                 |   17 +-
 drivers/md/dm-integrity.c                          |  139 ++-
 drivers/md/dm-pcache/cache.c                       |   11 +
 drivers/md/dm-pcache/cache.h                       |   17 +
 drivers/md/dm-pcache/cache_gc.c                    |   16 +-
 drivers/md/dm-pcache/cache_key.c                   |   80 ++
 drivers/md/dm-pcache/cache_writeback.c             |   23 +-
 drivers/md/md-bitmap.c                             |   14 +-
 drivers/md/md-bitmap.h                             |    3 +-
 drivers/md/md-linear.c                             |    1 +
 drivers/md/md-llbitmap.c                           |   30 +-
 drivers/md/md.c                                    |   80 +-
 drivers/md/md.h                                    |    1 -
 drivers/md/raid0.c                                 |    1 +
 drivers/md/raid1-10.c                              |    8 +-
 drivers/md/raid1.c                                 |  121 +-
 drivers/md/raid10.c                                |  112 +-
 drivers/md/raid5-ppl.c                             |    4 +-
 drivers/md/raid5.c                                 |  108 +-
 drivers/media/cec/core/cec-pin.c                   |    8 +-
 drivers/media/i2c/rdacm21.c                        |    5 +-
 drivers/media/pci/intel/ipu6/ipu6.c                |   10 +-
 drivers/media/platform/amd/isp4/Kconfig            |    1 +
 drivers/media/platform/amd/isp4/isp4_interface.c   |   10 +-
 drivers/media/platform/amd/isp4/isp4_interface.h   |    2 +-
 drivers/media/platform/amd/isp4/isp4_subdev.c      |   30 +-
 drivers/media/platform/broadcom/bcm2835-unicam.c   |    2 +
 drivers/media/platform/qcom/iris/iris_core.c       |   12 +-
 .../platform/qcom/iris/iris_hfi_gen2_command.c     |    1 -
 drivers/media/platform/qcom/iris/iris_state.c      |    2 +-
 drivers/media/platform/st/stm32/stm32-dcmi.c       |   15 +-
 drivers/media/platform/ti/Kconfig                  |    1 +
 drivers/media/v4l2-core/v4l2-async.c               |   15 +-
 drivers/mfd/cs42l43.c                              |   16 +-
 drivers/mfd/iqs62x.c                               |    2 +-
 drivers/mfd/macsmc.c                               |    8 +-
 drivers/mfd/rave-sp.c                              |   64 +-
 drivers/misc/ad525x_dpot-i2c.c                     |    1 +
 drivers/misc/ad525x_dpot-spi.c                     |    1 +
 drivers/misc/ad525x_dpot.c                         |  177 +--
 drivers/misc/ad525x_dpot.h                         |    3 +
 drivers/misc/bcm-vk/bcm_vk_msg.c                   |    6 +-
 drivers/misc/cardreader/rtsx_pcr.c                 |    2 +
 drivers/misc/cardreader/rtsx_usb.c                 |   26 +-
 drivers/misc/lan966x_pci.c                         |    1 +
 drivers/misc/mei/mei_lb.c                          |    4 +-
 drivers/misc/pch_phub.c                            |   20 +-
 drivers/misc/pci_endpoint_test.c                   |   11 +-
 drivers/misc/sgi-gru/grufault.c                    |  101 +-
 drivers/misc/sgi-gru/gruprocfs.c                   |    1 -
 drivers/misc/sgi-gru/grutables.h                   |    1 -
 drivers/misc/vmw_vmci/vmci_event.c                 |    4 +-
 drivers/mtd/devices/mtd_intel_dg.c                 |    2 +-
 drivers/mtd/mtdpart.c                              |    3 +-
 drivers/mtd/mtdswap.c                              |    1 +
 drivers/mtd/nand/raw/pl35x-nand-controller.c       |    8 +-
 drivers/mtd/ubi/attach.c                           |    4 +-
 drivers/mtd/ubi/build.c                            |   11 +-
 drivers/mtd/ubi/fastmap.c                          |    6 +-
 drivers/mtd/ubi/io.c                               |   11 +-
 drivers/mtd/ubi/ubi.h                              |    4 +-
 drivers/mtd/ubi/wl.c                               |   15 +-
 drivers/net/amt.c                                  |    3 +
 drivers/net/bonding/bond_netlink.c                 |    2 +-
 drivers/net/can/m_can/m_can.c                      |    2 +-
 drivers/net/dsa/b53/b53_common.c                   |    2 +-
 drivers/net/dsa/mv88e6xxx/pcs-6352.c               |    5 +-
 drivers/net/dsa/mxl862xx/mxl862xx.c                |    1 +
 drivers/net/ethernet/airoha/airoha_eth.c           |   18 +-
 drivers/net/ethernet/airoha/airoha_eth.h           |    7 +-
 drivers/net/ethernet/airoha/airoha_npu.c           |    2 +-
 drivers/net/ethernet/allwinner/sun4i-emac.c        |    4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |    8 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c    |    2 +-
 drivers/net/ethernet/freescale/enetc/enetc.c       |   72 +-
 drivers/net/ethernet/freescale/enetc/enetc.h       |   11 +-
 .../net/ethernet/freescale/enetc/enetc4_debugfs.c  |   30 +-
 drivers/net/ethernet/freescale/enetc/enetc4_hw.h   |    4 -
 drivers/net/ethernet/freescale/enetc/enetc4_pf.c   |  347 ++----
 .../net/ethernet/freescale/enetc/enetc_ethtool.c   |    2 +-
 drivers/net/ethernet/freescale/enetc/enetc_hw.h    |    7 +-
 drivers/net/ethernet/freescale/enetc/enetc_pf.c    |   76 +-
 drivers/net/ethernet/freescale/enetc/enetc_pf.h    |    4 -
 .../net/ethernet/freescale/enetc/enetc_pf_common.c |   84 ++
 .../net/ethernet/freescale/enetc/enetc_pf_common.h |    4 +
 drivers/net/ethernet/freescale/fec_main.c          |    6 +-
 drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.c  |    2 +-
 drivers/net/ethernet/huawei/hinic3/hinic3_tx.c     |    9 +-
 drivers/net/ethernet/intel/ice/devlink/devlink.c   |   32 +-
 drivers/net/ethernet/intel/ice/ice_ethtool.c       |   18 +-
 drivers/net/ethernet/intel/ice/ice_lib.c           |    3 +
 drivers/net/ethernet/intel/ice/ice_nvm.c           |   90 +-
 drivers/net/ethernet/intel/ice/ice_nvm.h           |    2 +-
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c        |   38 +-
 drivers/net/ethernet/intel/idpf/idpf_txrx.c        |    2 +-
 drivers/net/ethernet/intel/igc/igc_main.c          |    3 +-
 .../net/ethernet/marvell/octeontx2/af/cn20k/api.h  |    1 +
 .../marvell/octeontx2/af/cn20k/mbox_init.c         |   21 +-
 .../net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c |    2 +-
 drivers/net/ethernet/marvell/octeontx2/af/rvu.c    |   43 +-
 .../ethernet/marvell/octeontx2/af/rvu_debugfs.c    |    6 +
 .../net/ethernet/marvell/octeontx2/af/rvu_nix.c    |   11 +-
 .../ethernet/marvell/octeontx2/nic/otx2_common.c   |    6 +-
 .../ethernet/marvell/octeontx2/nic/otx2_ethtool.c  |    3 +-
 .../net/ethernet/marvell/octeontx2/nic/otx2_vf.c   |   20 +-
 .../net/ethernet/marvell/octeontx2/nic/otx2_xsk.c  |    3 +-
 .../net/ethernet/mellanox/mlx5/core/en/xsk/tx.c    |    2 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c   |   20 +-
 .../ethernet/mellanox/mlx5/core/esw/adj_vport.c    |   22 +
 .../ethernet/mellanox/mlx5/core/eswitch_offloads.c |    4 +
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c  |    2 +
 drivers/net/ethernet/mellanox/mlx5/core/vport.c    |   44 +-
 .../net/ethernet/microchip/sparx5/sparx5_netdev.c  |   11 +-
 .../ethernet/microchip/sparx5/sparx5_vcap_impl.c   |    5 +-
 .../net/ethernet/microchip/vcap/vcap_api_debugfs.c |   21 +
 .../net/ethernet/microchip/vcap/vcap_api_debugfs.h |   14 +
 drivers/net/ethernet/microsoft/mana/gdma_main.c    |   19 +
 drivers/net/ethernet/nvidia/forcedeth.c            |    2 +-
 drivers/net/ethernet/pensando/ionic/ionic_main.c   |    4 +
 drivers/net/ethernet/pensando/ionic/ionic_txrx.c   |   31 +-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c   |  467 ++++----
 .../net/ethernet/qualcomm/rmnet/rmnet_map_data.c   |    1 +
 drivers/net/ethernet/realtek/8139cp.c              |    2 +-
 .../net/ethernet/stmicro/stmmac/dwmac1000_core.c   |    2 +-
 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c  |    2 +-
 .../net/ethernet/stmicro/stmmac/dwxgmac2_core.c    |    2 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac.h       |    2 -
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  |   30 +-
 .../net/ethernet/stmicro/stmmac/stmmac_selftests.c |   57 +-
 drivers/net/ethernet/wangxun/libwx/wx_ptp.c        |   18 +-
 drivers/net/ethernet/wangxun/libwx/wx_type.h       |    2 +-
 drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c     |    5 +-
 drivers/net/ethernet/wangxun/txgbe/txgbe_type.h    |    2 +-
 drivers/net/gtp.c                                  |    2 +
 drivers/net/ipa/ipa_main.c                         |    6 +-
 drivers/net/netdevsim/netdev.c                     |    2 +
 drivers/net/phy/air_en8811h.c                      |   18 +-
 drivers/net/ppp/pppox.c                            |   17 +
 drivers/net/slip/slip.c                            |    8 -
 drivers/net/thunderbolt/main.c                     |    6 +-
 drivers/net/virtio_net.c                           |   14 +
 drivers/net/vxlan/vxlan_core.c                     |   20 +-
 drivers/net/vxlan/vxlan_mdb.c                      |    9 +-
 drivers/net/vxlan/vxlan_vnifilter.c                |    6 +-
 drivers/net/wireless/ath/ath10k/snoc.c             |    9 +-
 drivers/net/wireless/ath/ath11k/dp_rx.c            |   32 +-
 drivers/net/wireless/ath/ath11k/wmi.c              |   40 +-
 drivers/net/wireless/ath/ath12k/ahb.c              |   18 +-
 drivers/net/wireless/ath/ath12k/core.c             |   29 +-
 drivers/net/wireless/ath/ath12k/core.h             |   13 +-
 drivers/net/wireless/ath/ath12k/dp_tx.c            |   46 +
 drivers/net/wireless/ath/ath12k/dp_tx.h            |    2 +
 drivers/net/wireless/ath/ath12k/hal.c              |    8 +-
 drivers/net/wireless/ath/ath12k/hal.h              |    5 +-
 drivers/net/wireless/ath/ath12k/mac.c              |   72 +-
 drivers/net/wireless/ath/ath12k/peer.c             |  132 +-
 drivers/net/wireless/ath/ath12k/peer.h             |   14 +-
 drivers/net/wireless/ath/ath12k/qmi.c              |  168 ++-
 drivers/net/wireless/ath/ath12k/wifi7/dp_tx.c      |   64 +-
 .../net/wireless/ath/ath12k/wifi7/hal_rx_desc.h    |   34 +-
 drivers/net/wireless/ath/ath12k/wifi7/hw.c         |   61 +-
 drivers/net/wireless/ath/ath12k/wmi.c              |  160 ++-
 drivers/net/wireless/ath/ath12k/wmi.h              |    8 +
 drivers/net/wireless/ath/ath6kl/wmi.c              |   17 +-
 .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |    4 +
 drivers/net/wireless/intel/iwlwifi/fw/dump.c       |    2 +-
 drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c   |    8 +-
 drivers/net/wireless/intel/iwlwifi/mei/main.c      |    8 +-
 drivers/net/wireless/intel/iwlwifi/mvm/ops.c       |    2 +-
 drivers/net/wireless/mediatek/mt76/channel.c       |   98 +-
 drivers/net/wireless/mediatek/mt76/dma.c           |   48 +-
 drivers/net/wireless/mediatek/mt76/dma.h           |    2 +-
 drivers/net/wireless/mediatek/mt76/mac80211.c      |   15 +
 drivers/net/wireless/mediatek/mt76/mcu.c           |   12 +-
 drivers/net/wireless/mediatek/mt76/mmio.c          |   18 +-
 drivers/net/wireless/mediatek/mt76/mt76.h          |    7 +
 drivers/net/wireless/mediatek/mt76/mt76_connac.h   |    8 +-
 .../net/wireless/mediatek/mt76/mt76_connac_mac.c   |    6 +-
 .../net/wireless/mediatek/mt76/mt76_connac_mcu.c   |   16 +-
 .../net/wireless/mediatek/mt76/mt76_connac_mcu.h   |    4 +
 drivers/net/wireless/mediatek/mt76/mt76x02_mac.c   |    2 +-
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c |    2 +-
 drivers/net/wireless/mediatek/mt76/mt7915/init.c   |   11 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mac.c    |    8 +-
 drivers/net/wireless/mediatek/mt76/mt7915/main.c   |   24 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c    |   14 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.h    |    6 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h |   18 +
 drivers/net/wireless/mediatek/mt76/mt7915/pci.c    |    9 +-
 drivers/net/wireless/mediatek/mt76/mt7915/soc.c    |    2 +-
 .../net/wireless/mediatek/mt76/mt7915/testmode.c   |    5 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mac.c    |    5 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mcu.c    |   28 +-
 drivers/net/wireless/mediatek/mt76/mt7921/pci.c    |  103 ++
 drivers/net/wireless/mediatek/mt76/mt7925/Makefile |    2 +-
 drivers/net/wireless/mediatek/mt76/mt7925/mac.c    |    2 +-
 drivers/net/wireless/mediatek/mt76/mt7925/main.c   |   56 +-
 drivers/net/wireless/mediatek/mt76/mt7925/mcu.c    |   16 +-
 drivers/net/wireless/mediatek/mt76/mt7925/nan.c    |  927 ++++++++++++++
 drivers/net/wireless/mediatek/mt76/mt7925/nan.h    |  419 +++++++
 drivers/net/wireless/mediatek/mt76/mt7925/regd.c   |   30 +
 drivers/net/wireless/mediatek/mt76/mt7925/regd.h   |    3 +
 drivers/net/wireless/mediatek/mt76/mt792x.h        |   38 +
 drivers/net/wireless/mediatek/mt76/mt792x_usb.c    |   91 +-
 drivers/net/wireless/mediatek/mt76/mt7996/init.c   |   20 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mac.c    |   60 +-
 drivers/net/wireless/mediatek/mt76/mt7996/main.c   |   40 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c    |   21 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.h    |    2 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mmio.c   |   90 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h |    1 +
 drivers/net/wireless/mediatek/mt76/mt7996/regs.h   |   24 +-
 drivers/net/wireless/mediatek/mt76/scan.c          |   17 +-
 drivers/net/wireless/mediatek/mt76/sdio.c          |   11 +-
 drivers/net/wireless/mediatek/mt76/tx.c            |    9 +-
 drivers/net/wireless/mediatek/mt76/usb.c           |   11 +
 drivers/net/wireless/realtek/rtlwifi/pci.c         |    6 +-
 drivers/net/wireless/realtek/rtw89/debug.c         |    2 +-
 drivers/net/wireless/realtek/rtw89/fw.c            |   10 +-
 drivers/net/wireless/realtek/rtw89/fw.h            |    3 +-
 drivers/net/wireless/realtek/rtw89/mac.c           |    2 +-
 drivers/net/wireless/realtek/rtw89/mac80211.c      |   35 +-
 drivers/net/wireless/realtek/rtw89/rtw8852a.c      |    2 +-
 drivers/net/wireless/virtual/mac80211_hwsim_main.c |    5 +-
 drivers/net/wireless/zydas/zd1211rw/zd_usb.c       |    8 +
 drivers/nfc/pn533/pn533.c                          |   21 +-
 drivers/nvdimm/label.c                             |   15 +-
 drivers/nvdimm/nd_virtio.c                         |  121 +-
 drivers/nvdimm/pmem.c                              |   15 +-
 drivers/nvdimm/region_devs.c                       |    5 +-
 drivers/nvdimm/virtio_pmem.c                       |   17 +-
 drivers/nvdimm/virtio_pmem.h                       |    6 +
 drivers/nvme/host/apple.c                          |   62 +-
 drivers/nvme/host/core.c                           |    5 +-
 drivers/nvme/host/fc.c                             |    6 +
 drivers/nvme/host/ioctl.c                          |  117 +-
 drivers/nvme/host/nvme.h                           |    7 +
 drivers/nvme/host/pci.c                            |    2 +
 drivers/nvme/target/admin-cmd.c                    |   12 +-
 drivers/nvme/target/configfs.c                     |   10 +-
 drivers/nvme/target/core.c                         |   54 +-
 drivers/nvme/target/fabrics-cmd-auth.c             |   12 +-
 drivers/nvme/target/fabrics-cmd.c                  |    2 +-
 drivers/nvme/target/nvmet.h                        |    6 +
 drivers/nvme/target/pci-epf.c                      |    2 +-
 drivers/nvme/target/pr.c                           |   27 +-
 drivers/nvme/target/rdma.c                         |   31 +-
 drivers/nvme/target/zns.c                          |    2 +-
 drivers/of/irq.c                                   |    4 +-
 drivers/opp/core.c                                 |   13 +-
 drivers/pci/controller/cadence/Kconfig             |    4 +-
 drivers/pci/controller/cadence/pci-j721e.c         |    4 +-
 drivers/pci/controller/dwc/Kconfig                 |    2 +
 drivers/pci/controller/dwc/pci-keystone.c          |    6 +-
 drivers/pci/controller/dwc/pcie-designware-ep.c    |   19 +
 drivers/pci/controller/dwc/pcie-designware.h       |    1 +
 drivers/pci/controller/dwc/pcie-qcom.c             |   37 +
 drivers/pci/controller/dwc/pcie-ultrarisc.c        |   85 +-
 drivers/pci/controller/pci-xgene.c                 |    5 +-
 drivers/pci/controller/plda/pcie-starfive.c        |   10 +-
 drivers/pci/pci-driver.c                           |  192 +--
 drivers/pci/pci-sysfs.c                            |   26 +-
 drivers/pci/pci.h                                  |   41 +-
 drivers/pci/pcie/aspm.c                            |   19 +-
 drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c           |   24 +-
 drivers/pci/search.c                               |    8 +-
 drivers/perf/arm_pmuv3.c                           |    2 +-
 drivers/perf/arm_spe_pmu.c                         |    2 +-
 drivers/perf/cxl_pmu.c                             |    2 +-
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c          |   33 +-
 drivers/phy/qualcomm/phy-qcom-qmp-pcie.c           |    1 +
 drivers/phy/qualcomm/phy-qcom-qmp-usb-legacy.c     |   12 +-
 drivers/phy/qualcomm/phy-qcom-qmp-usb.c            |   12 +-
 drivers/phy/qualcomm/phy-qcom-sgmii-eth.c          |   37 +-
 drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c      |   26 +-
 drivers/phy/renesas/phy-rcar-gen2.c                |    1 -
 drivers/phy/renesas/phy-rcar-gen3-usb2.c           |   27 +-
 drivers/phy/rockchip/phy-rockchip-inno-csidphy.c   |    2 +-
 drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c  |  160 ++-
 drivers/phy/starfive/phy-jh7110-dphy-rx.c          |    5 +-
 drivers/phy/starfive/phy-jh7110-dphy-tx.c          |    5 +-
 drivers/phy/sunplus/phy-sunplus-usb2.c             |    6 +-
 drivers/pinctrl/Kconfig                            |    4 +-
 drivers/pinctrl/airoha/pinctrl-airoha.c            |  362 ++++--
 drivers/pinctrl/bcm/Kconfig                        |    2 +
 drivers/pinctrl/bcm/pinctrl-bcm2835.c              |    1 -
 drivers/pinctrl/freescale/pinctrl-imx1-core.c      |    7 +-
 drivers/pinctrl/mediatek/mtk-eint.c                |   25 +-
 drivers/pinctrl/mediatek/pinctrl-moore.c           |    6 +-
 drivers/pinctrl/mediatek/pinctrl-mtk-common.c      |   14 +-
 drivers/pinctrl/mediatek/pinctrl-paris.c           |    2 +-
 drivers/pinctrl/pinctrl-eic7700.c                  |    3 +
 drivers/pinctrl/pinctrl-generic.c                  |   25 +-
 drivers/pinctrl/pinctrl-rockchip.c                 |   50 +-
 drivers/pinctrl/qcom/pinctrl-shikra.c              |    1 +
 drivers/pinctrl/spacemit/pinctrl-k1.c              |   10 +-
 drivers/pinctrl/tegra/pinctrl-tegra264.c           |   24 +-
 drivers/platform/arm64/qcom-hamoa-ec.c             |    4 +-
 drivers/platform/chrome/cros_ec_debugfs.c          |    6 +-
 drivers/platform/chrome/cros_ec_lightbar.c         |    7 +-
 drivers/platform/chrome/cros_ec_sensorhub_ring.c   |    9 +-
 drivers/platform/chrome/cros_ec_typec.c            |    6 +
 drivers/platform/mellanox/mlxbf-bootctl.c          |    1 +
 drivers/platform/mellanox/mlxbf-pmc.c              |   10 +-
 drivers/platform/surface/surface_acpi_notify.c     |    6 +-
 drivers/platform/x86/acer-wmi.c                    |    4 +-
 drivers/platform/x86/amd/hsmp/hwmon.c              |    3 +
 drivers/platform/x86/asus-wireless.c               |   11 +-
 drivers/platform/x86/asus-wmi.c                    |    6 +-
 drivers/platform/x86/dell/dell-wmi-base.c          |   19 +-
 drivers/platform/x86/dell/dell-wmi-privacy.c       |    4 +-
 .../x86/dell/dell-wmi-sysman/dell-wmi-sysman.h     |    2 +-
 .../x86/hp/hp-bioscfg/passwdobj-attributes.c       |    5 +
 drivers/platform/x86/lg-laptop.c                   |   21 +-
 drivers/pmdomain/bcm/bcm2835-power.c               |    7 +-
 drivers/power/reset/reboot-mode.c                  |   30 +-
 drivers/power/supply/bd71828-power.c               |   20 +-
 drivers/power/supply/bd99954-charger.h             |   23 +-
 drivers/power/supply/bq27xxx_battery.c             |    6 +-
 drivers/power/supply/isp1704_charger.c             |    1 +
 drivers/power/supply/sbs-battery.c                 |    7 +-
 drivers/power/supply/sc2731_charger.c              |    2 +
 drivers/powercap/intel_rapl_common.c               |   11 +-
 drivers/powercap/intel_rapl_tpmi.c                 |    5 +-
 drivers/pps/clients/pps-gpio.c                     |   66 +-
 drivers/pps/pps.c                                  |   10 +-
 drivers/ptp/ptp_netc.c                             |   13 +-
 drivers/pwm/pwm-samsung.c                          |   22 +-
 drivers/rapidio/rio-scan.c                         |    1 +
 drivers/regulator/adp5055-regulator.c              |    2 +-
 drivers/regulator/core.c                           |    6 +-
 drivers/regulator/qcom-rpmh-regulator.c            |    6 +-
 drivers/regulator/tps65185.c                       |   11 +-
 drivers/regulator/tps6594-regulator.c              |   19 +-
 drivers/remoteproc/qcom_common.c                   |    4 +-
 drivers/remoteproc/qcom_common.h                   |    6 +
 drivers/remoteproc/qcom_q6v5.c                     |    5 +-
 drivers/remoteproc/qcom_q6v5_adsp.c                |    1 +
 drivers/remoteproc/qcom_q6v5_mss.c                 |   19 +-
 drivers/remoteproc/qcom_q6v5_pas.c                 |   68 ++
 drivers/remoteproc/qcom_sysmon.c                   |   19 +
 drivers/remoteproc/qcom_wcnss.c                    |   23 +-
 drivers/remoteproc/remoteproc_core.c               |   67 +-
 drivers/remoteproc/remoteproc_sysfs.c              |    1 -
 drivers/resctrl/mpam_devices.c                     |   10 +-
 drivers/rpmsg/qcom_glink_native.c                  |    3 -
 drivers/rtc/rtc-gamecube.c                         |    4 +-
 drivers/rtc/rtc-pcf85363.c                         |   17 +-
 drivers/rtc/rtc-pcf8563.c                          |    4 +-
 drivers/rtc/rtc-spacemit-p1.c                      |    5 +-
 drivers/rtc/rtc-zynqmp.c                           |    7 +-
 drivers/scsi/mpt3sas/mpt3sas_base.c                |    2 +
 drivers/scsi/qla2xxx/qla_attr.c                    |    1 -
 drivers/scsi/qla2xxx/qla_nx2.c                     |    2 +-
 drivers/scsi/sd.c                                  |   55 +-
 drivers/scsi/smartpqi/smartpqi_init.c              |   18 +
 drivers/soc/fsl/qe/gpio.c                          |   25 +
 drivers/soc/fsl/qe/qe_ic.c                         |    3 +-
 drivers/soc/fsl/qe/qe_io.c                         |   15 +
 drivers/soc/qcom/pmic_glink_altmode.c              |    3 +-
 drivers/soc/qcom/rpmh-rsc.c                        |   37 +-
 drivers/soc/renesas/Kconfig                        |    1 -
 drivers/soc/samsung/exynos-pmu.c                   |    4 +-
 drivers/soc/ti/knav_qmss.h                         |    1 +
 drivers/soc/ti/knav_qmss_queue.c                   |    7 +-
 drivers/soundwire/cadence_master.c                 |   24 +-
 drivers/soundwire/qcom.c                           |    2 +-
 drivers/spi/spi-amlogic-spisg.c                    |    2 +-
 drivers/spi/spi-davinci.c                          |    7 +-
 drivers/spi/spi-geni-qcom.c                        |   17 +-
 drivers/spi/spi-img-spfi.c                         |    5 +-
 drivers/spi/spi-oc-tiny.c                          |   24 +-
 drivers/spi/spi-sprd-adi.c                         |    6 +
 drivers/staging/fbtft/fbtft-sysfs.c                |    2 +-
 drivers/staging/greybus/audio_gb.c                 |   13 +
 drivers/staging/greybus/audio_manager_sysfs.c      |    2 +-
 drivers/staging/media/ipu7/ipu7-isys.c             |    1 +
 drivers/staging/media/ipu7/ipu7.c                  |    4 +-
 drivers/staging/octeon/ethernet-rx.c               |    2 +
 drivers/staging/octeon/ethernet-tx.c               |    2 +
 drivers/staging/rtl8723bs/core/rtw_cmd.c           |    8 +-
 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c      |   22 +-
 drivers/staging/rtl8723bs/os_dep/sdio_intf.c       |    4 +-
 drivers/staging/sm750fb/Kconfig                    |    1 +
 drivers/staging/sm750fb/sm750.c                    |    6 +-
 drivers/staging/sm750fb/sm750.h                    |    2 +-
 drivers/staging/sm750fb/sm750_accel.c              |    6 +-
 drivers/staging/sm750fb/sm750_accel.h              |    4 +-
 drivers/thermal/airoha_thermal.c                   |    4 +-
 .../intel/int340x_thermal/int3400_thermal.c        |    4 +-
 drivers/thermal/qcom/qcom-spmi-adc-tm5.c           |    3 -
 drivers/thermal/renesas/rcar_thermal.c             |   15 +-
 drivers/thermal/spacemit/k1_tsensor.c              |    5 +-
 drivers/thermal/thermal_hwmon.c                    |   89 +-
 drivers/thunderbolt/stream.c                       |   12 +-
 drivers/tty/hvc/Kconfig                            |    2 +-
 drivers/tty/serial/amba-pl011.c                    |   48 +-
 drivers/tty/serial/ma35d1_serial.c                 |   12 +-
 drivers/tty/serial/qcom_geni_serial.c              |   10 +-
 drivers/tty/serial/serial_core.c                   |   32 +-
 drivers/tty/tty_io.c                               |    6 +-
 drivers/ufs/core/ufs-debugfs.c                     |    2 +-
 drivers/ufs/core/ufs-rpmb.c                        |    4 +
 drivers/ufs/core/ufs-txeq.c                        |   27 +-
 drivers/ufs/core/ufshcd.c                          |   33 +-
 drivers/uio/uio.c                                  |    5 +
 drivers/usb/atm/usbatm.c                           |    4 +-
 drivers/usb/chipidea/ci_hdrc_imx.c                 |    2 +-
 drivers/usb/core/driver.c                          |   12 +-
 drivers/usb/gadget/configfs.c                      |    4 +-
 drivers/usb/gadget/function/f_fs.c                 |    8 +-
 drivers/usb/gadget/function/f_uac1.c               |   13 +-
 drivers/usb/gadget/function/f_uac1_legacy.c        |   56 -
 drivers/usb/gadget/function/f_uac2.c               |   13 +-
 drivers/usb/gadget/function/u_uac1_legacy.h        |    3 -
 drivers/usb/gadget/udc/aspeed_udc.c                |   50 +-
 drivers/usb/gadget/udc/r8a66597-udc.c              |    1 -
 drivers/usb/misc/usb-ljca.c                        |    3 +
 drivers/usb/mtu3/mtu3_core.c                       |   11 +-
 drivers/usb/renesas_usbhs/common.c                 |    6 +-
 drivers/usb/typec/ucsi/debugfs.c                   |    1 +
 drivers/usb/typec/ucsi/ucsi.c                      |    2 +
 drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c        |   15 +-
 drivers/vdpa/mlx5/core/mr.c                        |    2 +-
 drivers/vdpa/vdpa_sim/vdpa_sim.c                   |   25 +-
 drivers/vfio/pci/vfio_pci_config.c                 |    1 +
 drivers/vfio/pci/vfio_pci_core.c                   |    3 +
 drivers/vhost/net.c                                |    3 +-
 drivers/video/backlight/Kconfig                    |    2 +-
 drivers/video/backlight/aw99706.c                  |   15 +-
 drivers/video/fbdev/clps711x-fb.c                  |    2 -
 drivers/video/fbdev/kyro/fbdev.c                   |   24 +-
 drivers/video/fbdev/tdfxfb.c                       |    2 +-
 drivers/virt/coco/arm-cca-guest/arm-cca-guest.c    |   97 +-
 drivers/virtio/virtio.c                            |   41 +-
 drivers/virtio/virtio_balloon.c                    |   40 +-
 drivers/virtio/virtio_pci_common.c                 |    2 +-
 drivers/virtio/virtio_rtc_driver.c                 |   14 +-
 drivers/w1/masters/ds2482.c                        |    4 +
 drivers/xen/xenbus/xenbus_probe.c                  |    3 +-
 drivers/xen/xenbus/xenbus_xs.c                     |   16 +-
 fs/btrfs/acl.c                                     |    4 +
 fs/btrfs/block-group.c                             |    8 +-
 fs/btrfs/defrag.c                                  |   50 +-
 fs/btrfs/disk-io.c                                 |   29 +-
 fs/btrfs/extent_io.c                               |  278 +++--
 fs/btrfs/fiemap.c                                  |    4 +-
 fs/btrfs/file.c                                    |  104 +-
 fs/btrfs/qgroup.c                                  |   18 +-
 fs/btrfs/relocation.c                              |   49 +-
 fs/btrfs/transaction.c                             |    8 +-
 fs/btrfs/transaction.h                             |   25 +-
 fs/btrfs/verity.c                                  |   16 +-
 fs/btrfs/volumes.c                                 |   37 +-
 fs/ceph/dir.c                                      |    2 +-
 fs/ceph/file.c                                     |   48 +
 fs/dax.c                                           |   12 +-
 fs/dcache.c                                        |    7 +-
 fs/erofs/Kconfig                                   |    8 +-
 fs/erofs/decompressor.c                            |    1 +
 fs/erofs/internal.h                                |    2 +-
 fs/erofs/zdata.c                                   |   12 +-
 fs/erofs/zmap.c                                    |   38 +-
 fs/exfat/exfat_fs.h                                |    2 +-
 fs/exfat/file.c                                    |  180 ++-
 fs/exfat/iomap.c                                   |   11 +-
 fs/ext4/dir.c                                      |   20 +-
 fs/ext4/ext4.h                                     |    6 +-
 fs/ext4/extents.c                                  |    2 +-
 fs/ext4/file.c                                     |    7 +
 fs/ext4/inline.c                                   |   25 +-
 fs/ext4/inode.c                                    |  131 +-
 fs/ext4/migrate.c                                  |    3 +-
 fs/ext4/namei.c                                    |    2 +
 fs/ext4/orphan.c                                   |   10 +-
 fs/ext4/xattr.c                                    |    2 +-
 fs/f2fs/f2fs.h                                     |   22 +-
 fs/f2fs/file.c                                     |   17 +-
 fs/f2fs/gc.c                                       |    2 +-
 fs/f2fs/segment.c                                  |    8 +-
 fs/f2fs/super.c                                    |    4 +-
 fs/fat/nfs.c                                       |    4 +-
 fs/fuse/cuse.c                                     |    8 +-
 fs/fuse/dev.c                                      |   14 +-
 fs/fuse/dev_uring.c                                |   29 +-
 fs/fuse/dir.c                                      |   23 +-
 fs/fuse/file.c                                     |    5 +-
 fs/fuse/fuse_i.h                                   |    2 +
 fs/fuse/inode.c                                    |    9 +-
 fs/fuse/readdir.c                                  |    2 +-
 fs/hfsplus/catalog.c                               |   25 +-
 fs/hfsplus/hfsplus_fs.h                            |    6 +
 fs/hugetlbfs/inode.c                               |    3 +-
 fs/inode.c                                         |   18 +-
 fs/iomap/bio.c                                     |    1 +
 fs/iomap/iter.c                                    |  130 +-
 fs/isofs/compress.c                                |    7 +-
 fs/lockd/nlm3xdr_gen.c                             |    2 +-
 fs/lockd/nlm3xdr_gen.h                             |    2 +-
 fs/lockd/nlm4xdr_gen.c                             |   47 +-
 fs/lockd/nlm4xdr_gen.h                             |    2 +-
 fs/nfs/blocklayout/dev.c                           |   21 +-
 fs/nfs/callback_xdr.c                              |    2 +-
 fs/nfs/client.c                                    |   14 +-
 fs/nfs/delegation.c                                |   20 +-
 fs/nfs/dir.c                                       |    7 +
 fs/nfs/filelayout/filelayoutdev.c                  |    3 +-
 fs/nfs/flexfilelayout/flexfilelayout.c             |    3 +-
 fs/nfs/flexfilelayout/flexfilelayoutdev.c          |    3 +-
 fs/nfs/inode.c                                     |    4 +-
 fs/nfs/internal.h                                  |    1 +
 fs/nfs/nfs4client.c                                |    1 +
 fs/nfs/nfs4proc.c                                  |    4 +-
 fs/nfs/nfs4session.c                               |   16 +-
 fs/nfs/pnfs.c                                      |   35 +-
 fs/nfs/pnfs.h                                      |    3 +-
 fs/nfs/pnfs_nfs.c                                  |   14 +-
 fs/nfsd/nfs4state.c                                |    8 +-
 fs/nfsd/nfs4xdr_gen.c                              |  589 ++++++++-
 fs/nfsd/nfs4xdr_gen.h                              |    5 +-
 fs/nfsd/nfsd.h                                     |    9 +-
 fs/nfsd/trace.h                                    |    1 +
 fs/nilfs2/page.c                                   |   17 +-
 fs/nilfs2/segment.c                                |    4 +
 fs/nilfs2/the_nilfs.c                              |    6 +
 fs/notify/fanotify/fanotify.c                      |    1 +
 fs/notify/fanotify/fanotify_user.c                 |   12 +-
 fs/ntfs/attrib.c                                   |    7 +-
 fs/ntfs/compress.c                                 |   94 +-
 fs/ntfs/ea.c                                       |  120 +-
 fs/ntfs/ea.h                                       |    3 +-
 fs/ntfs/file.c                                     |   10 +-
 fs/ntfs/index.c                                    |   96 +-
 fs/ntfs/inode.c                                    |   79 +-
 fs/ntfs/inode.h                                    |    1 +
 fs/ntfs/iomap.c                                    |   62 +-
 fs/ntfs/mft.c                                      |   12 +-
 fs/ntfs/namei.c                                    |   10 +-
 fs/ntfs3/fslog.c                                   |   13 +-
 fs/ntfs3/fsntfs.c                                  |    8 +-
 fs/ntfs3/record.c                                  |   34 +-
 fs/ntfs3/super.c                                   |   13 +-
 fs/ntfs3/xattr.c                                   |   25 +-
 fs/ocfs2/acl.c                                     |  141 ++-
 fs/ocfs2/acl.h                                     |   19 +-
 fs/ocfs2/cluster/heartbeat.c                       |  142 ++-
 fs/ocfs2/cluster/heartbeat.h                       |    5 +
 fs/ocfs2/cluster/nodemanager.c                     |   23 +-
 fs/ocfs2/cluster/nodemanager.h                     |    2 +
 fs/ocfs2/cluster/tcp.c                             |  186 ++-
 fs/ocfs2/cluster/tcp.h                             |    2 +
 fs/ocfs2/inode.c                                   |   22 +-
 fs/ocfs2/namei.c                                   |   17 +-
 fs/ocfs2/xattr.c                                   |  301 ++++-
 fs/ocfs2/xattr.h                                   |   11 +-
 fs/resctrl/monitor.c                               |   60 +-
 fs/resctrl/rdtgroup.c                              |   71 +-
 fs/smb/client/cifs_debug.c                         |    2 +-
 fs/smb/client/dir.c                                |    2 +
 fs/smb/client/inode.c                              |   14 -
 fs/smb/client/smb2inode.c                          |    9 +-
 fs/smb/client/smb2pdu.c                            |   18 +-
 fs/smb/common/smb2pdu.h                            |    4 +-
 fs/smb/common/smbglob.h                            |    1 +
 fs/smb/server/Kconfig                              |    1 -
 fs/smb/server/auth.c                               |   20 +-
 fs/smb/server/compress.c                           |   76 +-
 fs/smb/server/compress.h                           |    1 +
 fs/smb/server/connection.c                         |   59 +-
 fs/smb/server/connection.h                         |    8 +-
 fs/smb/server/ksmbd_netlink.h                      |    6 +-
 fs/smb/server/ksmbd_work.c                         |    5 +
 fs/smb/server/ksmbd_work.h                         |   14 +
 fs/smb/server/mgmt/share_config.c                  |   64 +-
 fs/smb/server/mgmt/share_config.h                  |   25 +
 fs/smb/server/mgmt/tree_connect.c                  |   10 +
 fs/smb/server/mgmt/user_config.c                   |   12 +
 fs/smb/server/mgmt/user_session.c                  |   92 +-
 fs/smb/server/mgmt/user_session.h                  |    4 +
 fs/smb/server/misc.h                               |    4 +-
 fs/smb/server/oplock.c                             |  202 +++-
 fs/smb/server/oplock.h                             |    4 +-
 fs/smb/server/proc.c                               |   13 +-
 fs/smb/server/server.c                             |   61 +-
 fs/smb/server/server.h                             |    2 +
 fs/smb/server/smb2ops.c                            |   15 +-
 fs/smb/server/smb2pdu.c                            | 1265 +++++++++++++++++---
 fs/smb/server/smb2pdu.h                            |   60 +
 fs/smb/server/smbacl.c                             |  100 +-
 fs/smb/server/smbacl.h                             |    3 +-
 fs/smb/server/transport_ipc.c                      |   21 +
 fs/smb/server/transport_tcp.c                      |    6 +
 fs/smb/server/vfs.c                                |    3 -
 fs/smb/server/vfs_cache.c                          |   80 +-
 fs/smb/server/vfs_cache.h                          |   24 +
 fs/smb/smbdirect/accept.c                          |   16 +-
 fs/smb/smbdirect/connection.c                      |   13 +-
 fs/smb/smbdirect/socket.c                          |   98 +-
 fs/squashfs/cache.c                                |    2 +-
 fs/stat.c                                          |    2 +-
 fs/super.c                                         |    4 +-
 fs/udf/inode.c                                     |  129 +-
 fs/udf/super.c                                     |   23 +-
 fs/udf/symlink.c                                   |    2 +
 include/acpi/acpi_bus.h                            |    6 +
 include/asm-generic/vmlinux.lds.h                  |   10 +-
 include/clocksource/samsung_pwm.h                  |    2 +-
 include/cxl/mailbox.h                              |    2 +
 include/drm/bridge/dw_dp.h                         |    1 +
 include/linux/bio-integrity.h                      |    3 +
 include/linux/bpf.h                                |   36 +-
 include/linux/cpuset.h                             |    1 +
 include/linux/efi.h                                |    4 +-
 include/linux/filter.h                             |   55 +
 include/linux/fs.h                                 |   20 +-
 include/linux/fsl/ntmp.h                           |    2 +
 include/linux/i3c/master.h                         |    3 +
 include/linux/iomap.h                              |  111 +-
 include/linux/irqchip/arm-gic-v5.h                 |    2 +
 include/linux/leds.h                               |    2 +
 include/linux/libnvdimm.h                          |    9 +
 include/linux/liveupdate.h                         |   11 +-
 include/linux/maple_tree.h                         |    2 +-
 include/linux/memcontrol.h                         |    9 +-
 include/linux/memory_hotplug.h                     |    2 +-
 include/linux/mlx5/vport.h                         |    3 +-
 include/linux/nfs4.h                               |  127 --
 include/linux/nfs_xdr.h                            |    2 +-
 include/linux/pci.h                                |    1 +
 include/linux/remoteproc.h                         |   15 +-
 include/linux/rsc_table.h                          |   17 +-
 include/linux/rtsx_usb.h                           |    3 +
 include/linux/soc/qcom/ubwc.h                      |    1 +
 include/linux/sunrpc/xdrgen/_defs.h                |    2 +
 include/linux/sunrpc/xdrgen/nfs4_1.h               |  279 ++++-
 include/linux/sunrpc/xdrgen/nlm3.h                 |    2 +-
 include/linux/sunrpc/xdrgen/nlm4.h                 |    2 +-
 include/linux/uprobes.h                            |    5 -
 include/linux/usb.h                                |    3 +-
 include/linux/usb/pd.h                             |    2 +-
 include/linux/virtio.h                             |    1 +
 include/linux/virtio_net.h                         |    4 +
 include/media/rc-map.h                             |    2 -
 include/net/bluetooth/hci_core.h                   |    2 +-
 include/net/bluetooth/l2cap.h                      |    5 +
 include/net/inetpeer.h                             |    4 +
 include/net/libeth/xsk.h                           |    2 +-
 include/net/netfilter/nf_conntrack_helper.h        |    1 +
 include/net/netfilter/nf_tables.h                  |    2 -
 include/net/pkt_sched.h                            |    1 +
 include/net/xdp_sock_drv.h                         |   22 +-
 include/net/xsk_buff_pool.h                        |    3 +-
 include/rdma/uverbs_ioctl.h                        |   20 +
 include/sound/sdca_fdl.h                           |    4 +
 include/uapi/drm/panthor_drm.h                     |   12 +
 include/uapi/drm/xe_drm.h                          |   11 +-
 include/uapi/linux/if_xdp.h                        |    1 +
 include/uapi/linux/nfs4.h                          |    2 -
 include/uapi/linux/time_types.h                    |    2 +-
 kernel/Kconfig.preempt                             |    1 +
 kernel/bpf/arena.c                                 |   10 +-
 kernel/bpf/bpf_lsm.c                               |    1 -
 kernel/bpf/bpf_struct_ops.c                        |   12 +
 kernel/bpf/btf.c                                   |   47 +-
 kernel/bpf/cgroup.c                                |   27 +-
 kernel/bpf/const_fold.c                            |   11 +-
 kernel/bpf/core.c                                  |    7 +-
 kernel/bpf/cpumask.c                               |    6 +-
 kernel/bpf/fixups.c                                |   25 +-
 kernel/bpf/helpers.c                               |   17 +-
 kernel/bpf/liveness.c                              |    9 +-
 kernel/bpf/mmap_unlock_work.h                      |   51 +-
 kernel/bpf/net_namespace.c                         |   17 +-
 kernel/bpf/queue_stack_maps.c                      |    8 +-
 kernel/bpf/ringbuf.c                               |    2 +-
 kernel/bpf/stackmap.c                              |  148 ++-
 kernel/bpf/states.c                                |    3 +-
 kernel/bpf/syscall.c                               |   23 +-
 kernel/bpf/task_iter.c                             |   48 +-
 kernel/bpf/trampoline.c                            |   20 +-
 kernel/bpf/verifier.c                              |  160 ++-
 kernel/cgroup/cpuset-internal.h                    |    2 +-
 kernel/cgroup/cpuset.c                             |   79 +-
 kernel/crash_dump_dm_crypt.c                       |   15 +-
 kernel/dma/swiotlb.c                               |   31 +-
 kernel/events/uprobes.c                            |   10 -
 kernel/fork.c                                      |    1 -
 kernel/kcsan/core.c                                |   12 +-
 kernel/liveupdate/luo_flb.c                        |   20 +-
 kernel/liveupdate/luo_session.c                    |    6 +-
 kernel/locking/lockdep.c                           |    2 +
 kernel/module/dups.c                               |   99 +-
 kernel/module/stats.c                              |    2 +-
 kernel/power/snapshot.c                            |    5 +-
 kernel/power/wakelock.c                            |    2 +-
 kernel/printk/printk.c                             |   11 +-
 kernel/rcu/tree_plugin.h                           |   10 +-
 kernel/sched/cpufreq_schedutil.c                   |    2 +-
 kernel/sched/deadline.c                            |    6 +-
 kernel/sched/ext/ext.c                             |   59 +-
 kernel/sched/ext/internal.h                        |    2 -
 kernel/sched/fair.c                                |   34 +-
 kernel/sched/isolation.c                           |   16 +-
 kernel/sched/rt.c                                  |    3 +-
 kernel/sys.c                                       |    2 +-
 kernel/time/clocksource.c                          |    8 +-
 kernel/time/hrtimer.c                              |    4 +-
 kernel/time/namespace.c                            |    6 +-
 kernel/time/timekeeping.c                          |   27 +-
 kernel/time/timer_migration.c                      |    4 +-
 kernel/trace/ring_buffer.c                         |    2 -
 kernel/trace/trace.c                               |    2 +-
 kernel/trace/trace.h                               |    4 +-
 kernel/trace/trace_btf.c                           |   19 +-
 kernel/trace/trace_btf.h                           |    3 +-
 kernel/trace/trace_events.c                        |    6 +-
 kernel/trace/trace_probe.c                         |   18 +-
 kernel/workqueue.c                                 |   38 +-
 lib/interval_tree_test.c                           |    4 +-
 lib/maple_tree.c                                   |   43 +-
 lib/string.c                                       |    3 +-
 lib/test_bitmap.c                                  |    1 +
 lib/test_hmm.c                                     |    2 +-
 mm/damon/core.c                                    |   21 +-
 mm/damon/tests/core-kunit.h                        |    2 +-
 mm/memory_hotplug.c                                |    3 +-
 mm/mm_init.c                                       |   19 +-
 mm/mremap.c                                        |   21 +-
 mm/swap.c                                          |    9 +
 mm/vmscan.c                                        |    5 +
 net/batman-adv/bridge_loop_avoidance.c             |   65 +-
 net/batman-adv/distributed-arp-table.c             |   58 +-
 net/batman-adv/types.h                             |    2 +-
 net/bluetooth/hci_conn.c                           |   20 +-
 net/bluetooth/hci_sync.c                           |   26 +-
 net/bluetooth/l2cap_core.c                         |   23 +-
 net/bluetooth/l2cap_sock.c                         |  100 +-
 net/bluetooth/mgmt.c                               |   40 +-
 net/bluetooth/msft.c                               |    5 +
 net/bluetooth/rfcomm/core.c                        |    4 +
 net/bridge/br_arp_nd_proxy.c                       |   24 +-
 net/bridge/br_netlink_tunnel.c                     |    3 +-
 net/bridge/br_vlan.c                               |    4 +-
 net/ceph/messenger_v2.c                            |    5 +
 net/core/dev.c                                     |   60 +-
 net/core/filter.c                                  |    4 -
 net/core/lwt_bpf.c                                 |   15 +-
 net/core/net_namespace.c                           |   25 +-
 net/core/page_pool.c                               |   71 +-
 net/core/skbuff.c                                  |    6 +-
 net/hsr/hsr_device.c                               |    2 +
 net/ife/ife.c                                      |   14 +-
 net/ipv4/inetpeer.c                                |   38 +-
 net/ipv4/tcp.c                                     |    6 +-
 net/ipv4/tcp_output.c                              |    2 +-
 net/ipv6/ip6mr.c                                   |    3 +-
 net/ipv6/route.c                                   |    2 +-
 net/ipv6/xfrm6_input.c                             |    2 +-
 net/kcm/kcmsock.c                                  |    3 +
 net/mac80211/link.c                                |    3 +-
 net/mac80211/mlme.c                                |    2 +-
 net/mac80211/s1g.c                                 |    2 +-
 net/mac80211/spectmgmt.c                           |   11 +-
 net/mac80211/tx.c                                  |    3 +-
 net/netfilter/ipset/ip_set_hash_gen.h              |  174 ++-
 net/netfilter/ipset/ip_set_hash_netiface.c         |    1 -
 net/netfilter/ipset/ip_set_hash_netportnet.c       |    1 -
 net/netfilter/ipvs/ip_vs_ftp.c                     |   10 +-
 net/netfilter/nf_conntrack_helper.c                |   14 +-
 net/netfilter/nf_conntrack_netlink.c               |    2 +-
 net/netfilter/nf_nat_sip.c                         |    5 +
 net/netfilter/nf_tables_api.c                      |   70 +-
 net/netfilter/nft_ct.c                             |  168 ++-
 net/netfilter/nft_dynset.c                         |   25 +-
 net/netfilter/xt_cgroup.c                          |   12 +-
 net/netfilter/xt_hl.c                              |    4 +-
 net/nfc/digital_core.c                             |    2 +-
 net/nfc/llcp_core.c                                |   29 +-
 net/nfc/llcp_sock.c                                |   14 +-
 net/nfc/nci/data.c                                 |   10 +-
 net/nfc/nci/rsp.c                                  |   41 +-
 net/phonet/pep.c                                   |    2 +-
 net/rds/cong.c                                     |    4 +-
 net/sched/act_api.c                                |    5 +-
 net/sched/act_bpf.c                                |   26 +
 net/sched/act_ct.c                                 |   46 +
 net/sched/act_ctinfo.c                             |   11 +
 net/sched/act_ife.c                                |   55 +-
 net/sched/act_pedit.c                              |   24 +
 net/sched/act_police.c                             |   12 +
 net/sched/act_sample.c                             |    9 +
 net/sched/act_skbmod.c                             |   12 +-
 net/sched/act_tunnel_key.c                         |   80 ++
 net/sched/cls_api.c                                |   21 +-
 net/sched/cls_basic.c                              |    6 +-
 net/sched/cls_bpf.c                                |    6 +-
 net/sched/cls_cgroup.c                             |    2 +-
 net/sched/cls_flow.c                               |    2 +-
 net/sched/cls_flower.c                             |    4 +-
 net/sched/cls_fw.c                                 |    4 +-
 net/sched/cls_matchall.c                           |    4 +-
 net/sched/cls_route.c                              |    4 +-
 net/sched/cls_u32.c                                |   11 +-
 net/sched/sch_api.c                                |    7 +-
 net/sched/sch_cake.c                               |    1 +
 net/sched/sch_codel.c                              |    2 +-
 net/sched/sch_fifo.c                               |    2 +-
 net/sched/sch_fq.c                                 |   26 +-
 net/sched/sch_fq_codel.c                           |    6 +-
 net/sched/sch_fq_pie.c                             |    3 +-
 net/sched/sch_gred.c                               |    4 +-
 net/sched/sch_hhf.c                                |    4 +
 net/sched/sch_htb.c                                |    7 +-
 net/sched/sch_plug.c                               |    2 +-
 net/sched/sch_sfq.c                                |    3 +-
 net/sched/sch_teql.c                               |    1 +
 net/smc/af_smc.c                                   |    2 +-
 net/smc/smc_inet.c                                 |   16 +
 net/smc/smc_llc.c                                  |    3 +
 net/sunrpc/rpcb_clnt.c                             |    4 +
 net/sunrpc/xprtsock.c                              |   20 +-
 net/tls/tls_strp.c                                 |   16 +-
 net/vmw_vsock/af_vsock.c                           |   16 +-
 net/wireless/core.c                                |    3 +
 net/wireless/nl80211.c                             |   10 +-
 net/xdp/xsk.c                                      |   30 +-
 net/xdp/xsk_buff_pool.c                            |    7 +-
 net/xfrm/xfrm_output.c                             |    4 +-
 rust/helpers/helpers.c                             |    2 +
 rust/kernel/cpufreq.rs                             |   24 +-
 rust/kernel/device.rs                              |   10 +-
 rust/kernel/drm/gpuvm/mod.rs                       |   32 +-
 rust/uapi/uapi_helper.h                            |    2 +-
 samples/ftrace/ftrace-direct-modify.c              |   12 +-
 samples/ftrace/ftrace-direct-multi-modify.c        |   12 +-
 samples/rust/rust_debugfs.rs                       |    4 +-
 samples/rust/rust_debugfs_scoped.rs                |    5 +-
 scripts/Makefile.vmlinux_o                         |    3 +
 scripts/livepatch/klp-build                        |    9 +
 scripts/mod/modpost.c                              |    7 +-
 scripts/tags.sh                                    |    2 +-
 security/apparmor/domain.c                         |  106 +-
 security/apparmor/include/policy.h                 |    3 +
 security/apparmor/lib.c                            |    4 +-
 security/apparmor/policy.c                         |   22 +-
 security/apparmor/policy_unpack.c                  |    2 +-
 security/smack/smack.h                             |    5 +-
 security/smack/smack_lsm.c                         |   67 +-
 security/smack/smackfs.c                           |  222 +---
 sound/core/control_led.c                           |    2 +
 sound/core/init.c                                  |    4 +-
 sound/core/seq/seq_clientmgr.c                     |   16 +-
 sound/core/seq/seq_midi.c                          |   61 +-
 sound/drivers/mtpav.c                              |    4 +-
 sound/hda/codecs/realtek/alc269.c                  |   13 +-
 sound/hda/common/proc.c                            |    2 +-
 sound/hda/controllers/Kconfig                      |    1 +
 sound/pci/asihpi/hpi6000.c                         |    5 +
 sound/pci/ice1712/ice1712.c                        |    7 +-
 sound/pci/via82xx_modem.c                          |   26 +-
 sound/soc/amd/acp-config.c                         |    2 +-
 sound/soc/apple/mca.c                              |    6 +-
 sound/soc/codecs/rt700-sdw.c                       |    6 +-
 sound/soc/codecs/tas2783-sdw.c                     |   26 +-
 sound/soc/codecs/tas675x.c                         |   18 +-
 sound/soc/fsl/Kconfig                              |    4 +-
 sound/soc/fsl/efika-audio-fabric.c                 |    2 -
 sound/soc/fsl/fsl-asoc-card.c                      |    4 +-
 sound/soc/fsl/fsl_audmix.c                         |   24 +-
 sound/soc/fsl/pcm030-audio-fabric.c                |    2 -
 sound/soc/meson/meson-card-utils.c                 |   17 +-
 sound/soc/pxa/pxa-ssp.c                            |    7 +-
 sound/soc/qcom/qdsp6/q6apm.c                       |   12 +-
 sound/soc/samsung/i2s.c                            |   25 +-
 sound/soc/soc-dapm.c                               |    2 +-
 sound/soc/sof/ipc4-topology.c                      |    2 +
 sound/soc/sof/topology.c                           |   18 +-
 sound/soc/spacemit/k1_i2s.c                        |   36 +-
 sound/soc/ti/j721e-evm.c                           |    4 +-
 sound/soc/xilinx/xlnx_formatter_pcm.c              |   14 +-
 tools/bpf/bpftool/Makefile                         |    2 +-
 tools/bpf/bpftool/map.c                            |   16 +-
 tools/bpf/bpftool/sign.c                           |    7 +-
 tools/bpf/bpftool/struct_ops.c                     |    4 +
 tools/build/Makefile.feature                       |    2 -
 tools/build/feature/Makefile                       |   14 -
 tools/include/linux/filter.h                       |    1 +
 tools/include/nolibc/arch-powerpc.h                |    2 +-
 tools/include/nolibc/arch-sparc.h                  |    2 +-
 tools/include/uapi/linux/if_xdp.h                  |    1 +
 tools/lib/api/fd/array.c                           |   12 +-
 tools/lib/bpf/features.c                           |    4 +-
 tools/lib/bpf/libbpf.c                             |    3 +-
 tools/lib/bpf/usdt.c                               |   16 +-
 .../xdrgen/templates/C/enum/declaration/enum.j2    |    1 +
 .../xdrgen/templates/C/pointer/encoder/string.j2   |    2 +
 .../C/pointer/encoder/variable_length_opaque.j2    |    2 +
 .../xdrgen/templates/C/struct/encoder/string.j2    |    2 +
 .../C/struct/encoder/variable_length_opaque.j2     |    2 +
 .../xdrgen/templates/C/union/definition/close.j2   |    6 -
 tools/objtool/Build                                |    4 +-
 tools/objtool/arch/x86/special.c                   |   27 +
 tools/objtool/builtin-check.c                      |    7 +
 tools/objtool/check.c                              |    7 +
 tools/objtool/elf.c                                |   13 +
 tools/objtool/include/objtool/builtin.h            |    1 +
 tools/objtool/include/objtool/elf.h                |    1 +
 tools/objtool/include/objtool/klp.h                |   33 +-
 tools/objtool/include/objtool/special.h            |    7 +
 tools/objtool/klp-diff.c                           |  233 ++--
 tools/objtool/klp-post-link.c                      |   53 +-
 tools/objtool/klp-symid.c                          |  119 ++
 tools/objtool/klp-sympos.c                         |  411 +++++++
 tools/perf/arch/arm/util/cs-etm.c                  |   10 +-
 tools/perf/arch/arm64/util/arm-spe.c               |    8 +-
 tools/perf/arch/arm64/util/hisi-ptt.c              |    2 +-
 tools/perf/arch/x86/tests/amd-ibs-period.c         |   20 +-
 tools/perf/arch/x86/tests/hybrid.c                 |   22 +-
 tools/perf/arch/x86/tests/topdown.c                |    4 +-
 tools/perf/arch/x86/util/auxtrace.c                |    2 +-
 tools/perf/arch/x86/util/intel-bts.c               |    6 +-
 tools/perf/arch/x86/util/intel-pt.c                |    9 +-
 tools/perf/arch/x86/util/iostat.c                  |   14 +-
 tools/perf/bench/evlist-open-close.c               |   29 +-
 tools/perf/builtin-annotate.c                      |    7 +-
 tools/perf/builtin-c2c.c                           |  106 +-
 tools/perf/builtin-ftrace.c                        |   27 +-
 tools/perf/builtin-inject.c                        |    4 +-
 tools/perf/builtin-kvm.c                           |   14 +-
 tools/perf/builtin-kwork.c                         |    8 +-
 tools/perf/builtin-lock.c                          |    4 +-
 tools/perf/builtin-record.c                        |  148 ++-
 tools/perf/builtin-report.c                        |    6 +-
 tools/perf/builtin-sched.c                         |  132 +-
 tools/perf/builtin-script.c                        |   16 +-
 tools/perf/builtin-stat.c                          |  112 +-
 tools/perf/builtin-top.c                           |  106 +-
 tools/perf/builtin-trace.c                         |  129 +-
 .../pmu-events/arch/arm64/nvidia/t410/metrics.json |   28 +-
 .../pmu-events/arch/arm64/nvidia/t410/misc.json    |    6 +-
 .../arch/x86/amdzen5/floating-point.json           |  160 ++-
 .../pmu-events/arch/x86/amdzen5/load-store.json    |    8 +-
 .../arch/x86/amdzen6/floating-point.json           |   34 +-
 tools/perf/pmu-events/jevents.py                   |    5 +-
 tools/perf/pmu-events/metric.py                    |    6 +-
 tools/perf/scripts/python/arm-cs-trace-disasm.py   |    9 +-
 tools/perf/tests/backward-ring-buffer.c            |   26 +-
 tools/perf/tests/builtin-test.c                    |  180 +--
 tools/perf/tests/code-reading.c                    |   14 +-
 tools/perf/tests/event-times.c                     |    6 +-
 tools/perf/tests/event_update.c                    |    4 +-
 tools/perf/tests/evsel-roundtrip-name.c            |    8 +-
 tools/perf/tests/evsel-tp-sched.c                  |    4 +-
 tools/perf/tests/expand-cgroup.c                   |   15 +-
 tools/perf/tests/hists_cumulate.c                  |    2 +-
 tools/perf/tests/hists_filter.c                    |    2 +-
 tools/perf/tests/hists_link.c                      |    2 +-
 tools/perf/tests/hists_output.c                    |    2 +-
 tools/perf/tests/hwmon_pmu.c                       |    7 +-
 tools/perf/tests/keep-tracking.c                   |   10 +-
 tools/perf/tests/mmap-basic.c                      |   24 +-
 tools/perf/tests/openat-syscall-all-cpus.c         |    6 +-
 tools/perf/tests/openat-syscall-tp-fields.c        |   26 +-
 tools/perf/tests/openat-syscall.c                  |    6 +-
 tools/perf/tests/parse-events.c                    |  150 +--
 tools/perf/tests/parse-metric.c                    |   11 +-
 tools/perf/tests/parse-no-sample-id-all.c          |    2 +-
 tools/perf/tests/perf-record.c                     |   38 +-
 tools/perf/tests/perf-time-to-tsc.c                |   12 +-
 tools/perf/tests/pfm.c                             |   12 +-
 tools/perf/tests/pmu-events.c                      |   21 +-
 tools/perf/tests/pmu.c                             |    4 +-
 tools/perf/tests/sample-parsing.c                  |   45 +-
 .../shell/coresight/test_arm_coresight_disasm.sh   |    4 +-
 tools/perf/tests/shell/inject_aslr.sh              |   10 +-
 tools/perf/tests/shell/jitdump-python.sh           |   69 +-
 tools/perf/tests/shell/kvm.sh                      |   61 +-
 .../perf/tests/shell/lib/perf_metric_validation.py |   11 +-
 tools/perf/tests/shell/lib/perf_record.sh          |   58 +
 tools/perf/tests/shell/pipe_test.sh                |    4 +-
 .../shell/record+zstd_comp_decomp_multi_record.sh  |   63 +
 tools/perf/tests/shell/record.sh                   |  173 +--
 tools/perf/tests/shell/record_lbr.sh               |   50 +-
 tools/perf/tests/shell/stat_all_metrics.sh         |   75 +-
 tools/perf/tests/shell/stat_bpf_counters.sh        |   28 +-
 tools/perf/tests/shell/stat_metrics_values.sh      |    7 +
 tools/perf/tests/shell/test_brstack.sh             |   99 +-
 .../tests/shell/test_dwarf_unwind_multithreaded.sh |   65 +
 tools/perf/tests/shell/trace_record_replay.sh      |   38 +-
 tools/perf/tests/sw-clock.c                        |   20 +-
 tools/perf/tests/switch-tracking.c                 |   11 +-
 tools/perf/tests/task-exit.c                       |   20 +-
 tools/perf/tests/time-utils-test.c                 |   14 +-
 tools/perf/tests/tool_pmu.c                        |    7 +-
 tools/perf/tests/topology.c                        |    4 +-
 tools/perf/tests/uncore-event-sorting.c            |    6 +-
 tools/perf/ui/browsers/annotate.c                  |    4 +-
 tools/perf/ui/browsers/hists.c                     |  163 ++-
 tools/perf/util/amd-sample-raw.c                   |    2 +-
 tools/perf/util/annotate-data.c                    |    2 +-
 tools/perf/util/annotate.c                         |   61 +-
 tools/perf/util/annotate.h                         |    3 +-
 tools/perf/util/arm-spe.c                          |    4 +
 tools/perf/util/auxtrace.c                         |   29 +-
 tools/perf/util/block-info.c                       |    4 +-
 tools/perf/util/bpf-event.c                        |    3 +-
 tools/perf/util/bpf-filter.c                       |   22 +-
 tools/perf/util/bpf_counter.c                      |    2 +-
 tools/perf/util/bpf_counter_cgroup.c               |   14 +-
 tools/perf/util/bpf_ftrace.c                       |    9 +-
 tools/perf/util/bpf_lock_contention.c              |   12 +-
 tools/perf/util/bpf_off_cpu.c                      |   44 +-
 tools/perf/util/bpf_trace_augment.c                |    8 +-
 tools/perf/util/cap.c                              |    4 +-
 tools/perf/util/cap.h                              |    3 +-
 tools/perf/util/capstone.c                         |   62 +-
 tools/perf/util/cgroup.c                           |   26 +-
 tools/perf/util/compress.h                         |    6 +-
 tools/perf/util/cs-etm.c                           |  105 +-
 tools/perf/util/data-convert-bt.c                  |    2 +-
 tools/perf/util/data-convert-json.c                |    1 +
 tools/perf/util/dso.c                              |   48 +-
 tools/perf/util/dso.h                              |   57 +-
 tools/perf/util/evlist.c                           |  494 ++++----
 tools/perf/util/evlist.h                           |  258 +++-
 tools/perf/util/evsel.c                            |  135 ++-
 tools/perf/util/evsel.h                            |   21 +-
 tools/perf/util/expr.c                             |    2 +-
 tools/perf/util/header.c                           |   74 +-
 tools/perf/util/header.h                           |    2 +-
 tools/perf/util/intel-bts.c                        |    2 +-
 tools/perf/util/intel-pt.c                         |    2 +-
 tools/perf/util/intel-tpebs.c                      |    7 +-
 tools/perf/util/iostat.c                           |    2 +-
 tools/perf/util/iostat.h                           |    2 +-
 tools/perf/util/kvm-stat.h                         |    2 +-
 tools/perf/util/libbfd.c                           |   23 +-
 tools/perf/util/libdw.c                            |   32 +-
 tools/perf/util/machine.c                          |   43 +-
 tools/perf/util/map.h                              |    9 +-
 tools/perf/util/metricgroup.c                      |   45 +-
 tools/perf/util/metricgroup.h                      |    4 +-
 tools/perf/util/parse-events.c                     |   40 +-
 tools/perf/util/parse-events.h                     |   17 +-
 tools/perf/util/parse-events.y                     |    2 +-
 tools/perf/util/perf_api_probe.c                   |   20 +-
 tools/perf/util/pfm.c                              |    4 +-
 tools/perf/util/pmu.c                              |    6 +-
 tools/perf/util/pmus.c                             |    2 +
 tools/perf/util/print-events.c                     |    2 +-
 tools/perf/util/python.c                           |  761 ++++++++----
 tools/perf/util/record.c                           |   11 +-
 tools/perf/util/s390-sample-raw.c                  |   21 +-
 tools/perf/util/sample-raw.c                       |    4 +-
 tools/perf/util/session.c                          |   48 +-
 tools/perf/util/sideband_evlist.c                  |   54 +-
 tools/perf/util/sort.c                             |   78 +-
 tools/perf/util/stat-display.c                     |    6 +-
 tools/perf/util/stat-shadow.c                      |   24 +-
 tools/perf/util/stat.c                             |   22 +-
 tools/perf/util/stream.c                           |    4 +-
 tools/perf/util/symbol.c                           |    3 +-
 tools/perf/util/synthetic-events.c                 |   17 +-
 tools/perf/util/thread-stack.c                     |    2 +-
 tools/perf/util/time-utils.c                       |   12 +-
 tools/perf/util/top.c                              |    4 +-
 tools/perf/util/trace-event-read.c                 |   33 +-
 tools/perf/util/unwind-libdw.c                     |   24 +-
 tools/perf/util/util.c                             |   12 +-
 tools/perf/util/zstd.c                             |   25 +-
 tools/sched_ext/include/scx/compat.bpf.h           |    2 +-
 tools/sched_ext/scx_flatcg.bpf.c                   |   19 +-
 tools/sched_ext/scx_flatcg.c                       |    4 +-
 tools/sched_ext/scx_qmap.bpf.c                     |    2 +-
 tools/scripts/Makefile.include                     |   37 +-
 tools/testing/cxl/test/cxl.c                       |  541 +++++++--
 tools/testing/cxl/test/hmem_test.c                 |    3 +-
 tools/testing/cxl/test/mock.h                      |    2 +
 tools/testing/kunit/kunit.py                       |    2 +-
 tools/testing/kunit/kunit_tool_test.py             |   12 +
 tools/testing/selftests/arm64/fp/fp-ptrace.c       |   47 +-
 tools/testing/selftests/arm64/fp/sve-test.S        |    7 +-
 .../selftests/arm64/mte/check_buffer_fill.c        |    2 +
 .../selftests/arm64/mte/check_child_memory.c       |    2 +
 .../selftests/arm64/mte/check_gcr_el1_cswitch.c    |    1 +
 .../selftests/arm64/mte/check_hugetlb_options.c    |    2 +
 .../selftests/arm64/mte/check_ksm_options.c        |   31 +-
 .../selftests/arm64/mte/check_mmap_options.c       |    2 +
 tools/testing/selftests/arm64/mte/check_prctl.c    |    2 +-
 .../selftests/arm64/mte/check_tags_inclusion.c     |    2 +
 tools/testing/selftests/arm64/mte/check_user_mem.c |    2 +
 tools/testing/selftests/bpf/Makefile               |    9 +-
 tools/testing/selftests/bpf/README.rst             |    4 +-
 .../bpf/libarena/include/libarena/userspace.h      |    2 +-
 .../selftests/bpf/libarena/src/common.bpf.c        |    6 +
 tools/testing/selftests/bpf/network_helpers.c      |    4 +-
 tools/testing/selftests/bpf/network_helpers.h      |    5 +
 .../selftests/bpf/prog_tests/cgroup_iter_memcg.c   |   43 +
 .../selftests/bpf/prog_tests/global_map_resize.c   |    8 +-
 tools/testing/selftests/bpf/prog_tests/libarena.c  |    8 +-
 .../selftests/bpf/prog_tests/libarena_asan.c       |    8 +-
 tools/testing/selftests/bpf/prog_tests/lsm_bdev.c  |    3 +-
 .../selftests/bpf/prog_tests/lwt_ip_encap.c        |   11 +-
 tools/testing/selftests/bpf/prog_tests/mptcp.c     |   13 +-
 tools/testing/selftests/bpf/prog_tests/sha256.c    |    4 +-
 .../selftests/bpf/prog_tests/uprobe_syscall.c      |    2 +-
 .../testing/selftests/bpf/progs/bpf_tracing_net.h  |    3 +
 tools/testing/selftests/bpf/progs/mptcpify.c       |    2 +-
 tools/testing/selftests/bpf/test_loader.c          |    2 +-
 tools/testing/selftests/bpf/test_progs.c           |   22 +-
 tools/testing/selftests/bpf/test_sockmap.c         |    3 +-
 tools/testing/selftests/bpf/veristat.c             |   76 +-
 tools/testing/selftests/bpf/vmtest.sh              |   13 +-
 tools/testing/selftests/cgroup/test_cpuset_prs.sh  |   18 +-
 .../testing/selftests/cgroup/test_cpuset_v1_hp.sh  |    2 +-
 tools/testing/selftests/drivers/net/config         |    5 +
 tools/testing/selftests/drivers/net/lib/py/env.py  |   11 +-
 .../testing/selftests/drivers/net/ring_reconfig.py |  255 +++-
 tools/testing/selftests/drivers/net/so_txtime.py   |   21 +-
 tools/testing/selftests/kselftest_harness.h        |    2 +-
 tools/testing/selftests/lsm/common.c               |    4 +-
 tools/testing/selftests/mm/cow.c                   |    9 +-
 tools/testing/selftests/mm/hmm-tests.c             |   21 +-
 tools/testing/selftests/mm/hugepage_settings.c     |    2 +-
 tools/testing/selftests/mm/khugepaged.c            |    4 +-
 tools/testing/selftests/mm/ksm_tests.c             |   28 +-
 tools/testing/selftests/mm/memory-failure.c        |   44 +-
 tools/testing/selftests/mm/thuge-gen.c             |   15 +-
 tools/testing/selftests/mm/vm_util.c               |   28 +-
 tools/testing/selftests/mm/vm_util.h               |    1 +
 tools/testing/selftests/namespaces/nsid_test.c     |    4 -
 tools/testing/selftests/proc/proc-maps-race.c      |    3 +-
 tools/testing/selftests/proc/proc-pidns.c          |    1 +
 .../selftests/rseq/rseq-x86-thread-pointer.h       |    4 +-
 .../selftests/sched_ext/ddsp_bogus_dsq_fail.bpf.c  |   20 +-
 .../selftests/sched_ext/ddsp_vtimelocal_fail.bpf.c |   13 +-
 tools/testing/selftests/sched_ext/exit.c           |    1 +
 tools/testing/selftests/sched_ext/prog_run.c       |   36 +-
 tools/testing/selftests/timers/leap-a-day.c        |   19 +-
 tools/testing/selftests/vfio/lib/vfio_pci_device.c |   26 +-
 tools/testing/selftests/zram/zram_lib.sh           |    2 +-
 1767 files changed, 31794 insertions(+), 14006 deletions(-)
author maintainer
#1 lore raw

PATCH 1/1815 drm/amd/display: Scale custom brightness curve from full range

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Akhmed Zhitaev <[email protected]>

[ Upstream commit 6fd83a1c2cdea48c396f600795217fbdfb8124f6 ]

Custom brightness curves use an 8-bit input signal. After exporting the full PWM range to userspace, the curve normalizer still divides requests by the physical PWM span. On panels with a nonzero minimum PWM level, this can produce a curve input greater than 255 and send an invalid backlight level to DC.

Scale the userspace [0..max] range to the curve's [0..255] range instead. This retains the full advertised range and keeps the reverse readback conversion unchanged.

Fixes 8dbd72cb7900 ("drm/amd/display: Export full brightness range to userspace")

(Move to amdgpu_dm_backlight.c)

---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +4 -4
index f059bed728f0a..69d12377f6817 100644
@@ -5271,10 +5271,10 @@ static int get_brightness_range(const struct amdgpu_dm_backlight_caps *caps,
 	return 1;
 }
 
-/* Rescale from [min..max] to [0..AMDGPU_MAX_BL_LEVEL] */
-static inline u32 scale_input_to_fw(int min, int max, u64 input)
+/* Rescale userspace [0..max] to the firmware curve's [0..255]. */
+static inline u32 scale_input_to_fw(int max, u64 input)
 {
-	return DIV_ROUND_CLOSEST_ULL(input * AMDGPU_MAX_BL_LEVEL, max - min);
+	return DIV_ROUND_CLOSEST_ULL(input * AMDGPU_MAX_BL_LEVEL, max);
 }
 
 /* Rescale from [0..AMDGPU_MAX_BL_LEVEL] to [min..max] */
@@ -5287,7 +5287,7 @@ static void convert_custom_brightness(const struct amdgpu_dm_backlight_caps *cap
 				      unsigned int min, unsigned int max,
 				      uint32_t *user_brightness)
 {
-	u32 brightness = scale_input_to_fw(min, max, *user_brightness);
+	u32 brightness = scale_input_to_fw(max, *user_brightness);
 	u8 lower_signal, upper_signal, upper_lum, lower_lum, lum;
 	int left, right;
 
Signature · 1 line
2.53.0
author maintainer
#2 lore raw

PATCH 2/1815 batman-adv: dat: atomically update mac addresses

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sven Eckelmann <[email protected]>

commit e6de568d3eda3e3c01c868fabd7a9535d5ee4a73 upstream.

When a MAC address is updated in batadv_dat_entry_add(), it is done using a simple copy function. A parallel reader might only see parts of this update. In worst case, the reader is transporting the half updated MAC address over the network or is creating an ARP response using it - poisoning the ARP cache.

atomic64_t can be used to store the 48 bit of a mac address. A reader will then either see the old mac address or the new one - never a mixture of both.

Fixes 2f1dfbe18507 ("batman-adv: Distributed ARP Table - implement local storage")
[ Context ]
---
 net/batman-adv/distributed-arp-table.c | 58 +++++++++++++++++---------
 net/batman-adv/types.h                 |  2 +-
 2 files changed, 40 insertions(+), 20 deletions(-)
net/batman-adv/distributed-arp-table.c +39 -19
index 6ca946da92758..95d8e3a383902 100644
@@ -376,18 +376,19 @@ batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip,
 static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
 				 u8 *mac_addr, unsigned short vid)
 {
+	u64 u64_mac = ether_addr_to_u64(mac_addr);
 	struct batadv_dat_entry *dat_entry;
 	int hash_added;
 
 	dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid);
 	/* if this entry is already known, just update it */
 	if (dat_entry) {
-		if (!batadv_compare_eth(dat_entry->mac_addr, mac_addr))
-			ether_addr_copy(dat_entry->mac_addr, mac_addr);
+		atomic64_set(&dat_entry->mac_addr, u64_mac);
+
 		dat_entry->last_update = jiffies;
 		batadv_dbg(BATADV_DBG_DAT, bat_priv,
 			   "Entry updated: %pI4 %pM (vid: %d)\n",
-			   &dat_entry->ip, dat_entry->mac_addr,
+			   &dat_entry->ip, mac_addr,
 			   batadv_print_vid(vid));
 		goto out;
 	}
@@ -398,7 +399,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
 
 	dat_entry->ip = ip;
 	dat_entry->vid = vid;
-	ether_addr_copy(dat_entry->mac_addr, mac_addr);
+	atomic64_set(&dat_entry->mac_addr, u64_mac);
 	dat_entry->last_update = jiffies;
 	kref_init(&dat_entry->refcount);
 
@@ -414,7 +415,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
 	}
 
 	batadv_dbg(BATADV_DBG_DAT, bat_priv, "New entry added: %pI4 %pM (vid: %d)\n",
-		   &dat_entry->ip, dat_entry->mac_addr, batadv_print_vid(vid));
+		   &dat_entry->ip, mac_addr, batadv_print_vid(vid));
 
 out:
 	batadv_dat_entry_put(dat_entry);
@@ -868,6 +869,8 @@ batadv_dat_cache_dump_entry(struct sk_buff *msg, u32 portid,
 			    struct netlink_callback *cb,
 			    struct batadv_dat_entry *dat_entry)
 {
+	u8 mac[ETH_ALEN];
+	u64 u64_mac;
 	int msecs;
 	void *hdr;
 
@@ -880,11 +883,12 @@ batadv_dat_cache_dump_entry(struct sk_buff *msg, u32 portid,
 	genl_dump_check_consistent(cb, hdr);
 
 	msecs = jiffies_to_msecs(jiffies - dat_entry->last_update);
+	u64_mac = atomic64_read(&dat_entry->mac_addr);
+	u64_to_ether_addr(u64_mac, mac);
 
 	if (nla_put_in_addr(msg, BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
 			    dat_entry->ip) ||
-	    nla_put(msg, BATADV_ATTR_DAT_CACHE_HWADDRESS, ETH_ALEN,
-		    dat_entry->mac_addr) ||
+	    nla_put(msg, BATADV_ATTR_DAT_CACHE_HWADDRESS, ETH_ALEN, mac) ||
 	    nla_put_u16(msg, BATADV_ATTR_DAT_CACHE_VID, dat_entry->vid) ||
 	    nla_put_u32(msg, BATADV_ATTR_LAST_SEEN_MSECS, msecs)) {
 		genlmsg_cancel(msg, hdr);
@@ -1151,6 +1155,8 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 	struct net_device *mesh_iface = bat_priv->mesh_iface;
 	int hdr_size = 0;
 	unsigned short vid;
+	u8 mac[ETH_ALEN];
+	u64 u64_mac;
 
 	if (!READ_ONCE(bat_priv->distributed_arp_table))
 		goto out;
@@ -1178,6 +1184,9 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 
 	dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid);
 	if (dat_entry) {
+		u64_mac = atomic64_read(&dat_entry->mac_addr);
+		u64_to_ether_addr(u64_mac, mac);
+
 		/* If the ARP request is destined for a local client the local
 		 * client will answer itself. DAT would only generate a
 		 * duplicate packet.
@@ -1186,7 +1195,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 		 * additional DAT answer may trigger kernel warnings about
 		 * a packet coming from the wrong port.
 		 */
-		if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) {
+		if (batadv_is_my_client(bat_priv, mac, vid)) {
 			ret = true;
 			goto out;
 		}
@@ -1196,18 +1205,16 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 		 * the backbone gws belonging to our backbone has claimed the
 		 * destination.
 		 */
-		if (!batadv_bla_check_claim(bat_priv,
-					    dat_entry->mac_addr, vid)) {
+		if (!batadv_bla_check_claim(bat_priv, mac, vid)) {
 			batadv_dbg(BATADV_DBG_DAT, bat_priv,
 				   "Device %pM claimed by another backbone gw. Don't send ARP reply!",
-				   dat_entry->mac_addr);
+				   mac);
 			ret = true;
 			goto out;
 		}
 
 		skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src,
-						      dat_entry->mac_addr,
-						      hw_src, vid);
+						      mac, hw_src, vid);
 		if (!skb_new)
 			goto out;
 
@@ -1249,6 +1256,8 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
 	struct batadv_dat_entry *dat_entry = NULL;
 	bool ret = false;
 	unsigned short vid;
+	u8 mac[ETH_ALEN];
+	u64 u64_mac;
 	int err;
 
 	if (!READ_ONCE(bat_priv->distributed_arp_table))
@@ -1276,8 +1285,11 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
 	if (!dat_entry)
 		goto out;
 
+	u64_mac = atomic64_read(&dat_entry->mac_addr);
+	u64_to_ether_addr(u64_mac, mac);
+
 	skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src,
-					      dat_entry->mac_addr, hw_src, vid);
+					      mac, hw_src, vid);
 	if (!skb_new)
 		goto out;
 
@@ -1368,6 +1380,8 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
 	u8 *hw_src, *hw_dst;
 	bool dropped = false;
 	unsigned short vid;
+	u8 mac[ETH_ALEN];
+	u64 u64_mac;
 
 	if (!READ_ONCE(bat_priv->distributed_arp_table))
 		goto out;
@@ -1396,11 +1410,17 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
 	 * this frame would lead to doubled receive of an ARP reply.
 	 */
 	dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_src, vid);
-	if (dat_entry && batadv_compare_eth(hw_src, dat_entry->mac_addr)) {
-		batadv_dbg(BATADV_DBG_DAT, bat_priv, "Doubled ARP reply removed: ARP MSG = [src: %pM-%pI4 dst: %pM-%pI4]; dat_entry: %pM-%pI4\n",
-			   hw_src, &ip_src, hw_dst, &ip_dst,
-			   dat_entry->mac_addr,	&dat_entry->ip);
-		dropped = true;
+	if (dat_entry) {
+		u64_mac = atomic64_read(&dat_entry->mac_addr);
+		u64_to_ether_addr(u64_mac, mac);
+
+		if (batadv_compare_eth(hw_src, mac)) {
+			batadv_dbg(BATADV_DBG_DAT, bat_priv,
+				   "Doubled ARP reply removed: ARP MSG = [src: %pM-%pI4 dst: %pM-%pI4]; dat_entry: %pM-%pI4\n",
+				   hw_src, &ip_src, hw_dst, &ip_dst,
+				   mac, &dat_entry->ip);
+			dropped = true;
+		}
 	}
 
 	/* Update our internal cache with both the IP addresses the node got
net/batman-adv/types.h +1 -1
index b1f9f8964c3fd..9ab0dba82f509 100644
@@ -2176,7 +2176,7 @@ struct batadv_dat_entry {
 	__be32 ip;
 
 	/** @mac_addr: the MAC address associated to the stored IPv4 */
-	u8 mac_addr[ETH_ALEN];
+	atomic64_t mac_addr;
 
 	/** @vid: the vlan ID associated to this entry */
 	unsigned short vid;
Signature · 1 line
2.53.0
author maintainer
#3 lore raw

PATCH 3/1815 batman-adv: bla: avoid CRC corruption due to parallel claim add

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sven Eckelmann <[email protected]>

commit 08645ab95768b88e2ff85a89211994651710465b upstream.

batadv_bla_add_claim() is used to add claims and modify the backbone of claims for CLAIM frames from remote backbones and local packets. When it handles a claim, it needs to either

* add the new claim's CRC to the backbone CRC
* remove the already existing claim's CRC from the old backbone and add it to the new backbone

But when the "new" claim code was running in parallel to the "change backbone" code, it can happen that the CRC was invalid because the backbone_gw of the claim was changed twice in the "new" claim code path:

* CPU0 creates the claim for gateway A and publishes it in the claim hash. The crc16 of the address has not yet been added to A's crc at this point.

* CPU1 processes a claim frame of gateway B for the same client, finds the just published claim, and performs the ownership change: it switches the pointer to B, removes the crc16 from A's crc - which never contained it - and adds it to B's crc.

* CPU0 continues behind the creation branch, unconditionally switches the pointer back to A without compensating B's crc (its remove_crc is false for the creation path), and finally adds the crc16 to A's crc

The CRC is then wrong for both:

* claim belongs to A: but CRC is not part of backbone A's CRC
* claim doesn't belong to B: CRC is still part of backbone B's CRC

This wrong CRC is never recomputated from the stored claims. For local backbone claims, this can also not recovered using syncs.

To avoid this, split the functionality in clear separate parts:

* new claim which always adds claim CRC to the backbone CRC (but never changes the already set backbone_gw of the claim back)

* update of existing claim which automatically changes the backbone_gw entry and only updates both backbone CRCs when there was an actual change

Fixes 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
[ Context ]
---
 net/batman-adv/bridge_loop_avoidance.c | 63 ++++++++++++++++----------
 1 file changed, 39 insertions(+), 24 deletions(-)
net/batman-adv/bridge_loop_avoidance.c +39 -24
index 7a31bc21bf87f..87d5569538436 100644
@@ -694,12 +694,14 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,
 	struct batadv_bla_backbone_gw *old_backbone_gw;
 	struct batadv_bla_claim *claim;
 	struct batadv_bla_claim search_claim;
-	bool remove_crc = false;
 	int hash_added;
+	u16 claim_crc;
+	bool changed;
 
 	ether_addr_copy(search_claim.addr, mac);
 	search_claim.vid = vid;
 	claim = batadv_claim_hash_find(bat_priv, &search_claim);
+	claim_crc = crc16(0, mac, ETH_ALEN);
 
 	/* create a new claim entry if it does not exist yet. */
 	if (!claim) {
@@ -731,43 +733,56 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,
 			kfree(claim);
 			return;
 		}
+
+		spin_lock_bh(&backbone_gw->crc_lock);
+		backbone_gw->crc ^= claim_crc;
+		spin_unlock_bh(&backbone_gw->crc_lock);
+
+		WRITE_ONCE(backbone_gw->lasttime, jiffies);
+
+		batadv_claim_put(claim);
+		return;
+	}
+
+	WRITE_ONCE(claim->lasttime, jiffies);
+
+	/* replace backbone_gw atomically and adjust reference counters */
+	spin_lock_bh(&claim->backbone_lock);
+	if (claim->backbone_gw != backbone_gw) {
+		changed = true;
+
+		old_backbone_gw = claim->backbone_gw;
+		kref_get(&backbone_gw->refcount);
+		claim->backbone_gw = backbone_gw;
 	} else {
-		WRITE_ONCE(claim->lasttime, jiffies);
-		if (claim->backbone_gw == backbone_gw)
-			/* no need to register a new backbone */
-			goto claim_free_ref;
+		old_backbone_gw = NULL;
+		changed = false;
+	}
+	spin_unlock_bh(&claim->backbone_lock);
 
+	if (changed) {
 		batadv_dbg(BATADV_DBG_BLA, bat_priv,
 			   "%s(): changing ownership for %pM, vid %d to gw %pM\n",
 			   __func__, mac, batadv_print_vid(vid),
 			   backbone_gw->orig);
 
-		remove_crc = true;
-	}
+		/* add claim address to new backbone_gw */
+		spin_lock_bh(&backbone_gw->crc_lock);
+		backbone_gw->crc ^= claim_crc;
+		spin_unlock_bh(&backbone_gw->crc_lock);
 
-	/* replace backbone_gw atomically and adjust reference counters */
-	spin_lock_bh(&claim->backbone_lock);
-	old_backbone_gw = claim->backbone_gw;
-	kref_get(&backbone_gw->refcount);
-	claim->backbone_gw = backbone_gw;
-	spin_unlock_bh(&claim->backbone_lock);
+		WRITE_ONCE(backbone_gw->lasttime, jiffies);
+	}
 
-	if (remove_crc) {
+	if (old_backbone_gw) {
 		/* remove claim address from old backbone_gw */
 		spin_lock_bh(&old_backbone_gw->crc_lock);
-		old_backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN);
+		old_backbone_gw->crc ^= claim_crc;
 		spin_unlock_bh(&old_backbone_gw->crc_lock);
-	}
-
-	batadv_backbone_gw_put(old_backbone_gw);
 
-	/* add claim address to new backbone_gw */
-	spin_lock_bh(&backbone_gw->crc_lock);
-	backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN);
-	spin_unlock_bh(&backbone_gw->crc_lock);
-	WRITE_ONCE(backbone_gw->lasttime, jiffies);
+		batadv_backbone_gw_put(old_backbone_gw);
+	}
 
-claim_free_ref:
 	batadv_claim_put(claim);
 }
 
Signature · 1 line
2.53.0
author maintainer
#4 lore raw

PATCH 4/1815 mm/damon/core: skip aging from repeated aggressive merging

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: SJ Park <[email protected]>

[ Upstream commit 0250dbe08c730d003ef9f484da56ae09a1ea0c4c ]

The number of DAMON regions could temporarily exceed the user-defined maximum number of regions limit for corner cases. For example, users could lower the limit via runtime parameters update. For such a case, kdamond_merge_regions() repeats merging regions in the case doubling the merge threshold. The repeated merge operation could update the age of regions multiple times. This corrupts the monitoring results. Fix the issue by asking the merge operation to skip aging for the corner case.

The user impact is degradation of the monitoring quality. The impact should be mild, since the degradation is only temporal, and it is not common to happen in realistic setups.

The issue was discovered [1,2] by Sashiko.

---
 mm/damon/core.c             | 21 +++++++++++++--------
 mm/damon/tests/core-kunit.h |  2 +-
 2 files changed, 14 insertions(+), 9 deletions(-)
mm/damon/core.c +13 -8
index a86812d457c14..372ca1161c57d 100644
@@ -3118,18 +3118,20 @@ static void damon_verify_merge_regions_of(struct damon_region *r)
  * sz_limit	size upper limit of each region
  */
 static void damon_merge_regions_of(struct damon_target *t, unsigned int thres,
-				   unsigned long sz_limit)
+		unsigned long sz_limit, bool count_age)
 {
 	struct damon_region *r, *prev = NULL, *next;
 
 	damon_for_each_region_safe(r, next, t) {
 		damon_verify_merge_regions_of(r);
-		if (abs(r->nr_accesses - r->last_nr_accesses) > thres)
-			r->age = 0;
-		else if ((r->nr_accesses == 0) != (r->last_nr_accesses == 0))
-			r->age = 0;
-		else
-			r->age++;
+		if (count_age) {
+			if (abs(r->nr_accesses - r->last_nr_accesses) > thres)
+				r->age = 0;
+			else if ((r->nr_accesses == 0) != (r->last_nr_accesses == 0))
+				r->age = 0;
+			else
+				r->age++;
+		}
 
 		if (prev && prev->ar.end == r->ar.start &&
 		    abs(prev->nr_accesses - r->nr_accesses) <= thres &&
@@ -3163,15 +3165,18 @@ static void kdamond_merge_regions(struct damon_ctx *c, unsigned int threshold,
 	struct damon_target *t;
 	unsigned int nr_regions;
 	unsigned int max_thres;
+	bool count_age = true;
 
 	max_thres = c->attrs.aggr_interval /
 		(c->attrs.sample_interval ?  c->attrs.sample_interval : 1);
 	while (true) {
 		nr_regions = 0;
 		damon_for_each_target(t, c) {
-			damon_merge_regions_of(t, threshold, sz_limit);
+			damon_merge_regions_of(t, threshold, sz_limit,
+					count_age);
 			nr_regions += damon_nr_regions(t);
 		}
+		count_age = false;
 		if (nr_regions <= c->attrs.max_nr_regions ||
 				max_thres <= threshold)
 			break;
mm/damon/tests/core-kunit.h +1 -1
index fbcc882dccc94..e543cfff15909 100644
@@ -261,7 +261,7 @@ static void damon_test_merge_regions_of(struct kunit *test)
 		damon_add_region(r, t);
 	}
 
-	damon_merge_regions_of(t, 9, 9999);
+	damon_merge_regions_of(t, 9, 9999, true);
 	/* 0-112, 114-130, 130-156, 156-170, 170-230, 230-10170 */
 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 6u);
 	if (damon_nr_regions(t) != 6)
Signature · 1 line
2.53.0
author maintainer
#5 lore raw

PATCH 5/1815 i3c: master: Fix device_register() error path

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Adrian Hunter <[email protected]>

[ Upstream commit 74be657d98a8d684c0475f3cbd450ef2a30ffc73 ]

When device_register() fails in i3c_master_register_new_i3c_devs(), put_device() is called to drop the reference taken by device_register(). That drops the last reference, so the device's release callback i3c_device_release() runs and frees the i3c_device.

Two problems follow from that:

i3c_device_release() does WARN_ON(i3cdev->desc), so it warns because desc->dev->desc still points back at the descriptor. Clear it before calling put_device().

After put_device() frees the i3c_device, desc->dev is left pointing at freed memory, so clear desc->dev as well. That prevents, for example, i3c_master_unregister_i3c_devs() seeing desc->dev as non-NULL and dereferencing it.

Reported-by [email protected]
Fixes cab63f6488761 ("i3c: Fix potential refcount leak in i3c_master_register_new_i3c_devs")

Stable-dep-of: 456f832e5fc2 ("i3c: master: Fix recursive locking during device registration")

---
 drivers/i3c/master.c |    2 ++
 1 file changed, 2 insertions(+)
drivers/i3c/master.c +2 -0
@@ -1928,7 +1928,9 @@ i3c_master_register_new_i3c_devs(struct
 		if (ret) {
 			dev_err(&master->dev,
 				"Failed to add I3C device (err = %d)\n", ret);
+			desc->dev->desc = NULL;
 			put_device(&desc->dev->dev);
+			desc->dev = NULL;
 		}
 	}
 }
author maintainer
#6 lore raw

PATCH 6/1815 i3c: master: Fix recursive locking during device registration

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Adrian Hunter <[email protected]>

[ Upstream commit 456f832e5fc26fbfd3b8200fd4553eee520cc377 ]

i3c_master_register_new_i3c_devs() registers newly discovered devices while holding i3c_bus_normaluse_lock(), a down_read(). device_register() can immediately probe the device, and probe callbacks typically invoke I3C helpers that take i3c_bus_normaluse_lock() again, leading to a recursive acquisition of the same rwsem. rwsems do not support recursive read locking and can deadlock when a writer is waiting. See the "Recursive read locks" section of Documentation/locking/lockdep-design.rst.

For example, with Intel LPSS I3C, LOCKDEP generates a WARNING like:

  # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/unbind
  # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/bind
  WARNING: possible recursive locking detected
  kworker/5:1/94 is trying to acquire lock:
  ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_device_match_id+0x45/0x370
  but task is already holding lock:
  ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_master_reg_work_fn+0x21/0x5f0

Fix this by separating device creation from device registration. Populate desc->dev under the maintenance lock, collect the devices that still need registration into a local list, then release the lock before calling device_register(). Finally retake the lock and clean up any devices that failed to register.

Use the maintenance lock rather than the normal-use lock while adding device objects. A write-side maintenance lock prevents readers from observing a partially initialized desc->dev during initial device population, or desc->dev disappearing if registration fails.

The local list requires a list node, so add a list node member to struct i3c_device.

---
 drivers/i3c/master.c       |   45 +++++++++++++++++++++++++++++++++------------
 include/linux/i3c/master.h |    3 +++
 2 files changed, 36 insertions(+), 12 deletions(-)
drivers/i3c/master.c +33 -12
@@ -1898,12 +1898,21 @@ err_free_dev:
 static void
 i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
 {
+	struct i3c_device *i3cdev, *tmp;
 	struct i3c_dev_desc *desc;
+	LIST_HEAD(i3c_unreg_devs);
 	int ret;
 
 	if (!master->init_done)
 		return;
 
+	i3c_bus_maintenance_lock(&master->bus);
+
+	if (master->shutting_down) {
+		i3c_bus_maintenance_unlock(&master->bus);
+		return;
+	}
+
 	i3c_bus_for_each_i3cdev(&master->bus, desc) {
 		if (desc->dev || !desc->info.dyn_addr || desc == master->this)
 			continue;
@@ -1924,25 +1933,37 @@ i3c_master_register_new_i3c_devs(struct
 		if (desc->boardinfo)
 			desc->dev->dev.of_node = desc->boardinfo->of_node;
 
-		ret = device_register(&desc->dev->dev);
-		if (ret) {
-			dev_err(&master->dev,
-				"Failed to add I3C device (err = %d)\n", ret);
-			desc->dev->desc = NULL;
-			put_device(&desc->dev->dev);
-			desc->dev = NULL;
-		}
+		list_add_tail(&desc->dev->node, &i3c_unreg_devs);
 	}
+
+	i3c_bus_maintenance_unlock(&master->bus);
+
+	list_for_each_entry_safe(i3cdev, tmp, &i3c_unreg_devs, node) {
+		ret = device_register(&i3cdev->dev);
+		if (ret)
+			dev_err(&master->dev, "Failed to add I3C device (err = %d)\n", ret);
+		else
+			list_del_init(&i3cdev->node);
+	}
+
+	i3c_bus_maintenance_lock(&master->bus);
+
+	list_for_each_entry_safe(i3cdev, tmp, &i3c_unreg_devs, node) {
+		list_del(&i3cdev->node);
+		desc = i3cdev->desc;
+		i3cdev->desc = NULL;
+		put_device(&i3cdev->dev);
+		desc->dev = NULL;
+	}
+
+	i3c_bus_maintenance_unlock(&master->bus);
 }
 
 static void i3c_master_reg_work_fn(struct work_struct *work)
 {
 	struct i3c_master_controller *master = container_of(work, typeof(*master), reg_work);
 
-	i3c_bus_normaluse_lock(&master->bus);
-	if (!master->shutting_down)
-		i3c_master_register_new_i3c_devs(master);
-	i3c_bus_normaluse_unlock(&master->bus);
+	i3c_master_register_new_i3c_devs(master);
 }
 
 /**
include/linux/i3c/master.h +3 -0
@@ -228,6 +228,8 @@ struct i3c_dev_desc {
  *	  every time the I3C device is rediscovered with a different dynamic
  *	  address assigned
  * @bus: I3C bus this device is attached to
+ * @node: unregistered device list node, only for use by
+ *	  i3c_master_register_new_i3c_devs(), it is not protected by a lock
  *
  * I3C device object exposed to I3C device drivers. The takes care of linking
  * this object to the relevant &struct_i3c_dev_desc one.
@@ -238,6 +240,7 @@ struct i3c_device {
 	struct device dev;
 	struct i3c_dev_desc *desc;
 	struct i3c_bus *bus;
+	struct list_head node;
 };
 
 /*
author maintainer
#7 lore raw

PATCH 7/1815 dm-pcache: validate seg_id fields from persistent memory

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Bryam Vargas <[email protected]>

[ Upstream commit 90c990a68460d7b5720e5634cf650eccdf0f4098 ]

cache_pos_decode(), cache_key_decode() and the last-kset branches of cache_replay(), the writeback worker and the GC worker take a cache segment id from the cache device metadata and index cache->segments[] with it without checking it against cache->n_segs. That metadata is only CRC-protected with a fixed public seed, so whoever supplies the cache device on a table load (CAP_SYS_ADMIN) controls the id; an out-of-range value forms a wild pcache_cache_segment pointer that is dereferenced and written through -- an out-of-bounds read and write driven by on-disk data.

Add cache_seg_id_valid() and reject an out-of-range id at each decode site, failing the operation with -EIO instead of indexing past the array. Bound the id against the initialized-segment count (cache_info.n_segs) rather than the physical device total. A forged cache_info.n_segs below seg_num otherwise leaves segments[cache_info.n_segs..seg_num) as zeroed structs whose data pointer is NULL, so a forged id in that window would still be dereferenced. A later patch guarantees cache_info.n_segs <= seg_num, and a driver-created cache sets the two equal, so valid images are unaffected.

Fixes 1d57628ff95b ("dm-pcache: add persistent cache target in device-mapper")
[ adjusted cache_replay() context to preserve the existing hop-limit check before segment-ID validation ]
---
 drivers/md/dm-pcache/cache.c           |    4 ++++
 drivers/md/dm-pcache/cache.h           |   15 +++++++++++++++
 drivers/md/dm-pcache/cache_gc.c        |   16 ++++++++++++++--
 drivers/md/dm-pcache/cache_key.c       |   11 +++++++++++
 drivers/md/dm-pcache/cache_writeback.c |   23 +++++++++++++++++++----
 5 files changed, 63 insertions(+), 6 deletions(-)
drivers/md/dm-pcache/cache.c +4 -0
@@ -118,6 +118,9 @@ int cache_pos_decode(struct pcache_cache
 	if (!latest_addr)
 		return -EIO;
 
+	if (!cache_seg_id_valid(cache, latest.cache_seg_id))
+		return -EIO;
+
 	pos->cache_seg = &cache->segments[latest.cache_seg_id];
 
 	if (latest.seg_off >= pos->cache_seg->segment.data_size)
@@ -159,6 +162,7 @@ static int cache_init(struct dm_pcache *
 	cache->cache_dev = &pcache->cache_dev;
 	cache->n_segs = cache_dev->seg_num;
 	atomic_set(&cache->gc_errors, 0);
+	atomic_set(&cache->writeback_errors, 0);
 	spin_lock_init(&cache->seg_map_lock);
 	spin_lock_init(&cache->key_head_lock);
 
drivers/md/dm-pcache/cache.h +15 -0
@@ -180,6 +180,7 @@ struct pcache_cache {
 		u32 advance;
 		int ret;
 	} writeback_ctx;
+	atomic_t		writeback_errors;
 
 	char gc_kset_onmedia_buf[PCACHE_KSET_ONMEDIA_SIZE_MAX];
 	struct delayed_work	gc_work;
@@ -421,6 +422,20 @@ static inline bool cache_seg_is_ctrl_seg
 }
 
 /**
+ * cache_seg_id_valid - Validate a cache segment id read from the cache device.
+ * @cache: Pointer to the pcache_cache structure.
+ * @cache_seg_id: Segment id decoded from on-media metadata.
+ *
+ * On-media segment ids are only protected by a CRC, which an attacker who can
+ * format the cache device computes over their chosen value. Reject any id that
+ * would index cache->segments[] out of bounds before it is dereferenced.
+ */
+static inline bool cache_seg_id_valid(struct pcache_cache *cache, u32 cache_seg_id)
+{
+	return cache_seg_id < cache->cache_info.n_segs;
+}
+
+/**
  * cache_key_cutfront - Cuts a specified length from the front of a cache key.
  * @key: Pointer to pcache_cache_key structure.
  * @cut_len: Length to cut from the front.
drivers/md/dm-pcache/cache_gc.c +14 -2
@@ -74,11 +74,17 @@ static bool need_gc(struct pcache_cache
  * @cache: Pointer to the pcache_cache structure.
  * @kset_onmedia: Pointer to the kset_onmedia structure for the last kset.
  */
-static void last_kset_gc(struct pcache_cache *cache, struct pcache_cache_kset_onmedia *kset_onmedia)
+static int last_kset_gc(struct pcache_cache *cache, struct pcache_cache_kset_onmedia *kset_onmedia)
 {
 	struct dm_pcache *pcache = CACHE_TO_PCACHE(cache);
 	struct pcache_cache_segment *cur_seg, *next_seg;
 
+	if (!cache_seg_id_valid(cache, kset_onmedia->next_cache_seg_id)) {
+		pcache_dev_err(pcache, "invalid next_cache_seg_id %u in gc (n_segs %u)\n",
+				kset_onmedia->next_cache_seg_id, cache->n_segs);
+		return -EIO;
+	}
+
 	cur_seg = cache->key_tail.cache_seg;
 
 	next_seg = &cache->segments[kset_onmedia->next_cache_seg_id];
@@ -94,6 +100,8 @@ static void last_kset_gc(struct pcache_c
 	spin_lock(&cache->seg_map_lock);
 	__clear_bit(cur_seg->cache_seg_id, cache->seg_map);
 	spin_unlock(&cache->seg_map_lock);
+
+	return 0;
 }
 
 void pcache_cache_gc_fn(struct work_struct *work)
@@ -130,7 +138,11 @@ void pcache_cache_gc_fn(struct work_stru
 			if (dirty_tail.cache_seg == key_tail.cache_seg)
 				break;
 
-			last_kset_gc(cache, kset_onmedia);
+			ret = last_kset_gc(cache, kset_onmedia);
+			if (ret) {
+				atomic_inc(&cache->gc_errors);
+				return;
+			}
 			continue;
 		}
 
drivers/md/dm-pcache/cache_key.c +11 -0
@@ -94,6 +94,12 @@ int cache_key_decode(struct pcache_cache
 	key->off = key_onmedia->off;
 	key->len = key_onmedia->len;
 
+	if (!cache_seg_id_valid(cache, key_onmedia->cache_seg_id)) {
+		pcache_dev_err(pcache, "invalid cache_seg_id %u in cache key (n_segs %u)\n",
+				key_onmedia->cache_seg_id, cache->n_segs);
+		return -EIO;
+	}
+
 	key->cache_pos.cache_seg = &cache->segments[key_onmedia->cache_seg_id];
 	key->cache_pos.seg_off = key_onmedia->cache_seg_off;
 
@@ -800,6 +806,11 @@ int cache_replay(struct pcache_cache *ca
 				ret = -EIO;
 				goto out;
 			}
+
+			if (!cache_seg_id_valid(cache, kset_onmedia->next_cache_seg_id)) {
+				ret = -EIO;
+				goto out;
+			}
 
 			next_seg = &cache->segments[kset_onmedia->next_cache_seg_id];
 
drivers/md/dm-pcache/cache_writeback.c +19 -4
@@ -196,12 +196,18 @@ clear_tree:
 	return ret;
 }
 
-static void last_kset_writeback(struct pcache_cache *cache,
+static int last_kset_writeback(struct pcache_cache *cache,
 		struct pcache_cache_kset_onmedia *last_kset_onmedia)
 {
 	struct dm_pcache *pcache = CACHE_TO_PCACHE(cache);
 	struct pcache_cache_segment *next_seg;
 
+	if (!cache_seg_id_valid(cache, last_kset_onmedia->next_cache_seg_id)) {
+		pcache_dev_err(pcache, "invalid next_cache_seg_id %u in writeback (n_segs %u)\n",
+				last_kset_onmedia->next_cache_seg_id, cache->n_segs);
+		return -EIO;
+	}
+
 	pcache_dev_debug(pcache, "last kset, next: %u\n", last_kset_onmedia->next_cache_seg_id);
 
 	next_seg = &cache->segments[last_kset_onmedia->next_cache_seg_id];
@@ -211,6 +217,8 @@ static void last_kset_writeback(struct p
 	cache->dirty_tail.seg_off = 0;
 	cache_encode_dirty_tail(cache);
 	mutex_unlock(&cache->dirty_tail_lock);
+
+	return 0;
 }
 
 void cache_writeback_fn(struct work_struct *work)
@@ -229,6 +237,9 @@ void cache_writeback_fn(struct work_stru
 	if (pcache_is_stopping(pcache))
 		goto unlock;
 
+	if (atomic_read(&cache->writeback_errors))
+		goto unlock;
+
 	kset_onmedia = (struct pcache_cache_kset_onmedia *)cache->wb_kset_onmedia_buf;
 
 	mutex_lock(&cache->dirty_tail_lock);
@@ -241,15 +252,19 @@ void cache_writeback_fn(struct work_stru
 	}
 
 	if (kset_onmedia->flags & PCACHE_KSET_FLAGS_LAST) {
-		last_kset_writeback(cache, kset_onmedia);
+		ret = last_kset_writeback(cache, kset_onmedia);
+		if (ret) {
+			atomic_inc(&cache->writeback_errors);
+			goto unlock;
+		}
 		delay = 0;
 		goto queue_work;
 	}
 
 	ret = cache_kset_insert_tree(cache, kset_onmedia);
 	if (ret) {
-		delay = PCACHE_CACHE_WRITEBACK_INTERVAL;
-		goto queue_work;
+		atomic_inc(&cache->writeback_errors);
+		goto unlock;
 	}
 
 	cache_wb_tree_writeback(cache, get_kset_onmedia_size(kset_onmedia));
author maintainer
#8 lore raw

PATCH 8/1815 i3c: master: Fix use-after-free of master->this

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Adrian Hunter <[email protected]>

[ Upstream commit feb0ed76601f3c2f91f08688c5a7d8b9d382f720 ]

sysfs attribute callbacks for the master controller device dereference master->this. However, master->this is freed in i3c_master_detach_free_devs() before the master device itself is released.

As a result, sysfs accesses can dereference a freed master->this pointer, leading to a use-after-free.

Keep master->this alive until i3c_masterdev_release(), which is called after the master device and its sysfs state are being torn down. Do not free master->this as part of the normal device detach path.

On the error path in i3c_master_set_info(), reset master->this and bus.cur_master to NULL before freeing the allocated device.

Fixes 3a379bbcea0a ("i3c: Add core I3C infrastructure")
[ retained of_node_put(dev->of_node) instead of upstream’s fwnode_handle_put(dev->fwnode). ]
---
 drivers/i3c/master.c |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
drivers/i3c/master.c +11 -6
@@ -820,6 +820,11 @@ static struct attribute *i3c_masterdev_a
 };
 ATTRIBUTE_GROUPS(i3c_masterdev);
 
+static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
+{
+	kfree(dev);
+}
+
 static void i3c_masterdev_release(struct device *dev)
 {
 	struct i3c_master_controller *master = dev_to_i3cmaster(dev);
@@ -832,6 +837,8 @@ static void i3c_masterdev_release(struct
 	i3c_bus_cleanup(bus);
 
 	of_node_put(dev->of_node);
+
+	i3c_master_free_i3c_dev(master->this);
 }
 
 static const struct device_type i3c_masterdev_type = {
@@ -1042,11 +1049,6 @@ static void i3c_device_release(struct de
 	kfree(i3cdev);
 }
 
-static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
-{
-	kfree(dev);
-}
-
 static struct i3c_dev_desc *
 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
 			 const struct i3c_device_info *info)
@@ -2092,6 +2094,8 @@ int i3c_master_set_info(struct i3c_maste
 	return 0;
 
 err_free_dev:
+	master->bus.cur_master = NULL;
+	master->this = NULL;
 	i3c_master_free_i3c_dev(i3cdev);
 
 	return ret;
@@ -2112,7 +2116,8 @@ static void i3c_master_detach_free_devs(
 					i3cdev->boardinfo->init_dyn_addr,
 					I3C_ADDR_SLOT_FREE);
 
-		i3c_master_free_i3c_dev(i3cdev);
+		if (i3cdev != master->this)
+			i3c_master_free_i3c_dev(i3cdev);
 	}
 
 	list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
author maintainer
#9 lore raw

PATCH 9/1815 i3c: master: Do not treat master device as a duplicate target

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Adrian Hunter <[email protected]>

[ Upstream commit 4dc1b3eeba7991905a5b5b8129ebea51be7d87b7 ]

i3c_master_search_i3c_dev_duplicate() searches the bus for another I3C device with the same PID as the reference device. The search can match master->this, causing the controller itself to be returned as a duplicate.

Since the controller is not a target device, it cannot be a duplicate of one. Exclude master->this from matching so that the function only returns real duplicate target devices.

Fixes 3a379bbcea0a ("i3c: Add core I3C infrastructure")
[ adjusted the duplicate-device comparison to match the older branch’s PID handling without nonzero-PID checks. ]
---
 drivers/i3c/master.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/i3c/master.c +2 -1
@@ -2349,7 +2349,8 @@ i3c_master_search_i3c_dev_duplicate(stru
 	struct i3c_dev_desc *i3cdev;
 
 	i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
-		if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid)
+		if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid &&
+		    i3cdev != master->this)
 			return i3cdev;
 	}
 
author maintainer
#10 lore raw

PATCH 10/1815 dm-pcache: validate the persisted dirty_tail chain at load

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Bryam Vargas <[email protected]>

[ Upstream commit 58d620ee9e01d4bdbceaf2ae1450d307a2a9d58b ]

The writeback worker follows the persisted dirty_tail chain, which is decoded from the cache device independently of the key_tail chain that cache_replay() walks and bounds. A crafted image, whose on-media fields are authenticated only by a crc32c with a fixed seed, can aim dirty_tail at a chain of last ksets that never terminates, so cache_writeback_fn() re-arms itself with no delay forever.

Walk the dirty_tail chain once at load with the same hop cap cache_replay() uses and fail the table load with -EIO if it does not reach an end within n_segs hops.

Fixes 1d57628ff95b ("dm-pcache: add persistent cache target in device-mapper")
[ replaced the unavailable cache_seg_id_valid() helper with an equivalent bounds check against cache->cache_info.n_segs ]
---
 drivers/md/dm-pcache/cache.c     |    7 +++
 drivers/md/dm-pcache/cache.h     |    2 +
 drivers/md/dm-pcache/cache_key.c |   69 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 78 insertions(+)
drivers/md/dm-pcache/cache.c +7 -0
@@ -202,6 +202,7 @@ static int cache_tail_init(struct pcache
 {
 	struct dm_pcache *pcache = CACHE_TO_PCACHE(cache);
 	bool new_cache = !(cache->cache_info.flags & PCACHE_CACHE_FLAGS_INIT_DONE);
+	int ret;
 
 	if (new_cache) {
 		__set_bit(0, cache->seg_map);
@@ -218,6 +219,12 @@ static int cache_tail_init(struct pcache
 			pcache_dev_err(pcache, "Corrupted key tail or dirty tail.\n");
 			return -EIO;
 		}
+
+		ret = cache_verify_dirty_tail(cache);
+		if (ret) {
+			pcache_dev_err(pcache, "dirty tail chain does not terminate (crafted cache image?)\n");
+			return ret;
+		}
 	}
 
 	return 0;
drivers/md/dm-pcache/cache.h +2 -0
@@ -666,6 +666,8 @@ static inline int cache_decode_dirty_tai
 				&cache->dirty_tail_index);
 }
 
+int cache_verify_dirty_tail(struct pcache_cache *cache);
+
 int pcache_cache_init(void);
 void pcache_cache_exit(void);
 #endif /* _PCACHE_CACHE_H */
drivers/md/dm-pcache/cache_key.c +69 -0

75 lines not on this page · raw message

author maintainer
#11 lore raw

PATCH 11/1815 udf: Move udf_map_block() up

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Jan Kara <[email protected]>

[ Upstream commit 97e9d759a4193eabe4d8b6ecac093aac664c16e3 ]

Move udf_map_block() in the file to avoid forward declarations.

Stable-dep-of: 62333e480d12 ("udf: Fix data loss when converting inline inodes to out of line")

---
 fs/udf/inode.c |  118 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 59 insertions(+), 59 deletions(-)
fs/udf/inode.c +59 -59
@@ -336,65 +336,6 @@ const struct address_space_operations ud
 	.migrate_folio	= buffer_migrate_folio,
 };
 
-/*
- * Expand file stored in ICB to a normal one-block-file
- *
- * This function requires i_mutex held
- */
-int udf_expand_file_adinicb(struct inode *inode)
-{
-	struct folio *folio;
-	struct udf_inode_info *iinfo = UDF_I(inode);
-	int err;
-
-	WARN_ON_ONCE(!inode_is_locked(inode));
-	if (!iinfo->i_lenAlloc) {
-		down_write(&iinfo->i_data_sem);
-		if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
-			iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
-		else
-			iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
-		up_write(&iinfo->i_data_sem);
-		mark_inode_dirty(inode);
-		return 0;
-	}
-
-	folio = __filemap_get_folio(inode->i_mapping, 0,
-			FGP_LOCK | FGP_ACCESSED | FGP_CREAT, GFP_KERNEL);
-	if (IS_ERR(folio))
-		return PTR_ERR(folio);
-
-	if (!folio_test_uptodate(folio))
-		udf_adinicb_read_folio(folio);
-	down_write(&iinfo->i_data_sem);
-	memset(iinfo->i_data + iinfo->i_lenEAttr, 0x00,
-	       iinfo->i_lenAlloc);
-	iinfo->i_lenAlloc = 0;
-	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
-		iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
-	else
-		iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
-	folio_mark_dirty(folio);
-	folio_unlock(folio);
-	up_write(&iinfo->i_data_sem);
-	err = filemap_fdatawrite(inode->i_mapping);
-	if (err) {
-		/* Restore everything back so that we don't lose data... */
-		folio_lock(folio);
-		down_write(&iinfo->i_data_sem);
-		memcpy_from_folio(iinfo->i_data + iinfo->i_lenEAttr,
-				folio, 0, inode->i_size);
-		folio_unlock(folio);
-		iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;
-		iinfo->i_lenAlloc = inode->i_size;
-		up_write(&iinfo->i_data_sem);
-	}
-	folio_put(folio);
-	mark_inode_dirty(inode);
-
-	return err;
-}
-
 #define UDF_MAP_CREATE		0x01	/* Mapping can allocate new blocks */
 #define UDF_MAP_NOPREALLOC	0x02	/* Do not preallocate blocks */
 
@@ -455,6 +396,65 @@ out_read:
 	return ret;
 }
 
+/*
+ * Expand file stored in ICB to a normal one-block-file
+ *
+ * This function requires i_mutex held
+ */
+int udf_expand_file_adinicb(struct inode *inode)
+{
+	struct folio *folio;
+	struct udf_inode_info *iinfo = UDF_I(inode);
+	int err;
+
+	WARN_ON_ONCE(!inode_is_locked(inode));
+	if (!iinfo->i_lenAlloc) {
+		down_write(&iinfo->i_data_sem);
+		if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
+			iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
+		else
+			iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
+		up_write(&iinfo->i_data_sem);
+		mark_inode_dirty(inode);
+		return 0;
+	}
+
+	folio = __filemap_get_folio(inode->i_mapping, 0,
+			FGP_LOCK | FGP_ACCESSED | FGP_CREAT, GFP_KERNEL);
+	if (IS_ERR(folio))
+		return PTR_ERR(folio);
+
+	if (!folio_test_uptodate(folio))
+		udf_adinicb_read_folio(folio);
+	down_write(&iinfo->i_data_sem);
+	memset(iinfo->i_data + iinfo->i_lenEAttr, 0x00,
+	       iinfo->i_lenAlloc);
+	iinfo->i_lenAlloc = 0;
+	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
+		iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
+	else
+		iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
+	folio_mark_dirty(folio);
+	folio_unlock(folio);
+	up_write(&iinfo->i_data_sem);
+	err = filemap_fdatawrite(inode->i_mapping);
+	if (err) {
+		/* Restore everything back so that we don't lose data... */
+		folio_lock(folio);
+		down_write(&iinfo->i_data_sem);
+		memcpy_from_folio(iinfo->i_data + iinfo->i_lenEAttr,
+				folio, 0, inode->i_size);
+		folio_unlock(folio);
+		iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;
+		iinfo->i_lenAlloc = inode->i_size;
+		up_write(&iinfo->i_data_sem);
+	}
+	folio_put(folio);
+	mark_inode_dirty(inode);
+
+	return err;
+}
+
 static int __udf_get_block(struct inode *inode, sector_t block,
 			   struct buffer_head *bh_result, int flags)
 {
author maintainer
#12 lore raw

PATCH 12/1815 udf: Fix data loss when converting inline inodes to out of line

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Jan Kara <[email protected]>

[ Upstream commit 62333e480d12ab186f89fe2725b372d12f72d5eb ]

When udf_expand_file_adinicb() converts file from inline format to out of line, we use filemap_fdatawrite() to writeout the data to the new blocks. However since 36580ed08776 ("udf: Do not allocate blocks on page writeback") the writeback actually doesn't allocate the new block and the folio dirty bit is just silently cleared. Thus unless the file is written to after the conversion (as it can easily happen in case of truncate up), the data is just lost. Fix the problem by explicitely allocating the block underlying the data before starting writeback.

Fixes 36580ed08776 ("udf: Do not allocate blocks on page writeback")
---
 fs/udf/inode.c |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
fs/udf/inode.c +13 -2
@@ -405,6 +405,10 @@ int udf_expand_file_adinicb(struct inode
 {
 	struct folio *folio;
 	struct udf_inode_info *iinfo = UDF_I(inode);
+	struct udf_map_rq map = {
+		.lblk = 0,
+		.iflags = UDF_MAP_CREATE,
+	};
 	int err;
 
 	WARN_ON_ONCE(!inode_is_locked(inode));
@@ -434,20 +438,27 @@ int udf_expand_file_adinicb(struct inode
 		iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
 	else
 		iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
+	up_write(&iinfo->i_data_sem);
+
+	/* Allocate the block underlying the data */
+	err = udf_map_block(inode, &map);
+	if (err < 0)
+		goto restore;
+
 	folio_mark_dirty(folio);
 	folio_unlock(folio);
-	up_write(&iinfo->i_data_sem);
 	err = filemap_fdatawrite(inode->i_mapping);
 	if (err) {
 		/* Restore everything back so that we don't lose data... */
 		folio_lock(folio);
+restore:
 		down_write(&iinfo->i_data_sem);
 		memcpy_from_folio(iinfo->i_data + iinfo->i_lenEAttr,
 				folio, 0, inode->i_size);
-		folio_unlock(folio);
 		iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;
 		iinfo->i_lenAlloc = inode->i_size;
 		up_write(&iinfo->i_data_sem);
+		folio_unlock(folio);
 	}
 	folio_put(folio);
 	mark_inode_dirty(inode);
author maintainer
#13 lore raw

PATCH 13/1815 staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Muhammad Bilal <[email protected]>

[ Upstream commit cc7cd2a9228175c975f62ad56ed7c767701cb4fa ]

sm750_hw_imageblit() advances its monochrome source pointer by src_delta per scanline, and computes the correct rounded-up stride internally as:

        bytes_per_scan = (width + start_bit + 7) / 8;

Its only caller, lynxfb_ops_imageblit(), instead passed src_delta as image->width >> 3. For widths not a multiple of 8 this under-counted the stride, so the source pointer fell further behind the real per-scanline layout on every line, corrupting the rendered image.

Rather than just fixing the caller's calculation, remove src_delta as a parameter entirely and have sm750_hw_imageblit() advance by the bytes_per_scan it already computes for itself. There has only ever been one caller, and that caller was passing an out-of-sync derivative of the same width/start_bit values sm750_hw_imageblit() already has, so keeping stride as a separate parameter served no purpose beyond letting the two calculations drift apart, which is exactly what happened here.

Rounding up, rather than down, is the direction consistent with the rest of the fbdev core: struct fb_image mono bitmap data (the same image->data this driver receives) is walked elsewhere with byte strides derived from a ceiling division of width by 8. The generic mono bit iterator in drivers/video/fbdev/core/fb_imageblit.h advances scanlines with "iter->data += BITS_TO_BYTES(iter->width)", and BITS_TO_BYTES() (include/linux/bitops.h) is a ceiling division. sm750_hw_imageblit()'s own "(width + start_bit + 7) / 8" is that same ceiling division with an added start_bit offset, so the caller's ">> 3" (floor) was the one calculation out of step with how this data layout is handled everywhere else.

Found by code review of sm750_hw_imageblit()'s internal stride calculation against what its only caller was passing in, and confirmed with a clean -Werror build. I do not have this hardware, so this has not been exercised at runtime on real sm750 silicon.

Fixes 81dee67e215b2 ("staging: sm750fb: add sm750 to staging")
[ adjusted sm750_accel.h context to accommodate the branch’s older CamelCase parameter names. ]
---
 drivers/staging/sm750fb/sm750.c       |    2 +-
 drivers/staging/sm750fb/sm750.h       |    2 +-
 drivers/staging/sm750fb/sm750_accel.c |    6 ++----
 drivers/staging/sm750fb/sm750_accel.h |    4 +---
 4 files changed, 5 insertions(+), 9 deletions(-)
drivers/staging/sm750fb/sm750.c +1 -1
@@ -261,7 +261,7 @@ static void lynxfb_ops_imageblit(struct
 	spin_lock(&sm750_dev->slock);
 
 	sm750_dev->accel.de_imageblit(&sm750_dev->accel,
-				      image->data, image->width >> 3, 0,
+				      image->data, 0,
 				      base, pitch, bpp,
 				      image->dx, image->dy,
 				      image->width, image->height,
drivers/staging/sm750fb/sm750.h +1 -1
@@ -73,7 +73,7 @@ struct lynx_accel {
 			   u32 rop2);
 
 	int (*de_imageblit)(struct lynx_accel *accel, const char *p_srcbuf,
-			    u32 src_delta, u32 start_bit, u32 d_base, u32 d_pitch,
+			    u32 start_bit, u32 d_base, u32 d_pitch,
 			    u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
 			    u32 height, u32 f_color, u32 b_color, u32 rop2);
 
drivers/staging/sm750fb/sm750_accel.c +2 -4
@@ -288,8 +288,6 @@ static unsigned int de_get_transparency(
  * sm750_hw_imageblit
  * @accel: Acceleration device data
  * @src_buf: pointer to start of source buffer in system memory
- * @src_delta: Pitch value (in bytes) of the source buffer, +ive means top down
- *	      and -ive mean button up
  * @start_bit: Mono data can start at any bit in a byte, this value should be
  *	      0 to 7
  * @dest_base: Address of destination: offset in frame buffer
@@ -304,7 +302,7 @@ static unsigned int de_get_transparency(
  * @rop2: ROP value
  */
 int sm750_hw_imageblit(struct lynx_accel *accel, const char *src_buf,
-		       u32 src_delta, u32 start_bit, u32 dest_base, u32 dest_pitch,
+		       u32 start_bit, u32 dest_base, u32 dest_pitch,
 		       u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
 		       u32 height, u32 fg_color, u32 bg_color, u32 rop2)
 {
@@ -395,7 +393,7 @@ int sm750_hw_imageblit(struct lynx_accel
 			write_dp_port(accel, *(unsigned int *)remain);
 		}
 
-		src_buf += src_delta;
+		src_buf += bytes_per_scan;
 	}
 
 	return 0;
drivers/staging/sm750fb/sm750_accel.h +1 -3
@@ -220,8 +220,6 @@ int sm750_hw_copyarea(struct lynx_accel
 /**
  * sm750_hw_imageblit
  * @pSrcbuf: pointer to start of source buffer in system memory
- * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top down
- *>-----      and -ive mean button up
  * @startBit: Mono data can start at any bit in a byte, this value should be
  *>-----      0 to 7
  * @dBase: Address of destination: offset in frame buffer
@@ -236,7 +234,7 @@ int sm750_hw_copyarea(struct lynx_accel
  * @rop2: ROP value
  */
 int sm750_hw_imageblit(struct lynx_accel *accel, const char *pSrcbuf,
-		       u32 srcDelta, u32 startBit, u32 dBase, u32 dPitch,
+		       u32 startBit, u32 dBase, u32 dPitch,
 		       u32 bytePerPixel, u32 dx, u32 dy, u32 width,
 		       u32 height, u32 fColor, u32 bColor, u32 rop2);
 
author maintainer
#14 lore raw

PATCH 14/1815 tracing/probes: ignore id update from btf_type_skip_modifiers

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Martin Kaiser <[email protected]>

[ Upstream commit 823b37855829bc328d46102a56e4d0b2f7a3d0d1 ]

We can pass NULL as id pointer to btf_type_skip_modifiers if we do not need the id of the returned btf_type.

Stable-dep-of: 47e93045a2db ("tracing/probes: Fix BTF kflag check for anonymous struct member access")

---
 kernel/trace/trace_probe.c |   13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)
kernel/trace/trace_probe.c +5 -8
@@ -356,9 +356,8 @@ static bool btf_type_is_char_ptr(struct
 {
 	const struct btf_type *real_type;
 	u32 intdata;
-	s32 tid;
 
-	real_type = btf_type_skip_modifiers(btf, type->type, &tid);
+	real_type = btf_type_skip_modifiers(btf, type->type, NULL);
 	if (!real_type)
 		return false;
 
@@ -375,14 +374,13 @@ static bool btf_type_is_char_array(struc
 	const struct btf_type *real_type;
 	const struct btf_array *array;
 	u32 intdata;
-	s32 tid;
 
 	if (BTF_INFO_KIND(type->info) != BTF_KIND_ARRAY)
 		return false;
 
 	array = (const struct btf_array *)(type + 1);
 
-	real_type = btf_type_skip_modifiers(btf, array->type, &tid);
+	real_type = btf_type_skip_modifiers(btf, array->type, NULL);
 
 	intdata = btf_type_int(real_type);
 	return !(BTF_INT_ENCODING(intdata) & BTF_INT_SIGNED)
@@ -585,7 +583,6 @@ static int parse_btf_field(char *fieldna
 	struct btf *btf = ctx_btf(ctx);
 	char *next;
 	int is_ptr;
-	s32 tid;
 
 	do {
 		if (!is_struct) {
@@ -596,7 +593,7 @@ static int parse_btf_field(char *fieldna
 			}
 
 			/* Convert a struct pointer type to a struct type */
-			type = btf_type_skip_modifiers(btf, type->type, &tid);
+			type = btf_type_skip_modifiers(btf, type->type, NULL);
 			if (!type) {
 				trace_probe_log_err(ctx->offset, BAD_BTF_TID);
 				return -EINVAL;
@@ -636,7 +633,7 @@ static int parse_btf_field(char *fieldna
 				ctx->last_bitsize = 0;
 			}
 
-			type = btf_type_skip_modifiers(btf, field->type, &tid);
+			type = btf_type_skip_modifiers(btf, field->type, NULL);
 			if (!type) {
 				trace_probe_log_err(ctx->offset, BAD_BTF_TID);
 				return -EINVAL;
@@ -755,7 +752,7 @@ static int parse_btf_arg(char *varname,
 	return -ENOENT;
 
 found:
-	type = btf_type_skip_modifiers(ctx->btf, tid, &tid);
+	type = btf_type_skip_modifiers(ctx->btf, tid, NULL);
 found_type:
 	if (!type) {
 		trace_probe_log_err(ctx->offset, BAD_BTF_TID);
author maintainer
#15 lore raw

PATCH 15/1815 tracing/probes: Fix BTF kflag check for anonymous struct member access

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: "Masami Hiramatsu (Google)" <[email protected]>

[ Upstream commit 47e93045a2db80d24f5fef65adecc6b2b32efa23 ]

btf_find_struct_member() traverses into nested anonymous structures and unions to find a struct member. However, get_bitoffset_of_field() in trace_probe.c checked btf_type_kflag(type) using the outer parent type instead of the actual anonymous structure/union that directly contains the found member.

If the parent structure and anonymous structure have mismatched kflags (e.g., the parent has kflag=0 while the anonymous structure has kflag=1 because it contains bitfields), the bitfield size encoded in the upper 8 bits of member->offset is erroneously treated as part of the byte/bit offset, corrupting the resolved offset and failing to set last_bitsize. Similarly, btf_find_struct_member() pushed anonymous member offsets onto anon_stack without masking BTF_MEMBER_BIT_OFFSET() when kflag is set.

To fix this problem, update btf_find_struct_member() to return actual containing structure/union type via member_type, use appropriate __btf_member_bit_offset() to get bit offset, and use member_type for btf_type_kflag() in get_bitoffset_of_field().

Fixes c440adfbe302 ("tracing/probes: Support BTF based data structure field access")
Assisted-by Antigravity:gemini-3.7-flash
[ applied changes to parse_btf_field() because get_bitoffset_of_field() is absent. ]
---
 kernel/trace/trace_btf.c   |   19 +++++++++++--------
 kernel/trace/trace_btf.h   |    3 ++-
 kernel/trace/trace_probe.c |    5 +++--
 3 files changed, 16 insertions(+), 11 deletions(-)
kernel/trace/trace_btf.c +11 -8
@@ -61,16 +61,17 @@ struct btf_anon_stack {
 
 /*
  * Find a member of data structure/union by name and return it.
- * Return NULL if not found, or -EINVAL if parameter is invalid.
- * If the member is an member of anonymous union/structure, the offset
- * of that anonymous union/structure is stored into @anon_offset. Caller
- * can calculate the correct offset from the root data structure by
- * adding anon_offset to the member's offset.
+ * Return NULL if not found, or ERR_PTR(-EINVAL) if parameter is invalid.
+ * If the member is a member of an anonymous union/structure, the bit offset
+ * of that anonymous union/structure is stored into @anon_offset.
+ * If @member_type is non-NULL, the actual containing structure/union type
+ * of the found member is stored into @member_type.
  */
 const struct btf_member *btf_find_struct_member(struct btf *btf,
 						const struct btf_type *type,
 						const char *member_name,
-						u32 *anon_offset)
+						u32 *anon_offset,
+						const struct btf_type **member_type)
 {
 	struct btf_anon_stack *anon_stack;
 	const struct btf_member *member;
@@ -94,14 +95,16 @@ retry:
 			if (mtype && btf_type_is_struct(mtype) &&
 			    top < BTF_ANON_STACK_MAX) {
 				anon_stack[top].tid = tid;
-				anon_stack[top++].offset =
-					cur_offset + member->offset;
+				anon_stack[top++].offset = cur_offset +
+					__btf_member_bit_offset(type, member);
 			}
 		} else {
 			name = btf_name_by_offset(btf, member->name_off);
 			if (name && !strcmp(member_name, name)) {
 				if (anon_offset)
 					*anon_offset = cur_offset;
+				if (member_type)
+					*member_type = type;
 				goto out;
 			}
 		}
kernel/trace/trace_btf.h +2 -1
@@ -8,4 +8,5 @@ const struct btf_param *btf_get_func_par
 const struct btf_member *btf_find_struct_member(struct btf *btf,
 						const struct btf_type *type,
 						const char *member_name,
-						u32 *anon_offset);
+						u32 *anon_offset,
+						const struct btf_type **member_type);
kernel/trace/trace_probe.c +3 -2
@@ -578,6 +578,7 @@ static int parse_btf_field(char *fieldna
 {
 	struct fetch_insn *code = *pcode;
 	const struct btf_member *field;
+	const struct btf_type *mtype;
 	u32 bitoffs, anon_offs;
 	bool is_struct = ctx->struct_btf != NULL;
 	struct btf *btf = ctx_btf(ctx);
@@ -612,7 +613,7 @@ static int parse_btf_field(char *fieldna
 
 			anon_offs = 0;
 			field = btf_find_struct_member(btf, type, fieldname,
-						       &anon_offs);
+						       &anon_offs, &mtype);
 			if (IS_ERR(field)) {
 				trace_probe_log_err(ctx->offset, BAD_BTF_TID);
 				return PTR_ERR(field);
@@ -625,7 +626,7 @@ static int parse_btf_field(char *fieldna
 			bitoffs += anon_offs;
 
 			/* Accumulate the bit-offsets of the dot-connected fields */
-			if (btf_type_kflag(type)) {
+			if (btf_type_kflag(mtype)) {
 				bitoffs += BTF_MEMBER_BIT_OFFSET(field->offset);
 				ctx->last_bitsize = BTF_MEMBER_BITFIELD_SIZE(field->offset);
 			} else {
author maintainer
#16 lore raw

PATCH 16/1815 btrfs: abort transaction before releasing tree_log_mutex on commit failure

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Leo Martins <[email protected]>

[ Upstream commit 529c01c3dc0d322c103611c35b01d71ea04562b2 ]

When transaction metadata writeout fails in btrfs_commit_transaction(), the current code only logs the error, drops tree_log_mutex and then goes through cleanup_transaction(), which aborts the transaction and records the fs error.

That is too late for the tree log side. A log sync can already be waiting on tree_log_mutex, because the committing transaction is moved to TRANS_STATE_UNBLOCKED while that mutex is held, which lets fsyncs join the next transaction and queue up in btrfs_sync_log(). Once the failed commit drops tree_log_mutex, such a log sync acquires it, sees BTRFS_FS_ERROR() still clear, and writes super_for_commit. That superblock holds the roots prepared for the transaction that has just failed to write out its metadata, so it can point at tree blocks that never reached the disk, and the next mount fails with a parent transid mismatch.

Commit 165ea85f1483 ("btrfs: do not write supers if we have an fs error") fixed this class of problem by making btrfs_sync_log() check for an fs error right after taking tree_log_mutex. That check only works if the commit path publishes the fs error before it releases the same mutex, and commit 68d4ece9c30e ("btrfs: don't call btrfs_handle_fs_error() in btrfs_commit_transaction()") removed the only thing that did so.

Restore the ordering by aborting the transaction while tree_log_mutex is still held. We have a transaction handle here, so this does not need to bring back the btrfs_handle_fs_error() call: __btrfs_abort_transaction() records the fs error itself, which is all btrfs_sync_log() looks at, and the error message put in its place is kept.

This is what commit 3810ab40afa5 ("btrfs: abort transaction on error in write_all_supers()") already does for the next call in this function.

This is reproducible on an unmodified kernel by failing the first couple of bios of a transaction commit with fail_make_request while a concurrent fsync workload keeps log syncs queued on tree_log_mutex.

Fixes 68d4ece9c30e ("btrfs: don't call btrfs_handle_fs_error() in btrfs_commit_transaction()")
[ adjusted error-message context to retain `%d` with `ret` instead of `%pe` with `ERR_PTR(ret)`. ]
---
 fs/btrfs/transaction.c |    6 ++++++
 1 file changed, 6 insertions(+)
fs/btrfs/transaction.c +6 -0
@@ -2589,6 +2589,12 @@ int btrfs_commit_transaction(struct btrf
 	ret = btrfs_write_and_wait_transaction(trans);
 	if (unlikely(ret)) {
 		btrfs_err(fs_info, "error while writing out transaction: %d", ret);
+		/*
+		 * Abort before releasing tree_log_mutex, so a log sync waiting
+		 * on it sees the fs error and skips writing super_for_commit
+		 * for this failed transaction. See btrfs_sync_log().
+		 */
+		btrfs_abort_transaction(trans, ret);
 		mutex_unlock(&fs_info->tree_log_mutex);
 		goto scrub_continue;
 	}
author maintainer
#17 lore raw

PATCH 17/1815 ksmbd: fix maximum allowed access checks

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Namjae Jeon <[email protected]>

[ Upstream commit cc2f133e80eb2c4a04bfa77a2f207749fe2f516a ]

The DACL permission check looks for an ACE matching the current user and falls back to the Everyone ACE. It does not consider an Authenticated Users ACE, even though an authenticated session is a member of that well-known group.

As a result, opening a file whose access is granted through S-1-5-11 can incorrectly fail with STATUS_ACCESS_DENIED. Treat an Authenticated Users ACE as a fallback entry alongside Everyone.

The maximal access calculation also combines access masks from every ACE, regardless of whether its SID applies to the current user. This can grant rights belonging to an unrelated principal. Process only ACEs applying to the user, Everyone, or Authenticated Users, and accumulate allowed and denied masks in ACL order. Preserve explicitly requested access bits so they are validated against the resulting maximal mask.

When ACCESS_SYSTEM_SECURITY is denied, report STATUS_PRIVILEGE_NOT_HELD instead of the generic STATUS_ACCESS_DENIED. Access to the system ACL requires a security privilege that ksmbd does not grant.

For regular files, include FILE_EXECUTE in maximal access when the client requested GENERIC_EXECUTE and the DACL grants the complete file-read set. Keep a direct FILE_EXECUTE request subject to the explicit DACL bit. This matches the POSIX file ACL mapping without broadening specific execute requests.

Do not replace rights from an applicable NT ACE with a POSIX ACL entry. The POSIX ACL is only a fallback when no user, Everyone, or Authenticated Users ACE applies; otherwise it can incorrectly broaden the stored DACL.

This fixes smb2.maximum_allowed.maximum_allowed.

Stable-dep-of: b5ec6c462aab ("ksmbd: fix tree connection use-after-free in smb2_tree_connect()")

---
 fs/smb/server/smb2pdu.c |    9 ++++-
 fs/smb/server/smbacl.c  |   83 ++++++++++++++++++++++++++++++------------------
 fs/smb/server/smbacl.h  |    2 -
 3 files changed, 61 insertions(+), 33 deletions(-)
fs/smb/server/smb2pdu.c +7 -2
@@ -3601,6 +3601,7 @@ int smb2_open(struct ksmbd_work *work)
 
 	if (file_present && !(req->CreateOptions & FILE_DELETE_ON_CLOSE_LE)) {
 		rc = smb_check_perm_dacl(conn, &path, &daccess,
+					 req->DesiredAccess,
 					 sess->user->uid);
 		if (rc)
 			goto err_out;
@@ -4173,8 +4174,12 @@ err_out2:
 			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
 		else if (rc == -EOPNOTSUPP)
 			rsp->hdr.Status = STATUS_NOT_SUPPORTED;
-		else if (rc == -EACCES || rc == -ESTALE || rc == -EXDEV)
-			rsp->hdr.Status = STATUS_ACCESS_DENIED;
+		else if (rc == -EACCES || rc == -ESTALE || rc == -EXDEV) {
+			if (req->DesiredAccess & FILE_ACCESS_SYSTEM_SECURITY_LE)
+				rsp->hdr.Status = STATUS_PRIVILEGE_NOT_HELD;
+			else
+				rsp->hdr.Status = STATUS_ACCESS_DENIED;
+		}
 		else if (rc == -ENOENT)
 			rsp->hdr.Status = STATUS_OBJECT_NAME_INVALID;
 		else if (rc == -EPERM)
fs/smb/server/smbacl.c +53 -30

134 lines not on this page · raw message

fs/smb/server/smbacl.h +1 -1
@@ -95,7 +95,7 @@ bool smb_inherit_flags(int flags, bool i
 int smb_inherit_dacl(struct ksmbd_conn *conn, const struct path *path,
 		     unsigned int uid, unsigned int gid);
 int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,
-			__le32 *pdaccess, int uid);
+			__le32 *pdaccess, __le32 raw_daccess, int uid);
 int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
 		 const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
 		 bool type_check, bool get_write);
author maintainer
#18 lore raw

PATCH 18/1815 smb/server: fix tree connection leak in smb2_tree_connect()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Ze Tan <[email protected]>

[ Upstream commit 39f2032096715daae5f6fd0f587ca7a474b019df ]

See the procedure below:

smb2_tree_connect
ksmbd_tree_conn_connect
xa_store(&sess->tree_conns, tree_conn->id, tree_conn) ksmbd_counter_inc(KSMBD_COUNTER_TREE_CONNS) ksmbd_share_tree_conn_inc(sc)
ksmbd_iov_pin_rsp // fail
status.ret = KSMBD_TREE_CONN_STATUS_NOMEM
// do not disconnect tree_conn

Disconnect the new tree connection if ksmbd_iov_pin_rsp() fails.

Fixes e2b76ab8b5c9 ("ksmbd: add support for read compound")

Stable-dep-of: b5ec6c462aab ("ksmbd: fix tree connection use-after-free in smb2_tree_connect()")

---
 fs/smb/server/smb2pdu.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
fs/smb/server/smb2pdu.c +9 -1
@@ -2330,8 +2330,16 @@ out_err1:
 		rsp->ShareFlags |= cpu_to_le32(SMB2_SHAREFLAG_COMPRESS_DATA);
 
 	rc = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_tree_connect_rsp));
-	if (rc)
+	if (rc) {
+		if (status.ret == KSMBD_TREE_CONN_STATUS_OK) {
+			down_write(&sess->tree_conns_lock);
+			status.tree_conn->t_state = TREE_DISCONNECTED;
+			up_write(&sess->tree_conns_lock);
+			ksmbd_tree_conn_disconnect(sess, status.tree_conn);
+			status.tree_conn = NULL;
+		}
 		status.ret = KSMBD_TREE_CONN_STATUS_NOMEM;
+	}
 
 	if (!IS_ERR(treename))
 		kfree(treename);
author maintainer
#19 lore raw

PATCH 19/1815 ksmbd: fix tree connection use-after-free in smb2_tree_connect()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: "Cen Zhang (Microsoft Security FORGE Labs)" <[email protected]>

[ Upstream commit b5ec6c462aab1062cf5d1e667ba7c6442f737055 ]

ksmbd_tree_conn_connect() publishes a new tree connection in sess->tree_conns with a single reference and returns its pointer to smb2_tree_connect(). The handler continues to initialize the object and build the response after publication. A concurrent session logoff can erase the connection and drop that reference, freeing the object while the handler still uses it.

BUG: KASAN: slab-use-after-free in smb2_tree_connect+0xe3d/0xf90
  smb2_tree_connect (fs/smb/server/smb2pdu.c:2872)
  handle_ksmbd_work
  process_one_work
  worker_thread
  kthread

After xa_store() succeeds, take a second reference before releasing tree_conns_lock. The original reference belongs to the xarray entry and the second belongs to the creating smb2_tree_connect() handler.

Keep the references balanced in every path:

- On normal exit or an error after publication, smb2_tree_connect() drops its creator reference. Error cleanup also calls ksmbd_tree_conn_disconnect(), which drops the xarray reference only if it removes the exact entry.
- SMB2 TREE_DISCONNECT uses the same helper to remove the entry and drop its xarray reference. The request's existing lookup reference remains owned by the request and is released by the existing cleanup.
- Session LOGOFF removes each entry and drops its xarray reference. If it wins the race, later cleanup sees that the entry is gone and does not drop that reference again.

To enforce this ownership, claim the disconnected state and erase the exact entry atomically under tree_conns_lock. This guarantees one drop for the xarray reference and one drop by each in-flight user, regardless of which teardown path wins. If logoff removes the entry before initialization completes, fail the connect instead of marking the detached object TREE_CONNECTED.

Fixes 33b235a6e6eb ("ksmbd: fix race condition between tree conn lookup and disconnect")
[ added braces around the successful-connect if branch to accommodate the new tree_conn assignment ]
---
 fs/smb/server/mgmt/tree_connect.c |    8 ++++++++
 fs/smb/server/smb2pdu.c           |   32 +++++++++++++++-----------------
 2 files changed, 23 insertions(+), 17 deletions(-)
fs/smb/server/mgmt/tree_connect.c +8 -0
@@ -82,6 +82,8 @@ ksmbd_tree_conn_connect(struct ksmbd_wor
 	down_write(&sess->tree_conns_lock);
 	ret = xa_err(xa_store(&sess->tree_conns, tree_conn->id, tree_conn,
 			      KSMBD_DEFAULT_GFP));
+	if (!ret)
+		atomic_inc(&tree_conn->refcount);
 	up_write(&sess->tree_conns_lock);
 	if (ret) {
 		status.ret = -ENOMEM;
@@ -127,6 +129,12 @@ int ksmbd_tree_conn_disconnect(struct ks
 			       struct ksmbd_tree_connect *tree_conn)
 {
 	down_write(&sess->tree_conns_lock);
+	if (tree_conn->t_state == TREE_DISCONNECTED ||
+	    xa_load(&sess->tree_conns, tree_conn->id) != tree_conn) {
+		up_write(&sess->tree_conns_lock);
+		return -ENOENT;
+	}
+	tree_conn->t_state = TREE_DISCONNECTED;
 	xa_erase(&sess->tree_conns, tree_conn->id);
 	up_write(&sess->tree_conns_lock);
 
fs/smb/server/smb2pdu.c +15 -17
@@ -2251,6 +2251,7 @@ int smb2_tree_connect(struct ksmbd_work
 	struct ksmbd_session *sess = work->sess;
 	char *treename = NULL, *name = NULL;
 	struct ksmbd_tree_conn_status status;
+	struct ksmbd_tree_connect *tree_conn = NULL;
 	struct ksmbd_share_config *share = NULL;
 	int rc = -EINVAL;
 
@@ -2277,9 +2278,10 @@ int smb2_tree_connect(struct ksmbd_work
 		    name, treename);
 
 	status = ksmbd_tree_conn_connect(work, name);
-	if (status.ret == KSMBD_TREE_CONN_STATUS_OK)
+	if (status.ret == KSMBD_TREE_CONN_STATUS_OK) {
+		tree_conn = status.tree_conn;
 		rsp->hdr.Id.SyncId.TreeId = cpu_to_le32(status.tree_conn->id);
-	else
+	} else
 		goto out_err1;
 
 	share = status.tree_conn->share_conf;
@@ -2311,8 +2313,15 @@ int smb2_tree_connect(struct ksmbd_work
 		status.tree_conn->posix_extensions = true;
 
 	down_write(&sess->tree_conns_lock);
-	status.tree_conn->t_state = TREE_CONNECTED;
+	if (status.tree_conn->t_state == TREE_DISCONNECTED) {
+		status.ret = KSMBD_TREE_CONN_STATUS_ERROR;
+		share = NULL;
+	} else {
+		status.tree_conn->t_state = TREE_CONNECTED;
+	}
 	up_write(&sess->tree_conns_lock);
+	if (status.ret != KSMBD_TREE_CONN_STATUS_OK)
+		goto out_err1;
 	rsp->StructureSize = cpu_to_le16(16);
 out_err1:
 	if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE && share &&
@@ -2332,9 +2341,6 @@ out_err1:
 	rc = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_tree_connect_rsp));
 	if (rc) {
 		if (status.ret == KSMBD_TREE_CONN_STATUS_OK) {
-			down_write(&sess->tree_conns_lock);
-			status.tree_conn->t_state = TREE_DISCONNECTED;
-			up_write(&sess->tree_conns_lock);
 			ksmbd_tree_conn_disconnect(sess, status.tree_conn);
 			status.tree_conn = NULL;
 		}
@@ -2375,6 +2381,9 @@ out_err1:
 	if (status.ret != KSMBD_TREE_CONN_STATUS_OK)
 		smb2_set_err_rsp(work);
 
+	if (tree_conn)
+		ksmbd_tree_connect_put(tree_conn);
+
 	return rc;
 }
 
@@ -2478,17 +2487,6 @@ int smb2_tree_disconnect(struct ksmbd_wo
 
 	ksmbd_close_tree_conn_fds(work);
 
-	down_write(&sess->tree_conns_lock);
-	if (tcon->t_state == TREE_DISCONNECTED) {
-		up_write(&sess->tree_conns_lock);
-		rsp->hdr.Status = STATUS_NETWORK_NAME_DELETED;
-		err = -ENOENT;
-		goto err_out;
-	}
-
-	tcon->t_state = TREE_DISCONNECTED;
-	up_write(&sess->tree_conns_lock);
-
 	err = ksmbd_tree_conn_disconnect(sess, tcon);
 	if (err) {
 		rsp->hdr.Status = STATUS_NETWORK_NAME_DELETED;
author maintainer
#20 lore raw

PATCH 20/1815 memcg: move LRU size accounting on reparenting instead of copying it

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Shakeel Butt <[email protected]>

[ Upstream commit 0e0ac326c511d514817cc7b6d7741afd59098ce2 ]

When a memory cgroup is offlined its LRU folios are reparented to the parent. lruvec_reparent_lru() splices the child's lists into the parent's and credits the parent with the child's per-zone lru_zone_size[], but never clears the child's copy, so the size is copied rather than moved. lru_gen_reparent_memcg() does the same for MGLRU.

The parent is left correct, credited with exactly the folios it took over. The stale value sits on the child and nothing will correct it:
folio->memcg_data now resolves to the parent, so every later update_lru_size() for those folios goes there.

Dying cgroups are not freed immediately and mem_cgroup_iter() still walks them, so shrink_lruvec() keeps being called on them. get_scan_count() reads the phantom counter through lruvec_lru_size() and the scan loop then grinds through nr[] in SWAP_CLUSTER_MAX steps against an empty list, for as long as the dead cgroup lives. Under MGLRU the MGLRU scanner runs instead, but count_shadow_nodes() sums all of NR_LRU_LISTS through lruvec_lru_size() and over-budgets the shadow node limit just the same.

On one 251 GiB host a sweep of every mz->lru_zone_size[] found 380 counters describing folios on no list at all: 124777314 pages, 476 GiB, 1.89x the machine's RAM, across 57 cgroups. All were on memcgs with CSS_DYING set and CSS_ONLINE clear, and parent/child pairs reported byte-identical sizes.

LRU_UNEVICTABLE needs its size moved too. Its list is deliberately not spliced because lruvec_init() poisons the head - the unevictable LRU is imaginary and folios are never threaded on it - but the size is kept by lruvec_add_folio()/lruvec_del_folio() and those folios account to the parent from here on.

This depends on commit bf4ade7dbd76 ("memcg: keep folio's objcg same as its node") and must not be backported ahead of it. Without that invariant a folio's objcg can belong to another node, so a folio already spliced onto the parent's list can still resolve to the child's lruvec until the objcg's node is reparented in a later iteration of memcg_reparent_objcgs(); clearing the child's counter early then lets lruvec_del_folio() underflow it and trip the WARN_ONCE()/VM_BUG_ON() in mem_cgroup_update_lru_size().

Fixes 07a6e9a2c199 ("mm: vmscan: prepare for reparenting traditional LRU folios")
Fixes f304652609ea ("mm: vmscan: prepare for reparenting MGLRU folios")
Cc Johannes Weiner <[email protected]>
Cc Roman Gushchin <[email protected]>
Cc Muchun Song <[email protected]>
Cc <[email protected]> # After: bf4ade7dbd76: memcg: keep folio's objcg same as its node
---
 mm/swap.c   |    9 +++++++++
 mm/vmscan.c |    5 +++++
 2 files changed, 14 insertions(+)
mm/swap.c +9 -0
@@ -1153,7 +1153,16 @@ static void lruvec_reparent_lru(struct l
 	for_each_managed_zone_pgdat(zone, NODE_DATA(nid), zid, MAX_NR_ZONES - 1) {
 		unsigned long size = mem_cgroup_get_zone_lru_size(child_lruvec, lru, zid);
 
+		if (!size)
+			continue;
+
+		/*
+		 * The folios are accounted to the parent from now on, so the
+		 * size has to be moved, not just copied. Leaving it behind
+		 * makes the dying child describe folios it no longer owns.
+		 */
 		mem_cgroup_update_lru_size(parent_lruvec, lru, zid, size);
+		mem_cgroup_update_lru_size(child_lruvec, lru, zid, -(long)size);
 	}
 }
 
mm/vmscan.c +5 -0
@@ -4554,7 +4554,12 @@ void lru_gen_reparent_memcg(struct mem_c
 		for_each_managed_zone_pgdat(zone, NODE_DATA(nid), zid, MAX_NR_ZONES - 1) {
 			unsigned long size = mem_cgroup_get_zone_lru_size(child_lruvec, lru, zid);
 
+			if (!size)
+				continue;
+
+			/* Move the accounting, do not duplicate it. */
 			mem_cgroup_update_lru_size(parent_lruvec, lru, zid, size);
+			mem_cgroup_update_lru_size(child_lruvec, lru, zid, -(long)size);
 		}
 	}
 }
author maintainer
#21 lore raw

PATCH 21/1815 nvdimm: preserve flush callback -ENOMEM

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit 6b7108712a4b1c37cac69815aede1dde202b3187 ]

nvdimm_flush() maps provider flush failures to -EIO. Keep that default because provider callbacks can report host-side or backend failures that should remain generic I/O errors to the guest.

Guest-side allocation failures should not be reported as I/O errors. In the virtio-pmem path, the flush request allocation can fail with -ENOMEM before any request is submitted to the host. Mapping that to -EIO makes resource pressure look like media failure.

Preserve -ENOMEM from provider callbacks and continue to map other non-zero provider failures to -EIO. The generic flush path still returns 0, and pmem_submit_bio() already converts errno values to block status for bio completion.

Message-ID: <[email protected]>
Stable-dep-of: e57140944b5a ("nvdimm: virtio_pmem: refcount requests for token lifetime")

---
 drivers/nvdimm/region_devs.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/nvdimm/region_devs.c +2 -1
@@ -1093,7 +1093,8 @@ int nvdimm_flush(struct nd_region *nd_re
 	if (!nd_region->flush)
 		rc = generic_nvdimm_flush(nd_region);
 	else {
-		if (nd_region->flush(nd_region, bio))
+		rc = nd_region->flush(nd_region, bio);
+		if (rc && rc != -ENOMEM)
 			rc = -EIO;
 	}
 
author maintainer
#22 lore raw

PATCH 22/1815 nvdimm: pmem: keep PREFLUSH before data writes

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit c644a2f8fef5618fcf453c591177700fd07dd024 ]

pmem_submit_bio() records a REQ_PREFLUSH error, but continues to copy the bio data and can later overwrite the error with a successful REQ_FUA flush. That lets data writes run after a failed preflush and can complete the bio successfully despite the failed ordering barrier.

Run the REQ_PREFLUSH flush synchronously before touching the bio data and complete the bio with the flush error if it fails. Keep asynchronous flush chaining for REQ_FUA. At that point, data copy has completed and the parent bio can wait for the chained flush bio.

Message-ID: <[email protected]>
Stable-dep-of: e57140944b5a ("nvdimm: virtio_pmem: refcount requests for token lifetime")

---
 drivers/nvdimm/pmem.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/nvdimm/pmem.c +9 -3
@@ -208,8 +208,14 @@ static void pmem_submit_bio(struct bio *
 	struct pmem_device *pmem = bio->bi_bdev->bd_disk->private_data;
 	struct nd_region *nd_region = to_region(pmem);
 
-	if (bio->bi_opf & REQ_PREFLUSH)
-		ret = nvdimm_flush(nd_region, bio);
+	if (bio->bi_opf & REQ_PREFLUSH) {
+		ret = nvdimm_flush(nd_region, NULL);
+		if (ret) {
+			bio->bi_status = errno_to_blk_status(ret);
+			bio_endio(bio);
+			return;
+		}
+	}
 
 	do_acct = blk_queue_io_stat(bio->bi_bdev->bd_disk->queue);
 	if (do_acct)
@@ -229,7 +235,7 @@ static void pmem_submit_bio(struct bio *
 	if (do_acct)
 		bio_end_io_acct(bio, start);
 
-	if (bio->bi_opf & REQ_FUA)
+	if ((bio->bi_opf & REQ_FUA) && !bio->bi_status)
 		ret = nvdimm_flush(nd_region, bio);
 
 	if (ret)
author maintainer
#23 lore raw

PATCH 23/1815 nvdimm: virtio_pmem: stop allocating child flush bio

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit 40f356e610df95728074b1fc2e2ccb54ca1b5659 ]

pmem_submit_bio() passes the parent bio to nvdimm_flush() for REQ_FUA. For virtio-pmem this makes async_pmem_flush() allocate and submit a child PREFLUSH bio chained to the parent.

That child allocation is in the block submit path. Making it blocking with GFP_NOIO can consume the same global bio mempool that submit_bio() uses, while making it GFP_ATOMIC can fail under pressure. A forced failure of the child allocation produced:

virtio_pmem: forcing child bio allocation failure for test Buffer I/O error on dev pmem0, logical block 0, lost sync page write EXT4-fs (pmem0): I/O error while writing superblock EXT4-fs (pmem0): mount failed

Avoid the child bio without turning REQ_FUA into a synchronous submit-path wait. Let provider flush callbacks return NVDIMM_FLUSH_ASYNC after taking ownership of parent bio completion. pmem_submit_bio() returns in that case, and virtio-pmem queues an ordered WQ_MEM_RECLAIM work item that runs the existing host flush path and completes the parent bio.

This keeps the asynchronous completion model of the child-bio path while removing the child bio allocation from the submit path.

Message-ID: <[email protected]>
Stable-dep-of: e57140944b5a ("nvdimm: virtio_pmem: refcount requests for token lifetime")

---
 drivers/nvdimm/nd_virtio.c   |   54 ++++++++++++++++++++++++++++++-------------
 drivers/nvdimm/pmem.c        |    5 +++
 drivers/nvdimm/region_devs.c |    2 +
 drivers/nvdimm/virtio_pmem.c |   17 ++++++++++++-
 drivers/nvdimm/virtio_pmem.h |    4 +++
 include/linux/libnvdimm.h    |    9 +++++++
 6 files changed, 73 insertions(+), 18 deletions(-)
drivers/nvdimm/nd_virtio.c +38 -16
@@ -9,6 +9,12 @@
 #include "virtio_pmem.h"
 #include "nd.h"
 
+struct virtio_pmem_flush_work {
+	struct work_struct work;
+	struct nd_region *nd_region;
+	struct bio *bio;
+};
+
  /* The interrupt handler */
 void virtio_pmem_host_ack(struct virtqueue *vq)
 {
@@ -107,30 +113,46 @@ static int virtio_pmem_flush(struct nd_r
 	return err;
 };
 
+static void virtio_pmem_flush_work(struct work_struct *work)
+{
+	struct virtio_pmem_flush_work *flush;
+	int err;
+
+	flush = container_of(work, struct virtio_pmem_flush_work, work);
+	err = virtio_pmem_flush(flush->nd_region);
+	if (err > 0)
+		err = -EIO;
+	if (err)
+		flush->bio->bi_status = errno_to_blk_status(err);
+	bio_endio(flush->bio);
+	kfree(flush);
+}
+
 /* The asynchronous flush callback function */
 int async_pmem_flush(struct nd_region *nd_region, struct bio *bio)
 {
-	/*
-	 * Create child bio for asynchronous flush and chain with
-	 * parent bio. Otherwise directly call nd_region flush.
-	 */
-	if (bio && bio->bi_iter.bi_sector != -1) {
-		struct bio *child = bio_alloc(bio->bi_bdev, 0,
-					      REQ_OP_WRITE | REQ_PREFLUSH,
-					      GFP_ATOMIC);
+	struct virtio_device *vdev = nd_region->provider_data;
+	struct virtio_pmem *vpmem = vdev->priv;
+	struct virtio_pmem_flush_work *flush;
+	int err;
 
-		if (!child)
+	if (bio && bio->bi_iter.bi_sector != -1) {
+		flush = kmalloc_obj(*flush, GFP_NOIO);
+		if (!flush)
 			return -ENOMEM;
-		bio_clone_blkg_association(child, bio);
-		child->bi_iter.bi_sector = -1;
-		bio_chain(child, bio);
-		submit_bio(child);
-		return 0;
+
+		INIT_WORK(&flush->work, virtio_pmem_flush_work);
+		flush->nd_region = nd_region;
+		flush->bio = bio;
+		queue_work(vpmem->flush_wq, &flush->work);
+		return NVDIMM_FLUSH_ASYNC;
 	}
-	if (virtio_pmem_flush(nd_region))
+
+	err = virtio_pmem_flush(nd_region);
+	if (err > 0)
 		return -EIO;
 
-	return 0;
+	return err;
 };
 EXPORT_SYMBOL_GPL(async_pmem_flush);
 MODULE_DESCRIPTION("Virtio Persistent Memory Driver");
drivers/nvdimm/pmem.c +4 -1
@@ -235,8 +235,11 @@ static void pmem_submit_bio(struct bio *
 	if (do_acct)
 		bio_end_io_acct(bio, start);
 
-	if ((bio->bi_opf & REQ_FUA) && !bio->bi_status)
+	if ((bio->bi_opf & REQ_FUA) && !bio->bi_status) {
 		ret = nvdimm_flush(nd_region, bio);
+		if (ret == NVDIMM_FLUSH_ASYNC)
+			return;
+	}
 
 	if (ret)
 		bio->bi_status = errno_to_blk_status(ret);
drivers/nvdimm/region_devs.c +2 -0
@@ -1094,6 +1094,8 @@ int nvdimm_flush(struct nd_region *nd_re
 		rc = generic_nvdimm_flush(nd_region);
 	else {
 		rc = nd_region->flush(nd_region, bio);
+		if (rc > 0)
+			return rc;
 		if (rc && rc != -ENOMEM)
 			rc = -EIO;
 	}
drivers/nvdimm/virtio_pmem.c +16 -1
@@ -67,10 +67,17 @@ static int virtio_pmem_probe(struct virt
 	mutex_init(&vpmem->flush_lock);
 	vpmem->vdev = vdev;
 	vdev->priv = vpmem;
+	vpmem->flush_wq = alloc_ordered_workqueue("virtio-pmem-flush",
+						  WQ_MEM_RECLAIM);
+	if (!vpmem->flush_wq) {
+		err = -ENOMEM;
+		goto out_err;
+	}
+
 	err = init_vq(vpmem);
 	if (err) {
 		dev_err(&vdev->dev, "failed to initialize virtio pmem vq's\n");
-		goto out_err;
+		goto out_wq;
 	}
 
 	if (virtio_has_feature(vdev, VIRTIO_PMEM_F_SHMEM_REGION)) {
@@ -131,6 +138,8 @@ out_nd:
 	nvdimm_bus_unregister(vpmem->nvdimm_bus);
 out_vq:
 	vdev->config->del_vqs(vdev);
+out_wq:
+	destroy_workqueue(vpmem->flush_wq);
 out_err:
 	return err;
 }
@@ -138,14 +147,20 @@ out_err:
 static void virtio_pmem_remove(struct virtio_device *vdev)
 {
 	struct nvdimm_bus *nvdimm_bus = dev_get_drvdata(&vdev->dev);
+	struct virtio_pmem *vpmem = vdev->priv;
 
 	nvdimm_bus_unregister(nvdimm_bus);
+	drain_workqueue(vpmem->flush_wq);
 	vdev->config->del_vqs(vdev);
 	virtio_reset_device(vdev);
+	destroy_workqueue(vpmem->flush_wq);
 }
 
 static int virtio_pmem_freeze(struct virtio_device *vdev)
 {
+	struct virtio_pmem *vpmem = vdev->priv;
+
+	drain_workqueue(vpmem->flush_wq);
 	vdev->config->del_vqs(vdev);
 	virtio_reset_device(vdev);
 
drivers/nvdimm/virtio_pmem.h +4 -0
@@ -15,6 +15,7 @@
 #include <linux/libnvdimm.h>
 #include <linux/mutex.h>
 #include <linux/spinlock.h>
+#include <linux/workqueue.h>
 
 struct virtio_pmem_request {
 	struct virtio_pmem_req req;
@@ -39,6 +40,9 @@ struct virtio_pmem {
 	/* Serialize flush requests to the device. */
 	struct mutex flush_lock;
 
+	/* Complete asynchronous FUA flushes outside the submit path. */
+	struct workqueue_struct *flush_wq;
+
 	/* nvdimm bus registers virtio pmem device */
 	struct nvdimm_bus *nvdimm_bus;
 	struct nvdimm_bus_descriptor nd_desc;
include/linux/libnvdimm.h +9 -0
@@ -126,6 +126,15 @@ struct nd_mapping_desc {
 struct bio;
 struct resource;
 struct nd_region;
+
+/*
+ * Provider flush callback return values:
+ *   0: flush completed synchronously
+ *  <0: flush failed
+ *  >0: flush completion was queued and @bio will be completed later
+ */
+#define NVDIMM_FLUSH_ASYNC 1
+
 struct nd_region_desc {
 	struct resource *res;
 	struct nd_mapping_desc *mapping;
author maintainer
#24 lore raw

PATCH 24/1815 nvdimm: virtio_pmem: always wake -ENOSPC waiters

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit 811808761e19fdea1c25b7c76734b8945f758f27 ]

virtio_pmem_host_ack() reclaims virtqueue descriptors with virtqueue_get_buf(). The -ENOSPC waiter wakeup is tied to completing the returned token. If token completion is skipped for any reason, reclaimed descriptors may not wake a waiter and the submitter may sleep forever waiting for a free slot. Always wake one -ENOSPC waiter for each virtqueue completion before touching the returned token.

Message-ID: <[email protected]>
Stable-dep-of: e57140944b5a ("nvdimm: virtio_pmem: refcount requests for token lifetime")

---
 drivers/nvdimm/nd_virtio.c |   25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)
drivers/nvdimm/nd_virtio.c +16 -9
@@ -15,26 +15,33 @@ struct virtio_pmem_flush_work {
 	struct bio *bio;
 };
 
+static void virtio_pmem_wake_one_waiter(struct virtio_pmem *vpmem)
+{
+	struct virtio_pmem_request *req_buf;
+
+	if (list_empty(&vpmem->req_list))
+		return;
+
+	req_buf = list_first_entry(&vpmem->req_list,
+				   struct virtio_pmem_request, list);
+	req_buf->wq_buf_avail = true;
+	wake_up(&req_buf->wq_buf);
+	list_del(&req_buf->list);
+}
+
  /* The interrupt handler */
 void virtio_pmem_host_ack(struct virtqueue *vq)
 {
 	struct virtio_pmem *vpmem = vq->vdev->priv;
-	struct virtio_pmem_request *req_data, *req_buf;
+	struct virtio_pmem_request *req_data;
 	unsigned long flags;
 	unsigned int len;
 
 	spin_lock_irqsave(&vpmem->pmem_lock, flags);
 	while ((req_data = virtqueue_get_buf(vq, &len)) != NULL) {
+		virtio_pmem_wake_one_waiter(vpmem);
 		req_data->done = true;
 		wake_up(&req_data->host_acked);
-
-		if (!list_empty(&vpmem->req_list)) {
-			req_buf = list_first_entry(&vpmem->req_list,
-					struct virtio_pmem_request, list);
-			req_buf->wq_buf_avail = true;
-			wake_up(&req_buf->wq_buf);
-			list_del(&req_buf->list);
-		}
 	}
 	spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
 }
author maintainer
#25 lore raw

PATCH 25/1815 nvdimm: virtio_pmem: use READ_ONCE()/WRITE_ONCE() for wait flags

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit 08e72a5ba1ab9dc0adf993ff0f4d606a1e3445a8 ]

Use READ_ONCE()/WRITE_ONCE() for the wait_event() flags (done and wq_buf_avail). They are observed by waiters without pmem_lock, so make the accesses explicit single loads/stores and avoid compiler reordering/caching across the wait/wake paths.

Message-ID: <[email protected]>
Stable-dep-of: e57140944b5a ("nvdimm: virtio_pmem: refcount requests for token lifetime")

---
 drivers/nvdimm/nd_virtio.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/nvdimm/nd_virtio.c +7 -7
@@ -24,9 +24,9 @@ static void virtio_pmem_wake_one_waiter(
 
 	req_buf = list_first_entry(&vpmem->req_list,
 				   struct virtio_pmem_request, list);
-	req_buf->wq_buf_avail = true;
+	list_del_init(&req_buf->list);
+	WRITE_ONCE(req_buf->wq_buf_avail, true);
 	wake_up(&req_buf->wq_buf);
-	list_del(&req_buf->list);
 }
 
  /* The interrupt handler */
@@ -40,7 +40,7 @@ void virtio_pmem_host_ack(struct virtque
 	spin_lock_irqsave(&vpmem->pmem_lock, flags);
 	while ((req_data = virtqueue_get_buf(vq, &len)) != NULL) {
 		virtio_pmem_wake_one_waiter(vpmem);
-		req_data->done = true;
+		WRITE_ONCE(req_data->done, true);
 		wake_up(&req_data->host_acked);
 	}
 	spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
@@ -72,7 +72,7 @@ static int virtio_pmem_flush(struct nd_r
 	if (!req_data)
 		return -ENOMEM;
 
-	req_data->done = false;
+	WRITE_ONCE(req_data->done, false);
 	init_waitqueue_head(&req_data->host_acked);
 	init_waitqueue_head(&req_data->wq_buf);
 	INIT_LIST_HEAD(&req_data->list);
@@ -93,12 +93,12 @@ static int virtio_pmem_flush(struct nd_r
 					GFP_ATOMIC)) == -ENOSPC) {
 
 		dev_info(&vdev->dev, "failed to send command to virtio pmem device, no free slots in the virtqueue\n");
-		req_data->wq_buf_avail = false;
+		WRITE_ONCE(req_data->wq_buf_avail, false);
 		list_add_tail(&req_data->list, &vpmem->req_list);
 		spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
 
 		/* A host response results in "host_ack" getting called */
-		wait_event(req_data->wq_buf, req_data->wq_buf_avail);
+		wait_event(req_data->wq_buf, READ_ONCE(req_data->wq_buf_avail));
 		spin_lock_irqsave(&vpmem->pmem_lock, flags);
 	}
 	err1 = virtqueue_kick(vpmem->req_vq);
@@ -112,7 +112,7 @@ static int virtio_pmem_flush(struct nd_r
 		err = -EIO;
 	} else {
 		/* A host response results in "host_ack" getting called */
-		wait_event(req_data->host_acked, req_data->done);
+		wait_event(req_data->host_acked, READ_ONCE(req_data->done));
 		err = le32_to_cpu(req_data->resp.ret);
 	}
 
author maintainer
#26 lore raw

PATCH 26/1815 nvdimm: virtio_pmem: refcount requests for token lifetime

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Chen <[email protected]>

[ Upstream commit e57140944b5a47a7fd5a142faab29a02af040bc8 ]

KASAN reports slab-use-after-free in __wake_up_common():

BUG: KASAN: slab-use-after-free in __wake_up_common+0x114/0x160
Read of size 8 at addr ffff88810fdcb710 by task swapper/0/0

CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted
6.19.0-next-20260220-00006-g1eae5f204ec3 #4 PREEMPT(full)
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux
1.17.0-2-2 04/01/2014
Call Trace:
 <IRQ>
 dump_stack_lvl+0x6d/0xb0
 print_report+0x170/0x4e2
 ? __pfx__raw_spin_lock_irqsave+0x10/0x10
 ? __virt_addr_valid+0x1dc/0x380
 kasan_report+0xbc/0xf0
 ? __wake_up_common+0x114/0x160
 ? __wake_up_common+0x114/0x160
 __wake_up_common+0x114/0x160
 ? __pfx__raw_spin_lock_irqsave+0x10/0x10
 __wake_up+0x36/0x60
 virtio_pmem_host_ack+0x11d/0x3b0
 ? sched_balance_domains+0x29f/0xb00
 ? __pfx_virtio_pmem_host_ack+0x10/0x10
 ? _raw_spin_lock_irqsave+0x98/0x100
 ? __pfx__raw_spin_lock_irqsave+0x10/0x10
 vring_interrupt+0x1c9/0x5e0
 ? __pfx_vp_interrupt+0x10/0x10
 vp_vring_interrupt+0x87/0x100
 ? __pfx_vp_interrupt+0x10/0x10
 __handle_irq_event_percpu+0x17f/0x550
 ? __pfx__raw_spin_lock+0x10/0x10
 handle_irq_event+0xab/0x1c0
 handle_fasteoi_irq+0x276/0xae0
 __common_interrupt+0x65/0x130
 common_interrupt+0x78/0xa0
 </IRQ>

virtio_pmem_host_ack() wakes a request that has already been freed by the submitter.

This happens when the request token is still reachable via the virtqueue, but virtio_pmem_flush() returns and frees it.

Fix the token lifetime by refcounting struct virtio_pmem_request. virtio_pmem_flush() holds a submitter reference, and the virtqueue holds an extra reference once the request is queued. The completion path drops the virtqueue reference, and the submitter drops its reference before returning.

Fixes 6e84200c0a29 ("virtio-pmem: Add virtio pmem driver")

Message-ID: <[email protected]>

---
 drivers/nvdimm/nd_virtio.c   |   32 ++++++++++++++++++++++++++++----
 drivers/nvdimm/virtio_pmem.h |    2 ++
 2 files changed, 30 insertions(+), 4 deletions(-)
drivers/nvdimm/nd_virtio.c +28 -4
@@ -15,6 +15,14 @@ struct virtio_pmem_flush_work {
 	struct bio *bio;
 };
 
+static void virtio_pmem_req_release(struct kref *kref)
+{
+	struct virtio_pmem_request *req;
+
+	req = container_of(kref, struct virtio_pmem_request, kref);
+	kfree(req);
+}
+
 static void virtio_pmem_wake_one_waiter(struct virtio_pmem *vpmem)
 {
 	struct virtio_pmem_request *req_buf;
@@ -42,6 +50,7 @@ void virtio_pmem_host_ack(struct virtque
 		virtio_pmem_wake_one_waiter(vpmem);
 		WRITE_ONCE(req_data->done, true);
 		wake_up(&req_data->host_acked);
+		kref_put(&req_data->kref, virtio_pmem_req_release);
 	}
 	spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
 }
@@ -72,6 +81,7 @@ static int virtio_pmem_flush(struct nd_r
 	if (!req_data)
 		return -ENOMEM;
 
+	kref_init(&req_data->kref);
 	WRITE_ONCE(req_data->done, false);
 	init_waitqueue_head(&req_data->host_acked);
 	init_waitqueue_head(&req_data->wq_buf);
@@ -89,10 +99,23 @@ static int virtio_pmem_flush(struct nd_r
 	  * to req_list and wait for host_ack to wake us up when free
 	  * slots are available.
 	  */
-	while ((err = virtqueue_add_sgs(vpmem->req_vq, sgs, 1, 1, req_data,
-					GFP_ATOMIC)) == -ENOSPC) {
+	for (;;) {
+		err = virtqueue_add_sgs(vpmem->req_vq, sgs, 1, 1, req_data,
+					GFP_ATOMIC);
+		if (!err) {
+			/*
+			 * Take the virtqueue reference while @pmem_lock is
+			 * held so completion cannot run concurrently.
+			 */
+			kref_get(&req_data->kref);
+			break;
+		}
+
+		if (err != -ENOSPC)
+			break;
 
-		dev_info(&vdev->dev, "failed to send command to virtio pmem device, no free slots in the virtqueue\n");
+		dev_info_ratelimited(&vdev->dev,
+				     "failed to send command to virtio pmem device, no free slots in the virtqueue\n");
 		WRITE_ONCE(req_data->wq_buf_avail, false);
 		list_add_tail(&req_data->list, &vpmem->req_list);
 		spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
@@ -101,6 +124,7 @@ static int virtio_pmem_flush(struct nd_r
 		wait_event(req_data->wq_buf, READ_ONCE(req_data->wq_buf_avail));
 		spin_lock_irqsave(&vpmem->pmem_lock, flags);
 	}
+
 	err1 = virtqueue_kick(vpmem->req_vq);
 	spin_unlock_irqrestore(&vpmem->pmem_lock, flags);
 	/*
@@ -116,7 +140,7 @@ static int virtio_pmem_flush(struct nd_r
 		err = le32_to_cpu(req_data->resp.ret);
 	}
 
-	kfree(req_data);
+	kref_put(&req_data->kref, virtio_pmem_req_release);
 	return err;
 };
 
drivers/nvdimm/virtio_pmem.h +2 -0
@@ -12,12 +12,14 @@
 
 #include <linux/module.h>
 #include <uapi/linux/virtio_pmem.h>
+#include <linux/kref.h>
 #include <linux/libnvdimm.h>
 #include <linux/mutex.h>
 #include <linux/spinlock.h>
 #include <linux/workqueue.h>
 
 struct virtio_pmem_request {
+	struct kref kref;
 	struct virtio_pmem_req req;
 	struct virtio_pmem_resp resp;
 
author maintainer
#27 lore raw

PATCH 27/1815 mm/mremap: reset unfaulted VMA page offset for MREMAP_DONTUNMAP

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: "Lorenzo Stoakes (ARM)" <[email protected]>

[ Upstream commit 35b0fb391b0df57383bc15985bb769f4555c97ba ]

Uniquely an mremap() invocation using the MREMAP_DONTUNMAP flag can reset a faulted VMA into an unfaulted one.

It does so after the page tables have been moved to the copied VMA with MREMAP_DONTUNMAP leaving the old VMA in place which is naturally unfaulted as the page tables it had are no longer present.

However, in doing so, it violates the invariant that the anonymous page offset of an unfaulted VMA is vma->vm_start >> PAGE_SHIFT.

This is because a VMA may have been faulted in, mremap()'d (causing a delta between its page offset and vma->vm_start >> PAGE_SHIFT), and then mremap()'d again with MREMAP_DONTUNMAP resulting in the unfaulting.

This condition is a violation of a fundamental assumption in mm, but now also triggers an assert in assert_sane_pgoff() which explicitly checks for this condition.

Correct it by resetting the VMA's page offset at the point of completing the MREMAP_DONTUNMAP operation.

Fixes 1583aa278f5f ("mm: mremap: unlink anon_vmas when mremap with MREMAP_DONTUNMAP success")
Reported-by [email protected]
Cc Jann Horn <[email protected]>
Cc Liam R. Howlett <[email protected]>
Cc Li Xinhai <[email protected]>
[ adapted VMA page-offset helpers to use the branch’s single vm_pgoff field. ]
---
 mm/mremap.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
mm/mremap.c +16 -5
@@ -1321,18 +1321,29 @@ static void dontunmap_complete(struct vm
 {
 	unsigned long start = vrm->addr;
 	unsigned long end = vrm->addr + vrm->old_len;
-	unsigned long old_start = vrm->vma->vm_start;
-	unsigned long old_end = vrm->vma->vm_end;
+	struct vm_area_struct *vma = vrm->vma;
+	unsigned long old_start = vma->vm_start;
+	unsigned long old_end = vma->vm_end;
 
 	/* We always clear VM_LOCKED[ONFAULT] on the old VMA. */
-	vm_flags_clear(vrm->vma, VM_LOCKED_MASK);
+	vm_flags_clear(vma, VM_LOCKED_MASK);
 
 	/*
 	 * anon_vma links of the old vma is no longer needed after its page
 	 * table has been moved.
 	 */
-	if (new_vma != vrm->vma && start == old_start && end == old_end)
-		unlink_anon_vmas(vrm->vma);
+	if (new_vma != vma && start == old_start && end == old_end) {
+		const pgoff_t pgoff_unfaulted = vma->vm_start >> PAGE_SHIFT;
+
+		unlink_anon_vmas(vma);
+		/*
+		 * The VMA is now unfaulted and it is an invariant that
+		 * unfaulted anonymous VMAs have page offset equal to
+		 * vma->vm_start >> PAGE_SHIFT.
+		 */
+		if (vma_is_anonymous(vma) && !vma->vm_file)
+			vma->vm_pgoff = pgoff_unfaulted;
+	}
 
 	/* Because we won't unmap we don't need to touch locked_vm. */
 }
author maintainer
#28 lore raw

PATCH 28/1815 clk: qcom: Fix test_ctl_hi field for DEFAULT_EVO PLLs

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Imran Shaik <[email protected]>

[ Upstream commit 830ead322c39c99bf972425b3c35323ec56c29de ]

CLK_ALPHA_PLL_TYPE_DEFAULT_EVO type PLLs do not have the PLL_TEST_CTL_U1 register, so clk_alpha_pll_configure() does not program test_ctl_hi1_val for this PLL type.

The GCC PLL configurations for QCM2290, Shikra and SM6115 wrongly use test_ctl_hi1_val instead of test_ctl_hi_val, deviating from the hardware recommended settings. Fix them to use test_ctl_hi_val.

Fixes 496d1a13d405 ("clk: qcom: Add Global Clock Controller driver for QCM2290")
Fixes 01cf3e27824d ("clk: qcom: Add Global clock controller support on Qualcomm Shikra SoC")
Fixes e88c533d8a2a ("clk: qcom: gcc-sm6115: Add missing PLL config properties")
[ Omitted gcc-shikra.c changes because the driver is absent from the target branch. ]
---
 drivers/clk/qcom/gcc-qcm2290.c |    6 +++---
 drivers/clk/qcom/gcc-sm6115.c  |    6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)
drivers/clk/qcom/gcc-qcm2290.c +3 -3
@@ -116,7 +116,7 @@ static const struct alpha_pll_config gpl
 	.vco_mask = GENMASK(21, 20),
 	.main_output_mask = BIT(0),
 	.config_ctl_val = 0x4001055B,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 };
 
 static struct clk_alpha_pll gpll10 = {
@@ -148,7 +148,7 @@ static const struct alpha_pll_config gpl
 	.vco_mask = GENMASK(21, 20),
 	.main_output_mask = BIT(0),
 	.config_ctl_val = 0x4001055B,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 };
 
 static struct clk_alpha_pll gpll11 = {
@@ -309,7 +309,7 @@ static const struct alpha_pll_config gpl
 	.post_div_val = 0x1 << 8,
 	.post_div_mask = GENMASK(11, 8),
 	.config_ctl_val = 0x4001055B,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 };
 
 static struct clk_alpha_pll gpll8 = {
drivers/clk/qcom/gcc-sm6115.c +3 -3
@@ -120,7 +120,7 @@ static const struct alpha_pll_config gpl
 	.vco_mask = GENMASK(21, 20),
 	.main_output_mask = BIT(0),
 	.config_ctl_val = 0x4001055b,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 	.test_ctl_hi_mask = 0x1,
 };
 
@@ -173,7 +173,7 @@ static const struct alpha_pll_config gpl
 	.vco_val = 0x2 << 20,
 	.vco_mask = GENMASK(21, 20),
 	.config_ctl_val = 0x4001055b,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 	.test_ctl_hi_mask = 0x1,
 };
 
@@ -367,7 +367,7 @@ static const struct alpha_pll_config gpl
 	.post_div_val = 0x1 << 8,
 	.post_div_mask = GENMASK(11, 8),
 	.config_ctl_val = 0x4001055b,
-	.test_ctl_hi1_val = 0x1,
+	.test_ctl_hi_val = 0x1,
 	.test_ctl_hi_mask = 0x1,
 };
 
author maintainer
#29 lore raw

PATCH 29/1815 KVM: x86: Extract REGS and SREGS runtime sync code to helpers

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sean Christopherson <[email protected]>

[ Upstream commit 6a8a98aa9c147eb63f5a360f157f207bf46c05ee ]

Extract the REGS and SREGS portions of {store,sync}_regs() into separate helpers in anticipation of moving the register specific code out of x86.c and into regs.c.

No functional change intended.

Message-ID: <[email protected]>

Stable-dep-of: 184bd464bdb6 ("KVM: x86: Check EFER validity on KVM_SET_SREGS*")

---
 arch/x86/kvm/x86.c |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
arch/x86/kvm/x86.c +15 -2
@@ -12696,7 +12696,7 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct k
 	return 0;
 }
 
-static void store_regs(struct kvm_vcpu *vcpu)
+static void kvm_run_sync_regs_to_user(struct kvm_vcpu *vcpu)
 {
 	BUILD_BUG_ON(sizeof(struct kvm_sync_regs) > SYNC_REGS_SIZE_BYTES);
 
@@ -12705,13 +12705,18 @@ static void store_regs(struct kvm_vcpu *
 
 	if (vcpu->run->kvm_valid_regs & KVM_SYNC_X86_SREGS)
 		__get_sregs(vcpu, &vcpu->run->s.regs.sregs);
+}
+
+static void store_regs(struct kvm_vcpu *vcpu)
+{
+	kvm_run_sync_regs_to_user(vcpu);
 
 	if (vcpu->run->kvm_valid_regs & KVM_SYNC_X86_EVENTS)
 		kvm_vcpu_ioctl_x86_get_vcpu_events(
 				vcpu, &vcpu->run->s.regs.events);
 }
 
-static int sync_regs(struct kvm_vcpu *vcpu)
+static int kvm_run_sync_regs_from_user(struct kvm_vcpu *vcpu)
 {
 	if (vcpu->run->kvm_dirty_regs & KVM_SYNC_X86_REGS) {
 		__set_regs(vcpu, &vcpu->run->s.regs.regs);
@@ -12727,6 +12732,14 @@ static int sync_regs(struct kvm_vcpu *vc
 		vcpu->run->kvm_dirty_regs &= ~KVM_SYNC_X86_SREGS;
 	}
 
+	return 0;
+}
+
+static int sync_regs(struct kvm_vcpu *vcpu)
+{
+	if (kvm_run_sync_regs_from_user(vcpu))
+		return -EINVAL;
+
 	if (vcpu->run->kvm_dirty_regs & KVM_SYNC_X86_EVENTS) {
 		struct kvm_vcpu_events events = vcpu->run->s.regs.events;
 
author maintainer
#30 lore raw

PATCH 30/1815 KVM: x86: Move get_segment_base() to regs.h, as kvm_get_segment_base()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sean Christopherson <[email protected]>

[ Upstream commit 0217de73439caf56db74da95b3bbad8c1cb066c4 ]

Move get_segment_base() to regs.h, as kvm_get_segment_base(), so that the bulk of the register code can be moved from x86.c to a new regs.c, without simultaneously needing to rename "public" helpers to explicitly scope them to KVM.

No functional change intended.

Message-ID: <[email protected]>

Stable-dep-of: 184bd464bdb6 ("KVM: x86: Check EFER validity on KVM_SET_SREGS*")

---
 arch/x86/kvm/regs.h |    5 +++++
 arch/x86/kvm/x86.c  |    9 ++-------
 2 files changed, 7 insertions(+), 7 deletions(-)
arch/x86/kvm/regs.h +5 -0
@@ -420,4 +420,9 @@ static inline bool is_guest_mode(struct
 	return vcpu->arch.hflags & HF_GUEST_MASK;
 }
 
+static inline unsigned long kvm_get_segment_base(struct kvm_vcpu *vcpu, int seg)
+{
+	return kvm_x86_call(get_segment_base)(vcpu, seg);
+}
+
 #endif
arch/x86/kvm/x86.c +2 -7
@@ -8495,11 +8495,6 @@ static int emulator_pio_out_emulated(str
 	return emulator_pio_out(emul_to_vcpu(ctxt), size, port, val, count);
 }
 
-static unsigned long get_segment_base(struct kvm_vcpu *vcpu, int seg)
-{
-	return kvm_x86_call(get_segment_base)(vcpu, seg);
-}
-
 static void emulator_invlpg(struct x86_emulate_ctxt *ctxt, ulong address)
 {
 	kvm_mmu_invlpg(emul_to_vcpu(ctxt), address);
@@ -8644,7 +8639,7 @@ static void emulator_set_idt(struct x86_
 static unsigned long emulator_get_cached_segment_base(
 	struct x86_emulate_ctxt *ctxt, int seg)
 {
-	return get_segment_base(emul_to_vcpu(ctxt), seg);
+	return kvm_get_segment_base(emul_to_vcpu(ctxt), seg);
 }
 
 static bool emulator_get_segment(struct x86_emulate_ctxt *ctxt, u16 *selector,
@@ -13854,7 +13849,7 @@ unsigned long kvm_get_linear_rip(struct
 
 	if (is_64_bit_mode(vcpu))
 		return kvm_rip_read(vcpu);
-	return (u32)(get_segment_base(vcpu, VCPU_SREG_CS) +
+	return (u32)(kvm_get_segment_base(vcpu, VCPU_SREG_CS) +
 		     kvm_rip_read(vcpu));
 }
 EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_get_linear_rip);
author maintainer
#31 lore raw

PATCH 31/1815 KVM: x86: Rename __{g,s}et_sregs2() => kvm_vcpu_ioctl_x86_{g,s}et_sregs2()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sean Christopherson <[email protected]>

[ Upstream commit bd130c8d72a1c7dde5523b3f3fae9867eafaa1dc ]

Rename the KVM_{G,S}ET_SREGS2 helpers in anticipation of moving them out of x86.c (while leaving the ioctl dispatch behind). Having globally visible APIs named __{g,s}et_sregs2() would be "fine", but ugly, given that __{g,s}et_sregs() will NOT be globally visible. As a bonus, this makes it a bit more obvious that the helpers implement newer versions of kvm_arch_vcpu_ioctl_set_sregs().

No functional change intended.

Message-ID: <[email protected]>

Stable-dep-of: 184bd464bdb6 ("KVM: x86: Check EFER validity on KVM_SET_SREGS*")

---
 arch/x86/kvm/x86.c |   16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
arch/x86/kvm/x86.c +10 -6
@@ -133,8 +133,10 @@ static void __kvm_set_rflags(struct kvm_
 static void store_regs(struct kvm_vcpu *vcpu);
 static int sync_regs(struct kvm_vcpu *vcpu);
 
-static int __set_sregs2(struct kvm_vcpu *vcpu, struct kvm_sregs2 *sregs2);
-static void __get_sregs2(struct kvm_vcpu *vcpu, struct kvm_sregs2 *sregs2);
+static int kvm_vcpu_ioctl_x86_set_sregs2(struct kvm_vcpu *vcpu,
+					 struct kvm_sregs2 *sregs2);
+static void kvm_vcpu_ioctl_x86_get_sregs2(struct kvm_vcpu *vcpu,
+					  struct kvm_sregs2 *sregs2);
 
 static DEFINE_MUTEX(vendor_module_lock);
 static void kvm_load_guest_fpu(struct kvm_vcpu *vcpu);
@@ -6623,7 +6625,7 @@ long kvm_arch_vcpu_ioctl(struct file *fi
 		r = -ENOMEM;
 		if (!u.sregs2)
 			goto out;
-		__get_sregs2(vcpu, u.sregs2);
+		kvm_vcpu_ioctl_x86_get_sregs2(vcpu, u.sregs2);
 		r = -EFAULT;
 		if (copy_to_user(argp, u.sregs2, sizeof(struct kvm_sregs2)))
 			goto out;
@@ -6642,7 +6644,7 @@ long kvm_arch_vcpu_ioctl(struct file *fi
 			u.sregs2 = NULL;
 			goto out;
 		}
-		r = __set_sregs2(vcpu, u.sregs2);
+		r = kvm_vcpu_ioctl_x86_set_sregs2(vcpu, u.sregs2);
 		break;
 	}
 	case KVM_HAS_DEVICE_ATTR:
@@ -12221,7 +12223,8 @@ static void __get_sregs(struct kvm_vcpu
 			(unsigned long *)sregs->interrupt_bitmap);
 }
 
-static void __get_sregs2(struct kvm_vcpu *vcpu, struct kvm_sregs2 *sregs2)
+static void kvm_vcpu_ioctl_x86_get_sregs2(struct kvm_vcpu *vcpu,
+					  struct kvm_sregs2 *sregs2)
 {
 	int i;
 
@@ -12489,7 +12492,8 @@ static int __set_sregs(struct kvm_vcpu *
 	return 0;
 }
 
-static int __set_sregs2(struct kvm_vcpu *vcpu, struct kvm_sregs2 *sregs2)
+static int kvm_vcpu_ioctl_x86_set_sregs2(struct kvm_vcpu *vcpu,
+					 struct kvm_sregs2 *sregs2)
 {
 	int mmu_reset_needed = 0;
 	bool valid_pdptrs = sregs2->flags & KVM_SREGS2_FLAGS_PDPTRS_VALID;
author maintainer
#32 lore raw

PATCH 32/1815 KVM: x86: Move the bulk of register specific code from x86.c to regs.c

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Sean Christopherson <[email protected]>

[ Upstream commit 2f5bb3fe583510cf20f9d64aa73089577be3dc36 ]

Introduce regs.c, and move the vast majority of register specific code out of x86.c and into regs.c. Deliberately leave behind MSR code, as KVM's MSR support is complex enough to warrant its own compilation unit, and doesn't have much in common with the other register code.

Note, "struct kvm_sregs" has fields for EFER and MSR_IA32_APICBASE, and so the {G,S}ET_REGS flows technically contain a tiny amount of MSR code. MSR_IA32_APICBASE is already managed by lapic.c, and so doesn't require a "placement decision". As for EFER, leave all other EFER handling in x86.c (later to be moved to msrs.c). The primary interface to EFER, set_efer(), is very much MSR specific, even though EFER is arguably more of a Control Register than an MSR.

No functional change intended.

Message-ID: <[email protected]>

Stable-dep-of: 184bd464bdb6 ("KVM: x86: Check EFER validity on KVM_SET_SREGS*")

---
 arch/x86/kvm/Makefile |    4 
 arch/x86/kvm/regs.c   |  873 +++++++++++++++++++++++++++++++++++++++++++++++++
 arch/x86/kvm/regs.h   |   25 +
 arch/x86/kvm/x86.c    |  885 --------------------------------------------------
 arch/x86/kvm/x86.h    |    2 
 5 files changed, 904 insertions(+), 885 deletions(-)
 create mode 100644 arch/x86/kvm/regs.c
arch/x86/kvm/Makefile +2 -2
@@ -5,8 +5,8 @@ ccflags-$(CONFIG_KVM_WERROR) += -Werror
 
 include $(srctree)/virt/kvm/Makefile.kvm
 
-kvm-y			+= x86.o emulate.o irq.o lapic.o cpuid.o pmu.o mtrr.o \
-			   debugfs.o mmu/mmu.o mmu/page_track.o mmu/spte.o
+kvm-y			+= x86.o emulate.o irq.o lapic.o cpuid.o pmu.o regs.o \
+			   mtrr.o debugfs.o mmu/mmu.o mmu/page_track.o mmu/spte.o
 
 kvm-$(CONFIG_X86_64) += mmu/tdp_iter.o mmu/tdp_mmu.o
 kvm-$(CONFIG_KVM_IOAPIC) += i8259.o i8254.o ioapic.o
arch/x86/kvm/regs.c new file +873 -0

873 lines not on this page · raw message

arch/x86/kvm/regs.h +25 -0
@@ -397,6 +397,14 @@ static inline bool kvm_dr6_valid(u64 dat
 	return !(data >> 32);
 }
 
+static inline unsigned long kvm_get_effective_dr7(struct kvm_vcpu *vcpu)
+{
+	if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP)
+		return vcpu->arch.guest_debug_dr7;
+
+	return vcpu->arch.dr7;
+}
+
 static inline void enter_guest_mode(struct kvm_vcpu *vcpu)
 {
 	vcpu->arch.hflags |= HF_GUEST_MASK;
@@ -425,4 +433,21 @@ static inline unsigned long kvm_get_segm
 	return kvm_x86_call(get_segment_base)(vcpu, seg);
 }
 
+void __kvm_set_rflags(struct kvm_vcpu *vcpu, unsigned long rflags);
+
+void kvm_vcpu_ioctl_x86_get_sregs2(struct kvm_vcpu *vcpu,
+				   struct kvm_sregs2 *sregs2);
+int kvm_vcpu_ioctl_x86_set_sregs2(struct kvm_vcpu *vcpu,
+				  struct kvm_sregs2 *sregs2);
+
+void kvm_run_sync_regs_to_user(struct kvm_vcpu *vcpu);
+int kvm_run_sync_regs_from_user(struct kvm_vcpu *vcpu);
+
+void kvm_update_dr0123(struct kvm_vcpu *vcpu);
+int kvm_vcpu_ioctl_x86_get_debugregs(struct kvm_vcpu *vcpu,
+				     struct kvm_debugregs *dbgregs);
+int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
+				     struct kvm_debugregs *dbgregs);
+
+
 #endif
arch/x86/kvm/x86.c +2 -883

954 lines not on this page · raw message

arch/x86/kvm/x86.h +2 -0
@@ -403,6 +403,7 @@ int handle_ud(struct kvm_vcpu *vcpu);
 
 void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu,
 				   struct kvm_queued_exception *ex);
+void kvm_handle_exception_payload_quirk(struct kvm_vcpu *vcpu);
 
 int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data);
 int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata);
@@ -597,6 +598,7 @@ static inline void kvm_machine_check(voi
 int kvm_spec_ctrl_test_value(u64 value);
 int kvm_handle_memory_failure(struct kvm_vcpu *vcpu, int r,
 			      struct x86_exception *e);
+void kvm_invalidate_pcid(struct kvm_vcpu *vcpu, unsigned long pcid);
 int kvm_handle_invpcid(struct kvm_vcpu *vcpu, unsigned long type, gva_t gva);
 bool kvm_msr_allowed(struct kvm_vcpu *vcpu, u32 index, u32 type);
 
author maintainer
#33 lore raw

PATCH 33/1815 KVM: x86: Check EFER validity on KVM_SET_SREGS*

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Yosry Ahmed <[email protected]>

[ Upstream commit 184bd464bdb66daa9173670904f24c29c7b7f7d4 ]

When handling userspace SREGS writes, check the validity of EFER (i.e. allowed bits) before writing the new value of EFER through the per-vendor set_efer callbacks. This prevents userspace from writing bogus values (e.g. EFER.SVME=1 with nested=0).

Note: on KVM_SET_MSRS, KVM only checks EFER validity in terms of KVM caps, not guest caps, so it is possible to set EFER bits that are supported by KVM but not by the guest CPUID. Potentially allowing userspace to set msrs before CPUID.

However, for KVM_SET_SREGS*, check the validity of the set bits against both KVM and guest caps. This is consistent with other validity checks (e.g. for CR4) that check validity against guest caps, which already imposes the need to set CPUID before SREGS.

---
 arch/x86/kvm/regs.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/kvm/regs.c +2 -1
@@ -563,7 +563,8 @@ static bool kvm_is_valid_sregs(struct kv
 	}
 
 	return kvm_is_valid_cr4(vcpu, sregs->cr4) &&
-	       kvm_is_valid_cr0(vcpu, sregs->cr0);
+	       kvm_is_valid_cr0(vcpu, sregs->cr0) &&
+	       kvm_valid_efer(vcpu, sregs->efer);
 }
 
 static int __set_sregs_common(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs,
author maintainer
#34 lore raw

PATCH 34/1815 Smack: Fix error in capability bypass

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Casey Schaufler <[email protected]>

[ Upstream commit b2faddc13112489f8f11eb40b9456db8c1b58362 ]

A bug in smack_inode_xattr_skipcap() was introduced in the inode capability handling. The strncmp guard at the top of the function is coded backwards, resulting in consistently incorrect results. Correct the check, and the code functions as it should. The error manifests as requiring CAP_SYS_ADMIN as well as CAP_MAC_ADMIN to change an inode's MAC attributes.

Fixes 61df7b828204 ("lsm: fixup the inode xattr capability handling")
---
 security/smack/smack_lsm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
security/smack/smack_lsm.c +1 -1
index bbe6cd6b03f75..374873f2f4d9b 100644
@@ -1312,7 +1312,7 @@ static int smack_inode_getattr(const struct path *path)
  */
 static int smack_inode_xattr_skipcap(const char *name)
 {
-	if (strncmp(name, XATTR_SMACK_SUFFIX, strlen(XATTR_SMACK_SUFFIX)))
+	if (strncmp(name, XATTR_SMACK_SUFFIX, strlen(XATTR_SMACK_SUFFIX)) == 0)
 		return 0;
 
 	if (strcmp(name, XATTR_NAME_SMACK) == 0 ||
Signature · 1 line
2.53.0
author maintainer
#35 lore raw

PATCH 35/1815 drm: Remove unused header in drm_dumb_buffers.c

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Yicong Hui <[email protected]>

[ Upstream commit 38b4ce17ef3421fb0e5e6dbdab1974282bde1165 ]

Remove the header #include "drm_internal.h" from drm_dumb_buffers.c, which is included but not used.

Header was introduced in commit 47f10854ca89 ("drm: Don't export the drm_gem_dumb_destroy() function") when moving functions, but was not removed in commit 96a7b60f6ddb ("drm: remove dumb_destroy callback") when the drm_gem_dumb_destroy function was removed.

Compiles successfully with DRM enabled, pass kunit tests and IGT-tests in a vng virtual machine.

---
 drivers/gpu/drm/drm_dumb_buffers.c | 1 -
 1 file changed, 1 deletion(-)
drivers/gpu/drm/drm_dumb_buffers.c +0 -1
index 2156dbe601c9c..8e9ff17538e73 100644
@@ -32,7 +32,6 @@
 #include <drm/drm_print.h>
 
 #include "drm_crtc_internal.h"
-#include "drm_internal.h"
 
 /**
  * DOC: overview
Signature · 1 line
2.53.0
author maintainer
#36 lore raw

PATCH 36/1815 drm/atomic: Drop drm_private_obj.state assignment from create_state

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Maxime Ripard <[email protected]>

[ Upstream commit dcf0292f4828341474428d016661b6c292d7211c ]

The initial intent of the atomic_create_state hook was to simply allocate a proper drm_private_state and return it, without any side effect.

However, __drm_atomic_helper_private_obj_create_state(), which most atomic_create_state implementations call, introduces a side effect by setting drm_private_obj.state to the newly allocated state.

This assignment defeats the purpose, but is also redundant since drm_atomic_private_obj_init(), the only call site for the atomic_create_state hook, will also set this pointer to the newly allocated state.

Drop the assignment in __drm_atomic_helper_private_obj_create_state().

Fixes e7be39ed1716 ("drm/atomic-helper: Add private_obj atomic_create_state helper")
---
 drivers/gpu/drm/drm_atomic_state_helper.c | 2 --
 1 file changed, 2 deletions(-)
drivers/gpu/drm/drm_atomic_state_helper.c +0 -2
index cc70508d4fdba..a82568d87e4f7 100644
@@ -731,8 +731,6 @@ void __drm_atomic_helper_private_obj_create_state(struct drm_private_obj *obj,
 {
 	if (state)
 		state->obj = obj;
-
-	obj->state = state;
 }
 EXPORT_SYMBOL(__drm_atomic_helper_private_obj_create_state);
 
Signature · 1 line
2.53.0
author maintainer
#37 lore raw

PATCH 37/1815 drm/tegra: dsi: Re-add clear enable register if DSI was powered by bootloader

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Svyatoslav Ryhel <[email protected]>

[ Upstream commit 27a58cc1a9c7bbe92a43fb5045bd17e148c8a022 ]

Original commit b22fd0b9639e ("drm/tegra: dsi: Clear enable register if powered by bootloader") was added to address the issue of DSI being in an unknown state after the bootloader, ensuring correct panel configuration. This worked fairly well under the assumption that the bootloader had set up DSI; however, in cases where it did not, the device would hang because a DSI read was called before the DSI hardware was ready.

Removing this workaround results in the issue described in the original
fix: the panel initialization sequence fails and the panel gets stuck in an undefined state. This is especially noticeable with command mode panels

In order to properly address this issue, the original workaround is restored and placed after the DSI hardware is prepared for R/W operations. This fixes behavior for both cases: where DSI is set by the bootloader and where DSI is untouched.

I have tested this change on Tegra20 (Motorola Atrix 4G), Tegra114 (NVIDIA Tegra Note 7 and ASUS Transformer Pad TF701T), and Tegra124 (Xiaomi Mi Pad) with U-Boot, using both bootloader-initialized DSI and untouched DSI.

Fixes b22fd0b9639e ("drm/tegra: dsi: Clear enable register if powered by bootloader")
Fixes 660b299bed2a ("Revert "drm/tegra: dsi: Clear enable register if powered by bootloader"")
---
 drivers/gpu/drm/tegra/dsi.c | 9 +++++++++
 1 file changed, 9 insertions(+)
drivers/gpu/drm/tegra/dsi.c +9 -0
index 7f25c50621c94..690e4488de3f6 100644
@@ -922,6 +922,15 @@ static void tegra_dsi_encoder_enable(struct drm_encoder *encoder)
 		return;
 	}
 
+	/* If the bootloader enabled DSI it needs to be disabled
+	 * in order for the panel initialization commands to be
+	 * properly sent.
+	 */
+	value = tegra_dsi_readl(dsi, DSI_POWER_CONTROL);
+
+	if (value & DSI_POWER_CONTROL_ENABLE)
+		tegra_dsi_disable(dsi);
+
 	state = tegra_dsi_get_state(dsi);
 
 	tegra_dsi_set_timeout(dsi, state->bclk, state->vrefresh);
Signature · 1 line
2.53.0
author maintainer
#38 lore raw

PATCH 38/1815 drm: lcdif: Wait for vblank before disabling DMA

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Paul Kocialkowski <[email protected]>

[ Upstream commit 351af554edd994898db12217c3be39979e168d35 ]

It is necessary to wait for the full frame to finish streaming through the DMA engine before we can safely disable it by removing the DISP_PARA_DISP_ON bit. Disabling it in-flight can leave the hardware confused and unable to resume streaming for the next frame.

This causes the FIFO underrun and empty status bits to be set and a single solid color to be shown on the display, coming from one of the pixels of the previous frame. The issue occurs sporadically when a new mode is set, which triggers the crtc disable and enable paths.

Setting the shadow load bit and waiting for it to be cleared by the DMA engine allows waiting for completion.

The NXP BSP driver addresses this issue with a hardcoded 25 ms sleep.

---
 drivers/gpu/drm/mxsfb/lcdif_kms.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
drivers/gpu/drm/mxsfb/lcdif_kms.c +12 -3
index ade76c3f4e4e9..68b1eb7a8ff13 100644
@@ -374,14 +374,23 @@ static void lcdif_disable_controller(struct lcdif_drm_private *lcdif)
 	int ret;
 
 	reg = readl(lcdif->base + LCDC_V8_CTRLDESCL0_5);
+	/* Disable the layer for DMA. */
 	reg &= ~CTRLDESCL0_5_EN;
+	/*
+	 * It is necessary to wait for the full frame to finish streaming
+	 * through the DMA engine before we can safely disable it by removing
+	 * the DISP_PARA_DISP_ON bit. Disabling it in-flight can leave the
+	 * hardware confused and unable to resume streaming for the next frame.
+	 */
+	reg |= CTRLDESCL0_5_SHADOW_LOAD_EN;
 	writel(reg, lcdif->base + LCDC_V8_CTRLDESCL0_5);
 
+	/* Wait for the frame to finish or timeout after 50 ms. */
 	ret = readl_poll_timeout(lcdif->base + LCDC_V8_CTRLDESCL0_5,
-				 reg, !(reg & CTRLDESCL0_5_EN),
-				 0, 36000);	/* Wait ~2 frame times max */
+				 reg, !(reg & CTRLDESCL0_5_SHADOW_LOAD_EN),
+				 200, 50000);
 	if (ret)
-		drm_err(lcdif->drm, "Failed to disable controller!\n");
+		drm_err(lcdif->drm, "Timed out waiting for final vblank!\n");
 
 	reg = readl(lcdif->base + LCDC_V8_DISP_PARA);
 	reg &= ~DISP_PARA_DISP_ON;
Signature · 1 line
2.53.0
author maintainer
#39 lore raw

PATCH 39/1815 drm/bridge: synopsys: dw-dp: Support unregistering the AUX channel

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Cristian Ciocaltea <[email protected]>

[ Upstream commit ed04e8e2307f35b3d8d49a554faf5e72d3d224e6 ]

The DisplayPort AUX channel gets initialized and registered during dw_dp_bind(), but it is never unregistered, which may lead to resource leaks and/or use-after-free.

Add the missing dw_dp_unbind() function to allow the users of the library to handle the required cleanup, i.e. unregister the AUX adapter.

Fixes 86eecc3a9c2e ("drm/bridge: synopsys: Add DW DPTX Controller support library")
---
 drivers/gpu/drm/bridge/synopsys/dw-dp.c | 6 ++++++
 include/drm/bridge/dw_dp.h              | 1 +
 2 files changed, 7 insertions(+)
drivers/gpu/drm/bridge/synopsys/dw-dp.c +6 -0
index 21541be094c47..36ee6e027af52 100644
@@ -2093,6 +2093,12 @@ struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder,
 }
 EXPORT_SYMBOL_GPL(dw_dp_bind);
 
+void dw_dp_unbind(struct dw_dp *dp)
+{
+	drm_dp_aux_unregister(&dp->aux);
+}
+EXPORT_SYMBOL_GPL(dw_dp_unbind);
+
 MODULE_AUTHOR("Andy Yan <[email protected]>");
 MODULE_DESCRIPTION("DW DP Core Library");
 MODULE_LICENSE("GPL");
include/drm/bridge/dw_dp.h +1 -0
index 25363541e69d5..22105c3e8e4d6 100644
@@ -24,4 +24,5 @@ struct dw_dp_plat_data {
 
 struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder,
 			 const struct dw_dp_plat_data *plat_data);
+void dw_dp_unbind(struct dw_dp *dp);
 #endif /* __DW_DP__ */
Signature · 1 line
2.53.0
author maintainer
#40 lore raw

PATCH 40/1815 drm/rockchip: dw_dp: Add missing newline in dev_err_probe() message

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Cristian Ciocaltea <[email protected]>

[ Upstream commit 0a01412178047bf3ff351c7e75d373e411072a87 ]

Add the missing trailing newline to dev_err_probe() call in dw_dp_rockchip_bind().

Fixes d68ba7bac955 ("drm/rockchip: Add RK3588 DPTX output support")
Fixes 26cb3e26efa7 ("drm/rockchip: dw_dp: Simplify error handling")
---
 drivers/gpu/drm/rockchip/dw_dp-rockchip.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/rockchip/dw_dp-rockchip.c +1 -1
index 32bc73a1d5e45..f137f699737cd 100644
@@ -109,7 +109,7 @@ static int dw_dp_rockchip_bind(struct device *dev, struct device *master, void *
 	connector = drm_bridge_connector_init(drm_dev, encoder);
 	if (IS_ERR(connector))
 		return dev_err_probe(dev, PTR_ERR(connector),
-				     "Failed to init bridge connector");
+				     "Failed to init bridge connector\n");
 
 	return 0;
 }
Signature · 1 line
2.53.0
author maintainer
#41 lore raw

PATCH 41/1815 drm/rockchip: dw_dp: Release core resources

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Cristian Ciocaltea <[email protected]>

[ Upstream commit cc6d7aca2f37a1525a94ef97eb3ce361732c876c ]

Core resources such as the DisplayPort AUX channel get initialized and registered during dw_dp_bind(), but are never unregistered, which may lead to memory leaks and/or use-after-free:

[  224.661371] BUG: KASAN: slab-use-after-free in device_is_dependent+0xe0/0x2b0
[  224.662015] Read of size 8 at addr ffff00011aee8550 by task modprobe/658
[  224.662612]
[  224.662752] CPU: 7 UID: 0 PID: 658 Comm: modprobe Not tainted 7.0.0-rc2-next-20260305 #14 PREEMPT
[  224.662759] Hardware name: Radxa ROCK 5B (DT)
[  224.662762] Call trace:
[  224.662764]  show_stack+0x20/0x38 (C)
[  224.662772]  dump_stack_lvl+0x6c/0x98
[  224.662777]  print_report+0x160/0x4b8
[  224.662783]  kasan_report+0xb4/0xe0
[  224.662790]  __asan_report_load8_noabort+0x20/0x30
[  224.662796]  device_is_dependent+0xe0/0x2b0
[  224.662802]  device_is_dependent+0x108/0x2b0
[  224.662808]  device_link_add+0x1f8/0x10b0
[  224.662813]  devm_of_phy_get_by_index+0x120/0x200
[  224.662819]  dw_dp_bind+0x34c/0xb10 [dw_dp]
[  224.662830]  dw_dp_rockchip_bind+0x194/0x250 [rockchipdrm]
[  224.662864]  component_bind_all+0x3a8/0x720
[  224.662869]  rockchip_drm_bind+0x120/0x390 [rockchipdrm]
[  224.662899]  try_to_bring_up_aggregate_device+0x76c/0x838
[  224.662904]  component_master_add_with_match+0x1f4/0x230
[  224.662909]  rockchip_drm_platform_probe+0x420/0x538 [rockchipdrm]
[  224.662939]  platform_probe+0xe8/0x168
[  224.662945]  really_probe+0x340/0x828
[  224.662950]  __driver_probe_device+0x2e0/0x350
[  224.662954]  driver_probe_device+0x80/0x140
[  224.662959]  __driver_attach+0x398/0x460
[  224.662964]  bus_for_each_dev+0xe0/0x198
[  224.662968]  driver_attach+0x50/0x68
[  224.662972]  bus_add_driver+0x2a0/0x4c0
[  224.662977]  driver_register+0x294/0x360
[  224.662982]  __platform_driver_register+0x7c/0x98
[  224.662987]  rockchip_drm_init+0xc4/0xff8 [rockchipdrm]

Since a previous commit exported dw_dp_unbind() function in DW DP core library to take care of the necessary cleanup, use this in the component's unbind() callback, as well as in its bind() error path.

Fixes d68ba7bac955 ("drm/rockchip: Add RK3588 DPTX output support")
---
 drivers/gpu/drm/rockchip/dw_dp-rockchip.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/gpu/drm/rockchip/dw_dp-rockchip.c +12 -1
index f137f699737cd..0de822360c8db 100644
@@ -107,15 +107,26 @@ static int dw_dp_rockchip_bind(struct device *dev, struct device *master, void *
 		return PTR_ERR(dp->base);
 
 	connector = drm_bridge_connector_init(drm_dev, encoder);
-	if (IS_ERR(connector))
+	if (IS_ERR(connector)) {
+		dw_dp_unbind(dp->base);
 		return dev_err_probe(dev, PTR_ERR(connector),
 				     "Failed to init bridge connector\n");
+	}
 
 	return 0;
 }
 
+static void dw_dp_rockchip_unbind(struct device *dev, struct device *master,
+				  void *data)
+{
+	struct rockchip_dw_dp *dp = dev_get_drvdata(dev);
+
+	dw_dp_unbind(dp->base);
+}
+
 static const struct component_ops dw_dp_rockchip_component_ops = {
 	.bind = dw_dp_rockchip_bind,
+	.unbind = dw_dp_rockchip_unbind,
 };
 
 static int dw_dp_probe(struct platform_device *pdev)
Signature · 1 line
2.53.0
author maintainer
#42 lore raw

PATCH 42/1815 drm/rockchip: vop2: Fix wrong wait target in layer cfg done check

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Cristian Ciocaltea <[email protected]>

[ Upstream commit 9f5670802df085ad343146561e69bac43e9905d2 ]

rk3568_vop2_setup_layer_mixer() waits for the previous Video Port (VP) layer configuration to take effect before writing a new one to the shared RK3568_OVL_LAYER_SEL shadow register. However, it passes vop2->old_layer_sel to rk3568_vop2_wait_for_layer_cfg_done() as the expected value, which at that point already contains the new VP layer.

This causes the wait to poll for a value that has not been written to the shadow register yet, resulting in spurious timeouts when two non-blocking atomic commits race:

rockchip-drm display-subsystem: [drm] *ERROR* wait layer cfg done timeout [...]

Pass the local old_layer_sel instead, which still holds the value captured from vop2->old_layer_sel before it was overwritten, i.e. the previous VP target that the hardware is expected to latch.

Fixes 3e89a8c68354 ("drm/rockchip: vop2: Fix the update of LAYER/PORT select registers when there are multi display output on rk3588/rk3568")
---
 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c +1 -1
index 17eda592b1833..fcf73a4327ab1 100644
@@ -2306,7 +2306,7 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
 		 * Changes of other VPs' overlays have not taken effect
 		 */
 		if (cfg_done)
-			rk3568_vop2_wait_for_layer_cfg_done(vop2, vop2->old_layer_sel);
+			rk3568_vop2_wait_for_layer_cfg_done(vop2, old_layer_sel);
 	}
 
 	vop2_writel(vop2, RK3568_OVL_LAYER_SEL, layer_sel);
Signature · 1 line
2.53.0
author maintainer
#43 lore raw

PATCH 43/1815 drm/rockchip: vop2: Wait for layer cfg done before switching LAYERSEL_REGDONE_SEL

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Cristian Ciocaltea <[email protected]>

[ Upstream commit d1ad644e572c0647ad8428439eafea0aacfccf9e ]

LAYERSEL_REGDONE_SEL mask of RK3568_OVL_CTRL register controls which Video Port (VP) vsync latches the shared RK3568_OVL_{LAYER|PORT}_SEL shadow registers into the active configuration.

rk3568_vop2_setup_layer_mixer() overwrites LAYERSEL_REGDONE_SEL to the current VP ID before waiting for the previous VP layer configuration to take effect. As a consequence, the previous VP vsync can no longer trigger the latch, so the wait polls a value that might never appear.

Move the layer cfg done wait before the RK3568_OVL_CTRL write so the previous VP vsync can still commit the pending configuration.

Fixes 3e89a8c68354 ("drm/rockchip: vop2: Fix the update of LAYER/PORT select registers when there are multi display output on rk3588/rk3568")
---
 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c +10 -9
index fcf73a4327ab1..322a303d3f1a5 100644
@@ -2288,15 +2288,6 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
 	 *    lead to the configuration of the previous VP being take effect along with the VSYNC
 	 *    of the new VP.
 	 */
-	if (layer_sel != old_layer_sel || port_sel != old_port_sel)
-		ovl_ctrl |= FIELD_PREP(RK3568_OVL_CTRL__LAYERSEL_REGDONE_SEL, vp->id);
-	vop2_writel(vop2, RK3568_OVL_CTRL, ovl_ctrl);
-
-	if (port_sel != old_port_sel) {
-		vop2_writel(vop2, RK3568_OVL_PORT_SEL, port_sel);
-		vop2_cfg_done(vp);
-		rk3568_vop2_wait_for_port_mux_done(vop2);
-	}
 
 	if (layer_sel != old_layer_sel && atv_layer_sel != old_layer_sel) {
 		cfg_done = vop2_readl(vop2, RK3568_REG_CFG_DONE);
@@ -2309,6 +2300,16 @@ static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
 			rk3568_vop2_wait_for_layer_cfg_done(vop2, old_layer_sel);
 	}
 
+	if (layer_sel != old_layer_sel || port_sel != old_port_sel)
+		ovl_ctrl |= FIELD_PREP(RK3568_OVL_CTRL__LAYERSEL_REGDONE_SEL, vp->id);
+	vop2_writel(vop2, RK3568_OVL_CTRL, ovl_ctrl);
+
+	if (port_sel != old_port_sel) {
+		vop2_writel(vop2, RK3568_OVL_PORT_SEL, port_sel);
+		vop2_cfg_done(vp);
+		rk3568_vop2_wait_for_port_mux_done(vop2);
+	}
+
 	vop2_writel(vop2, RK3568_OVL_LAYER_SEL, layer_sel);
 	mutex_unlock(&vop2->ovl_lock);
 }
Signature · 1 line
2.53.0
author maintainer
#44 lore raw

PATCH 44/1815 drm/rockchip: analogix_dp: Enable hclk for RK3588

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Damon Ding <[email protected]>

[ Upstream commit 104f20616d72825fdcf56cfdc5f89f4e96fd8dbe ]

Acquire and enable the HCLK_VO1 bus clock explicitly for RK3588 eDP controller to guarantee register and datapath access.

The clock was previously enabled implicitly via rockchip,vo-grf phandle reference, which relies on side effect and is fragile.

Fetch optional "hclk" clock in driver to align with updated device tree binding and keep consistent with hardware clock dependency.

Fixes 729f8eefdcad ("drm/rockchip: analogix_dp: Add support for RK3588")
---
 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +6 -0
index 06072efd7fca3..d2af5eb29dbb5 100644
@@ -311,6 +311,7 @@ static int rockchip_dp_of_probe(struct rockchip_dp_device *dp)
 {
 	struct device *dev = dp->dev;
 	struct device_node *np = dev->of_node;
+	struct clk *clk;
 
 	dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
 	if (IS_ERR(dp->grf))
@@ -327,6 +328,11 @@ static int rockchip_dp_of_probe(struct rockchip_dp_device *dp)
 		return dev_err_probe(dev, PTR_ERR(dp->pclk),
 				     "failed to get pclk property\n");
 
+	clk = devm_clk_get_optional_enabled(dev, "hclk");
+	if (IS_ERR(clk))
+		return dev_err_probe(dev, PTR_ERR(clk),
+				     "failed to get hclk property\n");
+
 	dp->rst = devm_reset_control_get(dev, "dp");
 	if (IS_ERR(dp->rst))
 		return dev_err_probe(dev, PTR_ERR(dp->rst),
Signature · 1 line
2.53.0
author maintainer
#45 lore raw

PATCH 45/1815 drm/rockchip: analogix_dp: Fix OF node reference leak via auto cleanup

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Damon Ding <[email protected]>

[ Upstream commit 87e060521371257ddbb77964b66e60d80afcc7b2 ]

Sashiko reported a reference leak in rockchip_dp_drm_encoder_enable(), the of_get_child_by_name() function does not call of_node_put() in a symmetrical way [1].

Fix the device node reference leak by using __free(device_node) to automatically manage of_node_put() for all device nodes.

---
 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +10 -6
index d2af5eb29dbb5..b1ed25cefe5ed 100644
@@ -8,6 +8,7 @@
  *         Jeff Chen <[email protected]>
  */
 
+#include <linux/cleanup.h>
 #include <linux/component.h>
 #include <linux/mfd/syscon.h>
 #include <linux/of.h>
@@ -206,7 +207,6 @@ static void rockchip_dp_drm_encoder_enable(struct drm_encoder *encoder,
 	struct drm_crtc *crtc;
 	struct drm_crtc_state *old_crtc_state;
 	struct of_endpoint endpoint;
-	struct device_node *remote_port, *remote_port_parent;
 	char name[32];
 	u32 port_id;
 	int ret;
@@ -230,18 +230,22 @@ static void rockchip_dp_drm_encoder_enable(struct drm_encoder *encoder,
 	if (ret < 0)
 		return;
 
-	remote_port_parent = of_graph_get_remote_port_parent(endpoint.local_node);
+	struct device_node *remote_port_parent __free(device_node) =
+		of_graph_get_remote_port_parent(endpoint.local_node);
 	if (remote_port_parent) {
-		if (of_get_child_by_name(remote_port_parent, "ports")) {
-			remote_port = of_graph_get_remote_port(endpoint.local_node);
+		struct device_node *ports __free(device_node) =
+			of_get_child_by_name(remote_port_parent, "ports");
+
+		if (ports) {
+			struct device_node *remote_port __free(device_node) =
+				of_graph_get_remote_port(endpoint.local_node);
+
 			of_property_read_u32(remote_port, "reg", &port_id);
-			of_node_put(remote_port);
 			sprintf(name, "%s vp%d", remote_port_parent->full_name, port_id);
 		} else {
 			sprintf(name, "%s %s",
 				remote_port_parent->full_name, endpoint.id ? "vopl" : "vopb");
 		}
-		of_node_put(remote_port_parent);
 
 		DRM_DEV_DEBUG(dp->dev, "vop %s output to dp\n", (ret) ? "LIT" : "BIG");
 	}
Signature · 1 line
2.53.0
author maintainer
#46 lore raw

PATCH 46/1815 drm/bridge: display-connector: dont autoenable HPD IRQ

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Dmitry Baryshkov <[email protected]>

[ Upstream commit 8e9c475060bff87077cfa3bd42011edcb7fb3b0d ]

If HPD IRQ is enabled in the display_connector's probe, it can be triggered too early, before the DRM connector is completely setup. Use the enable_hpd / disable_hpd callbacks to control enablement of the HPD IRQ.

Fixes 0c275c30176b ("drm/bridge: Add bridge driver for display connectors")
---
 drivers/gpu/drm/bridge/display-connector.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
drivers/gpu/drm/bridge/display-connector.c +17 -0
index 6b128fabe3a97..4567e402f2224 100644
@@ -94,6 +94,20 @@ display_connector_bridge_detect(struct drm_bridge *bridge, struct drm_connector
 	return display_connector_detect(bridge);
 }
 
+static void display_connector_hpd_enable(struct drm_bridge *bridge)
+{
+	struct display_connector *conn = to_display_connector(bridge);
+
+	enable_irq(conn->hpd_irq);
+}
+
+static void display_connector_hpd_disable(struct drm_bridge *bridge)
+{
+	struct display_connector *conn = to_display_connector(bridge);
+
+	disable_irq(conn->hpd_irq);
+}
+
 static const struct drm_edid *display_connector_edid_read(struct drm_bridge *bridge,
 							  struct drm_connector *connector)
 {
@@ -186,6 +200,8 @@ static const struct drm_bridge_funcs display_connector_bridge_funcs = {
 	.attach = display_connector_attach,
 	.destroy = display_connector_destroy,
 	.detect = display_connector_bridge_detect,
+	.hpd_enable = display_connector_hpd_enable,
+	.hpd_disable = display_connector_hpd_disable,
 	.edid_read = display_connector_edid_read,
 	.atomic_get_output_bus_fmts = display_connector_get_output_bus_fmts,
 	.atomic_get_input_bus_fmts = display_connector_get_input_bus_fmts,
@@ -315,6 +331,7 @@ static int display_connector_probe(struct platform_device *pdev)
 						NULL, display_connector_hpd_irq,
 						IRQF_TRIGGER_RISING |
 						IRQF_TRIGGER_FALLING |
+						IRQF_NO_AUTOEN |
 						IRQF_ONESHOT,
 						"HPD", conn);
 		if (ret) {
Signature · 1 line
2.53.0
author maintainer
#47 lore raw

PATCH 47/1815 drm/bridge: display-connector: trigger initial HPD event for DP

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Dmitry Baryshkov <[email protected]>

[ Upstream commit 60dc0946bbad3eef8bc66a5a8b09b98dbc6e09c0 ]

If the DisplayPort drivers use display-connector for the HPD detection, the internal HPD state machine might be not active and thus the hardware might be not able to handle cable detection correctly. Instead it will depend on the external HPD notifications to set the cable state, bypassing the internal HPD state machine (for example this is the case for the msm DP driver).

However if the cable has been plugged before the HPD IRQ has been enabled, there will be no HPD event coming. The drivers might fail detection in such a case. Trigger the HPD notification after enabling the HPD IRQ, propagating the cable insertion state.

Note, this issue only affects drivers which set OP_HPD but not OP_DETECT (like dp-connector). Here DP differs from HDMI. For HDMI there is no additional state or extra "bridge with no sinks plugged" cases. The HPD pin state is equal to the display plugged state. Nor do we have an AUX bus with timeouts, etc.

---
 drivers/gpu/drm/bridge/display-connector.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
drivers/gpu/drm/bridge/display-connector.c +19 -0
index 4567e402f2224..441355ace2bb8 100644
@@ -12,6 +12,7 @@
 #include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/consumer.h>
+#include <linux/workqueue.h>
 
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_bridge.h>
@@ -25,6 +26,8 @@ struct display_connector {
 
 	struct regulator	*supply;
 	struct gpio_desc	*ddc_en;
+
+	struct work_struct	hpd_work;
 };
 
 static inline struct display_connector *
@@ -99,15 +102,29 @@ static void display_connector_hpd_enable(struct drm_bridge *bridge)
 	struct display_connector *conn = to_display_connector(bridge);
 
 	enable_irq(conn->hpd_irq);
+
+	if (conn->bridge.type == DRM_MODE_CONNECTOR_DisplayPort)
+		schedule_work(&conn->hpd_work);
 }
 
 static void display_connector_hpd_disable(struct drm_bridge *bridge)
 {
 	struct display_connector *conn = to_display_connector(bridge);
 
+	if (conn->bridge.type == DRM_MODE_CONNECTOR_DisplayPort)
+		cancel_work_sync(&conn->hpd_work);
+
 	disable_irq(conn->hpd_irq);
 }
 
+static void display_connector_hpd_work(struct work_struct *work)
+{
+	struct display_connector *conn = container_of(work, struct display_connector, hpd_work);
+	struct drm_bridge *bridge = &conn->bridge;
+
+	drm_bridge_hpd_notify(bridge, display_connector_detect(bridge));
+}
+
 static const struct drm_edid *display_connector_edid_read(struct drm_bridge *bridge,
 							  struct drm_connector *connector)
 {
@@ -403,6 +420,8 @@ static int display_connector_probe(struct platform_device *pdev)
 		conn->bridge.ops |= DRM_BRIDGE_OP_DETECT;
 	if (conn->hpd_irq >= 0)
 		conn->bridge.ops |= DRM_BRIDGE_OP_HPD;
+	if (conn->hpd_irq >= 0 && type == DRM_MODE_CONNECTOR_DisplayPort)
+		INIT_WORK(&conn->hpd_work, display_connector_hpd_work);
 
 	dev_dbg(&pdev->dev,
 		"Found %s display connector '%s' %s DDC bus and %s HPD GPIO (ops 0x%x)\n",
Signature · 1 line
2.53.0
author maintainer
#48 lore raw

PATCH 48/1815 gpu: nova-core: gsp: tu102: keep unloading if FWSEC-SB fails

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Alexandre Courbot <[email protected]>

[ Upstream commit 9eaff547805f8556992a9474465001c3e128b7bd ]

On Turing and Ampere, resetting the GSP involves running two firmware
images: FWSEC-SB and Booter Unloader. They are independent from one another, and we should do whatever is possible to restore the GSP's unloaded state even if a failure occurs along the way.

Thus, keep going and run Booter Unloader even if the execution of FWSEC-SB failed.

Fixes adb99ce3cc78 ("gpu: nova-core: run Booter Unloader and FWSEC-SB upon unbinding")
[acourbot: log Booter Unloader errors.]
---
 drivers/gpu/nova-core/gsp/hal/tu102.rs | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
drivers/gpu/nova-core/gsp/hal/tu102.rs +15 -4
index 2f6301af71131..eb7166148cc9a 100644
@@ -134,11 +134,19 @@ impl UnloadBundle for Sec2UnloadBundle {
         sec2_falcon: &Falcon<Sec2>,
     ) -> Result {
         // Run FWSEC-SB to reset the GSP falcon to its pre-libos state.
-        self.fwsec_sb.run(dev, bar, gsp_falcon)?;
+        // Log errors but keep going if it fails.
+        let fwsec_sb_res = self
+            .fwsec_sb
+            .run(dev, bar, gsp_falcon)
+            .inspect_err(|e| dev_err!(dev, "FWSEC-SB failed to run: {:?}\n", e));
 
         // Remove WPR2 region if set.
         let wpr2_hi = bar.read(regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI);
-        if wpr2_hi.is_wpr2_set() {
+        let booter_unloader_res = (|| {
+            if !wpr2_hi.is_wpr2_set() {
+                return Ok(());
+            }
+
             sec2_falcon.reset(bar)?;
             sec2_falcon.load(dev, bar, &self.booter_unloader)?;
 
@@ -160,9 +168,12 @@ impl UnloadBundle for Sec2UnloadBundle {
                 );
                 return Err(EBUSY);
             }
-        }
 
-        Ok(())
+            Ok(())
+        })()
+        .inspect_err(|e| dev_err!(dev, "Booter Unloader failed to run: {:?}\n", e));
+
+        fwsec_sb_res.and(booter_unloader_res)
     }
 }
 
Signature · 1 line
2.53.0
author maintainer
#49 lore raw

PATCH 49/1815 drm/v3d: Clear queue->active_job when v3d_fence_create() fails

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Maíra Canal <[email protected]>

[ Upstream commit 25a1669907512e927fab9ad4d4fb74ff57f63cd9 ]

The run_job() callbacks for BIN, RENDER, TFU and CSD assign the incoming job to queue->active_job before calling v3d_fence_create(). If v3d_fence_create() fails, the callback returns NULL without clearing active_job, leaving a dangling pointer.

Create a failure path in all run_job() callbacks that clears the active job before returning NULL. The BIN path takes queue->queue_lock around the clear as it races against v3d_overflow_mem_work(); RENDER, TFU and CSD paths have no concurrent reader, so the clear is lock-free.

Fixes a783a09ee76d ("drm/v3d: Refactor job management.")
---
 drivers/gpu/drm/v3d/v3d_sched.c | 60 +++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 26 deletions(-)
drivers/gpu/drm/v3d/v3d_sched.c +34 -26
index bea46298b69e8..663561ee8d818 100644
@@ -189,15 +189,11 @@ static struct dma_fence *v3d_bin_job_run(struct drm_sched_job *sched_job)
 	struct v3d_dev *v3d = job->base.v3d;
 	struct v3d_queue_state *queue = &v3d->queue[V3D_BIN];
 	struct drm_device *dev = &v3d->drm;
-	struct dma_fence *fence;
+	struct dma_fence *fence = NULL;
 	unsigned long irqflags;
 
-	if (unlikely(job->base.base.s_fence->finished.error)) {
-		spin_lock_irqsave(&queue->queue_lock, irqflags);
-		queue->active_job = NULL;
-		spin_unlock_irqrestore(&queue->queue_lock, irqflags);
-		return NULL;
-	}
+	if (unlikely(job->base.base.s_fence->finished.error))
+		goto out_clean_job;
 
 	/* Lock required around bin_job update vs
 	 * v3d_overflow_mem_work().
@@ -214,7 +210,7 @@ static struct dma_fence *v3d_bin_job_run(struct drm_sched_job *sched_job)
 
 	fence = v3d_fence_create(v3d, V3D_BIN);
 	if (IS_ERR(fence))
-		return NULL;
+		goto out_clean_job;
 
 	if (job->base.irq_fence)
 		dma_fence_put(job->base.irq_fence);
@@ -242,6 +238,12 @@ static struct dma_fence *v3d_bin_job_run(struct drm_sched_job *sched_job)
 	V3D_CORE_WRITE(0, V3D_CLE_CT0QEA, job->end);
 
 	return fence;
+
+out_clean_job:
+	spin_lock_irqsave(&queue->queue_lock, irqflags);
+	queue->active_job = NULL;
+	spin_unlock_irqrestore(&queue->queue_lock, irqflags);
+	return fence;
 }
 
 static struct dma_fence *v3d_render_job_run(struct drm_sched_job *sched_job)
@@ -249,12 +251,10 @@ static struct dma_fence *v3d_render_job_run(struct drm_sched_job *sched_job)
 	struct v3d_render_job *job = to_render_job(sched_job);
 	struct v3d_dev *v3d = job->base.v3d;
 	struct drm_device *dev = &v3d->drm;
-	struct dma_fence *fence;
+	struct dma_fence *fence = NULL;
 
-	if (unlikely(job->base.base.s_fence->finished.error)) {
-		v3d->queue[V3D_RENDER].active_job = NULL;
-		return NULL;
-	}
+	if (unlikely(job->base.base.s_fence->finished.error))
+		goto out_clean_job;
 
 	v3d->queue[V3D_RENDER].active_job = &job->base;
 
@@ -268,7 +268,7 @@ static struct dma_fence *v3d_render_job_run(struct drm_sched_job *sched_job)
 
 	fence = v3d_fence_create(v3d, V3D_RENDER);
 	if (IS_ERR(fence))
-		return NULL;
+		goto out_clean_job;
 
 	if (job->base.irq_fence)
 		dma_fence_put(job->base.irq_fence);
@@ -289,6 +289,10 @@ static struct dma_fence *v3d_render_job_run(struct drm_sched_job *sched_job)
 	V3D_CORE_WRITE(0, V3D_CLE_CT1QEA, job->end);
 
 	return fence;
+
+out_clean_job:
+	v3d->queue[V3D_RENDER].active_job = NULL;
+	return fence;
 }
 
 static struct dma_fence *
@@ -297,18 +301,16 @@ v3d_tfu_job_run(struct drm_sched_job *sched_job)
 	struct v3d_tfu_job *job = to_tfu_job(sched_job);
 	struct v3d_dev *v3d = job->base.v3d;
 	struct drm_device *dev = &v3d->drm;
-	struct dma_fence *fence;
+	struct dma_fence *fence = NULL;
 
-	if (unlikely(job->base.base.s_fence->finished.error)) {
-		v3d->queue[V3D_TFU].active_job = NULL;
-		return NULL;
-	}
+	if (unlikely(job->base.base.s_fence->finished.error))
+		goto out_clean_job;
 
 	v3d->queue[V3D_TFU].active_job = &job->base;
 
 	fence = v3d_fence_create(v3d, V3D_TFU);
 	if (IS_ERR(fence))
-		return NULL;
+		goto out_clean_job;
 
 	if (job->base.irq_fence)
 		dma_fence_put(job->base.irq_fence);
@@ -336,6 +338,10 @@ v3d_tfu_job_run(struct drm_sched_job *sched_job)
 	V3D_WRITE(V3D_TFU_ICFG(v3d->ver), job->args.icfg | V3D_TFU_ICFG_IOC);
 
 	return fence;
+
+out_clean_job:
+	v3d->queue[V3D_TFU].active_job = NULL;
+	return fence;
 }
 
 static struct dma_fence *
@@ -344,13 +350,11 @@ v3d_csd_job_run(struct drm_sched_job *sched_job)
 	struct v3d_csd_job *job = to_csd_job(sched_job);
 	struct v3d_dev *v3d = job->base.v3d;
 	struct drm_device *dev = &v3d->drm;
-	struct dma_fence *fence;
+	struct dma_fence *fence = NULL;
 	int i, csd_cfg0_reg;
 
-	if (unlikely(job->base.base.s_fence->finished.error)) {
-		v3d->queue[V3D_CSD].active_job = NULL;
-		return NULL;
-	}
+	if (unlikely(job->base.base.s_fence->finished.error))
+		goto out_clean_job;
 
 	/* The HW interprets a workgroup size of 0 as 65536; however, the
 	 * user-space driver exposes a maximum of 65535. Therefore, a 0 in
@@ -368,7 +372,7 @@ v3d_csd_job_run(struct drm_sched_job *sched_job)
 
 	fence = v3d_fence_create(v3d, V3D_CSD);
 	if (IS_ERR(fence))
-		return NULL;
+		goto out_clean_job;
 
 	if (job->base.irq_fence)
 		dma_fence_put(job->base.irq_fence);
@@ -395,6 +399,10 @@ v3d_csd_job_run(struct drm_sched_job *sched_job)
 	V3D_CORE_WRITE(0, csd_cfg0_reg, job->args.cfg[0]);
 
 	return fence;
+
+out_clean_job:
+	v3d->queue[V3D_CSD].active_job = NULL;
+	return fence;
 }
 
 static void
Signature · 1 line
2.53.0
author maintainer
#50 lore raw

PATCH 50/1815 drm/display: hdmi-state-helper: Try subsampling in mode_valid

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Nicolas Frattaroli <[email protected]>

[ Upstream commit f532dc0ea55a25dd24a79442fd0348da09b04b72 ]

drm_hdmi_connector_mode_valid assumes modes are only valid if they work with RGB. The reality is more complex however: YCbCr 4:2:0 chroma-subsampled modes only require half the pixel clock that the same mode would require in RGB.

This leads to drm_hdmi_connector_mode_valid rejecting perfectly valid 420-only or 420-also modes.

Fix this by checking whether the mode is 420-capable first. If so, then proceed by checking it with DRM_OUTPUT_COLOR_FORMAT_YCBCR420 so long as the connector has legalized 420, otherwise error out. If the mode is not 420-capable, check with RGB as was previously always the case.

---
 drivers/gpu/drm/display/drm_hdmi_state_helper.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
drivers/gpu/drm/display/drm_hdmi_state_helper.c +14 -1
index cae0d85fb4407..a3aee41385548 100644
@@ -910,8 +910,21 @@ drm_hdmi_connector_mode_valid(struct drm_connector *connector,
 			      const struct drm_display_mode *mode)
 {
 	unsigned long long clock;
+	enum drm_output_color_format fmt;
+
+	if (drm_mode_is_420_only(&connector->display_info, mode)) {
+		if (connector->ycbcr_420_allowed)
+			fmt = DRM_OUTPUT_COLOR_FORMAT_YCBCR420;
+		else
+			return MODE_NO_420;
+	} else if (drm_mode_is_420_also(&connector->display_info, mode) &&
+		   connector->ycbcr_420_allowed) {
+		fmt = DRM_OUTPUT_COLOR_FORMAT_YCBCR420;
+	} else {
+		fmt = DRM_OUTPUT_COLOR_FORMAT_RGB444;
+	}
 
-	clock = drm_hdmi_compute_mode_clock(mode, 8, DRM_OUTPUT_COLOR_FORMAT_RGB444);
+	clock = drm_hdmi_compute_mode_clock(mode, 8, fmt);
 	if (!clock)
 		return MODE_ERROR;
 
Signature · 1 line
2.53.0
author maintainer
#51 lore raw

PATCH 51/1815 drm/rockchip: vop2: Add RK3576 to the RG swap special case

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Nicolas Frattaroli <[email protected]>

[ Upstream commit ae4a4e69389d576941522c3c2e01a2254fd00d10 ]

Much like RK3588, RK3576 requires an RG swap to be performed for YUV444 8-bit and YUV444 10-bit bus formats.

Add its version to the already existing check for RK3588, so that YUV444 output is correct on this platform.

---
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +2 -1
index a160077a507f2..be7830c9001c9 100644
@@ -337,7 +337,8 @@ static bool vop2_output_uv_swap(u32 bus_format, u32 output_mode)
 
 static bool vop2_output_rg_swap(struct vop2 *vop2, u32 bus_format)
 {
-	if (vop2->version == VOP_VERSION_RK3588) {
+	if (vop2->version == VOP_VERSION_RK3588 ||
+	    vop2->version == VOP_VERSION_RK3576) {
 		if (bus_format == MEDIA_BUS_FMT_YUV8_1X24 ||
 		    bus_format == MEDIA_BUS_FMT_YUV10_1X30)
 			return true;
Signature · 1 line
2.53.0
author maintainer
#52 lore raw

PATCH 52/1815 drm/rockchip: vop2: Recognise 10-bit YUV422 as YUV format

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Nicolas Frattaroli <[email protected]>

[ Upstream commit c1bfe8dac0a79d47eed313b9bcaa2658898684ec ]

The Rockchip VOP2 video output driver has a "is_yuv_output" function, which returns true when a given bus format is a YUV format, and false otherwise.

This switch statement is lacking the bus format used for YUV422 10-bit.

Add the two component orderings of the YUV422 10-bit bus formats to the switch statement.

---
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +2 -0
index be7830c9001c9..a268bd2fbaaab 100644
@@ -352,6 +352,8 @@ static bool is_yuv_output(u32 bus_format)
 	switch (bus_format) {
 	case MEDIA_BUS_FMT_YUV8_1X24:
 	case MEDIA_BUS_FMT_YUV10_1X30:
+	case MEDIA_BUS_FMT_YUYV10_1X20:
+	case MEDIA_BUS_FMT_UYVY10_1X20:
 	case MEDIA_BUS_FMT_UYYVYY8_0_5X24:
 	case MEDIA_BUS_FMT_UYYVYY10_0_5X30:
 	case MEDIA_BUS_FMT_YUYV8_2X8:
Signature · 1 line
2.53.0
author maintainer
#53 lore raw

PATCH 53/1815 rust: drm: gpuvm: update DriverGpuVm for DeviceContext

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Deborah Brouwer <[email protected]>

[ Upstream commit 20003c1a1fd80ae1b1742ff54297b67f7f21b77f ]

Since the introduction of DeviceContext, there is no longer a single driver object type to equate with the GPUVM object type.

Instead of threading DeviceContext through GPUVM, remove the strict identity between DriverGpuVm::Object and drm::Driver::Object and instead tighten the requirement that the DriverGpuVm::Object be an allocatable GEM object associated with the same DRM driver.

Also, make GpuVm::new() generic over DeviceContext so it can accept a drm::Device<T::Driver, Ctx>.

---
 rust/kernel/drm/gpuvm/mod.rs | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
rust/kernel/drm/gpuvm/mod.rs +4 -4
index ae58f6f667c1f..a625fcd9b5f22 100644
@@ -116,9 +116,9 @@ impl<T: DriverGpuVm> GpuVm<T> {
 
     /// Creates a GPUVM instance.
     #[expect(clippy::new_ret_no_self)]
-    pub fn new<E>(
+    pub fn new<E, Ctx: drm::DeviceContext>(
         name: &'static CStr,
-        dev: &drm::Device<T::Driver>,
+        dev: &drm::Device<T::Driver, Ctx>,
         r_obj: &T::Object,
         range: Range<u64>,
         reserve_range: Range<u64>,
@@ -252,10 +252,10 @@ impl<T: DriverGpuVm> GpuVm<T> {
 /// The manager for a GPUVM.
 pub trait DriverGpuVm: Sized + Send {
     /// Parent `Driver` for this object.
-    type Driver: drm::Driver<Object = Self::Object>;
+    type Driver: drm::Driver;
 
     /// The kind of GEM object stored in this GPUVM.
-    type Object: IntoGEMObject;
+    type Object: drm::driver::AllocImpl<Driver = Self::Driver>;
 
     /// Data stored with each [`struct drm_gpuva`](struct@GpuVa).
     type VaData;
Signature · 1 line
2.53.0
author maintainer
#54 lore raw

PATCH 54/1815 drm/bridge: cdns-dsi: Return an error pointer on allocation failure

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Maxime Ripard <[email protected]>

[ Upstream commit 79ac5c68f1a49a9fdec596ee47577d5a1d52738f ]

The drm_bridge_funcs.atomic_reset documentation states that the hook must return either a valid drm_bridge_state object or an ERR_PTR().

The cdns_dsi_bridge_atomic_reset() callback returns NULL when the allocation of its state fails, violating this contract.

Return ERR_PTR(-ENOMEM) instead.

---
 drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c +1 -1
index cf90d4468b5c1..344c3f4660185 100644
@@ -1015,7 +1015,7 @@ cdns_dsi_bridge_atomic_reset(struct drm_bridge *bridge)
 
 	dsi_state = kzalloc_obj(*dsi_state);
 	if (!dsi_state)
-		return NULL;
+		return ERR_PTR(-ENOMEM);
 
 	memset(dsi_state, 0, sizeof(*dsi_state));
 	dsi_state->base.bridge = bridge;
Signature · 1 line
2.53.0
author maintainer
#55 lore raw

PATCH 55/1815 drm/bridge: cdns-mhdp8546: Return an error pointer on allocation failure

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Maxime Ripard <[email protected]>

[ Upstream commit 30ac1d403438a6c6039f0af5bb2df3d021f96036 ]

The drm_bridge_funcs.atomic_reset documentation states that the hook must return either a valid drm_bridge_state object or an ERR_PTR().

The cdns_mhdp_bridge_atomic_reset() callback returns NULL when the allocation of its state fails, violating this contract.

Return ERR_PTR(-ENOMEM) instead.

---
 drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +1 -1
index 36c07b71fe04b..46779b49545bd 100644
@@ -1927,7 +1927,7 @@ cdns_mhdp_bridge_atomic_reset(struct drm_bridge *bridge)
 
 	cdns_mhdp_state = kzalloc_obj(*cdns_mhdp_state);
 	if (!cdns_mhdp_state)
-		return NULL;
+		return ERR_PTR(-ENOMEM);
 
 	__drm_atomic_helper_bridge_reset(bridge, &cdns_mhdp_state->base);
 
Signature · 1 line
2.53.0
author maintainer
#56 lore raw

PATCH 56/1815 smack: fix incorrect task context in smack_msg_queue_msgrcv

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Konstantin Andreev <[email protected]>

[ Upstream commit fba3d32825f4bbc8e20f0cdc3b14df57965b8fe5 ]

The smack_msg_queue_msgrcv() function incorrectly checks the permissions of the 'current' task instead of the 'target' task.

In the msgsnd() syscall path, if a receiver is already waiting, the pipelined_send() optimization is used to push the message directly to the receiver task:

    ipc/msg.c`pipelined_send():
    ` smp_store_release(&msr->r_msg, msg)

In this case, the 'sender' (current) task performs the check on behalf of the 'receiver' task (msr->r_tsk, passed as the 'target' parameter):

ipc/msg.c`pipelined_send():
` security_msg_queue_msgrcv(,, target := msr->r_tsk,,)

However, smack_msg_queue_msgrcv() ignores the 'target' and checks 'current':

smack_msg_queue_msgrcv(…)
` smk_curacc_msq(isp, MAY_READWRITE); // current task

'current' MAY satisfy smack_msg_queue_msgrcv r/w requirement, but 'target' (the receiver task) might NOT;
as a result, an unauthorized receiver gets the message, violating MAC policy.

Test:
1) create a sysv message queue with label “foo”
2) echo "bar foo r" >/smack/load2
3) msgrcv(,,,0,MSG_NOERROR) in "bar"-labeled task. The task is waiting for the messages ...
4) msgsnd() from a "foo"-labeled task:
"bar"-labeled task gets the message.

This patch fixes the issue by checking permission on the 'target' task instead of 'current'.

(2008-02-04, Casey Schaufler)

Fixes e114e473771c ("Smack: Simplified Mandatory Access Control Kernel")
---
 security/smack/smack_lsm.c | 65 +++++++++++++++++++++++++++-----------
 1 file changed, 47 insertions(+), 18 deletions(-)
security/smack/smack_lsm.c +47 -18
index 374873f2f4d9b..9a706f37df36b 100644
@@ -130,12 +130,13 @@ static int smk_bu_note(char *note, struct smack_known *sskp,
 #define smk_bu_note(note, sskp, oskp, mode, RC) (RC)
 #endif
 
-#ifdef CONFIG_SECURITY_SMACK_BRINGUP
-static int smk_bu_current(char *note, struct smack_known *oskp,
-			  int mode, int rc)
+static int
+smk_bu_tsk_to_obj(struct task_struct *tsk, const struct task_smack *tsp,
+		  char *note, struct smack_known *oskp, int mode, int rc)
 {
-	struct task_smack *tsp = smack_cred(current_cred());
+#ifdef CONFIG_SECURITY_SMACK_BRINGUP
 	char acc[SMK_NUM_ACCESS_TYPE + 1];
+	char comm[TASK_COMM_LEN];
 
 	if (rc <= 0)
 		return rc;
@@ -143,14 +144,22 @@ static int smk_bu_current(char *note, struct smack_known *oskp,
 		rc = 0;
 
 	smk_bu_mode(mode, acc);
+
 	pr_info("Smack %s: (%s %s %s) %s %s\n", smk_bu_mess[rc],
-		tsp->smk_task->smk_known, oskp->smk_known,
-		acc, current->comm, note);
+		smk_of_task(tsp)->smk_known, oskp->smk_known,
+		acc, get_task_comm(comm, tsk), note);
 	return 0;
-}
 #else
-#define smk_bu_current(note, oskp, mode, RC) (RC)
+	return rc;
 #endif
+}
+
+static int smk_bu_current(char *note, struct smack_known *oskp,
+			  int mode, int rc)
+{
+	return smk_bu_tsk_to_obj(current, smack_cred(current_cred()),
+				 note, oskp, mode, rc);
+}
 
 #ifdef CONFIG_SECURITY_SMACK_BRINGUP
 static int smk_bu_task(struct task_struct *otp, int mode, int rc)
@@ -3348,14 +3357,20 @@ static int smack_sem_semop(struct kern_ipc_perm *isp, struct sembuf *sops,
 }
 
 /**
- * smk_curacc_msq : helper to check if current has access on msq
- * @isp : the msq
+ * smk_tskacc_msq : helper to check if tsk has access on msq
+ * @tsk: the task that requests access
+ * @isp : the sysv msg queue permissions
  * @access : access requested
  *
- * return 0 if current has access, error otherwise
+ * return 0 if tsk has access, error otherwise
  */
-static int smk_curacc_msq(struct kern_ipc_perm *isp, int access)
+static int
+smk_tskacc_msq(struct task_struct *tsk, struct kern_ipc_perm *isp, int access)
 {
+	const bool tsk_is_current = (tsk == current);
+	const struct cred * const tsk_cred =
+			(tsk_is_current ? current_cred() : get_task_cred(tsk));
+	struct task_smack * const tsp = smack_cred(tsk_cred);
 	struct smack_known *msp = smack_of_ipc(isp);
 	struct smk_audit_info ad;
 	int rc;
@@ -3364,11 +3379,25 @@ static int smk_curacc_msq(struct kern_ipc_perm *isp, int access)
 	smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_IPC);
 	ad.a.u.ipc_id = isp->id;
 #endif
-	rc = smk_curacc(msp, access, &ad);
-	rc = smk_bu_current("msq", msp, access, rc);
+	rc = smk_tskacc(tsp, msp, access, &ad);
+	rc = smk_bu_tsk_to_obj(tsk, tsp, "msq", msp, access, rc);
+	if (!tsk_is_current)
+		put_cred(tsk_cred);
 	return rc;
 }
 
+/**
+ * smk_curacc_msq : helper to check if current has access on msq
+ * @isp : the sysv msg queue permissions
+ * @access : access requested
+ *
+ * return 0 if current has access, error otherwise
+ */
+static int smk_curacc_msq(struct kern_ipc_perm *isp, int access)
+{
+	return smk_tskacc_msq(current, isp, access);
+}
+
 /**
  * smack_msg_queue_associate - Smack access check for msg_queue
  * @isp: the object
@@ -3436,21 +3465,21 @@ static int smack_msg_queue_msgsnd(struct kern_ipc_perm *isp, struct msg_msg *msg
 }
 
 /**
- * smack_msg_queue_msgrcv - Smack access check for msg_queue
+ * smack_msg_queue_msgrcv - check it target has r/w access to msg_queue
  * @isp: the object
  * @msg: unused
- * @target: unused
+ * @target: the task that msgrcv() from the queue
  * @type: unused
  * @mode: unused
  *
- * Returns 0 if current has read and write access, error code otherwise
+ * Returns 0 if target has read and write access, error code otherwise
  */
 static int smack_msg_queue_msgrcv(struct kern_ipc_perm *isp,
 				  struct msg_msg *msg,
 				  struct task_struct *target, long type,
 				  int mode)
 {
-	return smk_curacc_msq(isp, MAY_READWRITE);
+	return smk_tskacc_msq(target, isp, MAY_READWRITE);
 }
 
 /**
Signature · 1 line
2.53.0
author maintainer
#57 lore raw

PATCH 57/1815 smack: simplify write handlers of sysfs entries

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Dmitry Antipov <[email protected]>

[ Upstream commit b78fede1c69a090d377bf80417ce1f7f7f314534 ]

Use the convenient 'kstrto{u,s}32_from_user()' to simplify write handlers of /smack/{doi,direct,mapped,logging,ptrace} sysfs entries.

Stable-dep-of: 577dc3b6a8cf ("smack: deduplicate smackfs/{direct,mapped} file_operations")

---
 security/smack/smackfs.c | 81 +++++++++++-----------------------------
 1 file changed, 22 insertions(+), 59 deletions(-)
security/smack/smackfs.c +22 -59
index 6e62dcb36f74f..f60d5469043ed 100644
@@ -1598,24 +1598,17 @@ static ssize_t smk_read_doi(struct file *filp, char __user *buf,
 static ssize_t smk_write_doi(struct file *file, const char __user *buf,
 			     size_t count, loff_t *ppos)
 {
-	char temp[80];
-	unsigned long u;
+	int ret;
+	u32 u;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
 
-	if (count >= sizeof(temp) || count == 0)
-		return -EINVAL;
-
-	if (copy_from_user(temp, buf, count) != 0)
-		return -EFAULT;
-
-	temp[count] = '\0';
+	ret = kstrtou32_from_user(buf, count, 10, &u);
+	if (unlikely(ret))
+		return ret;
 
-	if (kstrtoul(temp, 10, &u))
-		return -EINVAL;
-
-	if (u == CIPSO_V4_DOI_UNKNOWN || u > U32_MAX)
+	if (u == CIPSO_V4_DOI_UNKNOWN)
 		return -EINVAL;
 
 	return smk_cipso_doi(u, GFP_KERNEL) ? : count;
@@ -1664,22 +1657,14 @@ static ssize_t smk_write_direct(struct file *file, const char __user *buf,
 				size_t count, loff_t *ppos)
 {
 	struct smack_known *skp;
-	char temp[80];
-	int i;
+	int i, ret;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
 
-	if (count >= sizeof(temp) || count == 0)
-		return -EINVAL;
-
-	if (copy_from_user(temp, buf, count) != 0)
-		return -EFAULT;
-
-	temp[count] = '\0';
-
-	if (sscanf(temp, "%d", &i) != 1)
-		return -EINVAL;
+	ret = kstrtos32_from_user(buf, count, 10, &i);
+	if (unlikely(ret))
+		return ret;
 
 	/*
 	 * Don't do anything if the value hasn't actually changed.
@@ -1742,22 +1727,14 @@ static ssize_t smk_write_mapped(struct file *file, const char __user *buf,
 				size_t count, loff_t *ppos)
 {
 	struct smack_known *skp;
-	char temp[80];
-	int i;
+	int i, ret;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
 
-	if (count >= sizeof(temp) || count == 0)
-		return -EINVAL;
-
-	if (copy_from_user(temp, buf, count) != 0)
-		return -EFAULT;
-
-	temp[count] = '\0';
-
-	if (sscanf(temp, "%d", &i) != 1)
-		return -EINVAL;
+	ret = kstrtos32_from_user(buf, count, 10, &i);
+	if (unlikely(ret))
+		return ret;
 
 	/*
 	 * Don't do anything if the value hasn't actually changed.
@@ -2179,22 +2156,15 @@ static ssize_t smk_read_logging(struct file *filp, char __user *buf,
 static ssize_t smk_write_logging(struct file *file, const char __user *buf,
 				size_t count, loff_t *ppos)
 {
-	char temp[32];
-	int i;
+	int i, ret;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
 
-	if (count >= sizeof(temp) || count == 0)
-		return -EINVAL;
-
-	if (copy_from_user(temp, buf, count) != 0)
-		return -EFAULT;
+	ret = kstrtos32_from_user(buf, count, 10, &i);
+	if (unlikely(ret))
+		return ret;
 
-	temp[count] = '\0';
-
-	if (sscanf(temp, "%d", &i) != 1)
-		return -EINVAL;
 	if (i < 0 || i > 3)
 		return -EINVAL;
 	log_policy = i;
@@ -2838,22 +2808,15 @@ static ssize_t smk_read_ptrace(struct file *filp, char __user *buf,
 static ssize_t smk_write_ptrace(struct file *file, const char __user *buf,
 				size_t count, loff_t *ppos)
 {
-	char temp[32];
-	int i;
+	int i, ret;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
 
-	if (*ppos != 0 || count >= sizeof(temp) || count == 0)
-		return -EINVAL;
-
-	if (copy_from_user(temp, buf, count) != 0)
-		return -EFAULT;
+	ret = kstrtos32_from_user(buf, count, 10, &i);
+	if (unlikely(ret))
+		return ret;
 
-	temp[count] = '\0';
-
-	if (sscanf(temp, "%d", &i) != 1)
-		return -EINVAL;
 	if (i < SMACK_PTRACE_DEFAULT || i > SMACK_PTRACE_MAX)
 		return -EINVAL;
 	smack_ptrace_rule = i;
Signature · 1 line
2.53.0
author maintainer
#58 lore raw

PATCH 58/1815 smack: deduplicate smackfs/{direct,mapped} file_operations

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Konstantin Andreev <[email protected]>

[ Upstream commit 577dc3b6a8cf200e6e27b2d9967cac14a1fed2f3 ]

The file_operations for smackfs/direct and smackfs/mapped are identical up to a textual replacement of "direct" with "mapped"

This patch combines two instances of file_operations into one, handling both files.

Fixes f7112e6c9abf ("Smack: allow for significantly longer Smack labels v4")
---
 security/smack/smack.h   |   5 +-
 security/smack/smackfs.c | 133 ++++++++++++---------------------------
 2 files changed, 42 insertions(+), 96 deletions(-)
security/smack/smack.h +3 -2
index 9b9eb262fe33e..6febc2ecdfe84 100644
@@ -317,8 +317,9 @@ int smack_populate_secattr(struct smack_known *skp);
  * Shared data.
  */
 extern int smack_enabled __initdata;
-extern int smack_cipso_direct;
-extern int smack_cipso_mapped;
+extern int smack_cipso_auto_level[2];
+#define smack_cipso_direct (+smack_cipso_auto_level[0])
+#define smack_cipso_mapped (+smack_cipso_auto_level[1])
 extern struct smack_known *smack_net_ambient;
 extern struct smack_known *smack_syslog_label;
 #ifdef CONFIG_SECURITY_SMACK_BRINGUP
security/smack/smackfs.c +39 -94

206 lines not on this page · raw message

Signature · 1 line
2.53.0
author maintainer
#59 lore raw

PATCH 59/1815 smack: restrict smackfs/{direct,mapped} values to 0-255

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Konstantin Andreev <[email protected]>

[ Upstream commit a7c44fd9f80e37763acf9cd3c87a58058d206427 ]

Both smackfs/direct and smackfs/mapped incorrectly accept the full range of integer values. For example:

    # cd /sys/fs/smackfs/
    # cat direct ; echo
    250
    # cat cipso2
    @ 250/2
    _ 250/2,4,5,6,7,8
    * 250/3,5,7
    ^ 250/2,4,5,6,7
    ? 250/3,4,5,6,7,8
    # echo -1234 >direct ; cat direct ; echo
    -1234
    # cat cipso2
    @ -1234/2
    _ -1234/2,4,5,6,7,8
    * -1234/3,5,7
    ^ -1234/2,4,5,6,7
    ? -1234/3,4,5,6,7,8
    #

I noticed two things regarding this:

1) sensitivity levels are truncated to 8 bits when labeling outgoing packets (0x2e = 46 for the -1234 example above)

2) the reverse process fails: incoming packets with sensitivity level 46 do not match these smackfs/cipso2 entries.

Even observation (1) on its own warrants a fix.

This patch restricts smackfs/direct and smackfs/mapped accepted values to the 0-255 range.

Fixes e114e473771c ("Smack: Simplified Mandatory Access Control Kernel")
---
 security/smack/smack.h   |  2 +-
 security/smack/smackfs.c | 26 ++++++++++++++------------
 2 files changed, 15 insertions(+), 13 deletions(-)
security/smack/smack.h +1 -1
index 6febc2ecdfe84..fe6a498200143 100644
@@ -317,7 +317,7 @@ int smack_populate_secattr(struct smack_known *skp);
  * Shared data.
  */
 extern int smack_enabled __initdata;
-extern int smack_cipso_auto_level[2];
+extern u8  smack_cipso_auto_level[2];
 #define smack_cipso_direct (+smack_cipso_auto_level[0])
 #define smack_cipso_mapped (+smack_cipso_auto_level[1])
 extern struct smack_known *smack_net_ambient;
security/smack/smackfs.c +14 -12
index 946405645d5ad..c7eae7c6427ff 100644
@@ -94,7 +94,7 @@ struct smack_known *smack_net_ambient;
  * secid is contained directly in the category set.
  * It can be reset via smackfs/mapped
  */
-int smack_cipso_auto_level[2] = {
+u8 smack_cipso_auto_level[2] = {
 	SMACK_CIPSO_DIRECT_DEFAULT,
 	SMACK_CIPSO_MAPPED_DEFAULT,
 };
@@ -1641,17 +1641,15 @@ static const struct file_operations smk_doi_ops = {
 static ssize_t smk_read_cipso_auto_level(struct file *filp, char __user *buf,
 			       size_t count, loff_t *ppos)
 {
-	char temp[80];
-	ssize_t rc;
+	char temp[sizeof "255"];
+	int n;
 
 	if (*ppos != 0)
 		return 0;
 
-	sprintf(temp, "%d", smack_cipso_auto_level[
-			      smk_cipso_auto_level_idx(filp)]);
-	rc = simple_read_from_buffer(buf, count, ppos, temp, strlen(temp));
-
-	return rc;
+	n = sprintf(temp, "%u", (unsigned int)smack_cipso_auto_level[
+		smk_cipso_auto_level_idx(filp)]);
+	return simple_read_from_buffer(buf, count, ppos, temp, n);
 }
 
 /**
@@ -1667,13 +1665,16 @@ static ssize_t
 smk_write_cipso_auto_level(struct file *filp, const char __user *buf,
 			   size_t count, loff_t *ppos)
 {
-	struct smack_known *skp;
-	int i, ret, idx, old_lvl;
+	int ret, idx;
+	u8  i, old_lvl;
 
 	if (!smack_privileged(CAP_MAC_ADMIN))
 		return -EPERM;
-
-	ret = kstrtos32_from_user(buf, count, 10, &i);
+	/*
+	 * draft-ietf-cipso-ipsecurity-01 (CIPSO 2.2), 3.4.2.4:
+	 * "Sensitivity Level is 1 octet in length. Its value is from 0 to 255"
+	 */
+	ret = kstrtou8_from_user(buf, count, 10, &i);
 	if (unlikely(ret))
 		return ret;
 
@@ -1686,6 +1687,7 @@ smk_write_cipso_auto_level(struct file *filp, const char __user *buf,
 	old_lvl = smack_cipso_auto_level[idx];
 
 	if (old_lvl != i) {
+		struct smack_known *skp;
 		mutex_lock(&smack_known_lock);
 		list_for_each_entry_rcu(skp, &smack_known_list, list)
 			if (skp->smk_netlabel.attr.mls.lvl ==
Signature · 1 line
2.53.0
author maintainer
#60 lore raw

PATCH 60/1815 cgroup/cpuset: Avoid unnecessary cpus & mems update in cpuset_hotplug_update_tasks()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Waiman Long <[email protected]>

[ Upstream commit 866f587e9c70566a0391bf402123555605a82f81 ]

As reported by sashiko [1], cpuset_hotplug_update_tasks() may perform unnecessary task iteration and updating of tasks' CPU and node masks when mems_allowed and/or cpus_allowed are not set in cpuset v2. It is due to the fact that the temporary new_cpus and new_mems masks do not inherit parent's effective_cpus/mems when they are empty which is the expected behavior for cpuset v2 since commit 4ec22e9c5a90 ("cpuset:
Enable cpuset controller in default hierarchy").

Fix that and avoid unnecessary work by enhancing compute_effective_cpumask() to add the empty cpumask check and inheriting the parent's versions if empty when in v2. A new compute_effective_nodemask() helper is also added to perform a similar function for new effective_mems.

Add new test_cpuset_prs.sh test cases to confirm that effective_cpus will inherit the parent's version if cpuset.cpus is empty.

[1] https://sashiko.dev/#/patchset/20260621032816.1806773-1-longman%40redhat.com

Fixes 4ec22e9c5a90 ("cpuset: Enable cpuset controller in default hierarchy")
---
 kernel/cgroup/cpuset.c                        | 45 +++++++++++--------
 .../selftests/cgroup/test_cpuset_prs.sh       | 11 ++++-
 2 files changed, 35 insertions(+), 21 deletions(-)
kernel/cgroup/cpuset.c +26 -19
index 45944b3e31ca4..cce1f0e292ade 100644
@@ -1089,12 +1089,35 @@ void cpuset_update_tasks_cpumask(struct cpuset *cs, struct cpumask *new_cpus)
  * @cs: the cpuset the need to recompute the new effective_cpus mask
  * @parent: the parent cpuset
  *
+ * For v2, the parent's effective_cpus is inherited if cpumask is empty.
  * The result is valid only if the given cpuset isn't a partition root.
  */
 static void compute_effective_cpumask(struct cpumask *new_cpus,
 				      struct cpuset *cs, struct cpuset *parent)
 {
-	cpumask_and(new_cpus, cs->cpus_allowed, parent->effective_cpus);
+	bool has_cpus;
+
+	has_cpus = cpumask_and(new_cpus, cs->cpus_allowed, parent->effective_cpus);
+	if (!has_cpus && is_in_v2_mode())
+		cpumask_copy(new_cpus, parent->effective_cpus);
+}
+
+/**
+ * compute_effective_nodemask - Compute the effective nodemask of the cpuset
+ * @new_mems: the temp variable for the new effective_mems mask
+ * @cs: the cpuset the need to recompute the new effective_mems mask
+ * @parent: the parent cpuset
+ *
+ * For v2, the parent's effective_mems is inherited if nodemask is empty.
+ */
+static void compute_effective_nodemask(nodemask_t *new_mems,
+				       struct cpuset *cs, struct cpuset *parent)
+{
+	bool has_mems;
+
+	has_mems = nodes_and(*new_mems, cs->mems_allowed, parent->effective_mems);
+	if (!has_mems && is_in_v2_mode())
+		nodes_copy(*new_mems, parent->effective_mems);
 }
 
 /*
@@ -2143,15 +2166,6 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp,
 			goto update_parent_effective;
 		}
 
-		/*
-		 * If it becomes empty, inherit the effective mask of the
-		 * parent, which is guaranteed to have some CPUs unless
-		 * it is a partition root that has explicitly distributed
-		 * out all its CPUs.
-		 */
-		if (is_in_v2_mode() && !remote && cpumask_empty(tmp->new_cpus))
-			cpumask_copy(tmp->new_cpus, parent->effective_cpus);
-
 		/*
 		 * Skip the whole subtree if
 		 * 1) the cpumask remains the same,
@@ -2697,14 +2711,7 @@ static void update_nodemasks_hier(struct cpuset *cs, nodemask_t *new_mems)
 	cpuset_for_each_descendant_pre(cp, pos_css, cs) {
 		struct cpuset *parent = parent_cs(cp);
 
-		bool has_mems = nodes_and(*new_mems, cp->mems_allowed, parent->effective_mems);
-
-		/*
-		 * If it becomes empty, inherit the effective mask of the
-		 * parent, which is guaranteed to have some MEMs.
-		 */
-		if (is_in_v2_mode() && !has_mems)
-			*new_mems = parent->effective_mems;
+		compute_effective_nodemask(new_mems, cp, parent);
 
 		/* Skip the whole subtree if the nodemask remains the same. */
 		if (nodes_equal(*new_mems, cp->effective_mems)) {
@@ -3778,7 +3785,7 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp)
 
 	parent = parent_cs(cs);
 	compute_effective_cpumask(&new_cpus, cs, parent);
-	nodes_and(new_mems, cs->mems_allowed, parent->effective_mems);
+	compute_effective_nodemask(&new_mems, cs, parent);
 
 	if (!tmp || !cs->partition_root_state)
 		goto update_tasks;
tools/testing/selftests/cgroup/test_cpuset_prs.sh +9 -2
index 0d41aa0d343d9..ca9bc38fdb95d 100755
@@ -495,13 +495,20 @@ REMOTE_TEST_MATRIX=(
 	# Narrowing cpuset.cpus to previously sibling-excluded CPUs should
 	# not return CPUs that were never actually owned.
 	"  C1-4:P1   .   C1-2:P1  C1-3:P2  .       .  \
-	      .      .     .         C3    .       .     p1:4|c11:1-2|c12:3 \
+	      .      .     .       C3      .       .     p1:4|c11:1-2|c12:3 \
 							 p1:P1|c11:P1|c12:P2 3"
 	# Expanding cpuset.cpus to include a previously sibling-excluded CPU
 	# after the sibling has become a member should correctly request it.
 	"  C1-4:P1   .   C1-2:P1  C1-3:P2  .       .  \
-	      .      .      P0     C2-3    .       .     p1:1,4|c11:1|c12:2-3 \
+	      .      .     P0      C2-3    .       .     p1:1,4|c11:1|c12:2-3 \
 							 p1:P1|c11:P0|c12:P2 2-3"
+	# Cpusets with empty cpuset.cpus should inherit parent's effective_cpus
+	"  C1-4:P1 C5-6   C1-2     .       C5      .  \
+	      .      P1    P1      .       .       .     p1:3-4|p2:5-6|c11:1-2|c12:3-4|c21:5|c22:5-6 \
+							 p1:P1|p2:P1|c11:P1"
+	"  C1-4:P1 C5-6   C1-2     .       C5      .  \
+	      .      P1    P1      .      O5=0     .     p1:3-4|p2:6|c11:1-2|c12:3-4|c21:6|c22:6 \
+							 p1:P1|p2:P1|c11:P1"
 )
 
 #
Signature · 1 line
2.53.0
author maintainer
#61 lore raw

PATCH 61/1815 sched_ext/scx_flatcg: Fix cvtime_delta race and add hweight scaling to bypass charging

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Wanwu Li <[email protected]>

[ Upstream commit a5cc43414b38decd50bdd447e558358a6fbd5864 ]

1. cgrp_cap_budget() used __sync_fetch_and_sub(&cgc->cvtime_delta, cgc->cvtime_delta) to atomically read and clear cvtime_delta. However, this is not a true atomic read-clear operation: the second argument (cgc->cvtime_delta) is evaluated as a normal read before the atomic fetch_and_sub executes. If a concurrent __sync_fetch_and_add() happens between the read and the sub, the added value gets included in the returned delta AND remains in cvtime_delta, causing double charging.

Example:
CPU 0 runs cgrp_cap_budget(), CPU 1 runs fcg_stopping(). Assume cvtime_delta = 100 initially.

     T1  CPU 0: sub_val = cvtime_delta = 100                 cvtime_delta = 100
     T2  CPU 1: __sync_fetch_and_add(&cvtime_delta, 10)      cvtime_delta = 110
     T3  CPU 0: __sync_fetch_and_sub(&cvtime_delta, sub_val) cvtime_delta = 10
                                                                returns old=110

delta = 110 (includes the 10 from CPU 1), but cvtime_delta = 10 (the 10 also remains). The 10 is charged twice: once in delta (applied to cgv_node->cvtime) and once in the residual cvtime_delta (fetched again next time).

Fix by using __sync_fetch_and_and(&cgc->cvtime_delta, 0). Disassembly comparison:
(1) delta = __sync_fetch_and_sub(&cgc->cvtime_delta, cgc->cvtime_delta); 228: (79) r7 = *(u64 *)(r9 +40)
229: (87) r7 = -r7
230: (db) r7 = atomic64_fetch_add((u64 *)(r9 +40), r7) //r9 may be changed

   (2) delta = __sync_fetch_and_and(&cgc->cvtime_delta, 0);
   228: (b7) r8 = 0
   229: (db) r8 = atomic64_xchg((u64 *)(r9 +40), r8)

2. The bypass charging path in fcg_stopping() charges raw execution time to cvtime_delta without scaling by the inverse of the cgroup hweight. Since cvtime_delta is eventually applied to cgv_node->cvtime which is in vtime space (weight-scaled), the bypass path should also scale by FCG_HWEIGHT_ONE / hweight to match the units used by the dispatch path.

Fixes a4103eacc2ab ("sched_ext: Add a cgroup scheduler which uses flattened hierarchy")
---
 tools/sched_ext/scx_flatcg.bpf.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
tools/sched_ext/scx_flatcg.bpf.c +3 -2
index fec3595818269..0fd214cc61dae 100644
@@ -256,7 +256,7 @@ static void cgrp_cap_budget(struct cgv_node *cgv_node, struct fcg_cgrp_ctx *cgc)
 	 * and thus can't be updated and repositioned. Instead, we collect the
 	 * vtime deltas separately and apply it asynchronously here.
 	 */
-	delta = __sync_fetch_and_sub(&cgc->cvtime_delta, cgc->cvtime_delta);
+	delta = __sync_fetch_and_and(&cgc->cvtime_delta, 0);
 	cvtime = cgv_node->cvtime + delta;
 
 	/*
@@ -570,7 +570,8 @@ void BPF_STRUCT_OPS(fcg_stopping, struct task_struct *p, bool runnable)
 	cgc = find_cgrp_ctx(cgrp);
 	if (cgc) {
 		__sync_fetch_and_add(&cgc->cvtime_delta,
-				     p->se.sum_exec_runtime - taskc->bypassed_at);
+				     (p->se.sum_exec_runtime - taskc->bypassed_at) *
+				     FCG_HWEIGHT_ONE / (cgc->hweight ?: 1));
 		taskc->bypassed_at = 0;
 	}
 	bpf_cgroup_release(cgrp);
Signature · 1 line
2.53.0
author maintainer
#62 lore raw

PATCH 62/1815 drm/bridge: of-display-mode-bridge: Fix missing static const for the bridge funcs

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Damon Ding <[email protected]>

[ Upstream commit 6648301c5bb2ef23f0fb15bcb01d21ff66f36799 ]

Add static qualifier for of_display_mode_bridge_funcs to resolve the sparse warning:

drivers/gpu/drm/bridge/of-display-mode-bridge.c:54:25: sparse: sparse:
symbol 'of_display_mode_bridge_funcs' was not declared. Should it be static?

Also mark the structure const as required by devm_drm_bridge_alloc() parameter type constraints.

---
 drivers/gpu/drm/bridge/of-display-mode-bridge.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/bridge/of-display-mode-bridge.c +1 -1
index cb15713f3a796..e66dae168fd0d 100644
@@ -51,7 +51,7 @@ static int of_display_mode_bridge_get_modes(struct drm_bridge *bridge,
 	return 0;
 }
 
-struct drm_bridge_funcs of_display_mode_bridge_funcs = {
+static const struct drm_bridge_funcs of_display_mode_bridge_funcs = {
 	.attach = of_display_mode_bridge_attach,
 	.get_modes = of_display_mode_bridge_get_modes,
 };
Signature · 1 line
2.53.0
author maintainer
#63 lore raw

PATCH 63/1815 x86/cfi: Use symmetric SYM_START and SYM_END in __CFI_TYPE()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Jens Remus <[email protected]>

[ Upstream commit 0cfdf974f133e0ff17ed80e7895adbe7889d9522 ]

Commit

ccace936eec7 ("x86: Add types to indirectly called assembly functions")

introduced a x86-specific implementation of __CFI_TYPE() using an asymmetric combination of SYM_START() and SYM_FUNC_END() to add a symbol to the KCFI type identifier that precedes a function.

This asymmetric combination is an issue if SYM_FUNC_END() ever gets extended in a way that requires it to be used symmetrically with SYM_FUNC_START*(). For instance to emit DWARF CFI directives that denote the start/end of a function. [1]

Use SYM_END() with SYM_T_FUNC instead. No functional change, as the generic implementation of SYM_FUNC_END(name) expands into SYM_END(name, SYM_T_FUNC).

---
 arch/x86/include/asm/linkage.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/include/asm/linkage.h +1 -1
index a7294656ad908..c9769a7b6e66c 100644
@@ -103,7 +103,7 @@
 	.byte 0xb8 ASM_NL					\
 	.long __kcfi_typeid_##name ASM_NL			\
 	CFI_POST_PADDING					\
-	SYM_FUNC_END(__cfi_##name)
+	SYM_END(__cfi_##name, SYM_T_FUNC)
 
 /* UML needs to be able to override memcpy() and friends for KASAN. */
 #ifdef CONFIG_UML
Signature · 1 line
2.53.0
author maintainer
#64 lore raw

PATCH 64/1815 platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Maoyi Xie <[email protected]>

[ Upstream commit a0a8cd9fc9c48b95095bcec4b146f7a99486f58e ]

cros_typec_register_partner_pdos() copies the partner PDOs from the EC TYPEC_STATUS response into the fixed caps_desc.pdo[PDO_MAX_OBJECTS] array.

	memcpy(caps_desc.pdo, resp->source_cap_pdos,
	       sizeof(u32) * resp->source_cap_count);
	...
	memcpy(caps_desc.pdo, resp->sink_cap_pdos,
	       sizeof(u32) * resp->sink_cap_count);

PDO_MAX_OBJECTS is 7. source_cap_count and sink_cap_count are u8 fields from the EC. The only check is that they are not both zero. If either is larger than 7, the memcpy writes past the end of the array on the stack. A count of 255 overflows it by about 1 KB. The EC source arrays are only seven entries wide. A larger count reads past them too.

The ChromeOS EC firmware caps these counts today, so a compliant setup does not hit this. The kernel should still validate these values rather than trust them.

Validate the counts in cros_typec_register_partner_pdos() next to the memcpy. Skip the PDO registration if either count is above PDO_MAX_OBJECTS. The rest of cros_typec_handle_status() still runs so events are handled and cleared.

---
 drivers/platform/chrome/cros_ec_typec.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/platform/chrome/cros_ec_typec.c +6 -0
index c0806c562bb93..50a68819ceb7b 100644
@@ -1119,6 +1119,12 @@ static void cros_typec_register_partner_pdos(struct cros_typec_data *typec,
 	if (!resp->source_cap_count && !resp->sink_cap_count)
 		return;
 
+	if (resp->source_cap_count > PDO_MAX_OBJECTS ||
+	    resp->sink_cap_count > PDO_MAX_OBJECTS) {
+		dev_warn(typec->dev, "Invalid PDO count from EC, port: %d\n", port_num);
+		return;
+	}
+
 	port->partner_pd = typec_partner_usb_power_delivery_register(port->partner, &desc);
 	if (IS_ERR(port->partner_pd)) {
 		dev_warn(typec->dev, "Failed to register partner PD device, port: %d\n", port_num);
Signature · 1 line
2.53.0
author maintainer
#65 lore raw

PATCH 65/1815 selftests: proc: include fcntl.h in proc-pidns

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Amin Vakil <[email protected]>

[ Upstream commit 879b3353d04d043a9e01525c520d9b81339421b2 ]

proc-pidns.c uses open() and O_* flags, but does not include <fcntl.h>. This breaks the proc selftests build with errors such as:

error: implicit declaration of function 'open'
error: 'O_WRONLY' undeclared
error: 'O_CREAT' undeclared
error: 'O_RDONLY' undeclared

Include <fcntl.h> to provide the declaration and flag definitions.

Fixes 5554d820f71c ("selftests/proc: add tests for new pidns APIs")

Tested with:
make -C tools/testing/selftests TARGETS=proc

---
 tools/testing/selftests/proc/proc-pidns.c | 1 +
 1 file changed, 1 insertion(+)
tools/testing/selftests/proc/proc-pidns.c +1 -0
index 25b9a2933c456..6f7c10fe97b30 100644
@@ -6,6 +6,7 @@
 
 #include <assert.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <sched.h>
 #include <stdbool.h>
 #include <stdlib.h>
Signature · 1 line
2.53.0
author maintainer
#66 lore raw

PATCH 66/1815 HID: core: quiesce input in hid_hw_stop() to prevent use-after-free

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Philipp Weber <[email protected]>

[ Upstream commit a4bc41504690b7d7064931909874f5b98cd148b6 ]

A driver's probe calls hid_device_io_start() to enable input delivery, then fails at a later initialization step and unwinds via hid_hw_stop(). The unwind frees struct hidraw via hidraw_disconnect() while in-flight HID reports may still be running on another CPU, dereferencing the freed object through hidraw_report_event(). syzbot reports the resulting use-after-free for the corsair-psu HID driver.

Edward Adam Davis posted a per-driver fix for corsair-psu that adds an explicit hid_device_io_stop() before hid_hw_stop() in the probe error path ("hwmon: prevent packets from going to driver for probe", 2026-04-28). Auditing the tree shows 15 drivers call hid_device_io_start(); 7 also call hid_device_io_stop() and 8 do not:

drivers calling hid_device_io_start() without a matching hid_device_io_stop() before hid_hw_stop():
drivers/hwmon/corsair-psu.c (fix posted by Edward)
drivers/hwmon/corsair-cpro.c drivers/hwmon/nzxt-kraken3.c drivers/hwmon/nzxt-smart2.c drivers/hwmon/gigabyte_waterforce.c drivers/hid/hid-logitech-dj.c drivers/hid/hid-nintendo.c drivers/hid/hid-mcp2221.c

Roughly half of all callers of the API are exposed. Centralize the quiesce in hid_hw_stop() so callers do not have to remember the matching stop: if a driver has left hdev->io_started true on entry, call hid_device_io_stop() before hid_disconnect().

For the 7 drivers that already call hid_device_io_stop() correctly, hdev->io_started is false on entry, the guard short-circuits, and behavior is unchanged.

No Fixes: tag because the affected drivers gained their hid_device_io_start() calls independently over years; the bug is a class-wide API misuse rather than a regression from one commit.

---
 drivers/hid/hid-core.c | 7 +++++++
 1 file changed, 7 insertions(+)
drivers/hid/hid-core.c +7 -0
index d6fbc2111facd..5add6c9f2807a 100644
@@ -2454,9 +2454,16 @@ EXPORT_SYMBOL_GPL(hid_hw_start);
  *
  * This is usually called from remove function or from probe when something
  * failed and hid_hw_start was called already.
+ *
+ * If the caller enabled HID input via hid_device_io_start() and is unwinding
+ * without an explicit hid_device_io_stop(), quiesce input first so that
+ * in-flight reports cannot reach handlers (e.g. hidraw_report_event) whose
+ * backing objects hid_disconnect() is about to free.
  */
 void hid_hw_stop(struct hid_device *hdev)
 {
+	if (hdev->io_started)
+		hid_device_io_stop(hdev);
 	hid_disconnect(hdev);
 	hdev->ll_driver->stop(hdev);
 }
Signature · 1 line
2.53.0
author maintainer
#67 lore raw

PATCH 67/1815 HID: nintendo: Fix imu_timestamp_us double increment per report

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Christos Maragkos <[email protected]>

[ Upstream commit 1f9b25d3fb65b9384dec16d9db13a3e71abd9145 ]

Previously, the imu_timestamp_us variable was incremented twice per report, causing it to advance by two times the desired amount.

This resulted in incorrect jumps in IMU timestamps reported using MSC_TIMESTAMP, so userspace applications saw corrupted timing on functions such as gyroscope-based aim and motion controls.

This is fixed by removing the redundant increment at the start of the report handling so the remaining can account for the full report interval.

Fixes 4ff5b10840a88 ("HID: nintendo: add IMU support")
---
 drivers/hid/hid-nintendo.c | 1 -
 1 file changed, 1 deletion(-)
drivers/hid/hid-nintendo.c +0 -1
index f3c8a4a364002..4ee402e2f9cab 100644
@@ -1474,7 +1474,6 @@ static void joycon_parse_imu_report(struct joycon_ctlr *ctlr,
 		dropped_threshold = ctlr->imu_avg_delta_ms * 3 / 2;
 		dropped_pkts = (delta - min(delta, dropped_threshold)) /
 				ctlr->imu_avg_delta_ms;
-		ctlr->imu_timestamp_us += 1000 * ctlr->imu_avg_delta_ms;
 		if (dropped_pkts > JC_IMU_DROPPED_PKT_WARNING) {
 			hid_warn_ratelimited(ctlr->hdev,
 				 "compensating for %u dropped IMU reports\n",
Signature · 1 line
2.53.0
author maintainer
#68 lore raw

PATCH 68/1815 HID: roccat: bound device-supplied profile index

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Michael Bommarito <[email protected]>

[ Upstream commit 43fae42628a8c10fa8981773d7ec9f1a367821a7 ]

kone_keep_values_up_to_date() and kone_profile_activated() use an 8-bit, device-supplied profile value as an index into the 5-element kone->profiles[] array without a range check. A malicious USB device claiming the Roccat Kone id can send a switch-profile event (or a startup_profile read at probe) with an out-of-range value and make the driver read out of bounds; the result is exposed via the actual_dpi sysfs attribute.

Reject out-of-range indices in both paths.

This was found with static analysis and confirmed with the KUnit test added in the following patch (KASAN: slab-out-of-bounds).

Fixes 14bf62cde7942 ("HID: add driver for Roccat Kone gaming mouse")
Assisted-by Claude:claude-opus-4-8
---
 drivers/hid/hid-roccat-kone.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/hid/hid-roccat-kone.c +6 -2
index 58654cf78f0df..17495fcc8b7da 100644
@@ -36,6 +36,8 @@ static uint profile_numbers[5] = {0, 1, 2, 3, 4};
 
 static void kone_profile_activated(struct kone_device *kone, uint new_profile)
 {
+	if (new_profile < 1 || new_profile > ARRAY_SIZE(kone->profiles))
+		new_profile = 1;
 	kone->actual_profile = new_profile;
 	kone->actual_dpi = kone->profiles[new_profile - 1].startup_dpi;
 }
@@ -793,8 +795,10 @@ static void kone_keep_values_up_to_date(struct kone_device *kone,
 {
 	switch (event->event) {
 	case kone_mouse_event_switch_profile:
-		kone->actual_dpi = kone->profiles[event->value - 1].
-				startup_dpi;
+		if (event->value >= 1 &&
+		    event->value <= ARRAY_SIZE(kone->profiles))
+			kone->actual_dpi =
+				kone->profiles[event->value - 1].startup_dpi;
 		fallthrough;
 	case kone_mouse_event_osd_profile:
 		kone->actual_profile = event->value;
Signature · 1 line
2.53.0
author maintainer
#69 lore raw

PATCH 69/1815 soc: samsung: exynos-pmu: fix of_node refcount leak in exynos_get_pmu_regmap()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Weigang He <[email protected]>

[ Upstream commit fa476d53edd24e8105faace04e881b9c4179738f ]

exynos_get_pmu_regmap() obtains a device_node via of_find_matching_node() and passes it to exynos_get_pmu_regmap_by_phandle(np, NULL). With propname == NULL the callee uses np directly and does not drop a reference, so the reference taken by of_find_matching_node() is leaked on every call -- including on each -EPROBE_DEFER retry of the only in-tree caller, exynos_retention_init() in the Exynos pinctrl driver.

Annotate np with the __free(device_node) cleanup attribute so the reference is released when the function returns.

Found by static analysis tool CodeQL.

Fixes 76640b84bd7a ("soc: samsung: pmu: Provide global function to get PMU regmap")
---
 drivers/soc/samsung/exynos-pmu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/soc/samsung/exynos-pmu.c +2 -2
index d58376c38179b..f5fcdde9750e2 100644
@@ -167,8 +167,8 @@ static const struct mfd_cell exynos_pmu_devs[] = {
  */
 struct regmap *exynos_get_pmu_regmap(void)
 {
-	struct device_node *np = of_find_matching_node(NULL,
-						      exynos_pmu_of_device_ids);
+	struct device_node *np __free(device_node) =
+		of_find_matching_node(NULL, exynos_pmu_of_device_ids);
 	if (np)
 		return exynos_get_pmu_regmap_by_phandle(np, NULL);
 	return ERR_PTR(-ENODEV);
Signature · 1 line
2.53.0
author maintainer
#70 lore raw

PATCH 70/1815 media: cec-pin: Fix event FIFO ordering

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Gui-Dong Han <[email protected]>

[ Upstream commit a1d83d1b810665bd53ce8a7b7867e054d68676c7 ]

cec_pin_update() fills work_pin_events[] and work_pin_ts[], then increments work_pin_num_events. cec_pin_thread_func() uses that counter to decide when to read the FIFO entries.

Do not let the counter update be observed without the event update. Also do not let a freed slot be reused before the thread has finished reading it. Use release operations when publishing an entry and releasing a slot, and acquire operations when consuming those counter updates.

Leave the other work_pin_num_events users as they do not participate in this FIFO publication path.

Fixes ea5c8ef29668 ("media: cec-pin: add low-level pin hardware support")
---
 drivers/media/cec/core/cec-pin.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/media/cec/core/cec-pin.c +4 -4
index 6e1c391028322..085fc12067afa 100644
@@ -115,7 +115,7 @@ static void cec_pin_update(struct cec_pin *pin, bool v, bool force)
 		return;
 
 	pin->adap->cec_pin_is_high = v;
-	if (atomic_read(&pin->work_pin_num_events) < CEC_NUM_PIN_EVENTS) {
+	if (atomic_read_acquire(&pin->work_pin_num_events) < CEC_NUM_PIN_EVENTS) {
 		u8 ev = v;
 
 		if (pin->work_pin_events_dropped) {
@@ -126,7 +126,7 @@ static void cec_pin_update(struct cec_pin *pin, bool v, bool force)
 		pin->work_pin_ts[pin->work_pin_events_wr] = ktime_get();
 		pin->work_pin_events_wr =
 			(pin->work_pin_events_wr + 1) % CEC_NUM_PIN_EVENTS;
-		atomic_inc(&pin->work_pin_num_events);
+		atomic_inc_return_release(&pin->work_pin_num_events);
 	} else {
 		pin->work_pin_events_dropped = true;
 		pin->work_pin_events_dropped_cnt++;
@@ -1101,7 +1101,7 @@ static int cec_pin_thread_func(void *_adap)
 						     pin->work_tx_ts);
 		}
 
-		while (atomic_read(&pin->work_pin_num_events)) {
+		while (atomic_read_acquire(&pin->work_pin_num_events)) {
 			unsigned int idx = pin->work_pin_events_rd;
 			u8 v = pin->work_pin_events[idx];
 
@@ -1110,7 +1110,7 @@ static int cec_pin_thread_func(void *_adap)
 						v & CEC_PIN_EVENT_FL_DROPPED,
 						pin->work_pin_ts[idx]);
 			pin->work_pin_events_rd = (idx + 1) % CEC_NUM_PIN_EVENTS;
-			atomic_dec(&pin->work_pin_num_events);
+			atomic_dec_return_release(&pin->work_pin_num_events);
 		}
 
 		switch (atomic_xchg(&pin->work_irq_change,
Signature · 1 line
2.53.0
author maintainer
#71 lore raw

PATCH 71/1815 mtd: rawnand: pl353: Fix debug prints

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Miquel Raynal (DAVE) <[email protected]>

[ Upstream commit 2b7baaddf1bc3e39206a0354449fdc349945b86b ]

They are partially incorrect since "software" engine does not mean hamming, the "none" cae is also falling into this print, and on-die means there is some kind of hardware support; we prefer to use the wording on-host vs. on-die.

Fix all those prints.

Fixes 1e06dbfdfb85 ("mtd: rawnand: pl353: Add message about ECC mode")
---
 drivers/mtd/nand/raw/pl35x-nand-controller.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/mtd/nand/raw/pl35x-nand-controller.c +5 -3
index 7d43506b1654d..12b9e0936c8f1 100644
@@ -972,17 +972,19 @@ static int pl35x_nand_attach_chip(struct nand_chip *chip)
 
 	switch (chip->ecc.engine_type) {
 	case NAND_ECC_ENGINE_TYPE_ON_DIE:
-		dev_dbg(nfc->dev, "Using on-die ECC\n");
+		dev_dbg(nfc->dev, "Using on-die hardware ECC\n");
 		/* Keep these legacy BBT descriptors for ON_DIE situations */
 		chip->bbt_td = &bbt_main_descr;
 		chip->bbt_md = &bbt_mirror_descr;
 		fallthrough;
 	case NAND_ECC_ENGINE_TYPE_NONE:
+		dev_dbg(nfc->dev, "Using no ECC engine\n");
+		break;
 	case NAND_ECC_ENGINE_TYPE_SOFT:
-		dev_dbg(nfc->dev, "Using software ECC (Hamming 1-bit/512B)\n");
+		dev_dbg(nfc->dev, "Using software ECC\n");
 		break;
 	case NAND_ECC_ENGINE_TYPE_ON_HOST:
-		dev_dbg(nfc->dev, "Using hardware ECC\n");
+		dev_dbg(nfc->dev, "Using on-host hardware ECC\n");
 		ret = pl35x_nand_init_hw_ecc_controller(nfc, chip);
 		if (ret)
 			return ret;
Signature · 1 line
2.53.0
author maintainer
#72 lore raw

PATCH 72/1815 ASoC: SOF: ipc4-topology: Return error for invalid number of formats

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Mert Seftali <[email protected]>

[ Upstream commit 11e828cd6b0f283ebe9dc6b4cffd38e3321e7725 ]

When the number of input or output formats is zero, sof_ipc4_widget_setup_comp_src() and sof_ipc4_widget_setup_comp_asrc() print an error and jump to the cleanup label. At that point 'ret' is still 0, because the earlier sof_ipc4_get_audio_fmt() call succeeded, so the function returns success and the caller never finds out that the widget setup actually failed.

Set ret to -EINVAL before the goto so the error gets reported.

---
 sound/soc/sof/ipc4-topology.c | 2 ++
 1 file changed, 2 insertions(+)
sound/soc/sof/ipc4-topology.c +2 -0
index 6fdfb667cce8d..8f37fbdd3f7fa 100644
@@ -1127,6 +1127,7 @@ static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget)
 			"Invalid number of formats: input: %d, output: %d\n",
 			src->available_fmt.num_input_formats,
 			src->available_fmt.num_output_formats);
+		ret = -EINVAL;
 		goto err;
 	}
 
@@ -1179,6 +1180,7 @@ static int sof_ipc4_widget_setup_comp_asrc(struct snd_sof_widget *swidget)
 			"Invalid number of formats: input: %d, output: %d\n",
 			asrc->available_fmt.num_input_formats,
 			asrc->available_fmt.num_output_formats);
+		ret = -EINVAL;
 		goto err;
 	}
 
Signature · 1 line
2.53.0
author maintainer
#73 lore raw

PATCH 73/1815 cxl/mbox: Clamp mailbox output allocation to the payload size

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Richard Cheng <[email protected]>

[ Upstream commit 8a13db9f899d149c3aab24abcb668121cfda5a4f ]

CXL_MEM_SEND_COMMAND bounds the user's in.size to the mailbox payload size but leaves out.size unbounded, then cxl_mbox_cmd_ctor() calls kvzalloc(out.size). A large out.size drives a huge allocation, above INT_MAX it WARNs and taints, and with panic_on_warn=1 it panics.

The transport __cxl_pci_mbox_send_cmd() already clamps the response copy to min(out.size, payload_size, device len), so the output buffer is never written beyond payload_size. Clamp the allocation to payload_size too, matching the RAW path.

---
 drivers/cxl/core/mbox.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/cxl/core/mbox.c +1 -5
index 1fa1f78565e31..94b1f71675882 100644
@@ -379,11 +379,7 @@ static int cxl_mbox_cmd_ctor(struct cxl_mbox_cmd *mbox_cmd,
 		}
 	}
 
-	/* Prepare to handle a full payload for variable sized output */
-	if (out_size == CXL_VARIABLE_PAYLOAD)
-		mbox_cmd->size_out = cxl_mbox->payload_size;
-	else
-		mbox_cmd->size_out = out_size;
+	mbox_cmd->size_out = min_t(size_t, out_size, cxl_mbox->payload_size);
 
 	if (mbox_cmd->size_out) {
 		mbox_cmd->payload_out = kvzalloc(mbox_cmd->size_out, GFP_KERNEL);
Signature · 1 line
2.53.0
author maintainer
#74 lore raw

PATCH 74/1815 arm64: dts: imx94: Correct PCIe outbound address space configuration

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Richard Zhu <[email protected]>

[ Upstream commit ffccbd6804e885f0fc23f0005f6bee7789a7a887 ]

Fix the PCIe outbound memory ranges for both pcie0 controllers on i.MX94.

The memory window size was incorrectly set to 256MB during initial bring-up, but the hardware supports up to 4GB of outbound address space per controller.

Additionally, the ECAM region cannot be mapped as I/O space. Use a memory-mapped region for I/O space instead, and relocate the 1MB I/O region to immediately follow the memory region at offset 0xf0000000 within each window.

Update the outbound address space layout per controller as follows:

  - 3.5GB  64-bit prefetchable memory
  - 256MB  32-bit non-prefetchable memory
  - 1MB    I/O
Fixes 8cd439f17758 ("arm64: dts: imx94: Add pcie0 and pcie0-ep supports")
---
 arch/arm64/boot/dts/freescale/imx94.dtsi | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/freescale/imx94.dtsi +3 -2
index a6cb5a6e848b3..1f9035e6cf159 100644
@@ -1374,8 +1374,9 @@ pcie0: pcie@4c300000 {
 			      <0 0x4c360000 0 0x10000>,
 			      <0 0x4c340000 0 0x4000>;
 			reg-names = "dbi", "config", "atu", "app";
-			ranges = <0x81000000 0x0 0x00000000 0x0 0x6ff00000 0 0x00100000>,
-				 <0x82000000 0x0 0x10000000 0x9 0x10000000 0 0x80000000>;
+			ranges = <0x43000000 0x9 0x00000000 0x9 0x00000000 0x0 0xe0000000>,
+				 <0x82000000 0x0 0xe0000000 0x9 0xe0000000 0x0 0x10000000>,
+				 <0x81000000 0x0 0x00000000 0x9 0xf0000000 0x0 0x00100000>;
 			#address-cells = <3>;
 			#size-cells = <2>;
 			device_type = "pci";
Signature · 1 line
2.53.0
author maintainer
#75 lore raw

PATCH 75/1815 arm64: dts: imx943: Correct PCIe outbound address space configuration

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Richard Zhu <[email protected]>

[ Upstream commit 6de3a7d7a4f653be4901d07425719c4e55805167 ]

Fix the PCIe outbound memory ranges for both pcie1 controllers on i.MX943.

The memory window size was incorrectly set to 256MB during initial bring-up, but the hardware supports up to 4GB of outbound address space per controller.

Additionally, the ECAM region cannot be mapped as I/O space. Use a memory-mapped region for I/O space instead, and relocate the 1MB I/O region to immediately follow the memory region at offset 0xf0000000 within each window.

Update the outbound address space layout per controller as follows:

  - 3.5GB  64-bit prefetchable memory
  - 256MB  32-bit non-prefetchable memory
  - 1MB    I/O
Fixes fa6067fd8ea7 ("arm64: dts: imx943: Add pcie1 and pcie1-ep supports")
---
 arch/arm64/boot/dts/freescale/imx943.dtsi | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/freescale/imx943.dtsi +3 -2
index ed030d4bc7bd9..cf5b3dbb47ff7 100644
@@ -218,8 +218,9 @@ pcie1: pcie@4c380000 {
 			      <0 0x4c3e0000 0 0x10000>,
 			      <0 0x4c3c0000 0 0x4000>;
 			reg-names = "dbi", "config", "atu", "app";
-			ranges = <0x81000000 0 0x00000000 0x8 0x8ff00000 0 0x00100000>,
-				 <0x82000000 0 0x10000000 0xa 0x10000000 0 0x80000000>;
+			ranges = <0x43000000 0xa 0x00000000 0xa 0x00000000 0x0 0xe0000000>,
+				 <0x82000000 0x0 0xe0000000 0xa 0xe0000000 0x0 0x10000000>,
+				 <0x81000000 0x0 0x00000000 0xa 0xf0000000 0x0 0x00100000>;
 			#address-cells = <3>;
 			#size-cells = <2>;
 			device_type = "pci";
Signature · 1 line
2.53.0
author maintainer
#76 lore raw

PATCH 76/1815 cxl/pci: Remove incorrect mbox.valid check in cxl_pci_type3_init_mailbox()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Wei Hou <[email protected]>

[ Upstream commit d79b81893d0cc93737e811a465b9ef9a00156fd5 ]

The driver's design intent is that missing or malformed component registers should not prevent mailbox initialization. cxl_pci_probe() already reflects this: the CXL_REGLOC_RBI_COMPONENT setup path only emits a dev_warn() and continues when component registers are absent, rather than returning an error.

The check 'if (!cxlds->reg_map.device_map.mbox.valid)' violates this intent and is also technically incorrect for two reasons:

1. Wrong struct: the MEMDEV register block is enumerated into a local variable 'map', not into 'cxlds->reg_map'. The device_map.mbox.valid field inside cxlds->reg_map is never written by the MEMDEV probe and will always read as zero regardless of actual hardware capability.

2. Already validated: cxl_pci_setup_regs(CXL_REGLOC_RBI_MEMDEV) calls cxl_probe_regs() which explicitly checks mbox.valid and returns -ENXIO if the mailbox is absent. If that check passes, the mailbox is guaranteed to be present by the time cxl_pci_type3_init_mailbox() is called.

The value that the check actually reads is component_map.ras.valid, which aliases device_map.mbox.valid in the union. This is populated by the COMPONENT probe, not the MEMDEV probe. On devices where the component register BAR does not implement a CXL Component Capability Array (e.g. certain DCD devices), cxl_probe_component_regs() returns early leaving ras.valid=false. Through the union, this makes mbox.valid read as false, causing cxl_pci_type3_init_mailbox() to return -ENODEV (-19) even though the mailbox hardware is fully functional.

Remove the check. Mailbox presence has already been validated by cxl_pci_setup_regs(CXL_REGLOC_RBI_MEMDEV). The presence or absence of component registers is irrelevant to mailbox initialization.

Fixes 8d8081cecfb9 ("cxl: Move mailbox related bits to the same context")
---
 drivers/cxl/pci.c | 6 ------
 1 file changed, 6 deletions(-)
drivers/cxl/pci.c +0 -6
index 7c6faee7f85ed..3e79038a686bc 100644
@@ -691,12 +691,6 @@ static int cxl_pci_type3_init_mailbox(struct cxl_dev_state *cxlds)
 {
 	int rc;
 
-	/*
-	 * Fail the init if there's no mailbox. For a type3 this is out of spec.
-	 */
-	if (!cxlds->reg_map.device_map.mbox.valid)
-		return -ENODEV;
-
 	rc = cxl_mailbox_init(&cxlds->cxl_mbox, cxlds->dev);
 	if (rc)
 		return rc;
Signature · 1 line
2.53.0
author maintainer
#77 lore raw

PATCH 77/1815 ARM: imx: avic: Fix OF node reference leaks

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Yuho Choi <[email protected]>

[ Upstream commit b24c12e1bad863d27141e4e9c19d25eebd68c4a6 ]

of_find_compatible_node() returns a device node with its reference count incremented. mxc_init_irq() looks up the i.MX25 CCM node for of_iomap() and the AVIC node for irq_domain_create_legacy(), but does not release either temporary reference.

of_iomap() does not consume the node reference, and irq_domain_create_legacy() takes its own fwnode reference for the domain. Drop the temporary OF node references after each use.

Fixes 9b454d16e57d ("ARM: imx: avic: set low-power interrupt mask for imx25")
Fixes 544496ab5cbd ("ARM: imx: move irq_domain_add_legacy call into avic driver")
---
 arch/arm/mach-imx/avic.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm/mach-imx/avic.c +2 -0
index 3067c06b4b8eb..6873a50bbe2c0 100644
@@ -173,6 +173,7 @@ static void __init mxc_init_irq(void __iomem *irqbase)
 
 	np = of_find_compatible_node(NULL, NULL, "fsl,imx25-ccm");
 	mx25_ccm_base = of_iomap(np, 0);
+	of_node_put(np);
 
 	if (mx25_ccm_base) {
 		/*
@@ -203,6 +204,7 @@ static void __init mxc_init_irq(void __iomem *irqbase)
 	np = of_find_compatible_node(NULL, NULL, "fsl,avic");
 	domain = irq_domain_create_legacy(of_fwnode_handle(np), AVIC_NUM_IRQS, irq_base, 0,
 					  &irq_domain_simple_ops, NULL);
+	of_node_put(np);
 	WARN_ON(!domain);
 
 	for (i = 0; i < AVIC_NUM_IRQS / 32; i++, irq_base += 32)
Signature · 1 line
2.53.0
author maintainer
#78 lore raw

PATCH 78/1815 clk: versaclock7: Fix APLL clock leak on probe failure

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Myeonghun Pak <[email protected]>

[ Upstream commit e25d8d35e8cbc1a4c04a8b86eed6aa7229f6449e ]

vc7_probe() registers the APLL with clk_register_fixed_rate(), which is not devm-managed and must be explicitly unregistered on probe failure.

Most later errors already unwind through err_clk, but a failure from vc7_get_bank_clk() in the output registration loop returned directly. That skipped clk_unregister_fixed_rate() and leaked the APLL clock.

Route that error through the existing err_clk label so the fixed-rate clock is released consistently with the other probe failure paths.

This issue was identified during our ongoing static-analysis research while reviewing kernel code.

Fixes 48c5e98fedd9 ("clk: Renesas versaclock7 ccf device driver")
---
 drivers/clk/clk-versaclock7.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/clk-versaclock7.c +1 -1
index adcc603e32593..e3a36dcd98b80 100644
@@ -1197,7 +1197,7 @@ static int vc7_probe(struct i2c_client *client)
 		if (ret) {
 			dev_err_probe(&client->dev, ret,
 				      "unable to register output %d\n", i);
-			return ret;
+			goto err_clk;
 		}
 
 		switch (bank_src_map.type) {
Signature · 1 line
2.53.0
author maintainer
#79 lore raw

PATCH 79/1815 clk: canaan: Clear rate fields before reprogramming dividers

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: David Carlier <[email protected]>

[ Upstream commit 804bac4a2654ac69e328d68e1961eb984fb18a01 ]

The rate set_rate helpers perform a read-modify-write on the divider and multiplier registers but only ever OR the new value in, without first masking off the existing field. The first write after reset lands on a zeroed field and looks correct, but any later reprogramming leaves the old bits set: the field becomes the bitwise OR of the previous and new encodings, corrupting the divider or multiplier.

Mask off each field before writing the new value so reprogramming a clock to a different rate produces the intended register contents.

Fixes a7b7c7c6c016 ("clk: canaan: Add clock driver for Canaan K230")
---
 drivers/clk/clk-k230.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/clk/clk-k230.c +4 -0
index cfc437038e4ed..f34a3e6d3bca0 100644
@@ -2227,6 +2227,7 @@ static int k230_clk_set_rate_mul(struct clk_hw *hw, unsigned long rate,
 	guard(spinlock)(rate_self->lock);
 
 	mul_reg = readl(rate_self->reg + clk->mul_reg_off);
+	mul_reg &= ~(rate_self->mul_mask << rate_self->mul_shift);
 	mul_reg |= ((mul - 1) & rate_self->mul_mask) << (rate_self->mul_shift);
 	mul_reg |= BIT(rate_self->write_enable_bit);
 	writel(mul_reg, rate_self->reg + clk->mul_reg_off);
@@ -2257,6 +2258,7 @@ static int k230_clk_set_rate_div(struct clk_hw *hw, unsigned long rate,
 	guard(spinlock)(rate_self->lock);
 
 	div_reg = readl(rate_self->reg + clk->div_reg_off);
+	div_reg &= ~(rate_self->div_mask << rate_self->div_shift);
 	div_reg |= ((div - 1) & rate_self->div_mask) << (rate_self->div_shift);
 	div_reg |= BIT(rate_self->write_enable_bit);
 	writel(div_reg, rate_self->reg + clk->div_reg_off);
@@ -2287,11 +2289,13 @@ static int k230_clk_set_rate_mul_div(struct clk_hw *hw, unsigned long rate,
 	guard(spinlock)(rate_self->lock);
 
 	div_reg = readl(rate_self->reg + clk->div_reg_off);
+	div_reg &= ~(rate_self->div_mask << rate_self->div_shift);
 	div_reg |= ((div - 1) & rate_self->div_mask) << (rate_self->div_shift);
 	div_reg |= BIT(rate_self->write_enable_bit);
 	writel(div_reg, rate_self->reg + clk->div_reg_off);
 
 	mul_reg = readl(rate_self->reg + clk->mul_reg_off);
+	mul_reg &= ~(rate_self->mul_mask << rate_self->mul_shift);
 	mul_reg |= ((mul - 1) & rate_self->mul_mask) << (rate_self->mul_shift);
 	mul_reg |= BIT(rate_self->write_enable_bit);
 	writel(mul_reg, rate_self->reg + clk->mul_reg_off);
Signature · 1 line
2.53.0
author maintainer
#80 lore raw

PATCH 80/1815 clk: eswin: Add CLK_IGNORE_UNUSED to NoC clock

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Xuyang Dong <[email protected]>

[ Upstream commit 22109b7329f9b3bf2fee73087c73ce46e9bf3751 ]

The gate_noc_nsp_clk provides the essential clock source for NPU, DSP, and PCIe subsystems. During kernel init, the clock framework attempts to disable unused clocks when clk_ignore_unused kernel parameter is not set.
However, gate_noc_nsp_clk is required to remain enabled for these critical subsystems to function properly, causing PCIe boot failures when auto-disabled.

Add CLK_IGNORE_UNUSED flag to gate_noc_nsp_clk to ensure it stays enabled even when clk_ignore_unused is not specified in kernel command line.

Fixes cd44f127c1d4 ("clk: eswin: Add eic7700 clock driver")
---
 drivers/clk/eswin/clk-eic7700.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/clk/eswin/clk-eic7700.c +2 -1
index be81d74192dae..43a47fe16ab14 100644
@@ -791,7 +791,8 @@ static struct eswin_clk_info eic7700_clks[] = {
 			EIC7700_CLK_MUX_CPU_ROOT_3MUX1_GFREE,
 			CLK_SET_RATE_PARENT, EIC7700_REG_OFFSET_U84, 27, 0),
 	ESWIN_GATE_TYPE(EIC7700_CLK_GATE_NOC_NSP_CLK, "gate_noc_nsp_clk",
-			EIC7700_CLK_DIV_NOC_NSP_DYNM, CLK_SET_RATE_PARENT,
+			EIC7700_CLK_DIV_NOC_NSP_DYNM,
+			CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
 			EIC7700_REG_OFFSET_NOC, 31, 0),
 	ESWIN_GATE_TYPE(EIC7700_CLK_GATE_BOOTSPI, "gate_clk_bootspi",
 			EIC7700_CLK_MUX_BOOTSPI_CLK_2MUX1_GFREE,
Signature · 1 line
2.53.0
author maintainer
#81 lore raw

PATCH 81/1815 clk: moxart: remove unused variables, fix refcount leak

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Alexander A. Klimov <[email protected]>

[ Upstream commit 9f275f2ee9ca60ea4c092bdc0195987945ad8ad8 ]

Not only these error checks are redundand,
those of_clk_get() return values weren't cleaned up via clk_put().

Fixes c7bb4fc16ead ("clk: add MOXA ART SoCs clock driver")
---
 drivers/clk/clk-moxart.c | 14 --------------
 1 file changed, 14 deletions(-)
drivers/clk/clk-moxart.c +0 -14
index 3786a0153ad17..40663ef3ef0ae 100644
@@ -17,7 +17,6 @@ static void __init moxart_of_pll_clk_init(struct device_node *node)
 {
 	void __iomem *base;
 	struct clk_hw *hw;
-	struct clk *ref_clk;
 	unsigned int mul;
 	const char *name = node->name;
 	const char *parent_name;
@@ -34,12 +33,6 @@ static void __init moxart_of_pll_clk_init(struct device_node *node)
 	mul = readl(base + 0x30) >> 3 & 0x3f;
 	iounmap(base);
 
-	ref_clk = of_clk_get(node, 0);
-	if (IS_ERR(ref_clk)) {
-		pr_err("%pOF: of_clk_get failed\n", node);
-		return;
-	}
-
 	hw = clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mul, 1);
 	if (IS_ERR(hw)) {
 		pr_err("%pOF: failed to register clock\n", node);
@@ -56,7 +49,6 @@ static void __init moxart_of_apb_clk_init(struct device_node *node)
 {
 	void __iomem *base;
 	struct clk_hw *hw;
-	struct clk *pll_clk;
 	unsigned int div, val;
 	unsigned int div_idx[] = { 2, 3, 4, 6, 8};
 	const char *name = node->name;
@@ -78,12 +70,6 @@ static void __init moxart_of_apb_clk_init(struct device_node *node)
 		val = 0;
 	div = div_idx[val] * 2;
 
-	pll_clk = of_clk_get(node, 0);
-	if (IS_ERR(pll_clk)) {
-		pr_err("%pOF: of_clk_get failed\n", node);
-		return;
-	}
-
 	hw = clk_hw_register_fixed_factor(NULL, name, parent_name, 0, 1, div);
 	if (IS_ERR(hw)) {
 		pr_err("%pOF: failed to register clock\n", node);
Signature · 1 line
2.53.0
author maintainer
#82 lore raw

PATCH 82/1815 clk: nuvoton: ma35d1: fix ignored div_u64 return values in PLL freq calculation

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Joey Lu <[email protected]>

[ Upstream commit b3a2223a7805c7e6759a32a5d6ca574ad07e2710 ]

div_u64() does not modify its argument in place; the return value must be assigned. Both ma35d1_calc_smic_pll_freq() and ma35d1_calc_pll_freq() called div_u64() and discarded the result, leaving pll_freq holding the undivided product and thus returning a frequency orders of magnitude too high.

Fixes 691521a367cf ("clk: nuvoton: Add clock driver for ma35d1 clock controller")
---
 drivers/clk/nuvoton/clk-ma35d1-pll.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/clk/nuvoton/clk-ma35d1-pll.c +2 -2
index 4620acfe47e85..bfedd45bd04b7 100644
@@ -92,7 +92,7 @@ static unsigned long ma35d1_calc_smic_pll_freq(u32 pll0_ctl0,
 	p = FIELD_GET(SPLL0_CTL0_OUTDIV, pll0_ctl0);
 	outdiv = 1 << p;
 	pll_freq = (u64)parent_rate * n;
-	div_u64(pll_freq, m * outdiv);
+	pll_freq = div_u64(pll_freq, m * outdiv);
 	return pll_freq;
 }
 
@@ -110,7 +110,7 @@ static unsigned long ma35d1_calc_pll_freq(u8 mode, u32 *reg_ctl, unsigned long p
 
 	if (mode == PLL_MODE_INT) {
 		pll_freq = (u64)parent_rate * n;
-		div_u64(pll_freq, m * p);
+		pll_freq = div_u64(pll_freq, m * p);
 	} else {
 		x = FIELD_GET(PLL_CTL1_FRAC, reg_ctl[1]);
 		/* 2 decimal places floating to integer (ex. 1.23 to 123) */
Signature · 1 line
2.53.0
author maintainer
#83 lore raw

PATCH 83/1815 clk: nuvoton: ma35d1: fix PLL_CTL1_FRAC bit field width and fractional calc

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Joey Lu <[email protected]>

[ Upstream commit 26de5aed72d80bd8aec2583134aca3597c64fda9 ]

PLL_CTL1_FRAC was defined as GENMASK(31, 24), covering only 8 bits. The hardware fractional field occupies bits [31:8] (24 bits), so the mask must be GENMASK(31, 8).

The previous fractional-mode calculation used FIELD_MAX(PLL_CTL1_FRAC) as the denominator to obtain 2 decimal places. With the corrected 24-bit mask the old divisor is wrong; replace the arithmetic with a proper 24-bit fixed-point rounding to 3 decimal places using the kernel's DIV_ROUND_CLOSEST_ULL helper:

n_frac = n * 1000 + DIV_ROUND_CLOSEST_ULL(x * 1000, 1 << 24)

Fixes 691521a367cf ("clk: nuvoton: Add clock driver for ma35d1 clock controller")
---
 drivers/clk/nuvoton/clk-ma35d1-pll.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/clk/nuvoton/clk-ma35d1-pll.c +4 -4
index bfedd45bd04b7..eb9d69d2077b1 100644
@@ -48,7 +48,7 @@
 #define PLL_CTL1_PD		BIT(0)
 #define PLL_CTL1_BP		BIT(1)
 #define PLL_CTL1_OUTDIV		GENMASK(6, 4)
-#define PLL_CTL1_FRAC		GENMASK(31, 24)
+#define PLL_CTL1_FRAC		GENMASK(31, 8)
 #define PLL_CTL2_SLOPE		GENMASK(23, 0)
 
 #define INDIV_MIN		1
@@ -113,9 +113,9 @@ static unsigned long ma35d1_calc_pll_freq(u8 mode, u32 *reg_ctl, unsigned long p
 		pll_freq = div_u64(pll_freq, m * p);
 	} else {
 		x = FIELD_GET(PLL_CTL1_FRAC, reg_ctl[1]);
-		/* 2 decimal places floating to integer (ex. 1.23 to 123) */
-		n = n * 100 + ((x * 100) / FIELD_MAX(PLL_CTL1_FRAC));
-		pll_freq = div_u64(parent_rate * n, 100 * m * p);
+		/* convert 24-bit fraction to 3 decimal digits, rounding to closest */
+		n = n * 1000 + DIV_ROUND_CLOSEST_ULL((u64)x * 1000, 1ULL << 24);
+		pll_freq = div_u64((u64)parent_rate * n, 1000 * m * p);
 	}
 	return pll_freq;
 }
Signature · 1 line
2.53.0
author maintainer
#84 lore raw

PATCH 84/1815 clk: nuvoton: ma35d1: fix ma35d1_clk_pll_determine_rate logic

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Joey Lu <[email protected]>

[ Upstream commit e1311954cb600d5f95cd9e2fe9a7376edc2ac3c5 ]

ma35d1_clk_pll_determine_rate() called ma35d1_pll_find_closest() unconditionally before the switch statement, and then every case branch overwrote pll_freq by reading the current hardware registers. For CAPLL and DDRPLL this means find_closest() ran unnecessarily (and incorrectly, since those PLLs are read-only) and its result was silently discarded.

Fix by moving the find_closest() call inside the APLL/EPLL/VPLL branch where it belongs. Group CAPLL and DDRPLL together as read-only PLLs that simply report their current rate; handle them with an explicit if/else to keep the CAPLL (SMIC design) and DDRPLL (standard design) paths distinct.

Fixes 691521a367cf ("clk: nuvoton: Add clock driver for ma35d1 clock controller")
---
 drivers/clk/nuvoton/clk-ma35d1-pll.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/clk/nuvoton/clk-ma35d1-pll.c +13 -13
index eb9d69d2077b1..c7c0dc91a012c 100644
@@ -255,32 +255,32 @@ static int ma35d1_clk_pll_determine_rate(struct clk_hw *hw,
 	if (req->best_parent_rate < PLL_FREF_MIN_FREQ || req->best_parent_rate > PLL_FREF_MAX_FREQ)
 		return -EINVAL;
 
-	ret = ma35d1_pll_find_closest(pll, req->rate, req->best_parent_rate,
-				      reg_ctl, &pll_freq);
-	if (ret < 0)
-		return ret;
-
 	switch (pll->id) {
 	case CAPLL:
+	case DDRPLL:
+		/* Read-only PLLs: return current rate */
 		reg_ctl[0] = readl_relaxed(pll->ctl0_base);
-		pll_freq = ma35d1_calc_smic_pll_freq(reg_ctl[0], req->best_parent_rate);
+		if (pll->id == CAPLL) {
+			pll_freq = ma35d1_calc_smic_pll_freq(reg_ctl[0], req->best_parent_rate);
+		} else {
+			reg_ctl[1] = readl_relaxed(pll->ctl1_base);
+			pll_freq = ma35d1_calc_pll_freq(pll->mode, reg_ctl, req->best_parent_rate);
+		}
 		req->rate = pll_freq;
-
 		return 0;
-	case DDRPLL:
 	case APLL:
 	case EPLL:
 	case VPLL:
-		reg_ctl[0] = readl_relaxed(pll->ctl0_base);
-		reg_ctl[1] = readl_relaxed(pll->ctl1_base);
-		pll_freq = ma35d1_calc_pll_freq(pll->mode, reg_ctl, req->best_parent_rate);
+		/* Configurable PLLs: find closest achievable rate */
+		ret = ma35d1_pll_find_closest(pll, req->rate, req->best_parent_rate,
+					      reg_ctl, &pll_freq);
+		if (ret < 0)
+			return ret;
 		req->rate = pll_freq;
-
 		return 0;
 	}
 
 	req->rate = 0;
-
 	return 0;
 }
 
Signature · 1 line
2.53.0
author maintainer
#85 lore raw

PATCH 85/1815 clk: stm32: add missing bitfield.h header

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Rosen Penev <[email protected]>

[ Upstream commit 0bf68e8dcb843f094ed73c2c54e9fe58a7a4f774 ]

It seems some ARM header includes this and the build passes there, but nowhere else. Note that the driver has COMPILE_TEST in depends.

Fixes 37ae8501cdb0 ("clk: stm32: introduce clocks for STM32MP21 platfor")
---
 drivers/clk/stm32/clk-stm32mp21.c | 1 +
 drivers/clk/stm32/clk-stm32mp25.c | 1 +
 2 files changed, 2 insertions(+)
drivers/clk/stm32/clk-stm32mp21.c +1 -0
index c8a37b716bd55..bdb17419908c8 100644
@@ -4,6 +4,7 @@
  * Author: Gabriel Fernandez <[email protected]> for STMicroelectronics.
  */
 
+#include <linux/bitfield.h>
 #include <linux/bus/stm32_firewall_device.h>
 #include <linux/clk-provider.h>
 #include <linux/io.h>
drivers/clk/stm32/clk-stm32mp25.c +1 -0
index 52f0e8a129262..eb0bc918ecee0 100644
@@ -4,6 +4,7 @@
  * Author: Gabriel Fernandez <[email protected]> for STMicroelectronics.
  */
 
+#include <linux/bitfield.h>
 #include <linux/bus/stm32_firewall_device.h>
 #include <linux/clk-provider.h>
 #include <linux/io.h>
Signature · 1 line
2.53.0
author maintainer
#86 lore raw

PATCH 86/1815 ASoC: rt700-sdw: always drain jack work on remove

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Runyu Xiao <[email protected]>

[ Upstream commit 612ccf42acd14bb2685fa60c3495ca13e63e8989 ]

rt700_sdw_remove() drains jack_detect_work and jack_btn_check_work only when rt700->hw_init is true. That state bit is cleared by rt700_update_status() when the SoundWire slave becomes UNATTACHED, but a jack work item can already have been queued by rt700_interrupt_callback() or rt700_jack_init() while the device was initialized.

Do not use hw_init as the remove-time guard for draining these work objects. The delayed works are initialized during rt700_init(), so remove can cancel them unconditionally and pair the object lifetime with the codec-private data lifetime instead of a mutable hardware state bit.

This issue was found by our static analysis tool and then confirmed by manual review of the SoundWire status, interrupt and remove paths. The remove path should drain work based on whether the work object exists, not on a runtime hardware state bit that can change after the work was queued.

A QEMU PoC queued jack_detect_work, simulated SDW_SLAVE_UNATTACHED, and then entered remove. DEBUG_OBJECTS reported an active timer/work object associated with the rt700 jack work path after remove skipped the cancel.

This is sent as an RFC because the practical trigger depends on SoundWire core remove ordering after an UNATTACHED status update. If remove cannot run after hw_init has been cleared while jack work is still pending, this is a defensive lifecycle cleanup rather than a reachable race on current systems.

Fixes 737ee8bdf682 ("ASoC: rt700-sdw: use cancel_work_sync() in .remove as well as .suspend")
---
 sound/soc/codecs/rt700-sdw.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
sound/soc/codecs/rt700-sdw.c +2 -4
index a451d5d1f8ab5..bb449f08e30cf 100644
@@ -458,10 +458,8 @@ static void rt700_sdw_remove(struct sdw_slave *slave)
 {
 	struct rt700_priv *rt700 = dev_get_drvdata(&slave->dev);
 
-	if (rt700->hw_init) {
-		cancel_delayed_work_sync(&rt700->jack_detect_work);
-		cancel_delayed_work_sync(&rt700->jack_btn_check_work);
-	}
+	cancel_delayed_work_sync(&rt700->jack_detect_work);
+	cancel_delayed_work_sync(&rt700->jack_btn_check_work);
 
 	pm_runtime_disable(&slave->dev);
 }
Signature · 1 line
2.53.0
author maintainer
#87 lore raw

PATCH 87/1815 ASoC: fsl_audmix: rework runtime PM handling in probe

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Shengjiu Wang <[email protected]>

[ Upstream commit 3359ba93d01a23b2e4249e9e44ccfe48eb9c5d71 ]

After pm_runtime_enable() the AUDMIX block is powered off and stays suspended until the first runtime resume. Register writes issued between probe() and the first resume (e.g. from DAPM or ALSA control paths) target unpowered hardware and cause a system hang.

Fix this by calling pm_runtime_resume_and_get() immediately after pm_runtime_enable() to power the hardware up and enable its clocks. Release the reference afterwards with pm_runtime_put() to allow the runtime PM framework to suspend the device and switch the regmap to cache-only mode when idle.

When CONFIG_PM is disabled or runtime PM is not enabled, pm_runtime_* calls are stubs that do not power up the hardware. Handle this case explicitly by calling fsl_audmix_runtime_resume() directly so the hardware is always initialised and its clocks are enabled, ensuring register accesses succeed regardless of PM configuration.

Fixes be1df61cf06ef ("ASoC: fsl: Add Audio Mixer CPU DAI driver")
---
 sound/soc/fsl/fsl_audmix.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)
sound/soc/fsl/fsl_audmix.c +22 -2
index f819f33ec46b8..2885cc10b02d4 100644
@@ -457,6 +457,9 @@ static const struct of_device_id fsl_audmix_ids[] = {
 };
 MODULE_DEVICE_TABLE(of, fsl_audmix_ids);
 
+static int fsl_audmix_runtime_resume(struct device *dev);
+static int fsl_audmix_runtime_suspend(struct device *dev);
+
 static int fsl_audmix_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -488,13 +491,25 @@ static int fsl_audmix_probe(struct platform_device *pdev)
 	spin_lock_init(&priv->lock);
 	platform_set_drvdata(pdev, priv);
 	pm_runtime_enable(dev);
+	if (!pm_runtime_enabled(dev)) {
+		ret = fsl_audmix_runtime_resume(dev);
+		if (ret)
+			goto err_disable_pm;
+	}
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret < 0)
+		goto err_pm_get_sync;
+
+	/* To enable regmap cache only when runtime PM enabled */
+	pm_runtime_put(dev);
 
 	ret = devm_snd_soc_register_component(dev, &fsl_audmix_component,
 					      fsl_audmix_dai,
 					      ARRAY_SIZE(fsl_audmix_dai));
 	if (ret) {
 		dev_err(dev, "failed to register ASoC DAI\n");
-		goto err_disable_pm;
+		goto err_pm_get_sync;
 	}
 
 	/*
@@ -506,12 +521,15 @@ static int fsl_audmix_probe(struct platform_device *pdev)
 		if (IS_ERR(priv->pdev)) {
 			ret = PTR_ERR(priv->pdev);
 			dev_err(dev, "failed to register platform: %d\n", ret);
-			goto err_disable_pm;
+			goto err_pm_get_sync;
 		}
 	}
 
 	return 0;
 
+err_pm_get_sync:
+	if (!pm_runtime_status_suspended(dev))
+		fsl_audmix_runtime_suspend(dev);
 err_disable_pm:
 	pm_runtime_disable(dev);
 	return ret;
@@ -522,6 +540,8 @@ static void fsl_audmix_remove(struct platform_device *pdev)
 	struct fsl_audmix *priv = dev_get_drvdata(&pdev->dev);
 
 	pm_runtime_disable(&pdev->dev);
+	if (!pm_runtime_status_suspended(&pdev->dev))
+		fsl_audmix_runtime_suspend(&pdev->dev);
 
 	if (priv->pdev)
 		platform_device_unregister(priv->pdev);
Signature · 1 line
2.53.0
author maintainer
#88 lore raw

PATCH 88/1815 arm64: dts: imx8mp-frdm: Add missing HDMI DDC pinctrl

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Philipp Zabel <[email protected]>

[ Upstream commit c33b03ac7ff7ca0267ae7a4284a2b9258483614d ]

Configure HDMI DDC SCL/SDA pins to support reading EDID.

Fixes 95d7d7d2ad27 ("arm64: dts: imx8mp-frdm: add sd, ethernet, wifi, usb and hdmi support")
---
 arch/arm64/boot/dts/freescale/imx8mp-frdm.dts | 2 ++
 1 file changed, 2 insertions(+)
arch/arm64/boot/dts/freescale/imx8mp-frdm.dts +2 -0
index 5fb9714215bfe..f43330d1ff8b6 100644
@@ -562,6 +562,8 @@ MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02		0x10
 
 	pinctrl_hdmi: hdmigrp {
 		fsl,pins = <
+			MX8MP_IOMUXC_HDMI_DDC_SCL__HDMIMIX_HDMI_SCL	0x1c2
+			MX8MP_IOMUXC_HDMI_DDC_SDA__HDMIMIX_HDMI_SDA	0x1c2
 			MX8MP_IOMUXC_HDMI_CEC__HDMIMIX_HDMI_CEC		0x10
 		>;
 	};
Signature · 1 line
2.53.0
author maintainer
#89 lore raw

PATCH 89/1815 clk: hisilicon: reset: Use devm_kzalloc to initialize hisi_reset_controller

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Min zhang <[email protected]>

[ Upstream commit a8036f4591542de4b38ec81d3e2ba47bc0b2652b ]

Using devm_kmalloc() does not zero-initialize the allocated structure. Uninitialized members in struct hisi_reset_controller may contain garbage data, which can cause reset_controller_register() to fail unexpectedly.

Replace devm_kmalloc() with devm_kzalloc() to ensure all structure fields are properly zero-initialized.

Fixes 97b7129cd2afb ("reset: hisilicon: change the definition of hisi_reset_init")
---
 drivers/clk/hisilicon/reset.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/hisilicon/reset.c +1 -1
index 93cee17db8b16..c3b7daac93132 100644
@@ -91,7 +91,7 @@ struct hisi_reset_controller *hisi_reset_init(struct platform_device *pdev)
 {
 	struct hisi_reset_controller *rstc;
 
-	rstc = devm_kmalloc(&pdev->dev, sizeof(*rstc), GFP_KERNEL);
+	rstc = devm_kzalloc(&pdev->dev, sizeof(*rstc), GFP_KERNEL);
 	if (!rstc)
 		return NULL;
 
Signature · 1 line
2.53.0
author maintainer
#90 lore raw

PATCH 90/1815 ARM: imx: fix device_node refcount leak in imx_src_init()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Weigang He <[email protected]>

[ Upstream commit 936407c3563ac745cbbb9953c0cf2472128a22f4 ]

imx_src_init() obtains a device_node reference via of_find_compatible_node() matching "fsl,imx51-src" and uses it only to call of_iomap(). It never releases that reference: on the success path the function returns at the end without of_node_put(np), leaking one device_node refcount on every boot of an i.MX5/6 platform.

Release the reference right after of_iomap(). of_iomap() maps the node's registers but does not retain a reference to the device_node, so the node can be put once the mapping is done. The early return on a NULL np needs no put.

Found by static analysis tool CodeQL.

Fixes bd3d924d71a4 ("ARM i.MX5: Add System Reset Controller (SRC) support for i.MX51 and i.MX53")
---
 arch/arm/mach-imx/src.c | 1 +
 1 file changed, 1 insertion(+)
arch/arm/mach-imx/src.c +1 -0
index 59a8e8cc44693..f28bfb653a88f 100644
@@ -171,6 +171,7 @@ void __init imx_src_init(void)
 	if (!np)
 		return;
 	src_base = of_iomap(np, 0);
+	of_node_put(np);
 	WARN_ON(!src_base);
 
 	/*
Signature · 1 line
2.53.0
author maintainer
#91 lore raw

PATCH 91/1815 ARM: imx: fix device_node refcount leaks in imx7_src_init()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Weigang He <[email protected]>

[ Upstream commit 3de939b2ac843d56d88e2ab1e1b1f667cba9e1d4 ]

imx7_src_init() obtains two device_node references via of_find_compatible_node() - one for "fsl,imx7d-src" and one for "fsl,imx7d-gpc" - reusing the same np variable, but never calls of_node_put() on either. On every i.MX7D boot up to two device_node refcounts are leaked:

- The "fsl,imx7d-src" node is leaked both when of_iomap() fails (the early return after the mapping) and when it succeeds, because np is then overwritten by the second of_find_compatible_node() call without releasing the prior reference.
- The "fsl,imx7d-gpc" node is leaked on every path leaving the function after it is acquired.

Release each reference immediately after of_iomap() consumes the node. of_iomap() maps the node's registers but does not retain a reference to the device_node, so it is safe to put the node once mapped; this also drops the first reference before np is reused for the second lookup.

Found by static analysis tool CodeQL.

Fixes e34645f45805 ("ARM: imx: add smp support for imx7d")
---
 arch/arm/mach-imx/src.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm/mach-imx/src.c +2 -0
index f28bfb653a88f..c3c80b4c3d53b 100644
@@ -196,6 +196,7 @@ void __init imx7_src_init(void)
 		return;
 
 	src_base = of_iomap(np, 0);
+	of_node_put(np);
 	if (!src_base)
 		return;
 
@@ -204,6 +205,7 @@ void __init imx7_src_init(void)
 		return;
 
 	gpc_base = of_iomap(np, 0);
+	of_node_put(np);
 	if (!gpc_base)
 		return;
 }
Signature · 1 line
2.53.0
author maintainer
#92 lore raw

PATCH 92/1815 ARM: OMAP2+: Fix OF node reference leaks in omap_hwmod

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Yuho Choi <[email protected]>

[ Upstream commit 76103814279724e5c98b1c16a730f56ebede9f74 ]

The OF helpers that return device nodes acquire references that must be released by the caller.

_init() leaks the "ocp" bus node returned by of_find_node_by_name() on all paths after lookup, and also leaks the child returned by of_get_next_child() when parsing module flags. Route the post-lookup returns through a common cleanup path and release the child after use.

omap_hwmod_setup_earlycon_flags() leaks the /chosen node and the UART node resolved from stdout-path. Track them separately and drop both references after use.

Fixes 1aa8f0cb19e5 ("ARM: OMAP2+: Remove unused legacy code for interconnects")
Fixes 4f2122473363 ("ARM: OMAP2+: Check also the first dts child for hwmod flags")
Fixes 8dd6666f4937 ("ARM: OMAP2+: omap_hwmod: Add support for earlycon")
---
 arch/arm/mach-omap2/omap_hwmod.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)
arch/arm/mach-omap2/omap_hwmod.c +18 -8
index 974107ff18b4e..03cd523dff874 100644
@@ -2331,13 +2331,15 @@ static int __init _init(struct omap_hwmod *oh, void *data)
 	if (r < 0) {
 		WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n",
 		     oh->name);
-		return 0;
+		r = 0;
+		goto out_put_node;
 	}
 
 	r = _init_clocks(oh, np);
 	if (r < 0) {
 		WARN(1, "omap_hwmod: %s: couldn't init clocks\n", oh->name);
-		return -EINVAL;
+		r = -EINVAL;
+		goto out_put_node;
 	}
 
 	if (np) {
@@ -2345,13 +2347,19 @@ static int __init _init(struct omap_hwmod *oh, void *data)
 
 		parse_module_flags(oh, np);
 		child = of_get_next_child(np, NULL);
-		if (child)
+		if (child) {
 			parse_module_flags(oh, child);
+			of_node_put(child);
+		}
 	}
 
 	oh->_state = _HWMOD_STATE_INITIALIZED;
 
-	return 0;
+	r = 0;
+
+out_put_node:
+	of_node_put(bus);
+	return r;
 }
 
 /**
@@ -3608,13 +3616,13 @@ int omap_hwmod_init_module(struct device *dev,
 #ifdef CONFIG_SERIAL_EARLYCON
 static void __init omap_hwmod_setup_earlycon_flags(void)
 {
-	struct device_node *np;
+	struct device_node *np, *chosen;
 	struct omap_hwmod *oh;
 	const char *uart;
 
-	np = of_find_node_by_path("/chosen");
-	if (np) {
-		uart = of_get_property(np, "stdout-path", NULL);
+	chosen = of_find_node_by_path("/chosen");
+	if (chosen) {
+		uart = of_get_property(chosen, "stdout-path", NULL);
 		if (uart) {
 			np = of_find_node_by_path(uart);
 			if (np) {
@@ -3629,8 +3637,10 @@ static void __init omap_hwmod_setup_earlycon_flags(void)
 				if (oh)
 					oh->flags |= DEBUG_OMAPUART_FLAGS;
 			}
+			of_node_put(np);
 		}
 	}
+	of_node_put(chosen);
 }
 #endif
 
Signature · 1 line
2.53.0
author maintainer
#93 lore raw

PATCH 93/1815 firmware: imx: sm-misc: Add NULL check for kmalloc in syslog_show

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Li Jun <[email protected]>

[ Upstream commit 4cf26bc2e7e099c86127d63ed7272753da45737e ]

Add a proper NULL check for the kmalloc() return value in syslog_show(). If memory allocation fails, syslog would be NULL and passing it to misc_syslog() could lead to a NULL pointer dereference.

Fixes 80a4062e8821 ("firmware: imx: sm-misc: Dump syslog info")
---
 drivers/firmware/imx/sm-misc.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/firmware/imx/sm-misc.c +3 -0
index ac9af824c2d40..fb8d7bdb5b084 100644
@@ -79,6 +79,9 @@ static int syslog_show(struct seq_file *file, void *priv)
 	u16 size = SZ_4K / 4;
 	int ret;
 
+	if (!syslog)
+		return -ENOMEM;
+
 	if (!ph)
 		return -ENODEV;
 
Signature · 1 line
2.53.0
author maintainer
#94 lore raw

PATCH 94/1815 arm64: dts: imx93-kontron: set memory node to 0x80000000/1GiB

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Frieder Schrempf <[email protected]>

[ Upstream commit 9c269fe7eae8cb60d8d6c326dd8955818722fae9 ]

The start address of the DRAM area is 0x80000000. The minimal size of the DDR on the SoM is 1 GiB.

Fixes 2b52fd6035b7 ("arm64: dts: Add support for Kontron i.MX93 OSM-S SoM and BL carrier board")
---
 arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi +2 -2
index c79b1df339db1..f881912cde460 100644
@@ -15,9 +15,9 @@ aliases {
 		rtc1 = &bbnsm_rtc;
 	};
 
-	memory@40000000 {
+	memory@80000000 {
 		device_type = "memory";
-		reg = <0x0 0x40000000 0 0x80000000>;
+		reg = <0x0 0x80000000 0 0x40000000>;
 	};
 
 	chosen {
Signature · 1 line
2.53.0
author maintainer
#95 lore raw

PATCH 95/1815 arm64: dts: freescale: imx95-toradex-smarc: add alias for lpuart5

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Francesco Dolcini <[email protected]>

[ Upstream commit 3385e2f77182469940c136b9eeedf01f27b7441f ]

Add alias for lpuart5 so the UART gets a stable line number. Without this alias, the lpuart driver fails:

fsl-lpuart 42590000.serial: failed to get alias id, errno -19

This prevents the Bluetooth controller connected to this UART from working.

Fixes 104a391bb6ff ("arm64: dts: freescale: imx95-toradex-smarc: Enable bluetooth on lpuart5")
---
 arch/arm64/boot/dts/freescale/imx95-toradex-smarc.dtsi | 1 +
 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/freescale/imx95-toradex-smarc.dtsi +1 -0
index 7d760470201fa..a6c5398a81e3c 100644
@@ -24,6 +24,7 @@ aliases {
 		serial1 = &lpuart1;
 		serial2 = &lpuart6;
 		serial3 = &lpuart3;
+		serial4 = &lpuart5;
 	};
 
 	chosen {
Signature · 1 line
2.53.0
author maintainer
#96 lore raw

PATCH 96/1815 arm64: dts: imx8mp-ab2: Enable MU2 for DSP communication

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Shengjiu Wang <[email protected]>

[ Upstream commit b1b6c1c4d3c63d8097c933009bdb618d1be18305 ]

Enable the MU2 (Message Unit 2) node on the i.MX8MP Audio Board v2. MU2 is required for inter-processor communication between the application CPU and the HiFi4 DSP, allowing DSP firmware to exchange control and status messages with the Linux host.

Without this change, the DSP driver cannot establish the message channel and DSP audio processing is non-functional.

Fixes bf68c18150efc ("arm64: dts: imx8mp-ab2: add support for NXP i.MX8MP audio board (version 2)")
---
 arch/arm64/boot/dts/freescale/imx8mp-ab2.dts | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/boot/dts/freescale/imx8mp-ab2.dts +4 -0
index 443e4fd5b9bfc..285bf79864ebd 100644
@@ -775,6 +775,10 @@ &micfil {
 	status = "okay";
 };
 
+&mu2 {
+	status = "okay";
+};
+
 &pwm1 {
 	pinctrl-0 = <&pinctrl_pwm1>;
 	pinctrl-names = "default";
Signature · 1 line
2.53.0
author maintainer
#97 lore raw

PATCH 97/1815 clk: imx: scu: drop redundant init.ops variable assignment

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Brian Masney <[email protected]>

[ Upstream commit 5f2db1ce201216e81333ecc2ab51494410b2fe0d ]

The init.ops is assigned a default value, however right below it is an if, else if, and else where all of them also assign a value to init.ops. Drop the redundant init.ops assignment at the top.

Fixes 3b9ea606cda53 ("clk: imx: scu: add cpu frequency scaling support")
---
 drivers/clk/imx/clk-scu.c | 1 -
 1 file changed, 1 deletion(-)
drivers/clk/imx/clk-scu.c +0 -1
index 9b33df9967ece..658b6d94de9b4 100644
@@ -475,7 +475,6 @@ struct clk_hw *__imx_clk_scu(struct device *dev, const char *name,
 	clk->clk_type = clk_type;
 
 	init.name = name;
-	init.ops = &clk_scu_ops;
 	if (rsrc_id == IMX_SC_R_A35 || rsrc_id == IMX_SC_R_A53 || rsrc_id == IMX_SC_R_A72)
 		init.ops = &clk_scu_cpu_ops;
 	else if (rsrc_id == IMX_SC_R_PI_0_PLL)
Signature · 1 line
2.53.0
author maintainer
#98 lore raw

PATCH 98/1815 drm/lima: call drm_mm_init() with a valid allocation range

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Henrik Grimler <[email protected]>

[ Upstream commit 3b3bce4a692ac60d9f4a341e6b597dd1fd0a28f9 ]

lima_vm_create() is currently run before va_start and va_end are set up, meaning they are both 0. lima_vm_create() runs drm_mm_init() with them as arguments for the allocator, and if DRM_DEBUG_MM is enabled the DRM_MM_BUG_ON check in drm_mm_init then fires, as seen here on exynos4412-odroid-u2:

[    1.736297] ------------[ cut here ]------------
[    1.740370] kernel BUG at drivers/gpu/drm/drm_mm.c:931!
[    1.745574] Internal error: Oops - BUG: 0 [#1] SMP ARM
[    1.750697] Modules linked in:
[    1.753734] CPU: 0 UID: 0 PID: 41 Comm: kworker/u16:1 Not tainted 7.0.10-postmarketos-exynos4 #11 PREEMPT
[    1.763372] Hardware name: Samsung Exynos (Flattened Device Tree)
[    1.769446] Workqueue: events_unbound deferred_probe_work_func
[    1.775261] PC is at drm_mm_init+0x9c/0xa4
[    1.779339] LR is at lima_vm_create+0x144/0x17c

[ ... ]

Fix the issue by moving the lima_vm_create() call after va_start and va_end are set up.

Fixes a1d2a6339961 ("drm/lima: driver for ARM Mali4xx GPUs")
---
 drivers/gpu/drm/lima/lima_device.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/lima/lima_device.c +6 -6
index 0bf7105c8748b..7c873e62c16da 100644
@@ -368,12 +368,6 @@ int lima_device_init(struct lima_device *ldev)
 	if (err)
 		goto err_out0;
 
-	ldev->empty_vm = lima_vm_create(ldev);
-	if (!ldev->empty_vm) {
-		err = -ENOMEM;
-		goto err_out1;
-	}
-
 	ldev->va_start = 0;
 	if (ldev->id == lima_gpu_mali450) {
 		ldev->va_end = LIMA_VA_RESERVE_START;
@@ -387,6 +381,12 @@ int lima_device_init(struct lima_device *ldev)
 	} else
 		ldev->va_end = LIMA_VA_RESERVE_END;
 
+	ldev->empty_vm = lima_vm_create(ldev);
+	if (!ldev->empty_vm) {
+		err = -ENOMEM;
+		goto err_out1;
+	}
+
 	ldev->iomem = devm_platform_ioremap_resource(pdev, 0);
 	if (IS_ERR(ldev->iomem)) {
 		dev_err(ldev->dev, "fail to ioremap iomem\n");
Signature · 1 line
2.53.0
author maintainer
#99 lore raw

PATCH 99/1815 mm/mm_init: fix incorrect node_spanned_pages

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Wei Yang <[email protected]>

[ Upstream commit 7783dcd79ae9c4aa48bc47bd4275772445dc4b2a ]

Current node_spanned_pages is got as a summation of all zone's spanned page in calculate_node_totalpages(). Generally this is good, but if we use kernelcore=mirror, it is would be wrong.

Without kernelcore=mirror:

    The test machine has below memory layout:

      memory[0x0]     [0x0000000000001000-0x000000000009efff], 0x000000000009e000 bytes on node 0 flags: 0x0
      memory[0x1]     [0x0000000000100000-0x00000000bffdefff], 0x00000000bfedf000 bytes on node 0 flags: 0x0
      memory[0x2]     [0x0000000100000000-0x00000001bfffffff], 0x00000000c0000000 bytes on node 0 flags: 0x0

    And the Zone range is:

      DMA      [mem 0x0000000000001000-0x0000000000ffffff]
      DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
      Normal   [mem 0x0000000100000000-0x00000001bfffffff]

    Then we see, with spanned_pages printed:

      On node 0 spanned_pages: 1835007 totalpages: 1572733

With kernelcore=mirror:

    The test machine has below memory layout:

      memory[0x0]     [0x0000000000001000-0x000000000009efff], 0x000000000009e000 bytes on node 0 flags: 0x2
      memory[0x1]     [0x0000000000100000-0x00000000bffdefff], 0x00000000bfedf000 bytes on node 0 flags: 0x2
      memory[0x2]     [0x0000000100000000-0x000000013fffffff], 0x0000000040000000 bytes on node 0 flags: 0x2
      memory[0x3]     [0x0000000140000000-0x00000001bfffffff], 0x0000000080000000 bytes on node 0 flags: 0x0

    And the Zone range is:

      DMA      [mem 0x0000000000001000-0x0000000000ffffff]
      DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
      Normal   [mem 0x0000000100000000-0x00000001bfffffff]
      Device   empty
    Movable zone start for each node
      Node 0: 0x0000000140000000

    Then we see, with spanned_pages printed:

      On node 0 spanned_pages: 2359295 totalpages: 1572733

The total range of memory on node 0 doesn't change, but the spanned_pages becomes much larger.

The reason is when kernelcore=mirror is specified, the range of Zone Normal and Zone Movable would overlap. So the overlapped range would be calculated twice.

A wrong node_spanned_pages would effect defer_init(), since each zone_end_pfn is less than pgdat_end_pfn().

As we already passed in node_start_pfn and node_end_pfn, fix this by get it from (node_start_pfn - node_end_pfn) directly.

Fixes 342332e6a925 ("mm/page_alloc.c: introduce kernelcore=mirror option")
Cc Yuan Liu <[email protected]>
---
 mm/mm_init.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
mm/mm_init.c +2 -3
index ab42850818692..d52eea4e63479 100644
@@ -1338,7 +1338,7 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat,
 						unsigned long node_start_pfn,
 						unsigned long node_end_pfn)
 {
-	unsigned long realtotalpages = 0, totalpages = 0;
+	unsigned long realtotalpages = 0;
 	enum zone_type i;
 
 	for (i = 0; i < MAX_NR_ZONES; i++) {
@@ -1368,11 +1368,10 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat,
 		zone->present_early_pages = real_size;
 #endif
 
-		totalpages += spanned;
 		realtotalpages += real_size;
 	}
 
-	pgdat->node_spanned_pages = totalpages;
+	pgdat->node_spanned_pages = node_end_pfn - node_start_pfn;
 	pgdat->node_present_pages = realtotalpages;
 	pr_debug("On node %d totalpages: %lu\n", pgdat->node_id, realtotalpages);
 }
Signature · 1 line
2.53.0
author maintainer
#100 lore raw

PATCH 100/1815 sched/core: Fix inter-class wakeup_preempt()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Peter Zijlstra <[email protected]>

[ Upstream commit fa02b2868420d9f33d64ddcb15ef0f96880b2a6d ]

The way wakeup_preempt() works since commit 704069649b5b ("sched/core: Rework sched_class::wakeup_preempt() and rq_modified_*()") is that it will call rq->next_class->wakeup_preempt(rq, p) when p is of an equal or higher class, and raise ->next_class when higher.

This means that:

	running idle task

	wakeup fair-A
	  (next_class == idle)
	  if (sched_class_above(fair, idle)) {
	     wakeup_preempt_idle(fair-A);
	     resched_curr(rq);
	     next_class = fair;
	  }

	wakeup fair-B
	  (next_class == fair)
	  if (fair == fair)
	    wakeup_preempt_fair(fair-B);
	      (but current is idle)

All wakeup_preempt_$class() methods, except for wakeup_preempt_scx() (for whoem this was build) ignore cross-class wakeups by testing if @p is of the right class, but per the above case, it also should check current.

This is mostly harmless in the current form, but will lead to trouble with later patches.

Fixes 704069649b5b ("sched/core: Rework sched_class::wakeup_preempt() and rq_modified_*()")
---
 kernel/sched/deadline.c | 6 ++++--
 kernel/sched/fair.c     | 3 ++-
 kernel/sched/rt.c       | 3 ++-
 3 files changed, 8 insertions(+), 4 deletions(-)
kernel/sched/deadline.c +4 -2
index 200300043fa54..857dbe3519a86 100644
@@ -2734,15 +2734,17 @@ static int balance_dl(struct rq *rq, struct rq_flags *rf)
  */
 static void wakeup_preempt_dl(struct rq *rq, struct task_struct *p, int flags)
 {
+	struct task_struct *donor = rq->donor;
 	/*
 	 * Can only get preempted by stop-class, and those should be
 	 * few and short lived, doesn't really make sense to push
 	 * anything away for that.
 	 */
-	if (p->sched_class != &dl_sched_class)
+	if (p->sched_class != &dl_sched_class ||
+	    donor->sched_class != &dl_sched_class)
 		return;
 
-	if (dl_entity_preempt(&p->dl, &rq->donor->dl)) {
+	if (dl_entity_preempt(&p->dl, &donor->dl)) {
 		resched_curr(rq);
 		return;
 	}
kernel/sched/fair.c +2 -1
index f15f5764818eb..c36f1e8bff647 100644
@@ -9780,7 +9780,8 @@ static void wakeup_preempt_fair(struct rq *rq, struct task_struct *p, int wake_f
 	/*
 	 * XXX Getting preempted by higher class, try and find idle CPU?
 	 */
-	if (p->sched_class != &fair_sched_class)
+	if (p->sched_class != &fair_sched_class ||
+	    donor->sched_class != &fair_sched_class)
 		return;
 
 	if (unlikely(se == pse))
kernel/sched/rt.c +2 -1
index e474c31d8fe66..e6e5f8a2caafb 100644
@@ -1629,7 +1629,8 @@ static void wakeup_preempt_rt(struct rq *rq, struct task_struct *p, int flags)
 	/*
 	 * XXX If we're preempted by DL, queue a push?
 	 */
-	if (p->sched_class != &rt_sched_class)
+	if (p->sched_class != &rt_sched_class ||
+	    donor->sched_class != &rt_sched_class)
 		return;
 
 	if (p->prio < donor->prio) {
Signature · 1 line
2.53.0
author maintainer
#101 lore raw

PATCH 101/1815 sched/fair: Fix overflow in update_tg_cfs_runnable()

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Chen, Yu C <[email protected]>

[ Upstream commit 4f166adb5cb0525d9e32d45729fd8f28c80acbee ]

A divide-by-zero crash is observed when running hackbench:

   [14697.488452] CPU: 112 UID: 0 PID: 124791 Comm: hackbench Not tainted 7.1.0-rc2+
   [14697.492627] RIP: 0010:propagate_entity_load_avg+0x35f/0x3e0
   [14697.506799]  <TASK>
   [14697.507411]  __dequeue_task+0x2b4/0xc70
   [14697.508677]  dequeue_task_fair+0x36/0x370
   [14697.509047]  dequeue_task+0x101/0x2f0
   [14697.509426]  __schedule+0x1b1/0x1a00
   [14697.510868]  anon_pipe_read+0x3da/0x450
   [14697.511400]  vfs_read+0x361/0x390
   [14697.512053]  __x64_sys_read+0x19/0x30

The divide-by-zero happens here:

  if (scale_load_down(gcfs_rq->load.weight)) {
           load_sum = div_u64(gcfs_rq->avg.load_sum,
                              scale_load_down(gcfs_rq->load.weight));
  }

gcfs_rq->load.weight is an insane large value and is truncated to the lower 32 bits by div_u64, which happen to be 0.

Using AI for investigation, the cause is a u32 overflow in update_tg_cfs_runnable(), and flat pickup became a victim when using tg_tasks():

u32 new_sum, divider;
...
new_sum = se->avg.runnable_avg * divider; <-- boom

The following sequence shows how this triggers the crash:

propagate_entity_load_avg()
update_tg_cfs_runnable() # u32 overflow corrupts runnable_sum

__update_load_avg_cfs_rq()
___update_load_avg() # computes insane runnable_avg
update_tg_load_avg() # propagates to tg->runnable_avg

update_cfs_group()

     calc_concur_shares()
       tg_tasks()                 # long-to-int truncation, negative nr
     reweight_entity()            # corrupted se->load.weight
       update_load_add()          # corrupted cfs_rq->load.weight

propagate_entity_load_avg()
update_tg_cfs_load()
div_u64() # divide-by-zero

Fix by widening new_sum from u32 to u64 (no need to force tg_tasks() to return unsigned long after this fix)

Fixes 95246d1ec80b ("sched/pelt: Relax the sync of runnable_sum with runnable_avg")
Assisted-by Claude:claude-opus-4.6
---
 kernel/sched/fair.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/sched/fair.c +3 -2
index c36f1e8bff647..bfe0972abd5f3 100644
@@ -5174,7 +5174,8 @@ static inline void
 update_tg_cfs_runnable(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfs_rq *gcfs_rq)
 {
 	long delta_sum, delta_avg = gcfs_rq->avg.runnable_avg - se->avg.runnable_avg;
-	u32 new_sum, divider;
+	u64 new_sum;
+	u32 divider;
 
 	/* Nothing to update */
 	if (!delta_avg)
@@ -5188,7 +5189,7 @@ update_tg_cfs_runnable(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cf
 
 	/* Set new sched_entity's runnable */
 	se->avg.runnable_avg = gcfs_rq->avg.runnable_avg;
-	new_sum = se->avg.runnable_avg * divider;
+	new_sum = (u64)se->avg.runnable_avg * divider;
 	delta_sum = (long)new_sum - (long)se->avg.runnable_sum;
 	se->avg.runnable_sum = new_sum;
 
Signature · 1 line
2.53.0
author maintainer
#102 lore raw

PATCH 102/1815 perf/x86/intel/uncore: Keep PCI PMUs working when MMIO/MSR setup fails

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Zide Chen <[email protected]>

[ Upstream commit 3012af7df3430788eddd30b3c6654d0a0a5f06c6 ]

uncore_event_cpu_online() returns -ENOMEM early when both the MSR and MMIO box allocations fail. This also aborts PCI uncore setup, even though PCI PMUs are independent of the MSR/MMIO paths.

Remove the early return so PCI uncore setup always runs regardless of whether MSR or MMIO box allocation succeeds.

Fixes 3da04b8a00dd ("perf/x86/intel/uncore: Support MMIO type uncore blocks")
---
 arch/x86/events/intel/uncore.c | 2 --
 1 file changed, 2 deletions(-)
arch/x86/events/intel/uncore.c +0 -2
index 7857959c6e823..cb61f2a65d853 100644
@@ -1631,8 +1631,6 @@ static int uncore_event_cpu_online(unsigned int cpu)
 	die = topology_logical_die_id(cpu);
 	msr_ret = uncore_box_ref(uncore_msr_uncores, die, cpu);
 	mmio_ret = uncore_box_ref(uncore_mmio_uncores, die, cpu);
-	if (msr_ret && mmio_ret)
-		return -ENOMEM;
 
 	/*
 	 * Check if there is an online cpu in the package
Signature · 1 line
2.53.0
author maintainer
#103 lore raw

PATCH 103/1815 perf/x86/intel/uncore: Fix PCI PMU cleanup on setup failure

In reply to Greg Kroah-Hartman

7.2-stable review patch. If anyone has any objections, please let me know.

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

From: Zide Chen <[email protected]>

[ Upstream commit 003267cb94e21d762eb72d6977d84f44f1705bb7 ]

When uncore_pci_pmu_register() fails, pmu->boxes[die] is set to NULL before returning. In the uncore_pci_remove() path, this causes uncore_pci_pmu_unregister() to be skipped entirely, leaking pmu->activeboxes. In the uncore_bus_notify() path, uncore_pci_pmu_unregister() may still be called and must exit early when pmu->boxes[die] is NULL to avoid a NULL pointer dereference, and to ensure activeboxes is only decremented for a previously active box.

Additionally, since pci_get_drvdata() returns NULL on registration failure, uncore_pci_remove() can no longer treat NULL drvdata as an indicator of an auxiliary PCI device. Remove the associated WARN_ON_ONCE().

Stable-dep-of: 174f0582e38a ("perf/x86/intel/uncore: Fix uncore_box ref/unref ordering")

---
 arch/x86/events/intel/uncore.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
arch/x86/events/intel/uncore.c +4 -1
index cb61f2a65d853..b2f5ff494aae1 100644
@@ -1183,6 +1183,7 @@ static int uncore_pci_pmu_register(struct pci_dev *pdev,
 	/* First active box registers the pmu */
 	ret = uncore_pmu_register(pmu);
 	if (ret) {
+		atomic_dec(&pmu->activeboxes);
 		pmu->boxes[die] = NULL;
 		uncore_box_exit(box);
 		kfree(box);
@@ -1248,6 +1249,9 @@ static void uncore_pci_pmu_unregister(struct intel_uncore_pmu *pmu, int die)
 {
 	struct intel_uncore_box *box = pmu->boxes[die];
 
+	if (!box)
+		return;
+
 	pmu->boxes[die] = NULL;
 	if (atomic_dec_return(&pmu->activeboxes) == 0)
 		uncore_pmu_unregister(pmu);
@@ -1272,7 +1276,6 @@ static void uncore_pci_remove(struct pci_dev *pdev)
 				break;
 			}
 		}
-		WARN_ON_ONCE(i >= UNCORE_EXTRA_PCI_DEV_MAX);
 		return;
 	}
 
Signature · 1 line
2.53.0