6.11.11-rc1 review
Subsystems (6)
Greg Kroah-Hartman
maintainercover 6.11.11-rc1 review
-----------
Note, this is will probably be the last 6.11.y kernel to be released. Please move to the 6.12.y branch at this time.
-----------
This is the start of the stable review cycle for the 6.11.11 release. There are 817 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 Thu, 05 Dec 2024 14:36:47 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.11.11-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.11.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 6.11.11-rc1
Ming Lei <[email protected]>
block: don't verify IO lock for freeze/unfreeze in elevator_init_mq()
Ming Lei <[email protected]>
block: always verify unfreeze lock on the owner task
Patryk Wlazlyn <[email protected]>
tools/power turbostat: Fix child's argument forwarding
Zhang Rui <[email protected]>
tools/power turbostat: Fix trailing '\n' parsing
Dan Carpenter <[email protected]>
sh: intc: Fix use-after-free bug in register_intc_controller()
Zhang Xianwei <[email protected]>
brd: decrease the number of allocated pages which discarded
Yu Kuai <[email protected]>
block, bfq: fix bfqq uaf in bfq_limit_depth()
Benjamin Coddington <[email protected]>
nfs/blocklayout: Limit repeat device registration on failure
Benjamin Coddington <[email protected]>
nfs/blocklayout: Don't attempt unregister for invalid block device
Liu Jian <[email protected]>
sunrpc: fix one UAF issue caused by sunrpc kernel tcp socket
Benjamin Coddington <[email protected]>
SUNRPC: timeout and cancel TLS handshake with -ETIMEDOUT
Liu Jian <[email protected]>
sunrpc: clear XPRT_SOCK_UPD_TIMEOUT when reset transport
Li Lingfeng <[email protected]>
nfs: ignore SB_RDONLY when mounting nfs
Dan Carpenter <[email protected]>
cifs: unlock on error in smb3_reconfigure()
Shyam Prasad N <[email protected]>
cifs: during remount, make sure passwords are in sync
Masahiro Yamada <[email protected]>
modpost: remove incorrect code in do_eisa_entry()
John Garry <[email protected]>
block: Don't allow an atomic write be truncated in blkdev_write_iter()
Paul Aurich <[email protected]>
smb: Initialize cfid->tcon before performing network ops
Matt Fleming <[email protected]>
kbuild: deb-pkg: Don't fail if modules.order is missing
Masahiro Yamada <[email protected]>
Rename .data.once to .data..once to fix resetting WARN*_ONCE
Masahiro Yamada <[email protected]>
Rename .data.unlikely to .data..unlikely
Maxime Chevallier <[email protected]>
rtc: ab-eoz9: don't fail temperature reads on undervoltage notification
Pali Rohár <[email protected]>
cifs: Fix parsing reparse point with native symlink in SMB1 non-UNICODE session
Pali Rohár <[email protected]>
cifs: Fix parsing native symlinks relative to the export
Andy Shevchenko <[email protected]>
x86/Documentation: Update algo in init_size description of boot protocol
Henrique Carvalho <[email protected]>
smb: client: disable directory caching when dir_cache_timeout is zero
Namhyung Kim <[email protected]>
perf/arm-cmn: Ensure port and device id bits are set properly
Chun-Tse Shao <[email protected]>
perf/arm-smmuv3: Fix lockdep assert in ->event_init()
Alex Zenla <[email protected]>
9p/xen: fix release of IRQ
Alex Zenla <[email protected]>
9p/xen: fix init sequence
Nilay Shroff <[email protected]>
nvme-fabrics: fix kernel crash while shutting down controller
Christoph Hellwig <[email protected]>
block: return unsigned int from bdev_io_min
Yu Kuai <[email protected]>
block: fix uaf for flush rq while iterating tags
Ming Lei <[email protected]>
block: model freeze & enter queue as lock for supporting lockdep
Ming Lei <[email protected]>
blk-mq: add non_owner variant of start_freeze/unfreeze queue APIs
Breno Leitao <[email protected]>
nvme/multipath: Fix RCU list traversal to use SRCU primitive
Hannes Reinecke <[email protected]>
nvme-multipath: avoid hang on inaccessible namespaces
Trond Myklebust <[email protected]>
Revert "nfs: don't reuse partially completed requests in nfs_lock_and_join_requests"
Wolfram Sang <[email protected]>
rtc: rzn1: fix BCD to rtc_time conversion errors
Qingfang Deng <[email protected]>
jffs2: fix use of uninitialized variable
Waqar Hameed <[email protected]>
ubifs: authentication: Fix use-after-free in ubifs_tnc_end_commit
Zhihao Cheng <[email protected]>
ubi: fastmap: Fix duplicate slab cache names while attaching
Zhihao Cheng <[email protected]>
ubifs: Correct the total block count by deducting journal reservation
Zhihao Cheng <[email protected]>
ubi: fastmap: wl: Schedule fm_work if wear-leveling pool is empty
Yongliang Gao <[email protected]>
rtc: check if __rtc_read_time was successful in rtc_timer_do_work()
Nobuhiro Iwamatsu <[email protected]>
rtc: abx80x: Fix WDT bit position of the status register
Jinjie Ruan <[email protected]>
rtc: st-lpc: Use IRQF_NO_AUTOEN flag in request_irq()
Trond Myklebust <[email protected]>
NFSv4.0: Fix a use-after-free problem in the asynchronous open()
Tiwei Bie <[email protected]>
um: Always dump trace for specified task in show_stack
Tiwei Bie <[email protected]>
um: ubd: Initialize ubd's disk pointer in ubd_add
Christoph Hellwig <[email protected]>
kfifo: don't include dma-mapping.h in kfifo.h
Tiwei Bie <[email protected]>
um: Fix the return value of elf_core_copy_task_fpregs
Tiwei Bie <[email protected]>
um: Fix potential integer overflow during physmem setup
Yang Erkun <[email protected]>
SUNRPC: make sure cache entry active before cache_show
Chuck Lever <[email protected]>
NFSD: Prevent a potential integer overflow
Yuan Can <[email protected]>
Input: cs40l50 - fix wrong usage of INIT_WORK()
Ma Wupeng <[email protected]>
ipc: fix memleak if msg_init_ns failed in create_ipc_ns
Chao Yu <[email protected]>
f2fs: fix to do sanity check on node blkaddr in truncate_node()
Bartosz Golaszewski <[email protected]>
lib: string_helpers: silence snprintf() output truncation warning
Ming Lei <[email protected]>
ublk: fix error code for unsupported command
Javier Carrasco <[email protected]>
counter: stm32-timer-cnt: fix device_node handling in probe_encoder()
Javier Carrasco <[email protected]>
staging: vchiq_arm: Fix missing refcount decrement in error path for fw_node
Thinh Nguyen <[email protected]>
usb: dwc3: gadget: Fix looping of queued SG entries
Thinh Nguyen <[email protected]>
usb: dwc3: gadget: Fix checking for number of TRBs left
Hubert Wiśniewski <[email protected]>
usb: musb: Fix hardware lockup on first Rx endpoint request
Thinh Nguyen <[email protected]>
usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED
Stanislaw Gruszka <[email protected]>
usb: misc: ljca: move usb_autopm_put_interface() after wait for response
Stanislaw Gruszka <[email protected]>
usb: misc: ljca: set small runtime autosuspend delay
Paul Aurich <[email protected]>
smb: During unmount, ensure all cached dir instances drop their dentry
Paul Aurich <[email protected]>
smb: prevent use-after-free due to open_cached_dir error paths
Paul Aurich <[email protected]>
smb: Don't leak cfid when reconnect races with open_cached_dir
Paulo Alcantara <[email protected]>
smb: client: handle max length for SMB symlinks
Steve French <[email protected]>
smb3: request handle caching when caching directories
Takashi Iwai <[email protected]>
ALSA: hda/realtek: Apply quirk for Medion E15433
Dinesh Kumar <[email protected]>
ALSA: hda/realtek: Fix Internal Speaker and Mic boost of Infinix Y4 Max
Kailang Yang <[email protected]>
ALSA: hda/realtek: Set PCBeep to default value for ALC274
Kailang Yang <[email protected]>
ALSA: hda/realtek: Update ALC225 depop procedure
Takashi Iwai <[email protected]>
ALSA: pcm: Add sanity NULL check for the default mmap fault handler
Takashi Iwai <[email protected]>
ALSA: ump: Fix evaluation of MIDI 1.0 FB info
Takashi Iwai <[email protected]>
ALSA: rawmidi: Fix kvfree() call in spinlock
Hans Verkuil <[email protected]>
media: v4l2-core: v4l2-dv-timings: check cvt/gtf result
Javier Carrasco <[email protected]>
soc: fsl: rcpm: fix missing of_node_put() in copy_ippdexpcr1_setting()
Joe Damato <[email protected]>
netdev-genl: Hold rcu_read_lock in napi_get
Chen-Yu Tsai <[email protected]>
arm64: dts: mediatek: mt8186-corsola-voltorb: Merge speaker codec nodes
Stanislaw Gruszka <[email protected]>
media: intel/ipu6: do not handle interrupts when device is disabled
Qiu-ji Chen <[email protected]>
media: wl128x: Fix atomicity violation in fmc_send_cmd()
Peter Große <[email protected]>
i40e: Fix handling changed priv flags
Jason Gerecke <[email protected]>
HID: wacom: Interpret tilt data from Intuos Pro BT as signed values
Ziwei Xiao <[email protected]>
gve: Flow steering trigger reset only for timeout error
Bart Van Assche <[email protected]>
blk-mq: Make blk_mq_quiesce_tagset() hold the tag list mutex less long
Muchun Song <[email protected]>
block: fix ordering between checking BLK_MQ_S_STOPPED request adding
Muchun Song <[email protected]>
block: fix ordering between checking QUEUE_FLAG_QUIESCED request adding
Muchun Song <[email protected]>
block: fix missing dispatching request when queue is started or unquiesced
Will Deacon <[email protected]>
arm64: tls: Fix context-switching of tpidrro_el0 when kpti is enabled
Ming Lei <[email protected]>
ublk: fix ublk_ch_mmap() for 64K page size
Zicheng Qu <[email protected]>
iio: gts: Fix uninitialized symbol 'ret'
Huacai Chen <[email protected]>
sh: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK
Tiwei Bie <[email protected]>
um: vector: Do not use drvdata in release
Damien Le Moal <[email protected]>
block: Prevent potential deadlock in blk_revalidate_disk_zones()
Javier Carrasco <[email protected]>
mtd: ubi: fix unreleased fwnode_handle in find_volume_fwnode()
Arnd Bergmann <[email protected]>
serial: amba-pl011: fix build regression
Kartik Rajput <[email protected]>
serial: amba-pl011: Fix RX stall when DMA is used
Bin Liu <[email protected]>
serial: 8250: omap: Move pm_runtime_get_sync
Filip Brozovic <[email protected]>
serial: 8250_fintek: Add support for F81216E
Michal Simek <[email protected]>
dt-bindings: serial: rs485: Fix rs485-rts-delay property
Tiwei Bie <[email protected]>
um: net: Do not use drvdata in release
Tiwei Bie <[email protected]>
um: ubd: Do not use drvdata in release
Zhihao Cheng <[email protected]>
ubi: wl: Put source PEB into correct list if trying locking LEB failed
Sebastian Andrzej Siewior <[email protected]>
x86/CPU/AMD: Terminate the erratum_1386_microcode array
Russell King (Oracle) <[email protected]>
irqchip/irq-mvebu-sei: Move misplaced select() callback to SEI CP domain
Javier Carrasco <[email protected]>
platform/chrome: cros_ec_typec: fix missing fwnode reference decrement
Paulo Alcantara <[email protected]>
smb: client: fix NULL ptr deref in crypto_aead_setkey()
Yunseong Kim <[email protected]>
ksmbd: fix use-after-free in SMB request handling
Jesse Taube <[email protected]>
RISC-V: Check scalar unaligned access on all CPUs
Jesse Taube <[email protected]>
RISC-V: Scalar unaligned access emulated on hotplug CPUs
Josh Poimboeuf <[email protected]>
parisc/ftrace: Fix function graph tracing disablement
Meetakshi Setiya <[email protected]>
cifs: support mounting with alternate password to allow password rotation
Jinjie Ruan <[email protected]>
cpufreq: mediatek-hw: Fix wrong return value in mtk_cpufreq_get_cpu_power()
Cheng Ming Lin <[email protected]>
mtd: spi-nor: core: replace dummy buswidth from addr to data
Stanislaw Gruszka <[email protected]>
spi: Fix acpi deferred irq probe
Jeongjun Park <[email protected]>
netfilter: ipset: add missing range check in bitmap_ip_uadt
Sai Kumar Cholleti <[email protected]>
gpio: exar: set value when external pull-up or pull-down is present
Mikulas Patocka <[email protected]>
blk-settings: round down io_opt to physical_block_size
Pavel Begunkov <[email protected]>
io_uring: check for overflows in io_pin_pages
Pavel Begunkov <[email protected]>
io_uring: fix corner case forgetting to vunmap
Greg Kroah-Hartman <[email protected]>
Revert "serial: sh-sci: Clean sci_ports[0] after at earlycon exit"
Claudiu Beznea <[email protected]>
serial: sh-sci: Clean sci_ports[0] after at earlycon exit
Michal Vrastil <[email protected]>
Revert "usb: gadget: composite: fix OS descriptors w_value logic"
Jaegeuk Kim <[email protected]>
Revert "f2fs: remove unreachable lazytime mount option parsing"
Christian Brauner <[email protected]>
Revert "fs: don't block i_writecount during exec"
Greg Kroah-Hartman <[email protected]>
Revert "exec: don't WARN for racy path_noexec check"
Javier Carrasco <[email protected]>
wifi: brcmfmac: release 'root' node in all execution paths
Jose Ignacio Tornos Martinez <[email protected]>
wifi: ath12k: fix crash when unbinding
Aleksei Vetrov <[email protected]>
wifi: nl80211: fix bounds checker error in nl80211_parse_sched_scan
Guilherme G. Piccoli <[email protected]>
wifi: rtlwifi: Drastically reduce the attempts to read efuse in case of failures
Jose Ignacio Tornos Martinez <[email protected]>
wifi: ath12k: fix warning when unbinding
Andreas Kemnade <[email protected]>
ARM: dts: omap36xx: declare 1GHz OPP as turbo again
Michal Pecio <[email protected]>
usb: xhci: Avoid queuing redundant Stop Endpoint commands
Michal Pecio <[email protected]>
usb: xhci: Fix TD invalidation under pending Set TR Dequeue
Michal Pecio <[email protected]>
usb: xhci: Limit Stop Endpoint retries
Andrej Shadura <[email protected]>
Bluetooth: Fix type of len in rfcomm_sock_getsockopt{,_old}()
Kuangyi Chiang <[email protected]>
xhci: Don't issue Reset Device command to Etron xHCI host
Kuangyi Chiang <[email protected]>
xhci: Don't perform Soft Retry for Etron xHCI host
Kuangyi Chiang <[email protected]>
xhci: Combine two if statements for Etron xHCI host
Kuangyi Chiang <[email protected]>
xhci: Fix control transfer error on Etron xHCI host
Yuezhang Mo <[email protected]>
exfat: fix out-of-bounds access of directory entries
Namjae Jeon <[email protected]>
exfat: fix uninit-value in __exfat_get_dentry_set
Angelo Dureghello <[email protected]>
dt-bindings: iio: dac: ad3552r: fix maximum spi speed
Krzysztof Kozlowski <[email protected]>
dt-bindings: pinctrl: samsung: Fix interrupt constraint for variants with fallbacks
Johan Hovold <[email protected]>
pinctrl: qcom: spmi: fix debugfs drive strength
Thomas Weißschuh <[email protected]>
tools/nolibc: s390: include std.h
Ahmed Ehab <[email protected]>
locking/lockdep: Avoid creating new name string literals in lockdep_set_subclass()
Nicolas Bouchinet <[email protected]>
tty: ldsic: fix tty_ldisc_autoload sysctl's proc_handler
Angelo Dureghello <[email protected]>
iio: dac: adi-axi-dac: fix wrong register bitfield
Jinjie Ruan <[email protected]>
apparmor: test: Fix memory leak for aa_unpack_strdup()
Jann Horn <[email protected]>
comedi: Flush partial mappings in error case
Jann Horn <[email protected]>
fsnotify: Fix ordering of iput() and watched_objects decrement
Amir Goldstein <[email protected]>
fsnotify: fix sending inotify event with unexpected filename
Gustavo A. R. Silva <[email protected]>
clk: clk-loongson2: Fix potential buffer overflow in flexible-array member access
Gustavo A. R. Silva <[email protected]>
clk: clk-loongson2: Fix memory corruption bug in struct loongson2_clk_provider
Huacai Chen <[email protected]>
LoongArch: Explicitly specify code model in Makefile
Lukas Wunner <[email protected]>
PCI: Fix use-after-free of slot->bus on hot remove
Jan Hendrik Farr <[email protected]>
Compiler Attributes: disable __counted_by for clang < 19.1.3
Kunkun Jiang <[email protected]>
KVM: arm64: vgic-its: Clear DTE when MAPD unmaps a device
Jing Zhang <[email protected]>
KVM: arm64: vgic-its: Add a data length check in vgic_its_save_*
Raghavendra Rao Ananta <[email protected]>
KVM: arm64: Get rid of userspace_irqchip_in_use
Kunkun Jiang <[email protected]>
KVM: arm64: vgic-its: Clear ITE when DISCARD frees an ITE
Oliver Upton <[email protected]>
KVM: arm64: Don't retire aborted MMIO instruction
Raghavendra Rao Ananta <[email protected]>
KVM: arm64: Ignore PMCNTENSET_EL0 while checking for overflow status
Marc Zyngier <[email protected]>
KVM: arm64: vgic-v3: Sanitise guest writes to GICR_INVLPIR
Gautam Menghani <[email protected]>
powerpc/pseries: Fix KVM guest detection for disabling hardlockup detector
Sean Christopherson <[email protected]>
KVM: x86/mmu: Skip the "try unsync" path iff the old SPTE was a leaf SPTE
Paolo Bonzini <[email protected]>
KVM: x86: switch hugepage recovery thread to vhost_task
Eric Biggers <[email protected]>
crypto: x86/aegis128 - access 32-bit arguments as 32-bit
Adrian Hunter <[email protected]>
perf/x86/intel/pt: Fix buffer full but size is 0 case
Claudiu Beznea <[email protected]>
ASoC: da7213: Populate max_register to regmap_config
Qiu-ji Chen <[email protected]>
ASoC: codecs: Fix atomicity violation in snd_soc_component_get_drvdata()
Ilya Zverev <[email protected]>
ASoC: amd: yc: Add a quirk for microfone on Lenovo ThinkPad P14s Gen 5 21MES00B00
Artem Sadovnikov <[email protected]>
jfs: xattr: check invalid xattr size more strictly
Theodore Ts'o <[email protected]>
ext4: fix FS_IOC_GETFSMAP handling
Jeongjun Park <[email protected]>
ext4: supress data-race warnings in ext4_free_inodes_{count,set}()
Matti Vaittinen <[email protected]>
irqdomain: Always associate interrupts for legacy domains
Manikanta Mylavarapu <[email protected]>
soc: qcom: socinfo: fix revision check in qcom_socinfo_probe()
Hans de Goede <[email protected]>
ASoC: Intel: sst: Fix used of uninitialized ctx to log an error
Mikulas Patocka <[email protected]>
dm-bufio: fix warnings about duplicate slab caches
Mikulas Patocka <[email protected]>
dm-cache: fix warnings about duplicate slab caches
Dmitry Baryshkov <[email protected]>
usb: typec: ucsi: glink: fix off-by-one in connector_status
Vitalii Mordan <[email protected]>
usb: ehci-spear: fix call balance of sehci clk handling routines
Takashi Iwai <[email protected]>
ALSA: usb-audio: Fix out of bounds reads when finding clock sources
Benoît Sevens <[email protected]>
ALSA: usb-audio: Fix potential out-of-bound accesses for Extigy and Mbox devices
Qiu-ji Chen <[email protected]>
xen: Fix the issue of resource not being properly released in xenbus_dev_probe()
Jakub Kicinski <[email protected]>
net_sched: sch_fq: don't follow the fast path if Tx is behind now
Niklas Schnelle <[email protected]>
s390/pci: Fix potential double remove of hotplug slot
Nícolas F. R. A. Prado <[email protected]>
ASoC: mediatek: Check num_codecs is not zero to avoid panic during probe
Venkata Prasad Potturu <[email protected]>
ASoC: amd: yc: Fix for enabling DMIC on acp6x via _DSD entry
Zichen Xie <[email protected]>
ALSA: core: Fix possible NULL dereference caused by kunit_kzalloc()
chao liu <[email protected]>
apparmor: fix 'Do simple duplicate message elimination'
Nirmoy Das <[email protected]>
drm/xe/ufence: Wake up waiters after setting ufence->signalled
Charles Han <[email protected]>
ASoC: imx-audmix: Add NULL check in imx_audmix_probe
Zicheng Qu <[email protected]>
drm/amd/display: Fix null check for pipe_ctx->plane_state in hwss_setup_dpp
Zicheng Qu <[email protected]>
drm/amd/display: Fix null check for pipe_ctx->plane_state in dcn20_program_pipe
Steven 'Steve' Kendall <[email protected]>
drm/radeon: Fix spurious unplug event on radeon HDMI
Wu Hoi Pok <[email protected]>
drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
Wu Hoi Pok <[email protected]>
drm/radeon: add helper rdev_to_drm(rdev)
Kailang Yang <[email protected]>
ALSA: hda/realtek: Update ALC256 depop procedure
Gaosheng Cui <[email protected]>
firmware_loader: Fix possible resource leak in fw_log_firmware_info()
Dan Carpenter <[email protected]>
usb: typec: fix potential array underflow in ucsi_ccg_sync_control()
Carl Vanderlip <[email protected]>
bus: mhi: host: Switch trace_mhi_gen_tre fields to native endian
Jiasheng Jiang <[email protected]>
counter: ti-ecap-capture: Add check for clk_enable()
Jiasheng Jiang <[email protected]>
counter: stm32-timer-cnt: Add check for clk_enable()
Charles Han <[email protected]>
phy: realtek: usb: fix NULL deref in rtk_usb3phy_probe
Charles Han <[email protected]>
phy: realtek: usb: fix NULL deref in rtk_usb2phy_probe
Raviteja Laggyshetty <[email protected]>
interconnect: qcom: icc-rpmh: probe defer incase of missing QoS clock dependency
Michael Grzeschik <[email protected]>
usb: gadget: uvc: wake pump everytime we update the free list
Keita Morisaki <[email protected]>
devres: Fix page faults when tracing devres from unloaded modules
Jinjie Ruan <[email protected]>
misc: apds990x: Fix missing pm_runtime_disable()
Edward Adam Davis <[email protected]>
USB: chaoskey: Fix possible deadlock chaoskey_list_lock
Oliver Neukum <[email protected]>
USB: chaoskey: fail open after removal
Oliver Neukum <[email protected]>
usb: yurex: make waiting on yurex_write interruptible
Jeongjun Park <[email protected]>
usb: using mutex lock and supporting O_NONBLOCK flag in iowarrior_read()
Christophe JAILLET <[email protected]>
iio: light: al3010: Fix an error handling path in al3010_probe()
Paolo Abeni <[email protected]>
ipmr: fix tables suspicious RCU usage
Paolo Abeni <[email protected]>
ip6mr: fix tables suspicious RCU usage
Kuniyuki Iwashima <[email protected]>
tcp: Fix use-after-free of nreq in reqsk_timer_handler().
Michal Luczaj <[email protected]>
rxrpc: Improve setsockopt() handling of malformed user input
Michal Luczaj <[email protected]>
llc: Improve setsockopt() handling of malformed user input
Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix possible deadlocks
Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix slab-use-after-free Read in set_powered_sync
Michael Chan <[email protected]>
bnxt_en: Unregister PTP during PCI shutdown and suspend
Michael Chan <[email protected]>
bnxt_en: Refactor bnxt_ptp_init()
Shravya KN <[email protected]>
bnxt_en: Fix receive ring space parameters when XDP is active
Shravya KN <[email protected]>
bnxt_en: Set backplane link modes correctly for ethtool
Saravanan Vajravel <[email protected]>
bnxt_en: Reserve rings after PCIe AER recovery if NIC interface is down
Eric Dumazet <[email protected]>
net: hsr: fix hsr_init_sk() vs network/transport headers.
Csókás, Bence <[email protected]>
spi: atmel-quadspi: Fix register name in verbose logging function
Hariprasad Kelam <[email protected]>
octeontx2-af: Quiesce traffic before NIX block reset
Hariprasad Kelam <[email protected]>
octeontx2-af: RPM: fix stale FCFEC counters
Hariprasad Kelam <[email protected]>
octeontx2-af: RPM: fix stale RSFEC counters
Hariprasad Kelam <[email protected]>
octeontx2-af: RPM: Fix low network performance
Hariprasad Kelam <[email protected]>
octeontx2-af: RPM: Fix mismatch in lmac type
Maxime Chevallier <[email protected]>
net: stmmac: dwmac-socfpga: Set RX watchdog interrupt as broken
Vitalii Mordan <[email protected]>
marvell: pxa168_eth: fix call balance of pep->clk handling routines
Rosen Penev <[email protected]>
net: mdio-ipq4019: add missing error check
Hangbin Liu <[email protected]>
net/ipv6: delete temporary address if mngtmpaddr is removed or unmanaged
Sidraya Jayagond <[email protected]>
s390/iucv: MSG_PEEK causes memory leak in iucv_sock_destruct()
Yuezhang Mo <[email protected]>
exfat: fix file being changed by unaligned direct write
Jakub Kicinski <[email protected]>
netlink: fix false positive warning in extack during dumps
Guenter Roeck <[email protected]>
net: microchip: vcap: Add typegroup table terminators in kunit tests
Oleksij Rempel <[email protected]>
net: usb: lan78xx: Fix refcounting and autosuspend on invalid WoL configuration
Pavan Chebbi <[email protected]>
tg3: Set coherent DMA mask bits to 31 for BCM57766 chipsets
Oleksij Rempel <[email protected]>
net: usb: lan78xx: Fix memory leak on device unplug by freeing PHY device
Oleksij Rempel <[email protected]>
net: usb: lan78xx: Fix double free issue with interrupt buffer allocation
ChiYuan Huang <[email protected]>
power: supply: rt9471: Use IC status regfield to report real charger status
ChiYuan Huang <[email protected]>
power: supply: rt9471: Fix wrong WDT function regfield declaration
Barnabás Czémán <[email protected]>
power: supply: bq27xxx: Fix registers of bq27426
Bart Van Assche <[email protected]>
power: supply: core: Remove might_sleep() from power_supply_put()
Tiezhu Yang <[email protected]>
LoongArch: BPF: Sign-extend return values
Tiezhu Yang <[email protected]>
LoongArch: Fix build failure with GCC 15 (-std=gnu23)
Randy Dunlap <[email protected]>
fs_parser: update mount_api doc to match function signature
Avihai Horon <[email protected]>
vfio/pci: Properly hide first-in-list PCIe extended capability
Andy Shevchenko <[email protected]>
gpio: zevio: Add missed label initialisation
Michael Ellerman <[email protected]>
selftests/mount_setattr: Fix failures on 64K PAGE_SIZE kernels
Yishai Hadas <[email protected]>
vfio/mlx5: Fix unwind flows in mlx5vf_pci_save/resume_device_data()
Yishai Hadas <[email protected]>
vfio/mlx5: Fix an unwind issue in mlx5vf_add_migration_pages()
Si-Wei Liu <[email protected]>
vdpa/mlx5: Fix suboptimal range on iotlb iteration
Lorenzo Bianconi <[email protected]>
phy: airoha: Fix REG_CSR_2L_RX{0,1}_REV0 definitions
Lorenzo Bianconi <[email protected]>
phy: airoha: Fix REG_CSR_2L_JCPLL_SDM_HREN config in airoha_pcie_phy_init_ssc_jcpll()
Lorenzo Bianconi <[email protected]>
phy: airoha: Fix REG_PCIE_PMA_TX_RESET config in airoha_pcie_phy_init_csr_2l()
Lorenzo Bianconi <[email protected]>
phy: airoha: Fix REG_CSR_2L_PLL_CMN_RESERVE0 config in airoha_pcie_phy_init_clk_out()
Aleksa Savic <[email protected]>
hwmon: (aquacomputer_d5next) Fix length of speed_input array
Murad Masimov <[email protected]>
hwmon: (tps23861) Fix reporting of negative temperatures
Chao Yu <[email protected]>
f2fs: fix to do cast in F2FS_{BLK_TO_BYTES, BTYES_TO_BLK} to avoid overflow
Zhiguo Niu <[email protected]>
f2fs: clean up val{>>,<<}F2FS_BLKSIZE_BITSChuck Lever <[email protected]>
NFSD: Fix nfsd4_shutdown_copy()
Ye Bin <[email protected]>
svcrdma: fix miss destroy percpu_counter in svc_rdma_proc_init()
Yang Erkun <[email protected]>
nfsd: release svc_expkey/svc_export with rcu_work
Chuck Lever <[email protected]>
NFSD: Cap the number of bytes copied by nfs4_reset_recoverydir()
Chuck Lever <[email protected]>
NFSD: Prevent NULL dereference in nfsd4_process_cb_update()
Zhongqiu Han <[email protected]>
PCI: endpoint: epf-mhi: Avoid NULL dereference if DT lacks 'mmio'
Sibi Sankar <[email protected]>
remoteproc: qcom_q6v5_mss: Re-order writes to the IMEM region
Jonathan Marek <[email protected]>
rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length
Dmitry Baryshkov <[email protected]>
remoteproc: qcom: pas: add minidump_id to SM8350 resources
Joe Hattori <[email protected]>
remoteproc: qcom: adsp: Remove subdevs on the error path of adsp_probe()
Joe Hattori <[email protected]>
remoteproc: qcom: pas: Remove subdevs on the error path of adsp_probe()
Benjamin Peterson <[email protected]>
perf trace: Avoid garbage when not printing a syscall's arguments
Benjamin Peterson <[email protected]>
perf trace: Do not lose last events in a race
Howard Chu <[email protected]>
perf trace: Fix tracing itself, creating feedback loops
Jean-Philippe Romain <[email protected]>
perf list: Fix topic and pmu_name argument order
Jeff Layton <[email protected]>
nfsd: drop inode parameter from nfsd4_change_attribute()
Chuck Lever <[email protected]>
svcrdma: Address an integer overflow
Antonio Quartulli <[email protected]>
m68k: coldfire/device.c: only build FEC when HW macros are defined
Jean-Michel Hautbois <[email protected]>
m68k: mcfgpio: Fix incorrect register offset for CONFIG_M5441x
Benjamin Peterson <[email protected]>
perf trace: avoid garbage when not printing a trace event's arguments
Chao Yu <[email protected]>
f2fs: fix to avoid forcing direct write to use buffered IO on inline_data inode
Chao Yu <[email protected]>
f2fs: fix to map blocks correctly for direct write
Long Li <[email protected]>
f2fs: fix race in concurrent f2fs_stop_gc_thread
Yicong Yang <[email protected]>
perf build: Add missing cflags when building with custom libtraceevent
Siddharth Vadapalli <[email protected]>
PCI: j721e: Deassert PERST# after a delay of PCIE_T_PVPERL_MS milliseconds
Théo Lebrun <[email protected]>
PCI: j721e: Add suspend and resume support
Thomas Richard <[email protected]>
PCI: j721e: Use T_PERST_CLK_US macro
Théo Lebrun <[email protected]>
PCI: j721e: Add reset GPIO to struct j721e_pcie
Thomas Richard <[email protected]>
PCI: cadence: Set cdns_pcie_host_init() global
Thomas Richard <[email protected]>
PCI: cadence: Extract link setup sequence from cdns_pcie_host_setup()
Manivannan Sadhasivam <[email protected]>
PCI: tegra194: Move controller cleanups to pex_ep_event_pex_rst_deassert()
Manivannan Sadhasivam <[email protected]>
PCI: qcom-ep: Move controller cleanups to qcom_pcie_perst_deassert()
Zhiguo Niu <[email protected]>
f2fs: fix to avoid use GC_AT when setting gc_mode as GC_URGENT_LOW or GC_URGENT_MID
Chao Yu <[email protected]>
f2fs: fix to avoid potential deadlock in f2fs_record_stop_reason()
Zeng Heng <[email protected]>
f2fs: Fix not used variable 'index'
Yongpeng Yang <[email protected]>
f2fs: check curseg->inited before write_sum_page in change_curseg
LongPing Wei <[email protected]>
f2fs: fix the wrong f2fs_bug_on condition in f2fs_do_replace_block
Frank Li <[email protected]>
i3c: master: Remove i3c_dev_disable_ibi_locked(olddev) on device hotjoin
Arnaldo Carvalho de Melo <[email protected]>
perf ftrace latency: Fix unit on histogram first entry when using --use-nsec
Hou Tao <[email protected]>
virtiofs: use pages instead of pointer for kernel direct IO
Li Huafei <[email protected]>
perf disasm: Use disasm_line__free() to properly free disasm_line
Francesco Zardi <[email protected]>
rust: block: fix formatting of kernel::block::mq::request module
Ilpo Järvinen <[email protected]>
PCI: cpqphp: Fix PCIBIOS_* return value confusion
weiyufeng <[email protected]>
PCI: cpqphp: Use PCI_POSSIBLE_ERROR() to check config reads
Paolo Bonzini <[email protected]>
rust: macros: fix documentation of the paste! macro
Yutaro Ohno <[email protected]>
rust: kernel: fix THIS_MODULE header path in ThisModule doc comment
Leo Yan <[email protected]>
perf probe: Correct demangled symbols in C++ program
Ian Rogers <[email protected]>
perf probe: Fix libdw memory leak
Veronika Molnarova <[email protected]>
perf dso: Fix symtab_type for kmod compression
Chao Yu <[email protected]>
f2fs: fix to account dirty data in __get_secs_required()
Ye Bin <[email protected]>
f2fs: fix null-ptr-deref in f2fs_submit_page_bio()
Qi Han <[email protected]>
f2fs: compress: fix inconsistent update of i_blocks in release_compress_blocks and reserve_compress_blocks
Veronika Molnarova <[email protected]>
perf test attr: Add back missing topdown events
Michael Petlan <[email protected]>
perf trace: Keep exited threads for summary
Ian Rogers <[email protected]>
perf stat: Fix affinity memory leaks on error path
Levi Yun <[email protected]>
perf stat: Close cork_fd when create_perf_stat_counter() failed
Todd Kjos <[email protected]>
PCI: Fix reset_method_store() memory leak
Thomas Falcon <[email protected]>
perf mem: Fix printing PERF_MEM_LVLNUM_{L2_MHB|MSC}Ian Rogers <[email protected]>
perf stat: Uniquify event name improvements
Weilin Wang <[email protected]>
perf test: Add test for Intel TPEBS counting mode
Andreas Gruenbacher <[email protected]>
gfs2: Fix unlinked inode cleanup
Andreas Gruenbacher <[email protected]>
gfs2: Allow immediate GLF_VERIFY_DELETE work
Andreas Gruenbacher <[email protected]>
gfs2: Rename GLF_VERIFY_EVICT to GLF_VERIFY_DELETE
James Clark <[email protected]>
perf cs-etm: Don't flush when packet_queue fills up
David Laight <[email protected]>
x86: fix off-by-one in access_ok()
Dan Carpenter <[email protected]>
mailbox: arm_mhuv2: clean up loop in get_irq_chan_comb()
Yang Yingliang <[email protected]>
mailbox: mtk-cmdq: fix wrong use of sizeof in cmdq_get_clocks()
Paul Aurich <[email protected]>
smb: cached directories can be more than root file handle
Tomas Glozar <[email protected]>
rtla/timerlat: Do not set params->user_workload with -U
zhang jiao <[email protected]>
pinctrl: k210: Undef K210_PC_DEFAULT
Konrad Dybcio <[email protected]>
arm64: dts: qcom: sc8180x: Add a SoC-specific compatible to cpufreq-hw
Nuno Sa <[email protected]>
clk: clk-axi-clkgen: make sure to enable the AXI bus clock
Nuno Sa <[email protected]>
dt-bindings: clock: axi-clkgen: include AXI clk
Lorenzo Bianconi <[email protected]>
clk: en7523: fix estimation of fixed rate for EN7581
Lorenzo Bianconi <[email protected]>
clk: en7523: introduce chip_scu regmap
Lorenzo Bianconi <[email protected]>
clk: en7523: move clock_register in hw_init callback
Lorenzo Bianconi <[email protected]>
clk: en7523: remove REG_PCIE*_{MEM,MEM_MASK} configuration
Sergio Paracuellos <[email protected]>
clk: ralink: mtmips: fix clocks probe order in oldest ralink SoCs
Sergio Paracuellos <[email protected]>
clk: ralink: mtmips: fix clock plan for Ralink SoC RT3883
Charles Han <[email protected]>
clk: clk-apple-nco: Add NULL check in applnco_probe
Patrisious Haddad <[email protected]>
RDMA/mlx5: Move events notifier registration to be after device registration
Zhen Lei <[email protected]>
fbdev: sh7760fb: Fix a possible memory leak in sh7760fb_alloc_mem()
Zhang Zekun <[email protected]>
powerpc/kexec: Fix return of uninitialized variable
Kajol Jain <[email protected]>
KVM: PPC: Book3S HV: Fix kmv -> kvm typo
Feng Fang <[email protected]>
RDMA/hns: Fix different dgids mapping to the same dip_idx
Michal Suchanek <[email protected]>
powerpc/sstep: make emulate_vsx_load and emulate_vsx_store static
Gautam Menghani <[email protected]>
KVM: PPC: Book3S HV: Avoid returning to nested hypervisor on pending doorbells
Gautam Menghani <[email protected]>
KVM: PPC: Book3S HV: Stop using vc->dpdes for nested KVM guests
Harshit Mogalapalli <[email protected]>
dax: delete a stale directory pmem
Dmitry Antipov <[email protected]>
ocfs2: fix uninitialized value in ocfs2_file_read_iter()
Dan Carpenter <[email protected]>
kunit: skb: use "gfp" variable instead of hardcoding GFP_KERNEL
Sabyrzhan Tasbolatov <[email protected]>
kasan: move checks to do_strncpy_from_user
Jinjie Ruan <[email protected]>
cpufreq: CPPC: Fix wrong return value in cppc_get_cpu_power()
Jinjie Ruan <[email protected]>
cpufreq: CPPC: Fix wrong return value in cppc_get_cpu_cost()
Andy Shevchenko <[email protected]>
cpufreq: loongson3: Check for error code from devm_mutex_init() call
Junxian Huang <[email protected]>
RDMA/hns: Fix NULL pointer derefernce in hns_roce_map_mr_sg()
Junxian Huang <[email protected]>
RDMA/hns: Fix out-of-order issue of requester when setting FENCE
Sourabh Jain <[email protected]>
fadump: reserve param area if below boot_mem_top
Hari Bathini <[email protected]>
powerpc/fadump: allocate memory for additional parameters early
Kirill A. Shutemov <[email protected]>
x86/tdx: Dynamically disable SEPT violations from causing #VEs
Kirill A. Shutemov <[email protected]>
x86/tdx: Rename tdx_parse_tdinfo() to tdx_setup()
Kirill A. Shutemov <[email protected]>
x86/tdx: Introduce wrappers to read and write TD metadata
Bart Van Assche <[email protected]>
scsi: sg: Enable runtime power management
Zhen Lei <[email protected]>
scsi: qedi: Fix a possible memory leak in qedi_alloc_and_init_sb()
Zhen Lei <[email protected]>
scsi: qedf: Fix a possible memory leak in qedf_alloc_and_init_sb()
Zeng Heng <[email protected]>
scsi: fusion: Remove unused variable 'rc'
Ye Bin <[email protected]>
scsi: bfa: Fix use-after-free in bfad_im_module_exit()
Baolin Liu <[email protected]>
scsi: target: Fix incorrect function name in pscsi_create_type_disk()
Mirsad Todorovac <[email protected]>
fs/proc/kcore.c: fix coccinelle reported ERROR instances
Raymond Hackley <[email protected]>
leds: ktd2692: Set missing timing properties
Javier Carrasco <[email protected]>
leds: max5970: Fix unreleased fwnode_handle in probe function
Zhang Changzhong <[email protected]>
mfd: rt5033: Fix missing regmap_del_irq_chip()
Tamir Duberstein <[email protected]>
checkpatch: always parse orig_commit in fixes tag
Zhenzhong Duan <[email protected]>
iommu/vt-d: Fix checks and print in pgtable_walk()
Zhenzhong Duan <[email protected]>
iommu/vt-d: Fix checks and print in dmar_fault_dump_ptes()
Yang Yingliang <[email protected]>
clk: imx: imx8-acm: Fix return value check in clk_imx_acm_attach_pm_domains()
Dong Aisheng <[email protected]>
clk: imx: clk-scu: fix clk enable state save and restore
Peng Fan <[email protected]>
clk: imx: fracn-gppll: fix pll power up
Peng Fan <[email protected]>
clk: imx: fracn-gppll: correct PLL initialization flow
Peng Fan <[email protected]>
clk: imx: lpcg-scu: SW workaround for errata (e10858)
Björn Töpel <[email protected]>
riscv: kvm: Fix out-of-bounds array access
Yong-Xuan Wang <[email protected]>
RISC-V: KVM: Fix APLIC in_clrip and clripnum write emulation
Liu Jian <[email protected]>
RDMA/rxe: Set queue pair cur_qp_state when being queried
Biju Das <[email protected]>
clk: renesas: rzg2l: Fix FOUTPOSTDIV clk
Andre Przywara <[email protected]>
clk: sunxi-ng: d1: Fix PLL_AUDIO0 preset
Kashyap Desai <[email protected]>
RDMA/bnxt_re: Check cqe flags to know imm_data vs inv_irkey
Zhu Yanjun <[email protected]>
RDMA/rxe: Fix the qp flush warnings in req
wenglianfa <[email protected]>
RDMA/hns: Fix cpu stuck caused by printings during reset
Junxian Huang <[email protected]>
RDMA/hns: Use dev_* printings in hem code instead of ibdev_*
Yuyu Li <[email protected]>
RDMA/hns: Modify debugfs name
wenglianfa <[email protected]>
RDMA/hns: Fix flush cqe error when racing with destroy qp
wenglianfa <[email protected]>
RDMA/hns: Fix an AEQE overflow error caused by untimely update of eq_db_ci
Vasant Hegde <[email protected]>
iommu/amd/pgtbl_v2: Take protection domain lock before invalidating TLB
Jason Gunthorpe <[email protected]>
iommu/amd: Narrow the use of struct protection_domain to invalidation
Jason Gunthorpe <[email protected]>
iommu/amd: Store the nid in io_pgtable_cfg instead of the domain
Jason Gunthorpe <[email protected]>
iommu/amd: Rename struct amd_io_pgtable iopt to pgtbl
Jason Gunthorpe <[email protected]>
iommu/amd: Remove the amd_iommu_domain_set_pt_root() and related
Jason Gunthorpe <[email protected]>
iommu/amd: Remove amd_iommu_domain_update() from page table freeing
Jinjie Ruan <[email protected]>
cpufreq: CPPC: Fix possible null-ptr-deref for cppc_get_cpu_cost()
Jinjie Ruan <[email protected]>
cpufreq: CPPC: Fix possible null-ptr-deref for cpufreq_cpu_get_raw()
Michael Ellerman <[email protected]>
powerpc/pseries: Fix dtl_access_lock to be a rw_semaphore
Takahiro Kuwano <[email protected]>
mtd: spi-nor: spansion: Use nor->addr_nbytes in octal DTR mode in RD_ANY_REG_OP
Zichen Xie <[email protected]>
clk: sophgo: avoid integer overflow in sg2042_pll_recalc_rate()
Ritesh Harjani (IBM) <[email protected]>
powerpc/mm/fault: Fix kfence page fault reporting
Miquel Raynal <[email protected]>
mtd: rawnand: atmel: Fix possible memory leak
Biju Das <[email protected]>
mtd: hyperbus: rpc-if: Add missing MODULE_DEVICE_TABLE
Ritesh Harjani (IBM) <[email protected]>
powerpc/fadump: Move fadump_cma_init to setup_arch() after initmem_init()
Ritesh Harjani (IBM) <[email protected]>
powerpc/fadump: Refactor and prepare fadump_cma_init for late init
Yuan Can <[email protected]>
cpufreq: loongson2: Unregister platform_driver on failure
Andy Shevchenko <[email protected]>
mfd: intel_soc_pmic_bxtwc: Fix IRQ domain names duplication
Matti Vaittinen <[email protected]>
regmap: Allow setting IRQ domain name suffix
Matti Vaittinen <[email protected]>
irqdomain: Allow giving name suffix for domain
Thomas Gleixner <[email protected]>
irqdomain: Cleanup domain name allocation
Matti Vaittinen <[email protected]>
irqdomain: Simplify simple and legacy domain creation
Andy Shevchenko <[email protected]>
mfd: intel_soc_pmic_bxtwc: Use IRQ domain for PMIC devices
Andy Shevchenko <[email protected]>
mfd: intel_soc_pmic_bxtwc: Use IRQ domain for TMU device
Andy Shevchenko <[email protected]>
mfd: intel_soc_pmic_bxtwc: Use IRQ domain for USB Type-C device
Marcus Folkesson <[email protected]>
mfd: da9052-spi: Change read-mask to write-mask
Jinjie Ruan <[email protected]>
mfd: tps65010: Use IRQF_NO_AUTOEN flag in request_irq() to fix race
Christophe Leroy <[email protected]>
powerpc/vdso: Flag VDSO64 entry points as functions
Yihang Li <[email protected]>
scsi: hisi_sas: Enable all PHYs that are not disabled by user during controller reset
Matthew Rosato <[email protected]>
iommu/s390: Implement blocking domain
Jonathan Marek <[email protected]>
clk: qcom: videocc-sm8550: depend on either gcc-sm8550 or gcc-sm8650
Lad Prabhakar <[email protected]>
pinctrl: renesas: Select PINCTRL_RZG2L for RZ/V2H(P) SoC
Bartosz Golaszewski <[email protected]>
pinctrl: zynqmp: drop excess struct member description
Levi Yun <[email protected]>
trace/trace_event_perf: remove duplicate samples on the first tracepoint event
Lukas Bulwahn <[email protected]>
clk: mediatek: drop two dead config options
Chengchang Tang <[email protected]>
RDMA/hns: Disassociate mmap pages for all uctx when HW is being reset
Chengchang Tang <[email protected]>
RDMA/core: Provide rdma_user_mmap_disassociate() to disassociate mmap pages
Jie Zhan <[email protected]>
cppc_cpufreq: Use desired perf if feedback ctrs are 0 or unchanged
André Almeida <[email protected]>
unicode: Fix utf8_load() error path
Jiayuan Chen <[email protected]>
bpf: fix recursive lock when verdict program return SK_PASS
Hangbin Liu <[email protected]>
wireguard: selftests: load nf_conntrack if not present
Breno Leitao <[email protected]>
netpoll: Use rcu_access_pointer() in netpoll_poll_lock
Jiawen Wu <[email protected]>
net: txgbe: fix null pointer to pcs
Jiawen Wu <[email protected]>
net: txgbe: remove GPIO interrupt controller
Jakub Kicinski <[email protected]>
eth: fbnic: don't disable the PCI device twice
Alexander Aring <[email protected]>
dlm: fix dlm_recover_members refcount on error
Gao Xiang <[email protected]>
erofs: handle NONHEAD !delta[1] lclusters gracefully
Felix Maurer <[email protected]>
xsk: Free skb when TX metadata options are invalid
Dmitry Antipov <[email protected]>
Bluetooth: fix use-after-free in device_for_each_child()
Iulia Tanasescu <[email protected]>
Bluetooth: ISO: Send BIG Create Sync via hci_sync
Iulia Tanasescu <[email protected]>
Bluetooth: ISO: Do not emit LE BIG Create Sync if previous is pending
Iulia Tanasescu <[email protected]>
Bluetooth: ISO: Do not emit LE PA Create Sync if previous is pending
Luiz Augusto von Dentz <[email protected]>
Bluetooth: ISO: Use kref to track lifetime of iso_conn
Javier Carrasco <[email protected]>
Bluetooth: btbcm: fix missing of_node_put() in btbcm_get_board_name()
Chris Lu <[email protected]>
Bluetooth: btmtk: adjust the position to init iso data anchor
Kiran K <[email protected]>
Bluetooth: btintel: Do no pass vendor events to stack
Kiran K <[email protected]>
Bluetooth: btintel_pcie: Add handshake between driver and firmware
guanjing <[email protected]>
selftests: netfilter: Fix missing return values in conntrack_dump_flush
Igor Pylypiv <[email protected]>
i2c: dev: Fix memory leak when underlying adapter does not support I2C
Takashi Iwai <[email protected]>
ALSA: 6fire: Release resources at card release
Takashi Iwai <[email protected]>
ALSA: caiaq: Use snd_card_free_when_closed() at disconnection
Takashi Iwai <[email protected]>
ALSA: us122l: Use snd_card_free_when_closed() at disconnection
Takashi Iwai <[email protected]>
ALSA: usx2y: Use snd_card_free_when_closed() at disconnection
Xu Kuohai <[email protected]>
bpf: Add kernel symbol for struct_ops trampoline
Xu Kuohai <[email protected]>
bpf: Use function pointers count as struct_ops links count
Kalle Valo <[email protected]>
Revert "wifi: iwlegacy: do not skip frames with bad FCS"
Mingwei Zheng <[email protected]>
net: rfkill: gpio: Add check for clk_enable()
Omid Ehtemam-Haghighi <[email protected]>
ipv6: Fix soft lockups in fib6_select_path under high next hop churn
Viktor Malik <[email protected]>
selftests/bpf: skip the timer_lockup test for single-CPU nodes
Jiri Olsa <[email protected]>
bpf: Force uprobe bpf program to always return 0
Jiri Olsa <[email protected]>
bpf: Allow return values 0 and 1 for kprobe session
Yuan Can <[email protected]>
drm/amdkfd: Fix wrong usage of INIT_WORK()
Lijo Lazar <[email protected]>
drm/amdgpu: Fix map/unmap queue logic
Yang Wang <[email protected]>
drm/amdgpu: fix ACA bank count boundary check error
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: tell iwlmei when we finished suspending
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: allow fast resume on ax200
Lingbo Kong <[email protected]>
wifi: cfg80211: Remove the Medium Synchronization Delay validity check
Paolo Abeni <[email protected]>
selftests: net: really check for bg process completion
Paolo Abeni <[email protected]>
ipv6: release nexthop on device removal
Zijian Zhang <[email protected]>
bpf, sockmap: Fix sk_msg_reset_curr
Zijian Zhang <[email protected]>
bpf, sockmap: Several fixes to bpf_msg_pop_data
Zijian Zhang <[email protected]>
bpf, sockmap: Several fixes to bpf_msg_push_data
Zijian Zhang <[email protected]>
selftests/bpf: Add push/pop checking for msg_verify_data in test_sockmap
Zijian Zhang <[email protected]>
selftests/bpf: Fix total_bytes in msg_loop_rx in test_sockmap
Zijian Zhang <[email protected]>
selftests/bpf: Fix SENDPAGE data logic in test_sockmap
Zijian Zhang <[email protected]>
selftests/bpf: Add txmsg_pass to pull/push/pop in test_sockmap
Hao Ge <[email protected]>
isofs: avoid memory leak in iocharset
Adrián Larumbe <[email protected]>
drm/panthor: Fix OPP refcnt leaks in devfreq initialisation
Adrián Larumbe <[email protected]>
drm/panthor: record current and maximum device clock frequencies
Adrián Larumbe <[email protected]>
drm/panthor: introduce job cycle and timestamp accounting
Adrián Larumbe <[email protected]>
drm/panfrost: Add missing OPP table refcnt decremental
Pei Xiao <[email protected]>
wifi: rtw89: coex: check NULL return of kmalloc in btc_fw_set_monreg()
Maurice Lambert <[email protected]>
netlink: typographical error in nlmsg_type constants definition
Florian Westphal <[email protected]>
netfilter: nf_tables: must hold rcu read lock while iterating object type list
Florian Westphal <[email protected]>
netfilter: nf_tables: must hold rcu read lock while iterating expression type list
Florian Westphal <[email protected]>
netfilter: nf_tables: avoid false-positive lockdep splat on rule deletion
Jonathan Gray <[email protected]>
drm: use ATOMIC64_INIT() for atomic64_t
Kumar Kartikeya Dwivedi <[email protected]>
bpf: Mark raw_tp arguments with PTR_MAYBE_NULL
Philo Lu <[email protected]>
selftests/bpf: Add test for __nullable suffix in tp_btf
Philo Lu <[email protected]>
bpf: Support __nullable argument suffix for tp_btf
Li Huafei <[email protected]>
drm/amdgpu: Fix the memory allocation issue in amdgpu_discovery_get_nps_info()
José Expósito <[email protected]>
drm/vkms: Drop unnecessary call to drm_crtc_cleanup()
Kumar Kartikeya Dwivedi <[email protected]>
bpf: Tighten tail call checks for lingering locks, RCU, preempt_disable
Leon Hwang <[email protected]>
bpf, bpftool: Fix incorrect disasm pc
Zichen Xie <[email protected]>
drm/msm/dpu: cast crtc_clk calculation to u64 in _dpu_core_perf_calc_clk()
Linus Walleij <[email protected]>
wifi: cw1200: Fix potential NULL dereference
Yuan Can <[email protected]>
wifi: wfx: Fix error handling in wfx_core_init()
Steffen Dirkwinkel <[email protected]>
drm: xlnx: zynqmp_disp: layer may be null while releasing
Sean Anderson <[email protected]>
drm: zynqmp_kms: Unplug DRM device before removal
Li Huafei <[email protected]>
drm/nouveau/gr/gf100: Fix missing unlock in gf100_gr_chan_new()
Fangzhi Zuo <[email protected]>
drm/amd/display: Reduce HPD Detection Interval for IPS
Roman Li <[email protected]>
drm/amd/display: Increase idle worker HPD detection time
Lucas Stach <[email protected]>
drm/etnaviv: hold GPU lock across perfmon sampling
Xiaolei Wang <[email protected]>
drm/etnaviv: Request pages from DMA32 zone on addressing_limited
Suraj Kandpal <[email protected]>
drm/xe/hdcp: Fix gsc structure check in fw check status
Lukasz Luba <[email protected]>
drm/msm/gpu: Check the status of registration to PM QoS
Jinjie Ruan <[email protected]>
drm/msm/adreno: Use IRQF_NO_AUTOEN flag in request_irq()
Xu Kuohai <[email protected]>
bpf, arm64: Remove garbage frame for struct_ops trampoline
Steven Price <[email protected]>
drm/panfrost: Remove unused id_mask from struct panfrost_model
Andrii Nakryiko <[email protected]>
libbpf: move global data mmap()'ing into bpf_object__load()
Andrii Nakryiko <[email protected]>
selftests/bpf: fix test_spin_lock_fail.c's global vars usage
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in otx2_dcbnl.c
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in otx2_dmac_flt.c
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in cn10k.c
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in otx2_flows.c
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in otx2_ethtool.c
Dipendra Khadka <[email protected]>
octeontx2-pf: handle otx2_mbox_get_rsp errors in otx2_common.c
Dmitry Baryshkov <[email protected]>
drm/msm/dpu: drop LM_3 / LM_4 on MSM8998
Dmitry Baryshkov <[email protected]>
drm/msm/dpu: drop LM_3 / LM_4 on SDM845
Dmitry Baryshkov <[email protected]>
drm/msm/dpu: on SDM845 move DSPP_3 to LM_5 block
Ryan Walklin <[email protected]>
drm: panel: nv3052c: correct spi_device_id for RG35XX panel
Matthias Schiffer <[email protected]>
drm: fsl-dcu: enable PIXCLK on LS1021A
Alper Nebi Yasak <[email protected]>
wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_config_scan()
Marek Vasut <[email protected]>
wifi: wilc1000: Set MAC after operation mode
Zijian Zhang <[email protected]>
selftests/bpf: Fix txmsg_redir of test_txmsg_pull in test_sockmap
Zijian Zhang <[email protected]>
selftests/bpf: Fix msg_verify_data in test_sockmap
Tomi Valkeinen <[email protected]>
drm/bridge: tc358767: Fix link properties discovery
Hangbin Liu <[email protected]>
netdevsim: copy addresses for both in and out paths
Andrii Nakryiko <[email protected]>
libbpf: never interpret subprogs in .text as entry programs
Everest K.C <[email protected]>
ASoC: rt722-sdca: Remove logically deadcode in rt722-sdca.c
Karol Wachowski <[email protected]>
accel/ivpu: Prevent recovery invocation during probe and resume
Andrii Nakryiko <[email protected]>
libbpf: fix sym_is_subprog() logic for weak global subprogs
Dave Stevenson <[email protected]>
drm/vc4: Correct generation check in vc4_hvs_lut_load
Dave Stevenson <[email protected]>
drm/vc4: Match drm_dev_enter and exit calls in vc4_hvs_atomic_flush
Dave Stevenson <[email protected]>
drm/vc4: Match drm_dev_enter and exit calls in vc4_hvs_lut_load
Maxime Ripard <[email protected]>
drm/vc4: Introduce generation number enum
Dom Cobley <[email protected]>
drm/vc4: hdmi: Increase audio MAI fifo dreq threshold
Jacob Keller <[email protected]>
ice: consistently use q_idx in ice_vc_cfg_qs_msg()
Karthikeyan Periyasamy <[email protected]>
wifi: cfg80211: check radio iface combination for multi radio per wiphy
Alexis Lothoré (eBPF Foundation) <[email protected]>
selftests/bpf: add missing header include for htons
Balaji Pothunoori <[email protected]>
wifi: ath11k: Fix CE offset address calculation for WCN6750 in SSR
Eduard Zingerman <[email protected]>
selftests/bpf: Fix backtrace printing for selftests crashes
Kui-Feng Lee <[email protected]>
selftests/bpf: netns_new() and netns_free() helpers.
Yuan Chen <[email protected]>
bpf: Fix the xdp_adjust_tail sample prog issue
Arnd Bergmann <[email protected]>
wifi: ath12k: fix one more memcpy size error
Rameshkumar Sundaram <[email protected]>
wifi: ath12k: fix use-after-free in ath12k_dp_cc_cleanup()
Aurabindo Pillai <[email protected]>
drm/amd/display: fix a memleak issue when driver is removed
Martin Kaistra <[email protected]>
wifi: rtl8xxxu: Perform update_beacon_work when beaconing is enabled
Alexander Aring <[email protected]>
dlm: fix swapped args sb_flags vs sb_status
Tony Ambardar <[email protected]>
libbpf: Fix output .symtab byte-order during linking
Tao Chen <[email protected]>
libbpf: Fix expected_attach_type set handling in program load callback
Pin-yen Lin <[email protected]>
drm/bridge: it6505: Drop EDID cache on bridge power off
Pin-yen Lin <[email protected]>
drm/bridge: anx7625: Drop EDID cache on bridge power off
Geert Uytterhoeven <[email protected]>
ASoC: fsl-asoc-card: Add missing handling of {hp,mic}-dt-gpios
Macpaul Lin <[email protected]>
ASoC: dt-bindings: mt6359: Update generic node name and dmic-mode
Shengjiu Wang <[email protected]>
ASoC: fsl_micfil: fix regmap_write_bits usage
Igor Prusov <[email protected]>
dt-bindings: vendor-prefixes: Add NeoFidelity, Inc
Ramya Gnanasekar <[email protected]>
wifi: ath12k: Skip Rx TID cleanup for self peer
Baochen Qiang <[email protected]>
wifi: ath10k: fix invalid VHT parameters in supported_vht_mcs_rate_nss2
Baochen Qiang <[email protected]>
wifi: ath10k: fix invalid VHT parameters in supported_vht_mcs_rate_nss1
Lijo Lazar <[email protected]>
drm/amdgpu: Fix JPEG v4.0.3 register write
Maíra Canal <[email protected]>
drm/v3d: Flush the MMU before we supply more memory to the binner
Maíra Canal <[email protected]>
drm/v3d: Address race-condition in MMU flush
Linus Walleij <[email protected]>
drm/panel: nt35510: Make new commands optional
Alexander Stein <[email protected]>
drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency
Dmitry Baryshkov <[email protected]>
drm/imx: parallel-display: switch to drm_panel_bridge
Dmitry Baryshkov <[email protected]>
drm/imx: ldb: switch to drm_panel_bridge
Dmitry Baryshkov <[email protected]>
drm/imx: ldb: drop custom DDC bus support
Dmitry Baryshkov <[email protected]>
drm/imx: ldb: drop custom EDID support
Dmitry Baryshkov <[email protected]>
drm/imx: parallel-display: drop edid override support
Jani Nikula <[email protected]>
drm/ipuv3/parallel: convert to struct drm_edid
Jinjie Ruan <[email protected]>
drm/imx/ipuv3: Use IRQF_NO_AUTOEN flag in request_irq()
Jinjie Ruan <[email protected]>
drm/imx/dcss: Use IRQF_NO_AUTOEN flag in request_irq()
Huan Yang <[email protected]>
udmabuf: fix vmap_udmabuf error page set
Huan Yang <[email protected]>
udmabuf: change folios array from kmalloc to kvmalloc
Jinjie Ruan <[email protected]>
wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq()
Jinjie Ruan <[email protected]>
wifi: p54: Use IRQF_NO_AUTOEN flag in request_irq()
Tvrtko Ursulin <[email protected]>
drm/v3d: Appease lockdep while updating GPU stats
Tomi Valkeinen <[email protected]>
drm/omap: Fix locking in omap_gem_new_dmabuf()
Tomi Valkeinen <[email protected]>
drm/omap: Fix possible NULL dereference
Jeongjun Park <[email protected]>
wifi: ath9k: add range check for conn_rsp_epid in htc_connect_service()
Dave Stevenson <[email protected]>
drm/vc4: hvs: Correct logic on stopping an HVS channel
Dave Stevenson <[email protected]>
drm/vc4: hvs: Remove incorrect limit from hvs_dlist debugfs function
Dave Stevenson <[email protected]>
drm/vc4: hvs: Fix dlist debug not resetting the next entry pointer
Dom Cobley <[email protected]>
drm/vc4: hdmi: Avoid hang with debug registers when suspended
Dave Stevenson <[email protected]>
drm/vc4: hvs: Don't write gamma luts on 2711
Andy Shevchenko <[email protected]>
drm/mm: Mark drm_mm_interval_tree*() functions with __maybe_unused
Matt Coster <[email protected]>
drm/imagination: Use pvr_vm_context_get()
Chen Yufan <[email protected]>
drm/imagination: Convert to use time_before macro
Yao Zi <[email protected]>
platform/x86: panasonic-laptop: Return errno correctly in show callback
Vitaly Kuznetsov <[email protected]>
HID: hyperv: streamline driver probe to avoid devres issues
Chris Morgan <[email protected]>
arm64: dts: rockchip: correct analog audio name on Indiedroid Nova
Li Huafei <[email protected]>
media: atomisp: Add check for rgby_data memory allocation failure
Uwe Kleine-König <[email protected]>
pwm: Assume a disabled PWM to emit a constant inactive output
Sergey Senozhatsky <[email protected]>
media: venus: sync with threaded IRQ during inst destruction
Sergey Senozhatsky <[email protected]>
media: venus: fix enc/dec destruction order
Bingbu Cao <[email protected]>
media: ipu6: not override the dma_ops of device in driver
Sakari Ailus <[email protected]>
media: ipu6: Fix DMA and physical address debugging messages for 32-bit
Luo Qiu <[email protected]>
firmware: arm_scpi: Check the DVFS OPP count returned by the firmware
Reinette Chatre <[email protected]>
selftests/resctrl: Protect against array overrun during iMC config parsing
Reinette Chatre <[email protected]>
selftests/resctrl: Fix memory overflow due to unhandled wraparound
Reinette Chatre <[email protected]>
selftests/resctrl: Print accurate buffer size as part of MBM results
Chen-Yu Tsai <[email protected]>
arm64: dts: mediatek: mt8183-kukui-jacuzzi: Add supplies for fixed regulators
Chen-Yu Tsai <[email protected]>
arm64: dts: mediatek: mt8183-kukui-jacuzzi: Fix DP bridge supply names
Macpaul Lin <[email protected]>
arm64: dts: mediatek: mt6358: fix dtbs_check error
AngeloGioacchino Del Regno <[email protected]>
arm64: dts: mediatek: Add ADC node on MT6357, MT6358, MT6359 PMICs
Frank Li <[email protected]>
arm64: dts: imx8mn-tqma8mqnl-mba8mx-usbot: fix coexistence of output-low and output-high in GPIO
Lad Prabhakar <[email protected]>
arm64: dts: renesas: hihope: Drop #sound-dai-cells
Andy Shevchenko <[email protected]>
regmap: irq: Set lockdep class for hierarchical IRQ domains
Jinjie Ruan <[email protected]>
spi: zynqmp-gqspi: Undo runtime PM changes at driver exit time
Breno Leitao <[email protected]>
spi: tegra210-quad: Avoid shift-out-of-bounds
Zhang Zekun <[email protected]>
pmdomain: ti-sci: Add missing of_node_put() for args.np
Usama Arif <[email protected]>
of/fdt: add dt_phys arg to early_init_dt_scan and early_init_dt_verify
Abel Vesa <[email protected]>
dt-bindings: cache: qcom,llcc: Fix X1E80100 reg entries
Konrad Dybcio <[email protected]>
arm64: dts: qcom: x1e80100: Update C4/C5 residency/exit numbers
Niklas Schnelle <[email protected]>
watchdog: Add HAS_IOPORT dependency for SBC8360 and SBC7240
Anurag Dutta <[email protected]>
arm64: dts: ti: k3-j721s2: Fix clock IDs for MCSPI instances
Anurag Dutta <[email protected]>
arm64: dts: ti: k3-j721e: Fix clock IDs for MCSPI instances
Anurag Dutta <[email protected]>
arm64: dts: ti: k3-j7200: Fix clock ids for MCSPI instances
Jared McArthur <[email protected]>
arm64: dts: ti: k3-j7200: Fix register map for main domain pmx
Andre Przywara <[email protected]>
ARM: dts: cubieboard4: Fix DCDC5 regulator constraints
Clark Wang <[email protected]>
pwm: imx27: Workaround of the pwm output bug when decrease the duty cycle
Daolong Zhu <[email protected]>
arm64: dts: mt8183: Damu: add i2c2's i2c-scl-internal-delay-ns
Daolong Zhu <[email protected]>
arm64: dts: mt8183: cozmo: add i2c2's i2c-scl-internal-delay-ns
Daolong Zhu <[email protected]>
arm64: dts: mt8183: burnet: add i2c2's i2c-scl-internal-delay-ns
Daolong Zhu <[email protected]>
arm64: dts: mt8183: fennel: add i2c2's i2c-scl-internal-delay-ns
Heiko Stuebner <[email protected]>
arm64: dts: rockchip: Remove 'enable-active-low' from two boards
Bartosz Golaszewski <[email protected]>
power: sequencing: make the QCom PMU pwrseq driver depend on CONFIG_OF
Dragan Simic <[email protected]>
regulator: rk808: Restrict DVS GPIOs to the RK808 variant only
Chen Ridong <[email protected]>
cgroup/bpf: only cgroup v2 can be attached by bpf programs
Chen Ridong <[email protected]>
Revert "cgroup: Fix memory leak caused by missing cgroup_bpf_offline"
Fei Shao <[email protected]>
arm64: dts: mediatek: mt8195-cherry: Use correct audio codec DAI
Fei Shao <[email protected]>
arm64: dts: mediatek: mt8188: Fix USB3 PHY port default status
Chen-Yu Tsai <[email protected]>
arm64: dts: mediatek: mt8173-elm-hana: Add vdd-supply to second source trackpad
Nathan Morrisson <[email protected]>
arm64: dts: ti: k3-am62x-phyboard-lyra: Drop unnecessary McASP AFIFOs
Randy Dunlap <[email protected]>
kernel-doc: allow object-like macros in ReST output
Sibi Sankar <[email protected]>
arm64: dts: qcom: x1e80100: Resize GIC Redistributor register region
Hsin-Te Yuan <[email protected]>
arm64: dts: mt8183: kukui: Fix the address of eeprom at i2c4
Hsin-Te Yuan <[email protected]>
arm64: dts: mt8183: krane: Fix the address of eeprom at i2c4
Colin Ian King <[email protected]>
media: i2c: ds90ub960: Fix missing return check on ub960_rxport_read call
Christophe JAILLET <[email protected]>
media: i2c: vgxy61: Fix an error handling path in vgxy61_detect()
Gregory Price <[email protected]>
tpm: fix signed/unsigned bug when checking event logs
Jonathan Marek <[email protected]>
efi/libstub: fix efi_parse_options() ignoring the default command line
Stafford Horne <[email protected]>
openrisc: Implement fixmap to fix earlycon
Abel Vesa <[email protected]>
arm64: dts: qcom: x1e80100-vivobook-s15: Drop orientation-switch from USB SS[0-1] QMP PHYs
Abel Vesa <[email protected]>
arm64: dts: qcom: x1e80100-slim7x: Drop orientation-switch from USB SS[0-1] QMP PHYs
Chen-Yu Tsai <[email protected]>
scripts/kernel-doc: Do not track section counter across processed files
Bartosz Golaszewski <[email protected]>
mmc: mmc_spi: drop buggy snprintf()
Andrei Simion <[email protected]>
ARM: dts: microchip: sam9x60: Add missing property atmel,usart-mode
Dmitry Baryshkov <[email protected]>
arm64: dts: qcom: sda660-ifc6560: fix l10a voltage ranges
Luca Weiss <[email protected]>
arm64: dts: qcom: sm6350: Fix GPU frequencies missing on some speedbins
Dan Carpenter <[email protected]>
soc: qcom: geni-se: fix array underflow in geni_se_clk_tbl_get()
Jinjie Ruan <[email protected]>
soc: ti: smartreflex: Use IRQF_NO_AUTOEN flag in request_irq()
Macpaul Lin <[email protected]>
arm64: dts: mt8195: Fix dtbs_check error for infracfg_ao node
Macpaul Lin <[email protected]>
arm64: dts: mt8195: Fix dtbs_check error for mutex node
Macpaul Lin <[email protected]>
arm64: dts: mediatek: mt8395-genio-1200-evk: Fix dtbs_check error for phy
Pablo Sun <[email protected]>
arm64: dts: mediatek: mt8188: Fix wrong clock provider in MFG1 power domain
Michal Simek <[email protected]>
microblaze: Export xmb_manager functions
Gaosheng Cui <[email protected]>
drivers: soc: xilinx: add the missing kfree in xlnx_add_cb_for_suspend()
Wolfram Sang <[email protected]>
ARM: dts: renesas: genmai: Fix partition size for QSPI NOR Flash
Dmitry Baryshkov <[email protected]>
arm64: dts: qcom: qcs6390-rb3gen2: use modem.mbn for modem DSP
Jinjie Ruan <[email protected]>
spi: spi-fsl-lpspi: Use IRQF_NO_AUTOEN flag in request_irq()
Min-Hua Chen <[email protected]>
regulator: qcom-smd: make smd_vreg_rpm static
Javier Carrasco <[email protected]>
clocksource/drivers/timer-ti-dm: Fix child node refcount handling
Mark Brown <[email protected]>
clocksource/drivers:sp804: Make user selectable
Marco Elver <[email protected]>
kcsan, seqlock: Fix incorrect assumption in read_seqbegin()
Marco Elver <[email protected]>
kcsan, seqlock: Support seqcount_latch_t
Uros Bizjak <[email protected]>
locking/atomic/x86: Use ALT_OUTPUT_SP() for __arch_{,try_}cmpxchg64_emu()Uros Bizjak <[email protected]>
locking/atomic/x86: Use ALT_OUTPUT_SP() for __alternative_atomic64()
Miguel Ojeda <[email protected]>
time: Fix references to _msecs_to_jiffies() handling of values
Miguel Ojeda <[email protected]>
time: Partially revert cleanup on msecs_to_jiffies() documentation
Uros Bizjak <[email protected]>
cleanup: Remove address space of returned pointer
Carlos Llamas <[email protected]>
Revert "scripts/faddr2line: Check only two symbols when calculating symbol size"
Zheng Yejian <[email protected]>
x86/unwind/orc: Fix unwind for newly forked tasks
Daniel Lezcano <[email protected]>
thermal/lib: Fix memory leak on error in thermal_genl_auto()
Daniel Lezcano <[email protected]>
tools/lib/thermal: Make more generic the command encoding function
Uladzislau Rezki (Sony) <[email protected]>
rcuscale: Do a proper cleanup if kfree_scale_init() fails
Christophe JAILLET <[email protected]>
crypto: cavium - Fix an error handling path in cpt_ucode_load_fw()
Michal Suchanek <[email protected]>
crypto: aes-gcm-p10 - Use the correct bit to test for P10
Chen Ridong <[email protected]>
crypto: bcm - add error check in the ahash_hmac_init function
Chen Ridong <[email protected]>
crypto: caam - add error check to caam_rsa_set_priv_key_form
Lifeng Zheng <[email protected]>
ACPI: CPPC: Fix _CPC register setting issue
Pei Xiao <[email protected]>
hwmon: (nct6775-core) Fix overflows seen when writing limit attributes
Jerome Brunet <[email protected]>
hwmon: (pmbus/core) clear faults after setting smbalert mask
Uladzislau Rezki (Sony) <[email protected]>
rcu/kvfree: Fix data-race in __mod_timer / kvfree_call_rcu
Michal Schmidt <[email protected]>
rcu/srcutiny: don't return before reenabling preemption
Baruch Siach <[email protected]>
doc: rcu: update printed dynticks counter bits
Christian Loehle <[email protected]>
sched/cpufreq: Ensure sd is rebuilt for EAS check
Li Huafei <[email protected]>
crypto: inside-secure - Fix the return value of safexcel_xcbcmac_cra_init()
Wang Hai <[email protected]>
crypto: qat - Fix missing destroy_workqueue in adf_init_aer()
Orange Kao <[email protected]>
EDAC/igen6: Avoid segmentation fault on module unload
Weili Qian <[email protected]>
crypto: hisilicon/qm - disable same error report before resetting
Gautham R. Shenoy <[email protected]>
amd-pstate: Set min_perf to nominal_perf for active mode performance gov
Mario Limonciello <[email protected]>
cpufreq/amd-pstate: Don't update CPPC request in amd_pstate_cpu_boost_update()
Everest K.C <[email protected]>
crypto: cavium - Fix the if condition to exit loop after timeout
Yi Yang <[email protected]>
crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY
Qiuxu Zhuo <[email protected]>
EDAC/{skx_common,i10nm}: Fix incorrect far-memory error source indicator
Qiuxu Zhuo <[email protected]>
EDAC/skx_common: Differentiate memory error sources
Priyanka Singh <[email protected]>
EDAC/fsl_ddr: Fix bad bit shift operations
Rafael J. Wysocki <[email protected]>
thermal: core: Fix race between zone registration and system suspend
Rafael J. Wysocki <[email protected]>
thermal: core: Mark thermal zones as initializing to start with
Rafael J. Wysocki <[email protected]>
thermal: core: Represent suspend-related thermal zone flags as bits
Rafael J. Wysocki <[email protected]>
thermal: core: Rearrange PM notification code
Rafael J. Wysocki <[email protected]>
thermal: core: Drop thermal_zone_device_is_enabled()
Rafael J. Wysocki <[email protected]>
thermal: core: Initialize thermal zones before registering them
Ahsan Atta <[email protected]>
crypto: qat - remove faulty arbiter config reset
David Thompson <[email protected]>
EDAC/bluefield: Fix potential integer overflow
Yuan Can <[email protected]>
firmware: google: Unregister driver_info on failure
Dan Carpenter <[email protected]>
crypto: qat/qat_4xxx - fix off by one in uof_get_name()
Dan Carpenter <[email protected]>
crypto: qat/qat_420xx - fix off by one in uof_get_name()
Danny Tsen <[email protected]>
crypto: powerpc/p10-aes-gcm - Add dependency on CRYPTO_SIMDand re-enable CRYPTO_AES_GCM_P10
Danny Tsen <[email protected]>
crypto: powerpc/p10-aes-gcm - Register modules as SIMD
Cabiddu, Giovanni <[email protected]>
crypto: qat - remove check after debugfs_create_dir()
Christophe JAILLET <[email protected]>
crypto: caam - Fix the pointer passed to caam_qi_shutdown()
Tomas Paukrt <[email protected]>
crypto: mxs-dcp - Fix AES-CBC with hardware-bound keys
Christoph Hellwig <[email protected]>
virtio_blk: reverse request order in virtio_queue_rqs
Christoph Hellwig <[email protected]>
nvme-pci: reverse request order in nvme_queue_rqs
Long Li <[email protected]>
ext4: fix race in buffer_head read fault injection
Matthew Wilcox (Oracle) <[email protected]>
ext4: remove array of buffer_heads from mext_page_mkuptodate()
Matthew Wilcox (Oracle) <[email protected]>
ext4: pipeline buffer reads in mext_page_mkuptodate()
Thadeu Lima de Souza Cascardo <[email protected]>
hfsplus: don't query the device logical block size multiple times
Masahiro Yamada <[email protected]>
s390/syscalls: Avoid creation of arch/arch/ directory
Christoph Hellwig <[email protected]>
block: fix bio_split_rw_at to take zone_write_granularity into account
Christoph Hellwig <[email protected]>
block: take chunk_sectors into account in bio_split_write_zeroes
Christoph Hellwig <[email protected]>
block: properly handle REQ_OP_ZONE_APPEND in __bio_split_to_limits
Christoph Hellwig <[email protected]>
block: constify the lim argument to queue_limits_max_zone_append_sectors
Zizhi Wo <[email protected]>
netfs/fscache: Add a memory barrier for FSCACHE_VOLUME_CREATING
Zizhi Wo <[email protected]>
cachefiles: Fix NULL pointer dereference in object->file
Zizhi Wo <[email protected]>
cachefiles: Fix missing pos updates in cachefiles_ondemand_fd_write_iter()
Zizhi Wo <[email protected]>
cachefiles: Fix incorrect length return value in cachefiles_ondemand_fd_write_iter()
Li Wang <[email protected]>
loop: fix type of block size
Aleksandr Mishin <[email protected]>
acpi/arm64: Adjust error handling procedure in gtdt_parse_timer_block()
Masahiro Yamada <[email protected]>
arm64: fix .data.rel.ro size assertion when CONFIG_LTO_CLANG
Daniel Palmer <[email protected]>
m68k: mvme147: Reinstate early console
Daniel Palmer <[email protected]>
m68k: mvme147: Fix SCSI controller IRQ numbers
Christoph Hellwig <[email protected]>
nvme-pci: fix freeing of the HMB descriptor table
Mark Brown <[email protected]>
kselftest/arm64: Fix encoding for SVE B16B16 test
Marc Zyngier <[email protected]>
arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumers
David Disseldorp <[email protected]>
initramfs: avoid filename buffer overrun
Jonas Gorski <[email protected]>
mips: asm: fix warning when disabling MIPS_FP_SUPPORT
Jan Kara <[email protected]>
ext4: avoid remount errors with 'abort' mount option
Yang Erkun <[email protected]>
brd: defer automatic disk creation until module initialization succeeds
Ard Biesheuvel <[email protected]>
x86/pvh: Call C code via the kernel virtual mapping
Jason Andryuk <[email protected]>
x86/pvh: Set phys_base when calling xen_prepare_pvh()
Heiko Carstens <[email protected]>
s390/pageattr: Implement missing kernel_page_present()
Vineeth Vijayan <[email protected]>
s390/cio: Do not unregister the subchannel based on DNV
John Garry <[email protected]>
fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid()
John Garry <[email protected]>
block/fs: Pass an iocb to generic_atomic_write_valid()
Andre Przywara <[email protected]>
kselftest/arm64: mte: fix printf type warnings about longs
Andre Przywara <[email protected]>
kselftest/arm64: mte: fix printf type warnings about __u64
Andre Przywara <[email protected]>
kselftest/arm64: hwcap: fix f8dp2 cpuinfo name
Kristina Martsenko <[email protected]>
arm64: probes: Disable kprobes/uprobes on MOPS instructions
Bill O'Donnell <[email protected]>
efs: fix the efs new mount api implementation
Gerd Bayer <[email protected]>
s390/facilities: Fix warning about shadow of global variable
Fangzhi Zuo <[email protected]>
drm/amd/display: Fix incorrect DSC recompute trigger
Fangzhi Zuo <[email protected]>
drm/amd/display: Skip Invalid Streams from DSC Policy
Xiuhong Wang <[email protected]>
f2fs: fix fiemap failure issue when page size is 16KB
Breno Leitao <[email protected]>
ipmr: Fix access to mfc_cache_list without lock held
Linus Walleij <[email protected]>
ARM: 9434/1: cfi: Fix compilation corner case
Harith G <[email protected]>
ARM: 9420/1: smp: Fix SMP for xip kernels
Eryk Zagorski <[email protected]>
ALSA: usb-audio: Fix Yamaha P-125 Quirk Entry
Mark Brown <[email protected]>
ASoC: max9768: Fix event generation for playback mute
Yuli Wang <[email protected]>
LoongArch: Define a default value for VM_DATA_DEFAULT_FLAGS
Huacai Chen <[email protected]>
LoongArch: For all possible CPUs setup logical-physical CPU mapping
John Watts <[email protected]>
ASoC: audio-graph-card2: Purge absent supplies for device tree nodes
Gustavo A. R. Silva <[email protected]>
integrity: Use static_assert() to check struct sizes
David Wang <[email protected]>
proc/softirqs: replace seq_printf with seq_put_decimal_ull_width
Hans de Goede <[email protected]>
drm: panel-orientation-quirks: Make Lenovo Yoga Tab 3 X90F DMI match less strict
Luo Yifan <[email protected]>
ASoC: stm: Prevent potential division by zero in stm32_sai_get_clk_div()
Luo Yifan <[email protected]>
ASoC: stm: Prevent potential division by zero in stm32_sai_mclk_round_rate()
Markus Petri <[email protected]>
ASoC: amd: yc: Support dmic on another model of Lenovo Thinkpad E14 Gen 6
Vishnu Sankar <[email protected]>
platform/x86: thinkpad_acpi: Fix for ThinkPad's with ECFW showing incorrect fan speed
Alexander Hölzl <[email protected]>
can: j1939: fix error in J1939 documentation.
zhang jiao <[email protected]>
tools/lib/thermal: Remove the thermal.h soft link when doing make clean
Shenghao Ding <[email protected]>
ASoC: tas2781: Add new driver version for tas2563 & tas2781 qfn chip
Renato Caldas <[email protected]>
platform/x86: ideapad-laptop: add missing Ideapad Pro 5 fn keys
Kurt Borja <[email protected]>
platform/x86: dell-wmi-base: Handle META key Lock/Unlock events
Kurt Borja <[email protected]>
platform/x86: dell-smbios-base: Extends support to Alienware products
Mikhail Rudenko <[email protected]>
regulator: rk808: Add apply_bit for BUCK3 on RK809
Cristian Marussi <[email protected]>
firmware: arm_scmi: Reject clear channel request on A2P
Charles Han <[email protected]>
soc: qcom: Add check devm_kasprintf() returned value
Benoît Monin <[email protected]>
net: usb: qmi_wwan: add Quectel RG650V
Jiayuan Chen <[email protected]>
bpf: fix filed access without lock
Arnd Bergmann <[email protected]>
x86/amd_nb: Fix compile-testing without CONFIG_AMD_NB
Alexey Klimov <[email protected]>
ASoC: codecs: wcd937x: relax the AUX PDM watchdog
Alexey Klimov <[email protected]>
ASoC: codecs: wcd937x: add missing LO Switch control
Piyush Raj Chouhan <[email protected]>
ALSA: hda/realtek: Add subwoofer quirk for Infinix ZERO BOOK 13
Li Zhijian <[email protected]>
selftests/watchdog-test: Fix system accidentally reset after watchdog-test
Javier Carrasco <[email protected]>
usb: typec: use cleanup facility for 'altmodes_node'
Benjamin Große <[email protected]>
usb: add support for new USB device ID 0x17EF:0x3098 for the r8152 driver
Ben Greear <[email protected]>
mac80211: fix user-power when emulating chanctx
Anjaneyulu <[email protected]>
wifi: iwlwifi: mvm: SAR table alignment
Daniel Gabay <[email protected]>
wifi: iwlwifi: mvm: Use the sync timepoint API in suspend
Hans de Goede <[email protected]>
ASoC: Intel: sst: Support LPE0F28 ACPI HID
Hans de Goede <[email protected]>
ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet
Hans de Goede <[email protected]>
ASoC: Intel: bytcr_rt5640: Add support for non ACPI instantiated codec
Hans de Goede <[email protected]>
ASoC: codecs: rt5640: Always disable IRQs from rt5640_cancel_work()
Alain Volmat <[email protected]>
spi: stm32: fix missing device mode capability in stm32mp25
Gustavo A. R. Silva <[email protected]>
wifi: radiotap: Avoid -Wflex-array-member-not-at-end warnings
Remi Pommarel <[email protected]>
wifi: mac80211: Convert color collision detection to wiphy work
Remi Pommarel <[email protected]>
wifi: cfg80211: Add wiphy_delayed_work_pending()
Ben Greear <[email protected]>
wifi: mac80211: Fix setting txpower with emulate_chanctx
-------------
Diffstat:
Documentation/ABI/testing/sysfs-fs-f2fs | 7 +- Documentation/RCU/stallwarn.rst | 2 +- Documentation/arch/x86/boot.rst | 17 +- .../devicetree/bindings/cache/qcom,llcc.yaml | 38 ++- .../devicetree/bindings/clock/adi,axi-clkgen.yaml | 22 +- .../devicetree/bindings/iio/dac/adi,ad3552r.yaml | 2 +- .../pinctrl/samsung,pinctrl-wakeup-interrupt.yaml | 19 +- .../devicetree/bindings/serial/rs485.yaml | 19 +- .../devicetree/bindings/sound/mt6359.yaml | 10 +- .../devicetree/bindings/vendor-prefixes.yaml | 2 + Documentation/filesystems/mount_api.rst | 3 +- Documentation/locking/seqlock.rst | 2 +- Documentation/networking/j1939.rst | 2 +- Makefile | 4 +- arch/arc/kernel/devtree.c | 2 +- .../boot/dts/allwinner/sun9i-a80-cubieboard4.dts | 4 +- arch/arm/boot/dts/microchip/sam9x60.dtsi | 12 + arch/arm/boot/dts/renesas/r7s72100-genmai.dts | 2 +- arch/arm/boot/dts/ti/omap/omap36xx.dtsi | 1 + arch/arm/kernel/devtree.c | 2 +- arch/arm/kernel/head.S | 4 + arch/arm/kernel/psci_smp.c | 7 + arch/arm/mm/idmap.c | 7 + arch/arm/mm/proc-v7.S | 2 +- .../freescale/imx8mn-tqma8mqnl-mba8mx-usbotg.dtso | 29 +- arch/arm64/boot/dts/mediatek/mt6357.dtsi | 5 + arch/arm64/boot/dts/mediatek/mt6358.dtsi | 9 +- arch/arm64/boot/dts/mediatek/mt6359.dtsi | 5 + arch/arm64/boot/dts/mediatek/mt8173-elm-hana.dtsi | 8 + .../dts/mediatek/mt8183-kukui-jacuzzi-burnet.dts | 3 + .../dts/mediatek/mt8183-kukui-jacuzzi-cozmo.dts | 2 + .../dts/mediatek/mt8183-kukui-jacuzzi-damu.dts | 3 + .../dts/mediatek/mt8183-kukui-jacuzzi-fennel.dtsi | 3 + .../boot/dts/mediatek/mt8183-kukui-jacuzzi.dtsi | 30 +- .../boot/dts/mediatek/mt8183-kukui-kakadu.dtsi | 4 +- .../boot/dts/mediatek/mt8183-kukui-kodama.dtsi | 4 +- .../boot/dts/mediatek/mt8183-kukui-krane.dtsi | 4 +- .../boot/dts/mediatek/mt8186-corsola-voltorb.dtsi | 21 +- arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi | 8 +- arch/arm64/boot/dts/mediatek/mt8188.dtsi | 5 +- arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi | 6 +- arch/arm64/boot/dts/mediatek/mt8195.dtsi | 4 +- .../boot/dts/mediatek/mt8395-genio-1200-evk.dts | 2 +- arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 2 +- arch/arm64/boot/dts/qcom/sc8180x.dtsi | 2 +- .../arm64/boot/dts/qcom/sda660-inforce-ifc6560.dts | 2 +- arch/arm64/boot/dts/qcom/sm6350.dtsi | 14 +- .../boot/dts/qcom/x1e80100-asus-vivobook-s15.dts | 4 - .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 4 - arch/arm64/boot/dts/qcom/x1e80100.dtsi | 8 +- arch/arm64/boot/dts/renesas/hihope-rev2.dtsi | 3 - arch/arm64/boot/dts/renesas/hihope-rev4.dtsi | 3 - .../rk3568-wolfvision-pf5-io-expander.dtso | 1 - .../boot/dts/rockchip/rk3588s-indiedroid-nova.dts | 2 +- .../arm64/boot/dts/rockchip/rk3588s-orangepi-5.dts | 1 - arch/arm64/boot/dts/ti/k3-am62x-phyboard-lyra.dtsi | 2 - .../boot/dts/ti/k3-j7200-common-proc-board.dts | 2 +- arch/arm64/boot/dts/ti/k3-j7200-main.dtsi | 38 ++- arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi | 6 +- arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi | 6 +- arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi | 16 +- arch/arm64/boot/dts/ti/k3-j721s2-mcu-wakeup.dtsi | 6 +- arch/arm64/include/asm/insn.h | 1 + arch/arm64/include/asm/kvm_host.h | 2 - arch/arm64/kernel/cpufeature.c | 1 + arch/arm64/kernel/probes/decode-insn.c | 7 +- arch/arm64/kernel/process.c | 2 +- arch/arm64/kernel/setup.c | 6 +- arch/arm64/kernel/vmlinux.lds.S | 6 +- arch/arm64/kvm/arch_timer.c | 3 +- arch/arm64/kvm/arm.c | 18 +- arch/arm64/kvm/mmio.c | 32 +- arch/arm64/kvm/pmu-emul.c | 1 - arch/arm64/kvm/vgic/vgic-its.c | 32 +- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 7 +- arch/arm64/kvm/vgic/vgic.h | 23 ++ arch/arm64/net/bpf_jit_comp.c | 47 ++- arch/csky/kernel/setup.c | 4 +- arch/loongarch/Makefile | 4 +- arch/loongarch/include/asm/page.h | 5 +- arch/loongarch/kernel/acpi.c | 81 +++-- arch/loongarch/kernel/setup.c | 2 +- arch/loongarch/kernel/smp.c | 3 +- arch/loongarch/net/bpf_jit.c | 2 +- arch/loongarch/vdso/Makefile | 2 +- arch/m68k/coldfire/device.c | 8 +- arch/m68k/include/asm/mcfgpio.h | 2 +- arch/m68k/include/asm/mvme147hw.h | 4 +- arch/m68k/kernel/early_printk.c | 5 +- arch/m68k/mvme147/config.c | 30 ++ arch/m68k/mvme147/mvme147.h | 6 + arch/microblaze/kernel/microblaze_ksyms.c | 10 + arch/microblaze/kernel/prom.c | 2 +- arch/mips/include/asm/switch_to.h | 2 +- arch/mips/kernel/prom.c | 2 +- arch/mips/kernel/relocate.c | 2 +- arch/nios2/kernel/prom.c | 4 +- arch/openrisc/Kconfig | 3 + arch/openrisc/include/asm/fixmap.h | 21 +- arch/openrisc/kernel/prom.c | 2 +- arch/openrisc/mm/init.c | 37 +++ arch/parisc/kernel/ftrace.c | 2 +- arch/powerpc/crypto/Kconfig | 2 +- arch/powerpc/crypto/aes-gcm-p10-glue.c | 141 +++++++-- arch/powerpc/include/asm/dtl.h | 4 +- arch/powerpc/include/asm/fadump.h | 9 + arch/powerpc/include/asm/kvm_book3s_64.h | 4 +- arch/powerpc/include/asm/sstep.h | 5 - arch/powerpc/include/asm/vdso.h | 1 + arch/powerpc/kernel/dt_cpu_ftrs.c | 2 +- arch/powerpc/kernel/fadump.c | 40 ++- arch/powerpc/kernel/prom.c | 5 +- arch/powerpc/kernel/setup-common.c | 6 +- arch/powerpc/kernel/setup_64.c | 1 + arch/powerpc/kexec/file_load_64.c | 9 +- arch/powerpc/kvm/book3s_hv.c | 14 +- arch/powerpc/kvm/book3s_hv_nested.c | 14 +- arch/powerpc/kvm/trace_hv.h | 2 +- arch/powerpc/lib/sstep.c | 12 +- arch/powerpc/mm/fault.c | 10 +- arch/powerpc/platforms/pseries/dtl.c | 8 +- arch/powerpc/platforms/pseries/lpar.c | 8 +- arch/powerpc/platforms/pseries/plpks.c | 2 +- arch/riscv/include/asm/cpufeature.h | 2 + arch/riscv/kernel/setup.c | 2 +- arch/riscv/kernel/traps_misaligned.c | 14 +- arch/riscv/kernel/unaligned_access_speed.c | 1 + arch/riscv/kvm/aia_aplic.c | 3 +- arch/riscv/kvm/vcpu_sbi.c | 11 +- arch/s390/include/asm/facility.h | 18 +- arch/s390/include/asm/pci.h | 4 +- arch/s390/include/asm/set_memory.h | 1 + arch/s390/kernel/syscalls/Makefile | 2 +- arch/s390/mm/pageattr.c | 15 + arch/s390/pci/pci.c | 37 +-- arch/s390/pci/pci_debug.c | 10 +- arch/sh/kernel/cpu/proc.c | 2 +- arch/sh/kernel/setup.c | 2 +- arch/um/drivers/net_kern.c | 2 +- arch/um/drivers/ubd_kern.c | 4 +- arch/um/drivers/vector_kern.c | 3 +- arch/um/kernel/dtb.c | 2 +- arch/um/kernel/physmem.c | 6 +- arch/um/kernel/process.c | 2 +- arch/um/kernel/sysrq.c | 2 +- arch/x86/coco/tdx/tdx.c | 111 +++++-- arch/x86/crypto/aegis128-aesni-asm.S | 29 +- arch/x86/events/intel/pt.c | 11 +- arch/x86/events/intel/pt.h | 2 + arch/x86/include/asm/amd_nb.h | 5 +- arch/x86/include/asm/atomic64_32.h | 3 +- arch/x86/include/asm/cmpxchg_32.h | 6 +- arch/x86/include/asm/kvm_host.h | 4 +- arch/x86/include/asm/shared/tdx.h | 11 +- arch/x86/kernel/cpu/amd.c | 1 + arch/x86/kernel/cpu/common.c | 4 +- arch/x86/kernel/devicetree.c | 2 +- arch/x86/kernel/unwind_orc.c | 2 +- arch/x86/kvm/Kconfig | 1 + arch/x86/kvm/mmu/mmu.c | 68 ++-- arch/x86/kvm/mmu/spte.c | 18 +- arch/x86/platform/pvh/head.S | 22 +- arch/xtensa/kernel/setup.c | 2 +- block/bfq-iosched.c | 37 ++- block/blk-core.c | 18 +- block/blk-merge.c | 65 +++- block/blk-mq.c | 148 ++++++++- block/blk-mq.h | 13 + block/blk-settings.c | 7 + block/blk-sysfs.c | 6 +- block/blk-zoned.c | 14 +- block/blk.h | 34 +- block/elevator.c | 10 +- block/fops.c | 25 +- block/genhd.c | 24 +- crypto/pcrypt.c | 12 +- drivers/accel/ivpu/ivpu_ipc.c | 35 +- drivers/accel/ivpu/ivpu_ipc.h | 7 +- drivers/accel/ivpu/ivpu_jsm_msg.c | 19 +- drivers/acpi/arm64/gtdt.c | 2 +- drivers/acpi/cppc_acpi.c | 1 - drivers/base/firmware_loader/main.c | 5 +- drivers/base/regmap/regmap-irq.c | 41 ++- drivers/base/trace.h | 6 +- drivers/block/brd.c | 70 ++-- drivers/block/loop.c | 6 +- drivers/block/ublk_drv.c | 17 +- drivers/block/virtio_blk.c | 46 ++- drivers/bluetooth/btbcm.c | 4 +- drivers/bluetooth/btintel.c | 62 +++- drivers/bluetooth/btintel.h | 7 + drivers/bluetooth/btintel_pcie.c | 265 +++++++++++++++- drivers/bluetooth/btintel_pcie.h | 16 +- drivers/bluetooth/btmtk.c | 1 - drivers/bluetooth/btusb.c | 1 + drivers/bus/mhi/host/trace.h | 25 +- drivers/clk/clk-apple-nco.c | 3 + drivers/clk/clk-axi-clkgen.c | 22 +- drivers/clk/clk-en7523.c | 270 ++++++++++++---- drivers/clk/clk-loongson2.c | 6 +- drivers/clk/imx/clk-fracn-gppll.c | 10 +- drivers/clk/imx/clk-imx8-acm.c | 4 +- drivers/clk/imx/clk-lpcg-scu.c | 37 ++- drivers/clk/imx/clk-scu.c | 2 +- drivers/clk/mediatek/Kconfig | 15 - drivers/clk/qcom/Kconfig | 4 +- drivers/clk/ralink/clk-mtmips.c | 26 +- drivers/clk/renesas/rzg2l-cpg.c | 11 +- drivers/clk/sophgo/clk-sg2042-pll.c | 2 +- drivers/clk/sunxi-ng/ccu-sun20i-d1.c | 2 +- drivers/clocksource/Kconfig | 3 +- drivers/clocksource/timer-ti-dm-systimer.c | 4 +- drivers/comedi/comedi_fops.c | 12 + drivers/counter/stm32-timer-cnt.c | 17 +- drivers/counter/ti-ecap-capture.c | 7 +- drivers/cpufreq/amd-pstate.c | 26 +- drivers/cpufreq/cppc_cpufreq.c | 63 +++- drivers/cpufreq/loongson2_cpufreq.c | 4 +- drivers/cpufreq/loongson3_cpufreq.c | 7 +- drivers/cpufreq/mediatek-cpufreq-hw.c | 2 +- drivers/crypto/bcm/cipher.c | 5 +- drivers/crypto/caam/caampkc.c | 11 +- drivers/crypto/caam/qi.c | 2 +- drivers/crypto/cavium/cpt/cptpf_main.c | 6 +- drivers/crypto/hisilicon/hpre/hpre_main.c | 35 +- drivers/crypto/hisilicon/qm.c | 47 +-- drivers/crypto/hisilicon/sec2/sec_main.c | 35 +- drivers/crypto/hisilicon/zip/zip_main.c | 35 +- drivers/crypto/inside-secure/safexcel_hash.c | 2 +- .../crypto/intel/qat/qat_420xx/adf_420xx_hw_data.c | 2 +- .../crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c | 2 +- drivers/crypto/intel/qat/qat_common/adf_aer.c | 5 +- drivers/crypto/intel/qat/qat_common/adf_dbgfs.c | 13 +- .../crypto/intel/qat/qat_common/adf_hw_arbiter.c | 4 - drivers/crypto/mxs-dcp.c | 20 +- drivers/dax/pmem/Makefile | 7 - drivers/dax/pmem/pmem.c | 10 - drivers/dma-buf/Kconfig | 1 + drivers/dma-buf/udmabuf.c | 44 +-- drivers/edac/bluefield_edac.c | 2 +- drivers/edac/fsl_ddr_edac.c | 22 +- drivers/edac/i10nm_base.c | 1 + drivers/edac/igen6_edac.c | 2 + drivers/edac/skx_common.c | 57 ++-- drivers/edac/skx_common.h | 8 + drivers/firmware/arm_scmi/common.h | 2 + drivers/firmware/arm_scmi/driver.c | 6 + drivers/firmware/arm_scpi.c | 3 + drivers/firmware/efi/libstub/efi-stub.c | 2 +- drivers/firmware/efi/tpm.c | 17 +- drivers/firmware/google/gsmi.c | 6 +- drivers/gpio/gpio-exar.c | 10 +- drivers/gpio/gpio-zevio.c | 6 + drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 13 +- drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 8 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 63 ++-- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 7 + drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 18 +- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 5 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 3 + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 4 +- .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 11 +- .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 15 +- .../gpu/drm/amd/display/dc/core/dc_hw_sequencer.c | 3 + .../drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 6 +- drivers/gpu/drm/bridge/analogix/anx7625.c | 2 + drivers/gpu/drm/bridge/ite-it6505.c | 2 + drivers/gpu/drm/bridge/tc358767.c | 7 + drivers/gpu/drm/drm_file.c | 2 +- drivers/gpu/drm/drm_mm.c | 2 +- drivers/gpu/drm/drm_panel_orientation_quirks.c | 1 - drivers/gpu/drm/etnaviv/etnaviv_drv.c | 10 + drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 28 +- drivers/gpu/drm/fsl-dcu/Kconfig | 1 + drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 15 + drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 3 + drivers/gpu/drm/imagination/pvr_ccb.c | 2 +- drivers/gpu/drm/imagination/pvr_vm.c | 4 +- drivers/gpu/drm/imx/dcss/dcss-crtc.c | 6 +- drivers/gpu/drm/imx/ipuv3/Kconfig | 11 +- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 122 ++----- drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c | 6 +- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 47 +-- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 +- .../drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 12 - .../gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h | 14 +- drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 2 +- drivers/gpu/drm/msm/msm_gpu_devfreq.c | 9 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c | 1 + drivers/gpu/drm/omapdrm/dss/base.c | 25 +- drivers/gpu/drm/omapdrm/dss/omapdss.h | 3 +- drivers/gpu/drm/omapdrm/omap_drv.c | 4 +- drivers/gpu/drm/omapdrm/omap_gem.c | 10 +- drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 2 +- drivers/gpu/drm/panel/panel-novatek-nt35510.c | 15 +- drivers/gpu/drm/panfrost/panfrost_devfreq.c | 3 +- drivers/gpu/drm/panfrost/panfrost_gpu.c | 1 - drivers/gpu/drm/panthor/panthor_devfreq.c | 29 +- drivers/gpu/drm/panthor/panthor_device.h | 28 ++ drivers/gpu/drm/panthor/panthor_sched.c | 351 +++++++++++++++++---- drivers/gpu/drm/radeon/atombios_encoders.c | 2 +- drivers/gpu/drm/radeon/cik.c | 14 +- drivers/gpu/drm/radeon/dce6_afmt.c | 2 +- drivers/gpu/drm/radeon/evergreen.c | 12 +- drivers/gpu/drm/radeon/ni.c | 2 +- drivers/gpu/drm/radeon/r100.c | 24 +- drivers/gpu/drm/radeon/r300.c | 6 +- drivers/gpu/drm/radeon/r420.c | 6 +- drivers/gpu/drm/radeon/r520.c | 2 +- drivers/gpu/drm/radeon/r600.c | 12 +- drivers/gpu/drm/radeon/r600_cs.c | 2 +- drivers/gpu/drm/radeon/r600_dpm.c | 4 +- drivers/gpu/drm/radeon/r600_hdmi.c | 2 +- drivers/gpu/drm/radeon/radeon.h | 5 + drivers/gpu/drm/radeon/radeon_acpi.c | 10 +- drivers/gpu/drm/radeon/radeon_agp.c | 2 +- drivers/gpu/drm/radeon/radeon_atombios.c | 2 +- drivers/gpu/drm/radeon/radeon_audio.c | 14 +- drivers/gpu/drm/radeon/radeon_combios.c | 12 +- drivers/gpu/drm/radeon/radeon_device.c | 10 +- drivers/gpu/drm/radeon/radeon_display.c | 74 ++--- drivers/gpu/drm/radeon/radeon_fbdev.c | 26 +- drivers/gpu/drm/radeon/radeon_fence.c | 8 +- drivers/gpu/drm/radeon/radeon_gem.c | 2 +- drivers/gpu/drm/radeon/radeon_i2c.c | 2 +- drivers/gpu/drm/radeon/radeon_ib.c | 2 +- drivers/gpu/drm/radeon/radeon_irq_kms.c | 12 +- drivers/gpu/drm/radeon/radeon_object.c | 2 +- drivers/gpu/drm/radeon/radeon_pm.c | 20 +- drivers/gpu/drm/radeon/radeon_ring.c | 2 +- drivers/gpu/drm/radeon/radeon_ttm.c | 6 +- drivers/gpu/drm/radeon/rs400.c | 6 +- drivers/gpu/drm/radeon/rs600.c | 14 +- drivers/gpu/drm/radeon/rs690.c | 2 +- drivers/gpu/drm/radeon/rv515.c | 4 +- drivers/gpu/drm/radeon/rv770.c | 2 +- drivers/gpu/drm/radeon/si.c | 4 +- drivers/gpu/drm/v3d/v3d_drv.h | 1 + drivers/gpu/drm/v3d/v3d_irq.c | 2 + drivers/gpu/drm/v3d/v3d_mmu.c | 31 +- drivers/gpu/drm/v3d/v3d_sched.c | 44 ++- drivers/gpu/drm/vc4/tests/vc4_mock.c | 12 +- drivers/gpu/drm/vc4/vc4_bo.c | 28 +- drivers/gpu/drm/vc4/vc4_crtc.c | 13 +- drivers/gpu/drm/vc4/vc4_drv.c | 22 +- drivers/gpu/drm/vc4/vc4_drv.h | 8 +- drivers/gpu/drm/vc4/vc4_gem.c | 24 +- drivers/gpu/drm/vc4/vc4_hdmi.c | 22 +- drivers/gpu/drm/vc4/vc4_hvs.c | 64 ++-- drivers/gpu/drm/vc4/vc4_irq.c | 10 +- drivers/gpu/drm/vc4/vc4_kms.c | 14 +- drivers/gpu/drm/vc4/vc4_perfmon.c | 20 +- drivers/gpu/drm/vc4/vc4_plane.c | 12 +- drivers/gpu/drm/vc4/vc4_render_cl.c | 2 +- drivers/gpu/drm/vc4/vc4_v3d.c | 10 +- drivers/gpu/drm/vc4/vc4_validate.c | 8 +- drivers/gpu/drm/vc4/vc4_validate_shaders.c | 2 +- drivers/gpu/drm/vkms/vkms_output.c | 5 +- drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 2 +- drivers/gpu/drm/xe/xe_sync.c | 6 +- drivers/gpu/drm/xlnx/zynqmp_disp.c | 3 + drivers/gpu/drm/xlnx/zynqmp_kms.c | 2 +- drivers/hid/hid-hyperv.c | 58 +++- drivers/hid/wacom_wac.c | 4 +- drivers/hwmon/aquacomputer_d5next.c | 2 +- drivers/hwmon/nct6775-core.c | 7 +- drivers/hwmon/pmbus/pmbus_core.c | 12 +- drivers/hwmon/tps23861.c | 2 +- drivers/i2c/i2c-dev.c | 17 +- drivers/i3c/master.c | 13 +- drivers/iio/dac/adi-axi-dac.c | 2 +- drivers/iio/industrialio-gts-helper.c | 2 +- drivers/iio/light/al3010.c | 11 +- drivers/infiniband/core/uverbs.h | 2 + drivers/infiniband/core/uverbs_main.c | 43 ++- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 7 +- drivers/infiniband/hw/bnxt_re/qplib_fp.h | 2 +- drivers/infiniband/hw/hns/hns_roce_cq.c | 4 +- drivers/infiniband/hw/hns/hns_roce_debugfs.c | 3 +- drivers/infiniband/hw/hns/hns_roce_device.h | 14 +- drivers/infiniband/hw/hns/hns_roce_hem.c | 48 +-- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 257 +++++++++------ drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 8 +- drivers/infiniband/hw/hns/hns_roce_main.c | 7 +- drivers/infiniband/hw/hns/hns_roce_mr.c | 11 +- drivers/infiniband/hw/hns/hns_roce_qp.c | 79 +++-- drivers/infiniband/hw/hns/hns_roce_srq.c | 4 +- drivers/infiniband/hw/mlx5/main.c | 40 ++- drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 +- drivers/infiniband/sw/rxe/rxe_qp.c | 1 + drivers/infiniband/sw/rxe/rxe_req.c | 6 +- drivers/input/misc/cs40l50-vibra.c | 6 +- drivers/interconnect/qcom/icc-rpmh.c | 3 + drivers/iommu/amd/amd_iommu.h | 15 +- drivers/iommu/amd/amd_iommu_types.h | 5 +- drivers/iommu/amd/io_pgtable.c | 76 ++--- drivers/iommu/amd/io_pgtable_v2.c | 29 +- drivers/iommu/amd/iommu.c | 28 +- drivers/iommu/amd/pasid.c | 2 +- drivers/iommu/intel/iommu.c | 40 ++- drivers/iommu/s390-iommu.c | 75 +++-- drivers/irqchip/irq-mvebu-sei.c | 2 +- drivers/leds/flash/leds-ktd2692.c | 1 + drivers/leds/leds-max5970.c | 5 +- drivers/mailbox/arm_mhuv2.c | 8 +- drivers/mailbox/mtk-cmdq-mailbox.c | 2 +- drivers/mailbox/omap-mailbox.c | 1 + drivers/md/dm-bufio.c | 12 +- drivers/md/dm-cache-background-tracker.c | 25 +- drivers/md/dm-cache-background-tracker.h | 8 + drivers/md/dm-cache-target.c | 25 +- drivers/media/i2c/adv7604.c | 5 +- drivers/media/i2c/adv7842.c | 13 +- drivers/media/i2c/ds90ub960.c | 2 +- drivers/media/i2c/vgxy61.c | 2 +- drivers/media/pci/intel/ipu6/ipu6-bus.c | 6 - drivers/media/pci/intel/ipu6/ipu6-buttress.c | 34 +- drivers/media/pci/intel/ipu6/ipu6-cpd.c | 18 +- drivers/media/pci/intel/ipu6/ipu6-dma.c | 202 ++++++------ drivers/media/pci/intel/ipu6/ipu6-dma.h | 34 +- drivers/media/pci/intel/ipu6/ipu6-fw-com.c | 14 +- drivers/media/pci/intel/ipu6/ipu6-mmu.c | 28 +- drivers/media/pci/intel/ipu6/ipu6.c | 3 + drivers/media/platform/qcom/venus/vdec.c | 19 +- drivers/media/platform/qcom/venus/venc.c | 18 +- drivers/media/radio/wl128x/fmdrv_common.c | 3 +- drivers/media/test-drivers/vivid/vivid-vid-cap.c | 15 +- drivers/media/v4l2-core/v4l2-dv-timings.c | 132 ++++---- drivers/message/fusion/mptsas.c | 4 +- drivers/mfd/da9052-spi.c | 2 +- drivers/mfd/intel_soc_pmic_bxtwc.c | 144 +++++---- drivers/mfd/rt5033.c | 4 +- drivers/mfd/tps65010.c | 8 +- drivers/misc/apds990x.c | 12 +- drivers/misc/lkdtm/bugs.c | 2 +- drivers/mmc/host/mmc_spi.c | 9 +- drivers/mtd/hyperbus/rpc-if.c | 7 + drivers/mtd/nand/raw/atmel/pmecc.c | 8 +- drivers/mtd/nand/raw/atmel/pmecc.h | 2 - drivers/mtd/spi-nor/core.c | 2 +- drivers/mtd/spi-nor/spansion.c | 1 + drivers/mtd/ubi/attach.c | 12 +- drivers/mtd/ubi/fastmap-wl.c | 19 +- drivers/mtd/ubi/vmt.c | 2 + drivers/mtd/ubi/wl.c | 11 +- drivers/mtd/ubi/wl.h | 3 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 30 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 9 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 4 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.h | 3 +- drivers/net/ethernet/broadcom/tg3.c | 3 + drivers/net/ethernet/google/gve/gve_adminq.c | 4 +- drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 2 +- drivers/net/ethernet/intel/ice/ice_virtchnl.c | 21 +- drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 70 +++- drivers/net/ethernet/marvell/octeontx2/af/cgx.h | 5 + .../ethernet/marvell/octeontx2/af/lmac_common.h | 7 +- drivers/net/ethernet/marvell/octeontx2/af/rpm.c | 87 +++-- drivers/net/ethernet/marvell/octeontx2/af/rpm.h | 18 +- drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 1 + drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 1 + .../net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 45 ++- drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c | 5 + .../ethernet/marvell/octeontx2/nic/otx2_common.c | 4 + .../ethernet/marvell/octeontx2/nic/otx2_dcbnl.c | 5 + .../ethernet/marvell/octeontx2/nic/otx2_dmac_flt.c | 9 + .../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 10 + .../ethernet/marvell/octeontx2/nic/otx2_flows.c | 10 + drivers/net/ethernet/marvell/pxa168_eth.c | 14 +- drivers/net/ethernet/meta/fbnic/fbnic_pci.c | 2 - .../net/ethernet/microchip/vcap/vcap_api_kunit.c | 17 +- .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 + drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c | 24 +- drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 1 - drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c | 168 +--------- drivers/net/ethernet/wangxun/txgbe/txgbe_phy.h | 2 - drivers/net/ethernet/wangxun/txgbe/txgbe_type.h | 7 +- drivers/net/mdio/mdio-ipq4019.c | 5 +- drivers/net/netdevsim/ipsec.c | 11 +- drivers/net/usb/lan78xx.c | 42 +-- drivers/net/usb/qmi_wwan.c | 1 + drivers/net/usb/r8152.c | 1 + drivers/net/wireless/ath/ath10k/mac.c | 4 +- drivers/net/wireless/ath/ath11k/qmi.c | 3 + drivers/net/wireless/ath/ath12k/dp.c | 19 +- drivers/net/wireless/ath/ath12k/mac.c | 5 +- drivers/net/wireless/ath/ath12k/wow.c | 2 +- drivers/net/wireless/ath/ath9k/htc_hst.c | 3 + drivers/net/wireless/ath/wil6210/txrx.c | 2 +- .../net/wireless/broadcom/brcm80211/brcmfmac/of.c | 3 +- drivers/net/wireless/intel/ipw2x00/ipw2100.c | 2 +- drivers/net/wireless/intel/ipw2x00/ipw2200.h | 2 +- drivers/net/wireless/intel/iwlegacy/3945.c | 2 +- drivers/net/wireless/intel/iwlegacy/4965-mac.c | 2 +- drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 96 +++--- drivers/net/wireless/intel/iwlwifi/fw/init.c | 4 +- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 2 + drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 8 +- drivers/net/wireless/intersil/p54/p54spi.c | 4 +- drivers/net/wireless/marvell/libertas/radiotap.h | 4 +- drivers/net/wireless/marvell/mwifiex/fw.h | 2 +- drivers/net/wireless/marvell/mwifiex/main.c | 4 +- drivers/net/wireless/microchip/wilc1000/mon.c | 4 +- drivers/net/wireless/microchip/wilc1000/netdev.c | 6 +- drivers/net/wireless/realtek/rtl8xxxu/core.c | 6 +- drivers/net/wireless/realtek/rtlwifi/efuse.c | 11 +- drivers/net/wireless/realtek/rtw89/coex.c | 4 + drivers/net/wireless/silabs/wfx/main.c | 17 +- drivers/net/wireless/st/cw1200/cw1200_spi.c | 2 +- drivers/net/wireless/virtual/mac80211_hwsim.c | 4 +- drivers/nvme/host/core.c | 5 + drivers/nvme/host/multipath.c | 33 +- drivers/nvme/host/pci.c | 55 ++-- drivers/of/fdt.c | 14 +- drivers/of/kexec.c | 2 +- drivers/pci/controller/cadence/pci-j721e.c | 100 +++++- drivers/pci/controller/cadence/pcie-cadence-host.c | 44 ++- drivers/pci/controller/cadence/pcie-cadence.h | 12 + drivers/pci/controller/dwc/pcie-qcom-ep.c | 6 +- drivers/pci/controller/dwc/pcie-tegra194.c | 7 +- drivers/pci/endpoint/functions/pci-epf-mhi.c | 6 + drivers/pci/hotplug/cpqphp_pci.c | 19 +- drivers/pci/pci.c | 5 +- drivers/pci/slot.c | 4 +- drivers/perf/arm-cmn.c | 4 +- drivers/perf/arm_smmuv3_pmu.c | 19 +- drivers/phy/phy-airoha-pcie-regs.h | 6 +- drivers/phy/phy-airoha-pcie.c | 8 +- drivers/phy/realtek/phy-rtk-usb2.c | 2 + drivers/phy/realtek/phy-rtk-usb3.c | 2 + drivers/pinctrl/pinctrl-k210.c | 2 +- drivers/pinctrl/pinctrl-zynqmp.c | 1 - drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 2 +- drivers/pinctrl/renesas/Kconfig | 1 + drivers/platform/chrome/cros_ec_typec.c | 1 + drivers/platform/x86/dell/dell-smbios-base.c | 1 + drivers/platform/x86/dell/dell-wmi-base.c | 6 + drivers/platform/x86/ideapad-laptop.c | 3 + drivers/platform/x86/intel/bxtwc_tmu.c | 22 +- drivers/platform/x86/panasonic-laptop.c | 10 +- drivers/platform/x86/thinkpad_acpi.c | 28 +- drivers/pmdomain/ti/ti_sci_pm_domains.c | 4 + drivers/power/sequencing/Kconfig | 1 + drivers/power/supply/bq27xxx_battery.c | 37 ++- drivers/power/supply/power_supply_core.c | 2 - drivers/power/supply/rt9471.c | 52 +-- drivers/pwm/core.c | 10 +- drivers/pwm/pwm-imx27.c | 98 +++++- drivers/regulator/qcom_smd-regulator.c | 2 +- drivers/regulator/rk808-regulator.c | 17 +- drivers/remoteproc/qcom_q6v5_adsp.c | 11 +- drivers/remoteproc/qcom_q6v5_mss.c | 6 +- drivers/remoteproc/qcom_q6v5_pas.c | 22 +- drivers/rpmsg/qcom_glink_native.c | 3 +- drivers/rtc/interface.c | 7 +- drivers/rtc/rtc-ab-eoz9.c | 7 - drivers/rtc/rtc-abx80x.c | 2 +- drivers/rtc/rtc-rzn1.c | 8 +- drivers/rtc/rtc-st-lpc.c | 5 +- drivers/s390/cio/cio.c | 6 +- drivers/s390/cio/device.c | 18 +- drivers/scsi/bfa/bfad.c | 3 +- drivers/scsi/hisi_sas/hisi_sas_main.c | 8 +- drivers/scsi/qedf/qedf_main.c | 1 + drivers/scsi/qedi/qedi_main.c | 1 + drivers/scsi/sg.c | 9 +- drivers/sh/intc/core.c | 2 +- drivers/soc/fsl/rcpm.c | 1 + drivers/soc/qcom/qcom-geni-se.c | 3 +- drivers/soc/qcom/socinfo.c | 8 +- drivers/soc/ti/smartreflex.c | 4 +- drivers/soc/xilinx/xlnx_event_manager.c | 4 +- drivers/spi/atmel-quadspi.c | 2 +- drivers/spi/spi-fsl-lpspi.c | 12 +- drivers/spi/spi-stm32.c | 1 + drivers/spi/spi-tegra210-quad.c | 2 +- drivers/spi/spi-zynqmp-gqspi.c | 2 + drivers/spi/spi.c | 13 +- drivers/staging/media/atomisp/pci/sh_css_params.c | 2 + .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 6 +- drivers/target/target_core_pscsi.c | 2 +- drivers/thermal/thermal_core.c | 133 ++++---- drivers/thermal/thermal_core.h | 15 +- drivers/thermal/thermal_sysfs.c | 2 +- drivers/tty/serial/8250/8250_fintek.c | 14 +- drivers/tty/serial/8250/8250_omap.c | 4 +- drivers/tty/serial/amba-pl011.c | 7 + drivers/tty/tty_io.c | 2 +- drivers/usb/dwc3/ep0.c | 2 +- drivers/usb/dwc3/gadget.c | 15 +- drivers/usb/gadget/composite.c | 18 +- drivers/usb/gadget/function/uvc_video.c | 4 + drivers/usb/host/ehci-spear.c | 7 +- drivers/usb/host/xhci-pci.c | 10 +- drivers/usb/host/xhci-ring.c | 73 ++++- drivers/usb/host/xhci.c | 40 ++- drivers/usb/host/xhci.h | 3 + drivers/usb/misc/chaoskey.c | 35 +- drivers/usb/misc/iowarrior.c | 50 ++- drivers/usb/misc/usb-ljca.c | 20 +- drivers/usb/misc/yurex.c | 5 +- drivers/usb/musb/musb_gadget.c | 13 +- drivers/usb/typec/class.c | 6 +- drivers/usb/typec/tcpm/wcove.c | 4 - drivers/usb/typec/ucsi/ucsi_ccg.c | 5 + drivers/usb/typec/ucsi/ucsi_glink.c | 2 +- drivers/vdpa/mlx5/core/mr.c | 4 +- drivers/vfio/pci/mlx5/cmd.c | 6 +- drivers/vfio/pci/mlx5/main.c | 35 +- drivers/vfio/pci/vfio_pci_config.c | 16 +- drivers/video/fbdev/sh7760fb.c | 3 +- drivers/watchdog/Kconfig | 4 +- drivers/xen/xenbus/xenbus_probe.c | 8 +- fs/binfmt_elf.c | 2 + fs/binfmt_elf_fdpic.c | 5 +- fs/binfmt_misc.c | 7 +- fs/cachefiles/interface.c | 14 +- fs/cachefiles/ondemand.c | 38 ++- fs/dlm/ast.c | 2 +- fs/dlm/recoverd.c | 2 +- fs/efs/super.c | 43 +-- fs/erofs/zmap.c | 17 +- fs/exec.c | 45 ++- fs/exfat/file.c | 10 + fs/exfat/namei.c | 21 +- fs/ext4/balloc.c | 4 +- fs/ext4/ext4.h | 12 +- fs/ext4/extents.c | 2 +- fs/ext4/fsmap.c | 54 +++- fs/ext4/ialloc.c | 5 +- fs/ext4/indirect.c | 2 +- fs/ext4/inode.c | 4 +- fs/ext4/mballoc.c | 18 +- fs/ext4/mballoc.h | 1 + fs/ext4/mmp.c | 2 +- fs/ext4/move_extent.c | 43 ++- fs/ext4/resize.c | 2 +- fs/ext4/super.c | 42 ++- fs/f2fs/checkpoint.c | 4 +- fs/f2fs/data.c | 29 +- fs/f2fs/debug.c | 2 +- fs/f2fs/f2fs.h | 3 +- fs/f2fs/file.c | 23 +- fs/f2fs/gc.c | 2 + fs/f2fs/node.c | 14 +- fs/f2fs/segment.c | 5 +- fs/f2fs/segment.h | 35 +- fs/f2fs/super.c | 37 ++- fs/fuse/file.c | 62 ++-- fs/fuse/fuse_i.h | 6 + fs/fuse/virtio_fs.c | 1 + fs/gfs2/glock.c | 19 +- fs/gfs2/glock.h | 1 + fs/gfs2/incore.h | 2 +- fs/gfs2/rgrp.c | 2 +- fs/gfs2/super.c | 2 +- fs/hfsplus/hfsplus_fs.h | 3 +- fs/hfsplus/wrapper.c | 2 + fs/isofs/inode.c | 8 +- fs/jffs2/erase.c | 7 +- fs/jfs/xattr.c | 2 +- fs/netfs/fscache_volume.c | 3 +- fs/nfs/blocklayout/blocklayout.c | 15 +- fs/nfs/blocklayout/dev.c | 6 +- fs/nfs/internal.h | 2 +- fs/nfs/nfs4proc.c | 8 +- fs/nfs/write.c | 49 +-- fs/nfsd/export.c | 31 +- fs/nfsd/export.h | 4 +- fs/nfsd/nfs4callback.c | 16 +- fs/nfsd/nfs4proc.c | 7 +- fs/nfsd/nfs4recover.c | 3 +- fs/nfsd/nfs4state.c | 5 +- fs/nfsd/nfs4xdr.c | 2 +- fs/nfsd/nfsfh.c | 20 +- fs/nfsd/nfsfh.h | 3 +- fs/notify/fsnotify.c | 23 +- fs/notify/mark.c | 12 +- fs/ocfs2/aops.h | 2 + fs/ocfs2/file.c | 4 + fs/proc/kcore.c | 10 +- fs/proc/softirqs.c | 2 +- fs/read_write.c | 15 +- fs/smb/client/cached_dir.c | 229 +++++++++----- fs/smb/client/cached_dir.h | 6 +- fs/smb/client/cifsfs.c | 12 +- fs/smb/client/cifsglob.h | 4 +- fs/smb/client/cifsproto.h | 1 + fs/smb/client/connect.c | 59 +++- fs/smb/client/fs_context.c | 85 ++++- fs/smb/client/fs_context.h | 1 + fs/smb/client/inode.c | 4 +- fs/smb/client/reparse.c | 95 +++++- fs/smb/client/reparse.h | 6 +- fs/smb/client/smb1ops.c | 4 +- fs/smb/client/smb2file.c | 21 +- fs/smb/client/smb2inode.c | 6 +- fs/smb/client/smb2ops.c | 2 +- fs/smb/client/smb2pdu.c | 4 +- fs/smb/client/smb2proto.h | 9 +- fs/smb/client/trace.h | 3 + fs/smb/server/server.c | 4 + fs/ubifs/super.c | 6 +- fs/ubifs/tnc_commit.c | 2 + fs/unicode/utf8-core.c | 2 +- include/asm-generic/vmlinux.lds.h | 4 +- include/kunit/skbuff.h | 2 +- include/linux/blk-mq.h | 2 + include/linux/blkdev.h | 15 +- include/linux/bpf.h | 9 +- include/linux/cleanup.h | 4 +- include/linux/compiler_attributes.h | 13 - include/linux/compiler_types.h | 19 ++ include/linux/f2fs_fs.h | 6 +- include/linux/fs.h | 2 +- include/linux/hisi_acc_qm.h | 8 +- include/linux/io-pgtable.h | 4 + include/linux/irqdomain.h | 8 + include/linux/jiffies.h | 2 +- include/linux/kfifo.h | 1 - include/linux/kvm_host.h | 6 - include/linux/lockdep.h | 2 +- include/linux/mmdebug.h | 6 +- include/linux/netpoll.h | 2 +- include/linux/of_fdt.h | 5 +- include/linux/once.h | 4 +- include/linux/once_lite.h | 2 +- include/linux/rcupdate.h | 2 +- include/linux/regmap.h | 4 + include/linux/seqlock.h | 98 ++++-- include/media/v4l2-dv-timings.h | 18 +- include/net/bluetooth/hci.h | 4 +- include/net/bluetooth/hci_core.h | 63 ++++ include/net/cfg80211.h | 44 +++ include/net/ieee80211_radiotap.h | 37 ++- include/net/net_debug.h | 2 +- include/rdma/ib_verbs.h | 8 + include/uapi/linux/rtnetlink.h | 2 +- init/Kconfig | 9 + init/initramfs.c | 15 + io_uring/memmap.c | 11 +- ipc/namespace.c | 4 +- kernel/bpf/bpf_struct_ops.c | 114 ++++++- kernel/bpf/btf.c | 6 + kernel/bpf/dispatcher.c | 3 +- kernel/bpf/trampoline.c | 9 +- kernel/bpf/verifier.c | 139 +++++++- kernel/cgroup/cgroup.c | 21 +- kernel/fork.c | 26 +- kernel/irq/irqdomain.c | 202 +++++++----- kernel/rcu/rcuscale.c | 6 +- kernel/rcu/srcutiny.c | 2 +- kernel/rcu/tree.c | 14 +- kernel/sched/cpufreq_schedutil.c | 3 +- kernel/time/time.c | 4 +- kernel/trace/bpf_trace.c | 5 +- kernel/trace/trace_event_perf.c | 6 + lib/overflow_kunit.c | 2 +- lib/string_helpers.c | 2 +- lib/strncpy_from_user.c | 5 +- mm/internal.h | 2 +- net/9p/trans_xen.c | 9 +- net/bluetooth/hci_conn.c | 225 ++++++++++--- net/bluetooth/hci_event.c | 39 ++- net/bluetooth/hci_sysfs.c | 15 +- net/bluetooth/iso.c | 101 ++++-- net/bluetooth/mgmt.c | 38 ++- net/bluetooth/rfcomm/sock.c | 10 +- net/core/filter.c | 88 +++--- net/core/netdev-genl.c | 2 + net/core/skmsg.c | 4 +- net/hsr/hsr_device.c | 4 +- net/ipv4/inet_connection_sock.c | 2 +- net/ipv4/ipmr.c | 44 ++- net/ipv4/ipmr_base.c | 3 +- net/ipv4/tcp_bpf.c | 7 +- net/ipv6/addrconf.c | 41 ++- net/ipv6/ip6_fib.c | 8 +- net/ipv6/ip6mr.c | 40 ++- net/ipv6/route.c | 51 +-- net/iucv/af_iucv.c | 26 +- net/llc/af_llc.c | 2 +- net/mac80211/cfg.c | 22 +- net/mac80211/ieee80211_i.h | 5 +- net/mac80211/link.c | 7 +- net/mac80211/main.c | 2 + net/netfilter/ipset/ip_set_bitmap_ip.c | 7 +- net/netfilter/nf_tables_api.c | 62 ++-- net/netlink/af_netlink.c | 21 +- net/rfkill/rfkill-gpio.c | 8 +- net/rxrpc/af_rxrpc.c | 7 +- net/sched/sch_fq.c | 6 + net/sunrpc/cache.c | 4 +- net/sunrpc/svcsock.c | 4 + net/sunrpc/xprtrdma/svc_rdma.c | 19 +- net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 8 +- net/sunrpc/xprtsock.c | 17 +- net/wireless/core.c | 71 ++++- net/wireless/mlme.c | 6 - net/wireless/nl80211.c | 1 + net/xdp/xsk.c | 11 +- rust/kernel/block/mq/request.rs | 67 ++-- rust/kernel/lib.rs | 2 +- rust/macros/lib.rs | 2 +- samples/bpf/xdp_adjust_tail_kern.c | 1 + samples/kfifo/dma-example.c | 1 + scripts/checkpatch.pl | 37 +-- scripts/faddr2line | 2 +- scripts/kernel-doc | 47 ++- scripts/mod/file2alias.c | 5 +- scripts/package/builddeb | 20 +- security/apparmor/capability.c | 2 + security/apparmor/policy_unpack_test.c | 6 + security/integrity/integrity.h | 4 + sound/core/pcm_native.c | 6 +- sound/core/rawmidi.c | 4 +- sound/core/sound_kunit.c | 11 + sound/core/ump.c | 5 +- sound/hda/intel-dsp-config.c | 4 + sound/pci/hda/patch_realtek.c | 155 ++++----- sound/soc/amd/yc/acp6x-mach.c | 32 +- sound/soc/codecs/da7213.c | 1 + sound/soc/codecs/da7219.c | 9 +- sound/soc/codecs/max9768.c | 11 +- sound/soc/codecs/rt5640.c | 27 +- sound/soc/codecs/rt722-sdca.c | 8 +- sound/soc/codecs/tas2781-fmwlib.c | 1 + sound/soc/codecs/wcd937x.c | 12 +- sound/soc/codecs/wcd937x.h | 4 + sound/soc/fsl/fsl-asoc-card.c | 8 +- sound/soc/fsl/fsl_micfil.c | 4 +- sound/soc/fsl/imx-audmix.c | 3 + sound/soc/generic/audio-graph-card2.c | 3 + sound/soc/intel/atom/sst/sst_acpi.c | 64 +++- sound/soc/intel/boards/bytcr_rt5640.c | 48 ++- sound/soc/mediatek/mt8188/mt8188-mt6359.c | 9 +- .../mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c | 4 +- sound/soc/mediatek/mt8195/mt8195-mt6359.c | 9 +- sound/soc/stm/stm32_sai_sub.c | 6 +- sound/usb/6fire/chip.c | 10 +- sound/usb/caiaq/audio.c | 10 +- sound/usb/caiaq/audio.h | 1 + sound/usb/caiaq/device.c | 19 +- sound/usb/caiaq/input.c | 12 +- sound/usb/caiaq/input.h | 1 + sound/usb/clock.c | 24 +- sound/usb/quirks-table.h | 14 +- sound/usb/quirks.c | 27 +- sound/usb/usx2y/us122l.c | 5 +- sound/usb/usx2y/usbusx2y.c | 2 +- tools/bpf/bpftool/jit_disasm.c | 40 ++- tools/include/nolibc/arch-s390.h | 1 + tools/lib/bpf/libbpf.c | 99 +++--- tools/lib/bpf/linker.c | 2 + tools/lib/thermal/Makefile | 4 +- tools/lib/thermal/commands.c | 52 ++- tools/perf/Makefile.config | 2 +- tools/perf/builtin-ftrace.c | 2 +- tools/perf/builtin-list.c | 4 +- tools/perf/builtin-stat.c | 52 ++- tools/perf/builtin-trace.c | 23 +- tools/perf/tests/attr/test-stat-default | 94 ++++-- tools/perf/tests/attr/test-stat-detailed-1 | 110 +++++-- tools/perf/tests/attr/test-stat-detailed-2 | 134 +++++--- tools/perf/tests/attr/test-stat-detailed-3 | 142 ++++++--- tools/perf/tests/shell/test_stat_intel_tpebs.sh | 22 ++ tools/perf/util/cs-etm.c | 25 +- tools/perf/util/disasm.c | 2 +- tools/perf/util/evlist.c | 19 +- tools/perf/util/evlist.h | 1 + tools/perf/util/machine.c | 2 +- tools/perf/util/mem-events.c | 8 +- tools/perf/util/pfm.c | 4 +- tools/perf/util/pmus.c | 2 +- tools/perf/util/probe-finder.c | 21 +- tools/perf/util/probe-finder.h | 4 +- tools/perf/util/stat-display.c | 101 ++++-- tools/power/x86/turbostat/turbostat.c | 5 +- tools/testing/selftests/arm64/abi/hwcap.c | 6 +- .../selftests/arm64/mte/check_tags_inclusion.c | 4 +- .../testing/selftests/arm64/mte/mte_common_util.c | 4 +- .../selftests/bpf/bpf_testmod/bpf_testmod-events.h | 6 + .../selftests/bpf/bpf_testmod/bpf_testmod.c | 2 + tools/testing/selftests/bpf/network_helpers.c | 46 +++ tools/testing/selftests/bpf/network_helpers.h | 3 + .../selftests/bpf/prog_tests/timer_lockup.c | 6 + .../selftests/bpf/prog_tests/tp_btf_nullable.c | 14 + .../selftests/bpf/progs/test_spin_lock_fail.c | 4 +- .../selftests/bpf/progs/test_tp_btf_nullable.c | 28 ++ tools/testing/selftests/bpf/test_progs.c | 97 +++++- tools/testing/selftests/bpf/test_progs.h | 4 + tools/testing/selftests/bpf/test_sockmap.c | 165 ++++++++-- .../selftests/mount_setattr/mount_setattr_test.c | 2 +- tools/testing/selftests/net/Makefile | 1 + .../selftests/net/ipv6_route_update_soft_lockup.sh | 262 +++++++++++++++ .../selftests/net/netfilter/conntrack_dump_flush.c | 6 + tools/testing/selftests/net/pmtu.sh | 2 +- tools/testing/selftests/resctrl/fill_buf.c | 2 +- tools/testing/selftests/resctrl/mbm_test.c | 16 +- tools/testing/selftests/resctrl/resctrl_val.c | 3 +- tools/testing/selftests/vDSO/parse_vdso.c | 3 +- tools/testing/selftests/watchdog/watchdog-test.c | 6 + tools/testing/selftests/wireguard/netns.sh | 1 + tools/tracing/rtla/src/timerlat_hist.c | 2 +- tools/tracing/rtla/src/timerlat_top.c | 2 +- virt/kvm/kvm_main.c | 103 ------ 908 files changed, 10577 insertions(+), 4981 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/817 wifi: mac80211: Fix setting txpower with emulate_chanctx
6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Greear <[email protected]>
[ Upstream commit 8dd0498983eef524a8d104eb8abb32ec4c595bec ]
Propagate hw conf into the driver when txpower changes and driver is emulating channel contexts.
--- net/mac80211/cfg.c | 5 +++++ 1 file changed, 5 insertions(+)
net/mac80211/cfg.c +5 -0
@@ -3046,6 +3046,7 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,enum nl80211_tx_power_setting txp_type = type;bool update_txp_type = false;bool has_monitor = false; +int old_power = local->user_power_level;lockdep_assert_wiphy (local->hw.wiphy);
@@ -3128,6 +3129,10 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy, } } +if (local->emulate_chanctx && + (old_power != local->user_power_level)) +ieee80211_hw_conf_chan (local); +return 0 ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 2/817 wifi: cfg80211: Add wiphy_delayed_work_pending()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Remi Pommarel <[email protected]>
[ Upstream commit 68d0021fe7231eec0fb84cd110cf62a6e782b72d ]
Add wiphy_delayed_work_pending() to check if any delayed work timer is pending, that can be used to be sure that wiphy_delayed_work_queue() won't postpone an already pending delayed work.
--- include/net/cfg80211.h | 44 ++++++++++++++++++++++++++++++++++++++++++ net/wireless/core.c | 7 +++++++ 2 files changed, 51 insertions(+)
include/net/cfg80211.h +44 -0
@@ -6129,6 +6129,50 @@ void wiphy_delayed_work_cancel(struct wiphy *wiphy,void wiphy_delayed_work_flush (struct wiphy *wiphy,struct wiphy_delayed_work *dwork); +/** +* wiphy_delayed_work_pending - Find out whether a wiphy delayable +* work item is currently pending. +* +* @wiphy: the wiphy, for debug purposes +* @dwork: the delayed work in question +* +* Return: true if timer is pending, false otherwise +* +* How wiphy_delayed_work_queue() works is by setting a timer which +* when it expires calls wiphy_work_queue() to queue the wiphy work. +* Because wiphy_delayed_work_queue() uses mod_timer(), if it is +* called twice and the second call happens before the first call +* deadline, the work will rescheduled for the second deadline and +* won't run before that. +* +* wiphy_delayed_work_pending() can be used to detect if calling +* wiphy_work_delayed_work_queue() would start a new work schedule +* or delayed a previous one. As seen below it cannot be used to +* detect precisely if the work has finished to execute nor if it +* is currently executing. +* +* CPU0 CPU1 +* wiphy_delayed_work_queue(wk) +* mod_timer(wk->timer) +* wiphy_delayed_work_pending(wk) -> true +* +* [...] +* expire_timers(wk->timer) +* detach_timer(wk->timer) +* wiphy_delayed_work_pending(wk) -> false +* wk->timer->function() | +* wiphy_work_queue(wk) | delayed work pending +* list_add_tail() | returns false but +* queue_work(cfg80211_wiphy_work) | wk->func() has not +* | been run yet +* [...] | +* cfg80211_wiphy_work() | +* wk->func() V +* +*/ +bool wiphy_delayed_work_pending (struct wiphy *wiphy, +struct wiphy_delayed_work *dwork); +/** * enum ieee80211_ap_reg_power - regulatory power for an Access Point *
net/wireless/core.c +7 -0
@@ -1705,6 +1705,13 @@ void wiphy_delayed_work_flush(struct wiphy *wiphy, }EXPORT_SYMBOL_GPL (wiphy_delayed_work_flush); +bool wiphy_delayed_work_pending (struct wiphy *wiphy, +struct wiphy_delayed_work *dwork) +{ +return timer_pending (&dwork->timer); +} +EXPORT_SYMBOL_GPL (wiphy_delayed_work_pending); +static int __init cfg80211_init (void ) {int err;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 3/817 wifi: mac80211: Convert color collision detection to wiphy work
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Remi Pommarel <[email protected]>
[ Upstream commit 4cc6f3e5e5765abad9c091989970d67d8c1d2204 ]
Call to ieee80211_color_collision_detection_work() needs wiphy lock to be held (see lockdep assert in cfg80211_bss_color_notify()). Not locking wiphy causes the following lockdep error:
WARNING: CPU: 2 PID: 42 at net/wireless/nl80211.c:19505 cfg80211_bss_color_notify+0x1a4/0x25c Modules linked in: CPU: 2 PID: 42 Comm: kworker/u8:3 Tainted: G W 6.4.0-02327-g36c6cb260481 #1048 Hardware name: Workqueue: phy1 ieee80211_color_collision_detection_work pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : cfg80211_bss_color_notify+0x1a4/0x25c lr : cfg80211_bss_color_notify+0x1a0/0x25c sp : ffff000002947d00 x29: ffff000002947d00 x28: ffff800008e1a000 x27: ffff000002bd4705 x26: ffff00000d034000 x25: ffff80000903cf40 x24: 0000000000000000 x23: ffff00000cb70720 x22: 0000000000800000 x21: ffff800008dfb008 x20: 000000000000008d x19: ffff00000d035fa8 x18: 0000000000000010 x17: 0000000000000001 x16: 000003564b1ce96a x15: 000d69696d057970 x14: 000000000000003b x13: 0000000000000001 x12: 0000000000040000 x11: 0000000000000001 x10: ffff80000978f9c0 x9 : ffff0000028d3174 x8 : ffff800008e30000 x7 : 0000000000000000 x6 : 0000000000000028 x5 : 000000000002f498 x4 : ffff00000d034a80 x3 : 0000000000800000 x2 : ffff800016143000 x1 : 0000000000000000 x0 : 0000000000000000 Call trace: cfg80211_bss_color_notify+0x1a4/0x25c ieee80211_color_collision_detection_work+0x20/0x118 process_one_work+0x294/0x554 worker_thread+0x70/0x440 kthread+0xf4/0xf8 ret_from_fork+0x10/0x20 irq event stamp: 77372 hardirqs last enabled at (77371): [<ffff800008a346fc>] _raw_spin_unlock_irq+0x2c/0x4c hardirqs last disabled at (77372): [<ffff800008a28754>] el1_dbg+0x20/0x48 softirqs last enabled at (77350): [<ffff8000089e120c>] batadv_send_outstanding_bcast_packet+0xb8/0x120 softirqs last disabled at (77348): [<ffff8000089e11d4>] batadv_send_outstanding_bcast_packet+0x80/0x120
The wiphy lock cannot be taken directly from color collision detection delayed work (ieee80211_color_collision_detection_work()) because this work is cancel_delayed_work_sync() under this wiphy lock causing a potential deadlock( see [0] for details).
To fix that ieee80211_color_collision_detection_work() could be converted to a wiphy work and cancel_delayed_work_sync() can be simply replaced by wiphy_delayed_work_cancel() serving the same purpose under wiphy lock.
This could potentially fix [1].
[0]: https://lore.kernel.org/linux-wireless/[email protected]/
[1]: https://lore.kernel.org/lkml/[email protected]/
--- net/mac80211/cfg.c | 17 +++++++++-------- net/mac80211/ieee80211_i.h | 5 +++-- net/mac80211/link.c | 7 ++++--- 3 files changed, 16 insertions(+), 13 deletions(-)
net/mac80211/cfg.c +9 -8
@@ -4825,12 +4825,12 @@ void ieee80211_color_change_finalize_work(struct wiphy *wiphy,ieee80211_color_change_finalize (link); } -void ieee80211_color_collision_detection_work (struct work_struct *work) +void ieee80211_color_collision_detection_work (struct wiphy *wiphy, +struct wiphy_work *work) { -struct delayed_work *delayed_work =to_delayed_work (work);struct ieee80211_link_data *link = - container_of(delayed_work, struct ieee80211_link_data, - color_collision_detect_work); + container_of(work, struct ieee80211_link_data, + color_collision_detect_work.work);struct ieee80211_sub_if_data *sdata = link->sdata; cfg80211_obss_color_collision_notify(sdata->dev, link->color_bitmap,
@@ -4883,7 +4883,8 @@ ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,return ; } -if (delayed_work_pending (&link->color_collision_detect_work)) { +if (wiphy_delayed_work_pending (sdata->local->hw.wiphy, + &link->color_collision_detect_work)) {rcu_read_unlock ();return ; }
@@ -4892,9 +4893,9 @@ ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,/* queue the color collision detection event every 500 ms in order to * avoid sending too much netlink messages to userspace. */ -ieee80211_queue_delayed_work (&sdata->local->hw, - &link->color_collision_detect_work, -msecs_to_jiffies (500 )); +wiphy_delayed_work_queue (sdata->local->hw.wiphy, + &link->color_collision_detect_work, +msecs_to_jiffies (500 ));rcu_read_unlock (); }
net/mac80211/ieee80211_i.h +3 -2
@@ -1051,7 +1051,7 @@ struct ieee80211_link_data { } csa;struct wiphy_work color_change_finalize_work; -struct delayed_work color_collision_detect_work; +struct wiphy_delayed_work color_collision_detect_work;u64 color_bitmap;/* context reservation -- protected with wiphy mutex */
@@ -2004,7 +2004,8 @@ int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,/* color change handling */ void ieee80211_color_change_finalize_work (struct wiphy *wiphy,struct wiphy_work *work); -void ieee80211_color_collision_detection_work (struct work_struct *work); +void ieee80211_color_collision_detection_work (struct wiphy *wiphy, +struct wiphy_work *work);/* interface handling */ #define MAC80211_SUPPORTED_FEATURES_TX (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \
net/mac80211/link.c +4 -3
@@ -41,8 +41,8 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, ieee80211_csa_finalize_work);wiphy_work_init (&link->color_change_finalize_work, ieee80211_color_change_finalize_work); -INIT_DELAYED_WORK (&link->color_collision_detect_work, - ieee80211_color_collision_detection_work); +wiphy_delayed_work_init (&link->color_collision_detect_work, + ieee80211_color_collision_detection_work);INIT_LIST_HEAD (&link->assigned_chanctx_list);INIT_LIST_HEAD (&link->reserved_chanctx_list);
@@ -70,7 +70,8 @@ void ieee80211_link_stop(struct ieee80211_link_data *link)if (link->sdata->vif.type ==NL80211_IFTYPE_STATION )ieee80211_mgd_stop_link (link); -cancel_delayed_work_sync (&link->color_collision_detect_work); +wiphy_delayed_work_cancel (link->sdata->local->hw.wiphy, + &link->color_collision_detect_work);wiphy_work_cancel (link->sdata->local->hw.wiphy, &link->color_change_finalize_work); wiphy_work_cancel(link->sdata->local->hw.wiphy,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 4/817 wifi: radiotap: Avoid -Wflex-array-member-not-at-end warnings
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
[ Upstream commit 57be3d3562ca4aa62b8047bc681028cc402af8ce ]
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
So, in order to avoid ending up with a flexible-array member in the middle of multiple other structs, we use the __struct_group() helper to create a new tagged struct ieee80211_radiotap_header_fixed. This structure groups together all the members of the flexible struct ieee80211_radiotap_header except the flexible array.
As a result, the array is effectively separated from the rest of the members without modifying the memory layout of the flexible structure. We then change the type of the middle struct members currently causing trouble from struct ieee80211_radiotap_header to struct ieee80211_radiotap_header_fixed.
We also want to ensure that in case new members need to be added to the flexible structure, they are always included within the newly created tagged struct. For this, we use static_assert(). This ensures that the memory layout for both the flexible structure and the new tagged struct is the same after any changes.
This approach avoids having to implement struct ieee80211_radiotap_header_fixed as a completely separate structure, thus preventing having to maintain two independent but basically identical structures, closing the door to potential bugs in the future.
So, with these changes, fix the following warnings:drivers/net/wireless/ath/wil6210/txrx.c:309:50: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/ipw2x00/ipw2100.c:2521:50: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/ipw2x00/ipw2200.h:1146:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/ipw2x00/libipw.h:595:36: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/marvell/libertas/radiotap.h:34:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/marvell/libertas/radiotap.h:5:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/microchip/wilc1000/mon.c:10:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/microchip/wilc1000/mon.c:15:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/virtual/mac80211_hwsim.c:758:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/virtual/mac80211_hwsim.c:767:42: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
--- drivers/net/wireless/ath/wil6210/txrx.c | 2 +- drivers/net/wireless/intel/ipw2x00/ipw2100.c | 2 +- drivers/net/wireless/intel/ipw2x00/ipw2200.h | 2 +- .../net/wireless/marvell/libertas/radiotap.h | 4 +- drivers/net/wireless/microchip/wilc1000/mon.c | 4 +- drivers/net/wireless/virtual/mac80211_hwsim.c | 4 +- include/net/ieee80211_radiotap.h | 43 +++++++++++-------- 7 files changed, 33 insertions(+), 28 deletions(-)
drivers/net/wireless/ath/wil6210/txrx.c +1 -1
@@ -306,7 +306,7 @@ static void wil_rx_add_radiotap_header(struct wil6210_priv *wil, struct sk_buff *skb) {struct wil6210_rtap { -struct ieee80211_radiotap_header rthdr; +struct ieee80211_radiotap_header_fixed rthdr;/* fields should be in the order of bits in rthdr.it_present */ /* flags */ u8 flags;
drivers/net/wireless/intel/ipw2x00/ipw2100.c +1 -1
@@ -2518,7 +2518,7 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i,* to build this manually element by element, we can write it much * more efficiently than we can parse it. ORDER MATTERS HERE */ struct ipw_rt_hdr { -struct ieee80211_radiotap_header rt_hdr; +struct ieee80211_radiotap_header_fixed rt_hdr;s8 rt_dbmsignal;/* signal in dbM, kluged to signed */ } *ipw_rt;
drivers/net/wireless/intel/ipw2x00/ipw2200.h +1 -1
@@ -1143,7 +1143,7 @@ struct ipw_prom_priv {* structure is provided regardless of any bits unset. */ struct ipw_rt_hdr { -struct ieee80211_radiotap_header rt_hdr; +struct ieee80211_radiotap_header_fixed rt_hdr;u64 rt_tsf;/* TSF */ /* XXX */ u8 rt_flags;/* radiotap packet flags */ u8 rt_rate;/* rate in 500kb/s */
drivers/net/wireless/marvell/libertas/radiotap.h +2 -2
@@ -2,7 +2,7 @@#include <net/ieee80211_radiotap.h> struct tx_radiotap_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;u8 rate;u8 txpower;u8 rts_retries;
@@ -31,7 +31,7 @@ struct tx_radiotap_hdr {#define IEEE80211_FC_DSTODS 0x0300struct rx_radiotap_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;u8 flags;u8 rate;u8 antsignal;
drivers/net/wireless/microchip/wilc1000/mon.c +2 -2
@@ -7,12 +7,12 @@#include "cfg80211.h" struct wilc_wfi_radiotap_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;u8 rate; } __packed;struct wilc_wfi_radiotap_cb_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;u8 rate;u8 dump;u16 tx_flags;
drivers/net/wireless/virtual/mac80211_hwsim.c +2 -2
@@ -763,7 +763,7 @@ static const struct rhashtable_params hwsim_rht_params = { };struct hwsim_radiotap_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;__le64 rt_tsft;u8 rt_flags;u8 rt_rate;
@@ -772,7 +772,7 @@ struct hwsim_radiotap_hdr { } __packed;struct hwsim_radiotap_ack_hdr { -struct ieee80211_radiotap_header hdr; +struct ieee80211_radiotap_header_fixed hdr;u8 rt_flags;u8 pad;__le16 rt_channel;
include/net/ieee80211_radiotap.h +24 -19
55 lines not on this page · raw message
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 5/817 spi: stm32: fix missing device mode capability in stm32mp25
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alain Volmat <[email protected]>
[ Upstream commit b5a468199b995bd8ee3c26f169a416a181210c9e ]
The STM32MP25 SOC has capability to behave in device mode however missing .has_device_mode within its stm32mp25_spi_cfg structure leads to not being able to enable the device mode.
--- drivers/spi/spi-stm32.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-stm32.c +1 -0
@@ -2044,6 +2044,7 @@ static const struct stm32_spi_cfg stm32mp25_spi_cfg = { .baud_rate_div_max = STM32H7_SPI_MBR_DIV_MAX, .has_fifo = true, .prevent_dma_burst = true, + .has_device_mode = true, };static const struct of_device_id stm32_spi_of_match[] = {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 6/817 ASoC: codecs: rt5640: Always disable IRQs from rt5640_cancel_work()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 032532f91a1d06d0750f16c49a9698ef5374a68f ]
Disable IRQs from rt5640_cancel_work(), this fixes a crash caused by the IRQ never getting freed when the driver is unbound from the i2c_client with jack-detection active:
[ 193.138780] rt5640 i2c-rt5640: ASoC: unknown pin LDO2 [ 193.138830] rt5640 i2c-rt5640: ASoC: unknown pin MICBIAS1 [ 193.671218] BUG: kernel NULL pointer dereference, address: 0000000000000078 [ 193.671239] #PF: supervisor read access in kernel mode [ 193.671248] #PF: error_code(0x0000) - not-present page ... [ 193.671531] ? asm_exc_page_fault+0x22/0x30 [ 193.671551] ? rt5640_jack_inserted+0x10/0x80 [snd_soc_rt5640] [ 193.671574] rt5640_detect_headset+0x93/0x130 [snd_soc_rt5640] [ 193.671596] rt5640_jack_work+0x93/0x355 [snd_soc_rt5640]
--- sound/soc/codecs/rt5640.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
sound/soc/codecs/rt5640.c +15 -12
@@ -2419,10 +2419,20 @@ static irqreturn_t rt5640_jd_gpio_irq(int irq, void *data)return IRQ_HANDLED ; } -static void rt5640_cancel_work (void *data) +static void rt5640_disable_irq_and_cancel_work (void *data) {struct rt5640_priv *rt5640 = data; +if (rt5640->jd_gpio_irq_requested) { +free_irq (rt5640->jd_gpio_irq, rt5640); + rt5640->jd_gpio_irq_requested = false; + } + +if (rt5640->irq_requested) { +free_irq (rt5640->irq, rt5640); + rt5640->irq_requested = false; + } +cancel_delayed_work_sync (&rt5640->jack_work);cancel_delayed_work_sync (&rt5640->bp_work); }
@@ -2463,13 +2473,7 @@ static void rt5640_disable_jack_detect(struct snd_soc_component *component)if (!rt5640->jack)return ; -if (rt5640->jd_gpio_irq_requested) -free_irq (rt5640->jd_gpio_irq, rt5640); - -if (rt5640->irq_requested) -free_irq (rt5640->irq, rt5640); - -rt5640_cancel_work (rt5640); +rt5640_disable_irq_and_cancel_work (rt5640);if (rt5640->jack->status &SND_JACK_MICROPHONE ) {rt5640_disable_micbias1_ovcd_irq (component);
@@ -2477,8 +2481,6 @@ static void rt5640_disable_jack_detect(struct snd_soc_component *component)snd_soc_jack_report (rt5640->jack,0 ,SND_JACK_BTN_0 ); } - rt5640->jd_gpio_irq_requested = false; - rt5640->irq_requested = false; rt5640->jd_gpio =NULL ; rt5640->jack =NULL ; }
@@ -2798,7 +2800,8 @@ static int rt5640_suspend(struct snd_soc_component *component)if (rt5640->jack) {/* disable jack interrupts during system suspend */ disable_irq (rt5640->irq); -rt5640_cancel_work (rt5640); +cancel_delayed_work_sync (&rt5640->jack_work); +cancel_delayed_work_sync (&rt5640->bp_work); }snd_soc_component_force_bias_level (component,SND_SOC_BIAS_OFF );
@@ -3032,7 +3035,7 @@ static int rt5640_i2c_probe(struct i2c_client *i2c)INIT_DELAYED_WORK (&rt5640->jack_work, rt5640_jack_work);/* Make sure work is stopped on probe-error / remove */ - ret =devm_add_action_or_reset (&i2c->dev, rt5640_cancel_work, rt5640); + ret =devm_add_action_or_reset (&i2c->dev, rt5640_disable_irq_and_cancel_work, rt5640);if (ret)return ret;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 7/817 ASoC: Intel: bytcr_rt5640: Add support for non ACPI instantiated codec
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit d48696b915527b5bcdd207a299aec03fb037eb17 ]
On some x86 Bay Trail tablets which shipped with Android as factory OS, the DSDT is so broken that the codec needs to be manually instantatiated by the special x86-android-tablets.ko "fixup" driver for cases like this.
This means that the codec-dev cannot be retrieved through its ACPI fwnode, add support to the bytcr_rt5640 machine driver for such manually instantiated rt5640 i2c_clients.
An example of a tablet which needs this is the Vexia EDU ATLA 10 tablet, which has been distributed to schools in the Spanish Andalucía region.
--- sound/soc/intel/boards/bytcr_rt5640.c | 33 ++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-)
sound/soc/intel/boards/bytcr_rt5640.c +30 -3
@@ -17,6 +17,7 @@#include <linux/acpi.h> #include <linux/clk.h> #include <linux/device.h> +#include <linux/device/bus.h> #include <linux/dmi.h> #include <linux/gpio/consumer.h> #include <linux/gpio/machine.h>
@@ -32,6 +33,8 @@#include "../atom/sst-atom-controls.h" #include "../common/soc-intel-quirks.h" +#define BYT_RT5640_FALLBACK_CODEC_DEV_NAME "i2c-rt5640" +enum {BYT_RT5640_DMIC1_MAP ,BYT_RT5640_DMIC2_MAP ,
@@ -1698,9 +1701,33 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev) codec_dev =acpi_get_first_physical_node (adev);acpi_dev_put (adev); -if (!codec_dev) -return -EPROBE_DEFER ; - priv->codec_dev =get_device (codec_dev); + +if (codec_dev) { + priv->codec_dev =get_device (codec_dev); + }else { +/* +* Special case for Android tablets where the codec i2c_client +* has been manually instantiated by x86_android_tablets.ko due +* to a broken DSDT. +*/ + codec_dev =bus_find_device_by_name (&i2c_bus_type,NULL , +BYT_RT5640_FALLBACK_CODEC_DEV_NAME ); +if (!codec_dev) +return -EPROBE_DEFER ; + +if (!i2c_verify_client (codec_dev)) { +dev_err (dev,"Error '%s' is not an i2c_client\n" , +BYT_RT5640_FALLBACK_CODEC_DEV_NAME ); +put_device (codec_dev); + } + +/* fixup codec name */ +strscpy (byt_rt5640_codec_name,BYT_RT5640_FALLBACK_CODEC_DEV_NAME , +sizeof (byt_rt5640_codec_name)); + +/* bus_find_device() returns a reference no need to get() */ + priv->codec_dev = codec_dev; + }/* * swap SSP0 if bytcr is detected
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 8/817 ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 0107f28f135231da22a9ad5756bb16bd5cada4d5 ]
The Vexia Edu Atla 10 tablet mostly uses the BYTCR tablet defaults, but as happens on more models it is using IN1 instead of IN3 for its internal mic and JD_SRC_JD2_IN4N instead of JD_SRC_JD1_IN4P for jack-detection.
Add a DMI quirk for this to fix the internal-mic and jack-detection.
--- sound/soc/intel/boards/bytcr_rt5640.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
sound/soc/intel/boards/bytcr_rt5640.c +15 -0
@@ -1132,6 +1132,21 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF2 | BYT_RT5640_MCLK_EN), }, + { /* Vexia Edu Atla 10 tablet */ + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"AMI Corporation" ), +DMI_MATCH (DMI_BOARD_NAME ,"Aptio CRB" ), +/* Above strings are too generic, also match on BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "08/25/2014"), + }, + .driver_data = (void *)(BYT_RT5640_IN1_MAP | +BYT_RT5640_JD_SRC_JD2_IN4N | +BYT_RT5640_OVCD_TH_2000UA | +BYT_RT5640_OVCD_SF_0P75 | +BYT_RT5640_DIFF_MIC | +BYT_RT5640_SSP0_AIF2 | + BYT_RT5640_MCLK_EN), + }, { /* Voyo Winpad A15 */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 9/817 ASoC: Intel: sst: Support LPE0F28 ACPI HID
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 6668610b4d8ce9a3ee3ed61a9471f62fb5f05bf9 ]
Some old Bay Trail tablets which shipped with Android as factory OS have the SST/LPE audio engine described by an ACPI device with a HID (Hardware-ID) of LPE0F28 instead of 80860F28.
Add support for this. Note this uses a new sst_res_info for just the LPE0F28 case because it has a different layout for the IO-mem ACPI resources then the 80860F28.
An example of a tablet which needs this is the Vexia EDU ATLA 10 tablet, which has been distributed to schools in the Spanish Andalucía region.
--- sound/hda/intel-dsp-config.c | 4 ++ sound/soc/intel/atom/sst/sst_acpi.c | 64 +++++++++++++++++++++++++---- 2 files changed, 59 insertions(+), 9 deletions(-)
sound/hda/intel-dsp-config.c +4 -0
@@ -732,6 +732,10 @@ static const struct config_entry acpi_config_table[] = { #if IS_ENABLED(CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI) || \ IS_ENABLED(CONFIG_SND_SOC_SOF_BAYTRAIL) /* BayTrail */ + { + .flags = FLAG_SST_OR_SOF_BYT, + .acpi_hid = "LPE0F28", + }, { .flags = FLAG_SST_OR_SOF_BYT, .acpi_hid = "80860F28",
sound/soc/intel/atom/sst/sst_acpi.c +55 -9
88 lines not on this page · raw message
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 10/817 wifi: iwlwifi: mvm: Use the sync timepoint API in suspend
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Gabay <[email protected]>
[ Upstream commit 9715246ca0bfc9feaec1b4ff5b3d38de65a7025d ]
When starting the suspend flow, HOST_D3_START triggers an _async_ firmware dump collection for debugging purposes. The async worker may race with suspend flow and fail to get NIC access, resulting in the following warning:
"Timeout waiting for hardware access (CSR_GP_CNTRL 0xffffffff)"
Fix this by switching to the sync version to ensure the dump completes before proceeding with the suspend flow, avoiding potential race issues.
--- drivers/net/wireless/intel/iwlwifi/fw/init.c | 4 +++- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/net/wireless/intel/iwlwifi/fw/init.c +3 -1
@@ -39,10 +39,12 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans, }IWL_EXPORT_SYMBOL (iwl_fw_runtime_init); +/* Assumes the appropriate lock is held by the caller */ void iwl_fw_runtime_suspend (struct iwl_fw_runtime *fwrt) {iwl_fw_suspend_timestamp (fwrt); -iwl_dbg_tlv_time_point (fwrt,IWL_FW_INI_TIME_POINT_HOST_D3_START ,NULL ); +iwl_dbg_tlv_time_point_sync (fwrt,IWL_FW_INI_TIME_POINT_HOST_D3_START , +NULL ); }IWL_EXPORT_SYMBOL (iwl_fw_runtime_suspend);
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +2 -0
@@ -1398,7 +1398,9 @@ int iwl_mvm_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)iwl_mvm_pause_tcm (mvm, true); +mutex_lock (&mvm->mutex);iwl_fw_runtime_suspend (&mvm->fwrt); +mutex_unlock (&mvm->mutex);return __iwl_mvm_suspend (hw, wowlan, false); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 11/817 wifi: iwlwifi: mvm: SAR table alignment
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anjaneyulu <[email protected]>
[ Upstream commit 32d95ab330069f9c551b8e99770bb4e799730b55 ]
SAR table format in ACPI and local data base are different, So modified code to read data properly.
--- drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 96 ++++++++++++-------- 1 file changed, 58 insertions(+), 38 deletions(-)
drivers/net/wireless/intel/iwlwifi/fw/acpi.c +58 -38
@@ -429,38 +429,28 @@ int iwl_acpi_get_eckv(struct iwl_fw_runtime *fwrt, u32 *extl_clk)return ret; } -static int iwl_acpi_sar_set_profile (union acpi_object *table, -struct iwl_sar_profile *profile, -bool enabled,u8 num_chains, -u8 num_sub_bands) +static int +iwl_acpi_parse_chains_table (union acpi_object *table, +struct iwl_sar_profile_chain *chains, +u8 num_chains,u8 num_sub_bands) { -int i, j, idx =0 ; - -/* -* The table from ACPI is flat, but we store it in a -* structured array. -*/ -for (i =0 ; i <BIOS_SAR_MAX_CHAINS_PER_PROFILE ; i++) { -for (j =0 ; j <BIOS_SAR_MAX_SUB_BANDS_NUM ; j++) { +for (u8 chain =0 ; chain < num_chains; chain++) { +for (u8 subband =0 ; subband <BIOS_SAR_MAX_SUB_BANDS_NUM ; + subband++) {/* if we don't have the values, use the default */ -if (i >= num_chains || j >= num_sub_bands) { - profile->chains[i].subbands[j] =0 ; +if (subband >= num_sub_bands) { + chains[chain].subbands[subband] =0 ; + }else if (table->type !=ACPI_TYPE_INTEGER || + table->integer.value >U8_MAX ) { +return -EINVAL ; }else { -if (table[idx].type !=ACPI_TYPE_INTEGER || - table[idx].integer.value >U8_MAX ) -return -EINVAL ; - - profile->chains[i].subbands[j] = - table[idx].integer.value; - - idx++; + chains[chain].subbands[subband] = + table->integer.value; + table++; } } } -/* Only if all values were valid can the profile be enabled */ - profile->enabled = enabled; -return 0 ; }
@@ -543,9 +533,11 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)/* The profile from WRDS is officially profile 1, but goes * into sar_profiles[0] (because we don't have a profile 0). */ - ret =iwl_acpi_sar_set_profile (table, &fwrt->sar_profiles[0 ], - flags &IWL_SAR_ENABLE_MSK , - num_chains, num_sub_bands); + ret =iwl_acpi_parse_chains_table (table, fwrt->sar_profiles[0 ].chains, + num_chains, num_sub_bands); +if (!ret && flags &IWL_SAR_ENABLE_MSK ) + fwrt->sar_profiles[0 ].enabled = true; + out_free:kfree (data);return ret;
@@ -557,7 +549,7 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)bool enabled;int i, n_profiles, tbl_rev, pos;int ret =0 ; -u8 num_chains, num_sub_bands; +u8 num_sub_bands; data =iwl_acpi_get_object (fwrt->dev,ACPI_EWRD_METHOD );if (IS_ERR (data))
@@ -573,7 +565,6 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt) goto out_free; } - num_chains =ACPI_SAR_NUM_CHAINS_REV2 ; num_sub_bands =ACPI_SAR_NUM_SUB_BANDS_REV2 ; goto read_table;
@@ -589,7 +580,6 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt) goto out_free; } - num_chains =ACPI_SAR_NUM_CHAINS_REV1 ; num_sub_bands =ACPI_SAR_NUM_SUB_BANDS_REV1 ; goto read_table;
@@ -605,7 +595,6 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt) goto out_free; } - num_chains =ACPI_SAR_NUM_CHAINS_REV0 ; num_sub_bands =ACPI_SAR_NUM_SUB_BANDS_REV0 ; goto read_table;
@@ -637,23 +626,54 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)/* the tables start at element 3 */ pos =3 ; +BUILD_BUG_ON (ACPI_SAR_NUM_CHAINS_REV0 !=ACPI_SAR_NUM_CHAINS_REV1 ); +BUILD_BUG_ON (ACPI_SAR_NUM_CHAINS_REV2 !=2 *ACPI_SAR_NUM_CHAINS_REV0 ); + +/* parse non-cdb chains for all profiles */ for (i =0 ; i < n_profiles; i++) {union acpi_object *table = &wifi_pkg->package.elements[pos]; +/* The EWRD profiles officially go from 2 to 4, but we * save them in sar_profiles[1-3] (because we don't * have profile 0). So in the array we start from 1. */ - ret =iwl_acpi_sar_set_profile (table, - &fwrt->sar_profiles[i +1 ], - enabled, num_chains, - num_sub_bands); + ret =iwl_acpi_parse_chains_table (table, + fwrt->sar_profiles[i +1 ].chains, +ACPI_SAR_NUM_CHAINS_REV0 , + num_sub_bands);if (ret <0 ) -break ; + goto out_free;/* go to the next table */ - pos += num_chains * num_sub_bands; + pos +=ACPI_SAR_NUM_CHAINS_REV0 * num_sub_bands; } +/* non-cdb table revisions */ +if (tbl_rev <2 ) + goto set_enabled; + +/* parse cdb chains for all profiles */ +for (i =0 ; i < n_profiles; i++) { +struct iwl_sar_profile_chain *chains; +union acpi_object *table; + + table = &wifi_pkg->package.elements[pos]; + chains = &fwrt->sar_profiles[i +1 ].chains[ACPI_SAR_NUM_CHAINS_REV0 ]; + ret =iwl_acpi_parse_chains_table (table, + chains, +ACPI_SAR_NUM_CHAINS_REV0 , + num_sub_bands); +if (ret <0 ) + goto out_free; + +/* go to the next table */ + pos +=ACPI_SAR_NUM_CHAINS_REV0 * num_sub_bands; + } + +set_enabled: +for (i =0 ; i < n_profiles; i++) + fwrt->sar_profiles[i +1 ].enabled = enabled; + out_free:kfree (data);return ret;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 12/817 mac80211: fix user-power when emulating chanctx
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Greear <[email protected]>
[ Upstream commit 9b15c6cf8d2e82c8427cd06f535d8de93b5b995c ]
ieee80211_calc_hw_conf_chan was ignoring the configured user_txpower. If it is set, use it to potentially decrease txpower as requested.
--- net/mac80211/main.c | 2 ++ 1 file changed, 2 insertions(+)
net/mac80211/main.c +2 -0
@@ -167,6 +167,8 @@ static u32 ieee80211_calc_hw_conf_chan(struct ieee80211_local *local, } power =ieee80211_chandef_max_power (&chandef); +if (local->user_power_level !=IEEE80211_UNSET_POWER_LEVEL ) + power =min (local->user_power_level, power);rcu_read_lock ();list_for_each_entry_rcu (sdata, &local->interfaces, list) {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 13/817 usb: add support for new USB device ID 0x17EF:0x3098 for the r8152 driver
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Große <[email protected]>
[ Upstream commit 94c11e852955b2eef5c4f0b36cfeae7dcf11a759 ]
This patch adds support for another Lenovo Mini dock 0x17EF:0x3098 to the r8152 driver. The device has been tested on NixOS, hotplugging and sleep included.
--- drivers/net/usb/r8152.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/usb/r8152.c +1 -0
@@ -10069,6 +10069,7 @@ static const struct usb_device_id rtl8152_table[] = { { USB_DEVICE(VENDOR_ID_LENOVO, 0x3062) }, { USB_DEVICE(VENDOR_ID_LENOVO, 0x3069) }, { USB_DEVICE(VENDOR_ID_LENOVO, 0x3082) }, + { USB_DEVICE(VENDOR_ID_LENOVO, 0x3098) }, { USB_DEVICE(VENDOR_ID_LENOVO, 0x7205) }, { USB_DEVICE(VENDOR_ID_LENOVO, 0x720c) }, { USB_DEVICE(VENDOR_ID_LENOVO, 0x7214) },
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 14/817 usb: typec: use cleanup facility for altmodes_node
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Carrasco <[email protected]>
[ Upstream commit 1ab0b9ae587373f9f800b6fda01b8faf02b3530b ]
Use the __free() macro for 'altmodes_node' to automatically release the node when it goes out of scope, removing the need for explicit calls to fwnode_handle_put().
--- drivers/usb/typec/class.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/usb/typec/class.c +4 -2
@@ -2293,7 +2293,7 @@ void typec_port_register_altmodes(struct typec_port *port, const struct typec_altmode_ops *ops, void *drvdata, struct typec_altmode **altmodes, size_t n) { - struct fwnode_handle *altmodes_node, *child; + struct fwnode_handle *child;struct typec_altmode_desc desc;struct typec_altmode *alt;size_t index =0 ;
@@ -2301,7 +2301,9 @@ void typec_port_register_altmodes(struct typec_port *port,u32 vdo;int ret; - altmodes_node =device_get_named_child_node (&port->dev,"altmodes" ); + struct fwnode_handle *altmodes_node __free(fwnode_handle) = +device_get_named_child_node (&port->dev,"altmodes" ); +if (!altmodes_node)return ;/* No altmodes specified */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 15/817 selftests/watchdog-test: Fix system accidentally reset after watchdog-test
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Zhijian <[email protected]>
[ Upstream commit dc1308bee1ed03b4d698d77c8bd670d399dcd04d ]
When running watchdog-test with 'make run_tests', the watchdog-test will be terminated by a timeout signal(SIGTERM) due to the test timemout.
And then, a system reboot would happen due to watchdog not stop. see the dmesg as below:
``` [ 1367.185172] watchdog: watchdog0: watchdog did not stop! ```
Fix it by registering more signals(including SIGTERM) in watchdog-test, where its signal handler will stop the watchdog.
After that
# timeout 1 ./watchdog-test Watchdog Ticking Away! . Stopping watchdog ticks...
--- tools/testing/selftests/watchdog/watchdog-test.c | 6 ++++++ 1 file changed, 6 insertions(+)
tools/testing/selftests/watchdog/watchdog-test.c +6 -0
@@ -334,7 +334,13 @@ int main(int argc, char *argv[])printf ("Watchdog Ticking Away!\n" ); +/* +* Register the signals +*/ signal (SIGINT , term); +signal (SIGTERM , term); +signal (SIGKILL , term); +signal (SIGQUIT , term);while (1 ) {keep_alive ();
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 16/817 ALSA: hda/realtek: Add subwoofer quirk for Infinix ZERO BOOK 13
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Piyush Raj Chouhan <[email protected]>
[ Upstream commit ef5fbdf732a158ec27eeba69d8be851351f29f73 ]
Infinix ZERO BOOK 13 has a 2+2 speaker system which isn't probed correctly. This patch adds a quirk with the proper pin connections.
Also The mic in this laptop suffers too high gain resulting in mostly fan noise being recorded,
This patch Also limit mic boost.
HW Probe for device; https://linux-hardware.org/?probe=a2e892c47b
Test: All 4 speaker works, Mic has low noise.
--- sound/pci/hda/patch_realtek.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
sound/pci/hda/patch_realtek.c +12 -0
@@ -7544,6 +7544,7 @@ enum {ALC290_FIXUP_SUBWOOFER_HSJACK ,ALC269_FIXUP_THINKPAD_ACPI ,ALC269_FIXUP_DMIC_THINKPAD_ACPI , +ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13 ,ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO ,ALC255_FIXUP_ACER_MIC_NO_PRESENCE , ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
@@ -7992,6 +7993,16 @@ static const struct hda_fixup alc269_fixups[] = { .type = HDA_FIXUP_FUNC, .v.func = alc269_fixup_pincfg_U7x7_headset_mic, }, + [ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl []) { + {0x14 ,0x90170151 },/* use as internal speaker (LFE) */ + {0x1b ,0x90170152 },/* use as internal speaker (back) */ + { } + }, + .chained = true, + .chain_id =ALC269_FIXUP_LIMIT_INT_MIC_BOOST + }, [ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO] = { .type = HDA_FIXUP_PINS, .v.pins = (const struct hda_pintbl []) {
@@ -11015,6 +11026,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1d72 ,0x1945 ,"Redmi G" ,ALC256_FIXUP_ASUS_HEADSET_MIC ),SND_PCI_QUIRK (0x1d72 ,0x1947 ,"RedmiBook Air" ,ALC255_FIXUP_XIAOMI_HEADSET_MIC ),SND_PCI_QUIRK (0x2782 ,0x0214 ,"VAIO VJFE-CL" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ), +SND_PCI_QUIRK (0x2782 ,0x0228 ,"Infinix ZERO BOOK 13" ,ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13 ),SND_PCI_QUIRK (0x2782 ,0x0232 ,"CHUWI CoreBook XPro" ,ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO ),SND_PCI_QUIRK (0x2782 ,0x1707 ,"Vaio VJFE-ADL" ,ALC298_FIXUP_SPK_VOLUME ), SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 17/817 ASoC: codecs: wcd937x: add missing LO Switch control
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Klimov <[email protected]>
[ Upstream commit 041db4bbe04e8e0b48350b3bbbd9a799794d5c1e ]
The wcd937x supports also AUX input but the control that sets correct soundwire port for this is missing. This control is required for audio playback, for instance, on qrb4210 RB2 board as well as on other SoCs.
--- sound/soc/codecs/wcd937x.c | 2 ++ 1 file changed, 2 insertions(+)
sound/soc/codecs/wcd937x.c +2 -0
@@ -2049,6 +2049,8 @@ static const struct snd_kcontrol_new wcd937x_snd_controls[] = { wcd937x_get_swr_port, wcd937x_set_swr_port),SOC_SINGLE_EXT ("HPHR Switch" ,WCD937X_HPH_R ,0 ,1 ,0 , wcd937x_get_swr_port, wcd937x_set_swr_port), +SOC_SINGLE_EXT ("LO Switch" ,WCD937X_LO ,0 ,1 ,0 , + wcd937x_get_swr_port, wcd937x_set_swr_port),SOC_SINGLE_EXT ("ADC1 Switch" ,WCD937X_ADC1 ,1 ,1 ,0 , wcd937x_get_swr_port, wcd937x_set_swr_port),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 18/817 ASoC: codecs: wcd937x: relax the AUX PDM watchdog
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Klimov <[email protected]>
[ Upstream commit 107a5c853eef5336a9846e7dd2f9184b6e3c07c7 ]
On a system with wcd937x, rxmacro and Qualcomm audio DSP, which is pretty common set of devices on Qualcomm platforms, and due to the order of how DAPM widgets are powered on (they are sorted), there is a small time window when wcd937x chip is online and expects the flow of incoming data but rxmacro is not yet online. When wcd937x is programmed to receive data via AUX port then its AUX PDM watchdog is enabled in wcd937x_codec_enable_aux_pa(). If due to some reasons the rxmacro and soundwire machinery are delayed to start streaming data, then there is a chance for this AUX PDM watchdog to reset the wcd937x codec. Such event is not logged as a message and only wcd937x IRQ counter is increased however there could be a lot of other reasons for that IRQ. There is a similar opportunity for such delay during DAPM widgets power down sequence.
If wcd937x codec reset happens on the start of the playback, then there will be no sound and if such reset happens at the end of a playback then it may generate additional clicks and pops noises.
On qrb4210 RB2 board without any debugging bits the wcd937x resets are sometimes observed at the end of a playback though not always. With some debugging messages or with some tracing enabled the AUX PDM watchdog resets the wcd937x codec at the start of a playback and there is no sound output at all.
In this patch:
- TIMEOUT_SEL bit in PDM_WD_CTL2 register is set to increase the watchdog
reset delay to 100ms which eliminates the AUX PDM watchdog IRQs on qrb4210 RB2 board completely and decreases the number of unwanted clicks noises;
- HOLD_OFF bit postpones triggering such watchdog IRQ till wcd937x codec
reset which usually happens at the end of a playback. This allows to actually output some sound in case of debugging.
--- sound/soc/codecs/wcd937x.c | 10 ++++++++-- sound/soc/codecs/wcd937x.h | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-)
sound/soc/codecs/wcd937x.c +8 -2
@@ -715,12 +715,17 @@ static int wcd937x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w,struct snd_soc_component *component =snd_soc_dapm_to_component (w->dapm);struct wcd937x_priv *wcd937x =snd_soc_component_get_drvdata (component);int hph_mode = wcd937x->hph_mode; +u8 val;switch (event) {case SND_SOC_DAPM_PRE_PMU : + val =WCD937X_DIGITAL_PDM_WD_CTL2_EN | +WCD937X_DIGITAL_PDM_WD_CTL2_TIMEOUT_SEL | +WCD937X_DIGITAL_PDM_WD_CTL2_HOLD_OFF ;snd_soc_component_update_bits (component,WCD937X_DIGITAL_PDM_WD_CTL2 , -BIT (0 ),BIT (0 )); +WCD937X_DIGITAL_PDM_WD_CTL2_MASK , + val);break ;case SND_SOC_DAPM_POST_PMU :usleep_range (1000 ,1010 );
@@ -741,7 +746,8 @@ static int wcd937x_codec_enable_aux_pa(struct snd_soc_dapm_widget *w, hph_mode);snd_soc_component_update_bits (component,WCD937X_DIGITAL_PDM_WD_CTL2 , -BIT (0 ),0x00 ); +WCD937X_DIGITAL_PDM_WD_CTL2_MASK , +0x00 );break ; }
sound/soc/codecs/wcd937x.h +4 -0
@@ -391,6 +391,10 @@#define WCD937X_DIGITAL_PDM_WD_CTL0 0x3465#define WCD937X_DIGITAL_PDM_WD_CTL1 0x3466#define WCD937X_DIGITAL_PDM_WD_CTL2 0x3467 +#define WCD937X_DIGITAL_PDM_WD_CTL2_HOLD_OFF BIT(2) +#define WCD937X_DIGITAL_PDM_WD_CTL2_TIMEOUT_SEL BIT(1) +#define WCD937X_DIGITAL_PDM_WD_CTL2_EN BIT(0) +#define WCD937X_DIGITAL_PDM_WD_CTL2_MASK GENMASK(2, 0)#define WCD937X_DIGITAL_INTR_MODE 0x346A#define WCD937X_DIGITAL_INTR_MASK_0 0x346B#define WCD937X_DIGITAL_INTR_MASK_1 0x346C
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 19/817 x86/amd_nb: Fix compile-testing without CONFIG_AMD_NB
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
[ Upstream commit fce9642c765a18abd1db0339a7d832c29b68456a ]
node_to_amd_nb() is defined to NULL in non-AMD configs:
drivers/platform/x86/amd/hsmp/plat.c: In function 'init_platform_device':
drivers/platform/x86/amd/hsmp/plat.c:165:68: error: dereferencing 'void *' pointer [-Werror]
165 | sock->root = node_to_amd_nb(i)->root;
| ^~ drivers/platform/x86/amd/hsmp/plat.c:165:68: error: request for member 'root' in something not a structure or union
Users of the interface who also allow COMPILE_TEST will cause the above build error so provide an inline stub to fix that.
[ bp: Massage commit message. ]
--- arch/x86/include/asm/amd_nb.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
arch/x86/include/asm/amd_nb.h +4 -1
@@ -116,7 +116,10 @@ static inline bool amd_gart_present(void)#define amd_nb_num (x) 0#define amd_nb_has_feature (x) false -#define node_to_amd_nb (x) NULL +static inline struct amd_northbridge *node_to_amd_nb (int node) +{ +return NULL ; +}#define amd_gart_present (x) false#endif
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 20/817 bpf: fix filed access without lock
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiayuan Chen <[email protected]>
[ Upstream commit a32aee8f0d987a7cba7fcc28002553361a392048 ]
The tcp_bpf_recvmsg_parser() function, running in user context, retrieves seq_copied from tcp_sk without holding the socket lock, and stores it in a local variable seq. However, the softirq context can modify tcp_sk->seq_copied concurrently, for example, n tcp_read_sock().
As a result, the seq value is stale when it is assigned back to tcp_sk->copied_seq at the end of tcp_bpf_recvmsg_parser(), leading to incorrect behavior.
Due to concurrency, the copied_seq field in tcp_bpf_recvmsg_parser() might be set to an incorrect value (less than the actual copied_seq) at the end of function: 'WRITE_ONCE(tcp->copied_seq, seq)'. This causes the 'offset' to be negative in tcp_read_sock()->tcp_recv_skb() when processing new incoming packets (sk->copied_seq - skb->seq becomes less than 0), and all subsequent packets will be dropped.
--- net/ipv4/tcp_bpf.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
net/ipv4/tcp_bpf.c +4 -3
@@ -221,11 +221,11 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,int flags, int *addr_len) { - struct tcp_sock *tcp = tcp_sk(sk); int peek = flags & MSG_PEEK; -u32 seq = tcp->copied_seq;struct sk_psock *psock; +struct tcp_sock *tcp;int copied =0 ; +u32 seq;if (unlikely (flags &MSG_ERRQUEUE ))return inet_recv_error (sk, msg, len, addr_len);
@@ -238,7 +238,8 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,return tcp_recvmsg (sk, msg, len, flags, addr_len);lock_sock (sk); - + tcp =tcp_sk (sk); + seq = tcp->copied_seq;/* We may have received data on the sk_receive_queue pre-accept and * then we can not use read_skb in this context because we haven't * assigned a sk_socket yet so have no link to the ops. The work-around
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 21/817 net: usb: qmi_wwan: add Quectel RG650V
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benoît Monin <[email protected]>
[ Upstream commit 6b3f18a76be6bbd237c7594cf0bf2912b68084fe ]
Add support for Quectel RG650V which is based on Qualcomm SDX65 chip. The composition is DIAG / NMEA / AT / AT / QMI.
T: Bus=02 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 4 Spd=5000 MxCh= 0
D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1
P: Vendor=2c7c ProdID=0122 Rev=05.15
S: Manufacturer=Quectel
S: Product=RG650V-EU
S: SerialNumber=xxxxxxx
C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=896mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=9ms
I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=9ms
I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
E: Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=87(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=9ms
--- drivers/net/usb/qmi_wwan.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1076,6 +1076,7 @@ static const struct usb_device_id products[] = { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x581d, USB_CLASS_VENDOR_SPEC, 1, 7), .driver_info = (unsigned long )&qmi_wwan_info, }, + {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0122)}, /* Quectel RG650V */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0125)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0306)}, /* Quectel EP06/EG06/EM06 */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 22/817 soc: qcom: Add check devm_kasprintf() returned value
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Charles Han <[email protected]>
[ Upstream commit e694d2b5c58ba2d1e995d068707c8d966e7f5f2a ]
devm_kasprintf() can return a NULL pointer on failure but this returned value in qcom_socinfo_probe() is not checked.
--- drivers/soc/qcom/socinfo.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/soc/qcom/socinfo.c +7 -1
@@ -782,10 +782,16 @@ static int qcom_socinfo_probe(struct platform_device *pdev) qs->attr.revision =devm_kasprintf (&pdev->dev,GFP_KERNEL ,"%u.%u" ,SOCINFO_MAJOR (le32_to_cpu (info->ver)),SOCINFO_MINOR (le32_to_cpu (info->ver))); -if (offsetof(struct socinfo , serial_num) <= item_size) +if (!qs->attr.soc_id || qs->attr.revision) +return -ENOMEM ; + +if (offsetof(struct socinfo , serial_num) <= item_size) { qs->attr.serial_number =devm_kasprintf (&pdev->dev,GFP_KERNEL ,"%u" ,le32_to_cpu (info->serial_num)); +if (!qs->attr.serial_number) +return -ENOMEM ; + } qs->soc_dev =soc_device_register (&qs->attr);if (IS_ERR (qs->soc_dev))
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 23/817 firmware: arm_scmi: Reject clear channel request on A2P
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Marussi <[email protected]>
[ Upstream commit a0a18e91eb3a6ef75a6de69dc00f206b913e3848 ]
The clear channel transport operation is supposed to be called exclusively on the P2A channel from the agent, since it relinquishes the ownership of the channel to the platform, after this latter has initiated some sort of P2A communication.
Make sure that, if it is ever called on a A2P, is logged and ignored.
Message-Id: <[email protected]>
--- drivers/firmware/arm_scmi/common.h | 2 ++ drivers/firmware/arm_scmi/driver.c | 6 ++++++ 2 files changed, 8 insertions(+)
drivers/firmware/arm_scmi/common.h +2 -0
@@ -163,6 +163,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);* used to initialize this channel * @dev: Reference to device in the SCMI hierarchy corresponding to this * channel +* @is_p2a: A flag to identify a channel as P2A (RX) * @rx_timeout_ms: The configured RX timeout in milliseconds. * @handle: Pointer to SCMI entity handle * @no_completion_irq: Flag to indicate that this channel has no completion
@@ -174,6 +175,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);struct scmi_chan_info {int id;struct device *dev; +bool is_p2a;unsigned int rx_timeout_ms;struct scmi_handle *handle;bool no_completion_irq;
drivers/firmware/arm_scmi/driver.c +6 -0
@@ -1034,6 +1034,11 @@ static inline void scmi_xfer_command_release(struct scmi_info *info,static inline void scmi_clear_channel (struct scmi_info *info,struct scmi_chan_info *cinfo) { +if (!cinfo->is_p2a) { +dev_warn (cinfo->dev,"Invalid clear on A2P channel !\n" ); +return ; + } +if (info->desc->ops->clear_channel) info->desc->ops->clear_channel (cinfo); }
@@ -2614,6 +2619,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct device_node *of_node,if (!cinfo)return -ENOMEM ; + cinfo->is_p2a = !tx; cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms;/* Create a unique name for this transport device */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 24/817 regulator: rk808: Add apply_bit for BUCK3 on RK809
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikhail Rudenko <[email protected]>
[ Upstream commit 5e53e4a66bc7430dd2d11c18a86410e3a38d2940 ]
Currently, RK809's BUCK3 regulator is modelled in the driver as a configurable regulator with 0.5-2.4V voltage range. But the voltage setting is not actually applied, because when bit 6 of PMIC_POWER_CONFIG register is set to 0 (default), BUCK3 output voltage is determined by the external feedback resistor. Fix this, by setting bit 6 when voltage selection is set. Existing users which do not specify voltage constraints in their device trees will not be affected by this change, since no voltage setting is applied in those cases, and bit 6 is not enabled.
--- drivers/regulator/rk808-regulator.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/regulator/rk808-regulator.c +2 -0
@@ -1379,6 +1379,8 @@ static const struct regulator_desc rk809_reg[] = { .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), .vsel_reg = RK817_BUCK3_ON_VSEL_REG, .vsel_mask = RK817_BUCK_VSEL_MASK, + .apply_reg = RK817_POWER_CONFIG, + .apply_bit = RK817_BUCK3_FB_RES_INTER, .enable_reg = RK817_POWER_EN_REG(0), .enable_mask = ENABLE_MASK(RK817_ID_DCDC3), .enable_val = ENABLE_MASK(RK817_ID_DCDC3),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 25/817 platform/x86: dell-smbios-base: Extends support to Alienware products
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kurt Borja <[email protected]>
[ Upstream commit a36b8b84ac4327b90ef5a22bc97cc96a92073330 ]
Fixes the following error:
dell_smbios: Unable to run on non-Dell system
Which is triggered after dell-wmi driver fails to initialize on Alienware systems, as it depends on dell-smbios.
This effectively extends dell-wmi, dell-smbios and dcdbas support to Alienware devices, that might share some features of the SMBIOS intereface calling interface with other Dell products.
Tested on an Alienware X15 R1.
--- drivers/platform/x86/dell/dell-smbios-base.c | 1 + 1 file changed, 1 insertion(+)
drivers/platform/x86/dell/dell-smbios-base.c +1 -0
@@ -576,6 +576,7 @@ static int __init dell_smbios_init(void)int ret, wmi, smm;if (!dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"Dell System" ,NULL ) && + !dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"Alienware" ,NULL ) && !dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"www.dell.com" ,NULL )) {pr_err ("Unable to run on non-Dell system\n" );return -ENODEV ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 26/817 platform/x86: dell-wmi-base: Handle META key Lock/Unlock events
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kurt Borja <[email protected]>
[ Upstream commit ec61f0bb4feec3345626a2b93b970b6719743997 ]
Some Alienware devices have a key that locks/unlocks the Meta key. This key triggers a WMI event that should be ignored by the kernel, as it's handled by internally the firmware.
There is no known way of changing this default behavior. The firmware would lock/unlock the Meta key, regardless of how the event is handled.
Tested on an Alienware x15 R1.
--- drivers/platform/x86/dell/dell-wmi-base.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/platform/x86/dell/dell-wmi-base.c +6 -0
@@ -80,6 +80,12 @@ static const struct dmi_system_id dell_wmi_smbios_list[] __initconst = {static const struct key_entry dell_wmi_keymap_type_0000[] = { {KE_IGNORE ,0x003a , {KEY_CAPSLOCK } }, +/* Meta key lock */ + {KE_IGNORE ,0xe000 , {KEY_RIGHTMETA } }, + +/* Meta key unlock */ + {KE_IGNORE ,0xe001 , {KEY_RIGHTMETA } }, +/* Key code is followed by brightness level */ {KE_KEY ,0xe005 , {KEY_BRIGHTNESSDOWN } }, {KE_KEY ,0xe006 , {KEY_BRIGHTNESSUP } },
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 27/817 platform/x86: ideapad-laptop: add missing Ideapad Pro 5 fn keys
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Renato Caldas <[email protected]>
[ Upstream commit 36e66be874a7ea9d28fb9757629899a8449b8748 ]
The scancodes for the Mic Mute and Airplane keys on the Ideapad Pro 5 (14AHP9 at least, probably the other variants too) are different and were not being picked up by the driver. This adds them to the keymap.
Apart from what is already supported, the remaining fn keys are unfortunately producing windows-specific key-combos.
--- drivers/platform/x86/ideapad-laptop.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/platform/x86/ideapad-laptop.c +3 -0
@@ -1159,6 +1159,9 @@ static const struct key_entry ideapad_keymap[] = { { KE_KEY, 0x27 | IDEAPAD_WMI_KEY, { KEY_HELP } },/* Refresh Rate Toggle */ { KE_KEY, 0x0a | IDEAPAD_WMI_KEY, { KEY_REFRESH_RATE_TOGGLE } }, +/* Specific to some newer models */ + { KE_KEY, 0x3e | IDEAPAD_WMI_KEY, { KEY_MICMUTE } }, + { KE_KEY, 0x3f | IDEAPAD_WMI_KEY, { KEY_RFKILL } }, { KE_END }, };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 28/817 ASoC: tas2781: Add new driver version for tas2563 & tas2781 qfn chip
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shenghao Ding <[email protected]>
[ Upstream commit fe09de2db2365eed8b44b572cff7d421eaf1754a ]
Add new driver version to support tas2563 & tas2781 qfn chip
--- sound/soc/codecs/tas2781-fmwlib.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/tas2781-fmwlib.c +1 -0
@@ -1992,6 +1992,7 @@ static int tasdevice_dspfw_ready(const struct firmware *fmw,break ;case 0x202 :case 0x400 : +case 0x401 : tas_priv->fw_parse_variable_header = fw_parse_variable_header_git; tas_priv->fw_parse_program_data =
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 29/817 tools/lib/thermal: Remove the thermal.h soft link when doing make clean
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: zhang jiao <[email protected]>
[ Upstream commit c5426dcc5a3a064bbd2de383e29035a14fe933e0 ]
Run "make -C tools thermal" can create a soft link for thermal.h in tools/include/uapi/linux. Just rm it when make clean.
--- tools/lib/thermal/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
tools/lib/thermal/Makefile +3 -1
@@ -121,7 +121,9 @@ all: fixdep clean: $(call QUIET_CLEAN, libthermal) $(RM) $(LIBTHERMAL_A) \ - *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBTHERMAL_VERSION) .*.d .*.cmd LIBTHERMAL-CFLAGS $(LIBTHERMAL_PC) + *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBTHERMAL_VERSION) \ + .*.d .*.cmd LIBTHERMAL-CFLAGS $(LIBTHERMAL_PC) \ + $(srctree)/tools/$(THERMAL_UAPI) $(LIBTHERMAL_PC): $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 30/817 can: j1939: fix error in J1939 documentation.
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Hölzl <[email protected]>
[ Upstream commit b6ec62e01aa4229bc9d3861d1073806767ea7838 ]
The description of PDU1 format usage mistakenly referred to PDU2 format.
--- Documentation/networking/j1939.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/networking/j1939.rst +1 -1
@@ -121,7 +121,7 @@ format, the Group Extension is set in the PS-field. On the other hand, when using PDU1 format, the PS-field contains a so-called Destination Address, which is _not_ part of the PGN. When communicating a PGN -from user space to kernel (or vice versa) and PDU2 format is used, the PS-field +from user space to kernel (or vice versa) and PDU1 format is used, the PS-field of the PGN shall be set to zero. The Destination Address shall be set elsewhere.
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 31/817 platform/x86: thinkpad_acpi: Fix for ThinkPads with ECFW showing incorrect fan speed
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vishnu Sankar <[email protected]>
[ Upstream commit 1be765b292577c752e0b87bf8c0e92aff6699d8e ]
Fix for Thinkpad's with ECFW showing incorrect fan speed. Some models use decimal instead of hexadecimal for the speed stored in the EC registers. For example the rpm register will have 0x4200 instead of 0x1068, here the actual RPM is "4200" in decimal.
Add a quirk to handle this.
--- drivers/platform/x86/thinkpad_acpi.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-)
drivers/platform/x86/thinkpad_acpi.c +25 -3
@@ -7912,6 +7912,7 @@ static u8 fan_control_resume_level;static int fan_watchdog_maxinterval;static bool fan_with_ns_addr; +static bool ecfw_with_fan_dec_rpm;static struct mutex fan_mutex;
@@ -8554,7 +8555,11 @@ static ssize_t fan_fan1_input_show(struct device *dev,if (res <0 )return res; -return sysfs_emit (buf,"%u\n" , speed); +/* Check for fan speeds displayed in hexadecimal */ +if (!ecfw_with_fan_dec_rpm) +return sysfs_emit (buf,"%u\n" , speed); +else +return sysfs_emit (buf,"%x\n" , speed); } static DEVICE_ATTR(fan1_input, S_IRUGO, fan_fan1_input_show, NULL);
@@ -8571,7 +8576,11 @@ static ssize_t fan_fan2_input_show(struct device *dev,if (res <0 )return res; -return sysfs_emit (buf,"%u\n" , speed); +/* Check for fan speeds displayed in hexadecimal */ +if (!ecfw_with_fan_dec_rpm) +return sysfs_emit (buf,"%u\n" , speed); +else +return sysfs_emit (buf,"%x\n" , speed); } static DEVICE_ATTR(fan2_input, S_IRUGO, fan_fan2_input_show, NULL);
@@ -8647,6 +8656,7 @@ static const struct attribute_group fan_driver_attr_group = {#define TPACPI_FAN_2CTL 0x0004/* selects fan2 control */ #define TPACPI_FAN_NOFAN 0x0008/* no fan available */ #define TPACPI_FAN_NS 0x0010/* For EC with non-Standard register addresses */ +#define TPACPI_FAN_DECRPM 0x0020/* For ECFW's with RPM in register as decimal */ static const struct tpacpi_quirk fan_quirk_table[]__initconst = {TPACPI_QEC_IBM ('1' ,'Y' ,TPACPI_FAN_Q1 ),
@@ -8675,6 +8685,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = {TPACPI_Q_LNV3 ('R' ,'1' ,'D' ,TPACPI_FAN_NS ),/* 11e Gen5 GL-R */ TPACPI_Q_LNV3 ('R' ,'0' ,'V' ,TPACPI_FAN_NS ),/* 11e Gen5 KL-Y */ TPACPI_Q_LNV3 ('N' ,'1' ,'O' ,TPACPI_FAN_NOFAN ),/* X1 Tablet (2nd gen) */ + TPACPI_Q_LNV3('R', '0', 'Q', TPACPI_FAN_DECRPM),/* L480 */ };static int __init fan_init (struct ibm_init_struct *iibm)
@@ -8715,6 +8726,13 @@ static int __init fan_init(struct ibm_init_struct *iibm) tp_features.fan_ctrl_status_undef =1 ; } +/* Check for the EC/BIOS with RPM reported in decimal*/ +if (quirks &TPACPI_FAN_DECRPM ) { +pr_info ("ECFW with fan RPM as decimal in EC register\n" ); + ecfw_with_fan_dec_rpm =1 ; + tp_features.fan_ctrl_status_undef =1 ; + } +if (gfan_handle) {/* 570, 600e/x, 770e, 770x */ fan_status_access_mode =TPACPI_FAN_RD_ACPI_GFAN ;
@@ -8926,7 +8944,11 @@ static int fan_read(struct seq_file *m)if (rc <0 )return rc; -seq_printf (m,"speed:\t\t%d\n" , speed); +/* Check for fan speeds displayed in hexadecimal */ +if (!ecfw_with_fan_dec_rpm) +seq_printf (m,"speed:\t\t%d\n" , speed); +else +seq_printf (m,"speed:\t\t%x\n" , speed);if (fan_status_access_mode ==TPACPI_FAN_RD_TPEC_NS ) {/*
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 32/817 ASoC: amd: yc: Support dmic on another model of Lenovo Thinkpad E14 Gen 6
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Markus Petri <[email protected]>
[ Upstream commit 8c21e40e1e481f7fef6e570089e317068b972c45 ]
Another model of Thinkpad E14 Gen 6 (21M4)
needs a quirk entry for the dmic to be detected.
--- sound/soc/amd/yc/acp6x-mach.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/soc/amd/yc/acp6x-mach.c +7 -0
@@ -227,6 +227,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "21M3"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_NAME, "21M4"), + } + }, { .driver_data = &acp6x_card, .matches = {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 33/817 ASoC: stm: Prevent potential division by zero in stm32_sai_mclk_round_rate()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luo Yifan <[email protected]>
[ Upstream commit 63c1c87993e0e5bb11bced3d8224446a2bc62338 ]
This patch checks if div is less than or equal to zero (div <= 0). If div is zero or negative, the function returns -EINVAL, ensuring the division operation (*prate / div) is safe to perform.
--- sound/soc/stm/stm32_sai_sub.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/stm/stm32_sai_sub.c +2 -2
@@ -378,8 +378,8 @@ static long stm32_sai_mclk_round_rate(struct clk_hw *hw, unsigned long rate,int div; div =stm32_sai_get_clk_div (sai, *prate, rate); -if (div <0 ) -return div; +if (div <=0 ) +return -EINVAL ; mclk->freq = *prate / div;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 34/817 ASoC: stm: Prevent potential division by zero in stm32_sai_get_clk_div()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luo Yifan <[email protected]>
[ Upstream commit 23569c8b314925bdb70dd1a7b63cfe6100868315 ]
This patch checks if div is less than or equal to zero (div <= 0). If div is zero or negative, the function returns -EINVAL, ensuring the division operation is safe to perform.
--- sound/soc/stm/stm32_sai_sub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/stm/stm32_sai_sub.c +1 -1
@@ -317,7 +317,7 @@ static int stm32_sai_get_clk_div(struct stm32_sai_sub_data *sai,int div; div =DIV_ROUND_CLOSEST (input_rate, output_rate); -if (div >SAI_XCR1_MCKDIV_MAX (version)) { +if (div >SAI_XCR1_MCKDIV_MAX (version) || div <=0 ) {dev_err (&sai->pdev->dev,"Divider %d out of range\n" , div);return -EINVAL ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 35/817 drm: panel-orientation-quirks: Make Lenovo Yoga Tab 3 X90F DMI match less strict
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 052ef642bd6c108a24f375f9ad174b97b425a50b ]
There are 2G and 4G RAM versions of the Lenovo Yoga Tab 3 X90F and it turns out that the 2G version has a DMI product name of "CHERRYVIEW D1 PLATFORM" where as the 4G version has "CHERRYVIEW C0 PLATFORM". The sys-vendor + product-version check are unique enough that the product-name check is not necessary.
Drop the product-name check so that the existing DMI match for the 4G RAM version also matches the 2G RAM version.
--- drivers/gpu/drm/drm_panel_orientation_quirks.c | 1 - 1 file changed, 1 deletion(-)
drivers/gpu/drm/drm_panel_orientation_quirks.c +0 -1
@@ -403,7 +403,6 @@ static const struct dmi_system_id orientation_data[] = { }, { /* Lenovo Yoga Tab 3 X90F */ .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), }, .driver_data = (void *)&lcd1600x2560_rightside_up,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 36/817 proc/softirqs: replace seq_printf with seq_put_decimal_ull_width
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Wang <[email protected]>
[ Upstream commit 84b9749a3a704dcc824a88aa8267247c801d51e4 ]
seq_printf is costy, on a system with n CPUs, reading /proc/softirqs would yield 10*n decimal values, and the extra cost parsing format string grows linearly with number of cpus. Replace seq_printf with seq_put_decimal_ull_width have significant performance improvement. On an 8CPUs system, reading /proc/softirqs show ~40% performance gain with this patch.
--- fs/proc/softirqs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/proc/softirqs.c +1 -1
@@ -20,7 +20,7 @@ static int show_softirqs(struct seq_file *p, void *v)for (i =0 ; i <NR_SOFTIRQS ; i++) {seq_printf (p,"%12s:" , softirq_to_name[i]);for_each_possible_cpu (j) -seq_printf (p," %10u" ,kstat_softirqs_cpu (i, j)); +seq_put_decimal_ull_width (p," " ,kstat_softirqs_cpu (i, j),10 );seq_putc (p,'\n' ); }return 0 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 37/817 integrity: Use static_assert() to check struct sizes
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
[ Upstream commit 08ae3e5f5fc8edb9bd0c7ef9696ff29ef18b26ef ]
Commit 38aa3f5ac6d2 ("integrity: Avoid -Wflex-array-member-not-at-end warnings") introduced tagged struct evm_ima_xattr_data_hdr and struct ima_digest_data_hdr. We want to ensure that when new members need to be added to the flexible structures, they are always included within these tagged structs.
So, we use static_assert() to ensure that the memory layout for both the flexible structure and the tagged struct is the same after any changes.
--- security/integrity/integrity.h | 4 ++++ 1 file changed, 4 insertions(+)
security/integrity/integrity.h +4 -0
@@ -37,6 +37,8 @@ struct evm_ima_xattr_data { );u8 data[]; } __packed; +static_assert (offsetof(struct evm_ima_xattr_data , data) ==sizeof (struct evm_ima_xattr_data_hdr ), +"struct member likely outside of __struct_group()" );/* Only used in the EVM HMAC code. */ struct evm_xattr {
@@ -65,6 +67,8 @@ struct ima_digest_data { );u8 digest[]; } __packed; +static_assert (offsetof(struct ima_digest_data , digest) ==sizeof (struct ima_digest_data_hdr ), +"struct member likely outside of __struct_group()" );/* * Instead of wrapping the ima_digest_data struct inside a local structure
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 38/817 ASoC: audio-graph-card2: Purge absent supplies for device tree nodes
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Watts <[email protected]>
[ Upstream commit f8da001ae7af0abd9f6250c02c01a1121074ca60 ]
The audio graph card doesn't mark its subnodes such as multi {}, dpcm {} and c2c {} as not requiring any suppliers. This causes a hang as Linux waits for these phantom suppliers to show up on boot.
Make it clear these nodes have no suppliers.
Example error message:
[ 15.208558] platform 2034000.i2s: deferred probe pending: platform: wait for supplier /sound/multi [ 15.208584] platform sound: deferred probe pending: asoc-audio-graph-card2: parse error
--- sound/soc/generic/audio-graph-card2.c | 3 +++ 1 file changed, 3 insertions(+)
sound/soc/generic/audio-graph-card2.c +3 -0
@@ -270,16 +270,19 @@ static enum graph_type __graph_get_type(struct device_node *lnk)if (of_node_name_eq (np,GRAPH_NODENAME_MULTI )) { ret =GRAPH_MULTI ; +fw_devlink_purge_absent_suppliers (&np->fwnode); goto out_put; }if (of_node_name_eq (np,GRAPH_NODENAME_DPCM )) { ret =GRAPH_DPCM ; +fw_devlink_purge_absent_suppliers (&np->fwnode); goto out_put; }if (of_node_name_eq (np,GRAPH_NODENAME_C2C )) { ret =GRAPH_C2C ; +fw_devlink_purge_absent_suppliers (&np->fwnode); goto out_put; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 39/817 LoongArch: For all possible CPUs setup logical-physical CPU mapping
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
[ Upstream commit a6654a40a852a4ca18aacced4cf5ca87997818d7 ]
In order to support ACPI-based physical CPU hotplug, we suppose for all "possible" CPUs cpu_logical_map() can work. Because some drivers want to use cpu_logical_map() for all "possible" CPUs, while currently we only setup logical-physical mapping for "present" CPUs. This lack of mapping also causes cpu_to_node() cannot work for hot-added CPUs.
All "possible" CPUs are listed in MADT, and the "present" subset is marked as ACPI_MADT_ENABLED. To setup logical-physical CPU mapping for all possible CPUs and keep present CPUs continuous in cpu_present_mask, we parse MADT twice. The first pass handles CPUs with ACPI_MADT_ENABLED and the second pass handles CPUs without ACPI_MADT_ENABLED.
The global flag (cpu_enumerated) is removed because acpi_map_cpu() calls cpu_number_map() rather than set_processor_mask() now.
--- arch/loongarch/kernel/acpi.c | 81 +++++++++++++++++++++++------------- arch/loongarch/kernel/smp.c | 3 +- 2 files changed, 55 insertions(+), 29 deletions(-)
arch/loongarch/kernel/acpi.c +53 -28
@@ -57,48 +57,48 @@ void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size)return ioremap_cache (phys, size); } -static int cpu_enumerated =0 ; -#ifdef CONFIG_SMP -static int set_processor_mask (u32 id,u32 flags) +static int set_processor_mask (u32 id,u32 pass) { -int nr_cpus; -int cpu, cpuid = id; - -if (!cpu_enumerated) - nr_cpus =NR_CPUS ; -else - nr_cpus = nr_cpu_ids; +int cpu =-1 , cpuid = id; -if (num_processors >= nr_cpus) { +if (num_processors >=NR_CPUS ) {pr_warn (PREFIX "nr_cpus limit of %i reached." -" processor 0x%x ignored.\n" , nr_cpus, cpuid); +" processor 0x%x ignored.\n" ,NR_CPUS , cpuid);return -ENODEV ; } +if (cpuid == loongson_sysconf.boot_cpu_id) cpu =0 ; -else - cpu =find_first_zero_bit (cpumask_bits (cpu_present_mask),NR_CPUS ); - -if (!cpu_enumerated) -set_cpu_possible (cpu, true); -if (flags &ACPI_MADT_ENABLED ) { +switch (pass) { +case 1 :/* Pass 1 handle enabled processors */ +if (cpu <0 ) + cpu =find_first_zero_bit (cpumask_bits (cpu_present_mask),NR_CPUS ); num_processors++;set_cpu_present (cpu, true); - __cpu_number_map[cpuid] = cpu; - __cpu_logical_map[cpu] = cpuid; - }else +break ; +case 2 :/* Pass 2 handle disabled processors */ +if (cpu <0 ) + cpu =find_first_zero_bit (cpumask_bits (cpu_possible_mask),NR_CPUS ); disabled_cpus++; +break ; +default : +return cpu; + } + +set_cpu_possible (cpu, true); + __cpu_number_map[cpuid] = cpu; + __cpu_logical_map[cpu] = cpuid;return cpu; }#endif static int __init -acpi_parse_processor (union acpi_subtable_headers *header,const unsigned long end) +acpi_parse_p1_processor (union acpi_subtable_headers *header,const unsigned long end) {struct acpi_madt_core_pic *processor =NULL ;
@@ -109,12 +109,29 @@ acpi_parse_processor(union acpi_subtable_headers *header, const unsigned long enacpi_table_print_madt_entry (&header->common);#ifdef CONFIG_SMP acpi_core_pic[processor->core_id] = *processor; -set_processor_mask (processor->core_id, processor->flags); +if (processor->flags &ACPI_MADT_ENABLED ) +set_processor_mask (processor->core_id,1 );#endif return 0 ; } +static int __init +acpi_parse_p2_processor (union acpi_subtable_headers *header,const unsigned long end) +{ +struct acpi_madt_core_pic *processor =NULL ; + + processor = (struct acpi_madt_core_pic *)header; +if (BAD_MADT_ENTRY (processor, end)) +return -EINVAL ; + +#ifdef CONFIG_SMP +if (!(processor->flags &ACPI_MADT_ENABLED )) +set_processor_mask (processor->core_id,2 ); +#endif + +return 0 ; +}static int __init acpi_parse_eio_master (union acpi_subtable_headers *header,const unsigned long end) {
@@ -142,12 +159,14 @@ static void __init acpi_process_madt(void) }#endif acpi_table_parse_madt (ACPI_MADT_TYPE_CORE_PIC , - acpi_parse_processor,MAX_CORE_PIC ); + acpi_parse_p1_processor,MAX_CORE_PIC ); + +acpi_table_parse_madt (ACPI_MADT_TYPE_CORE_PIC , + acpi_parse_p2_processor,MAX_CORE_PIC );acpi_table_parse_madt (ACPI_MADT_TYPE_EIO_PIC , acpi_parse_eio_master,MAX_IO_PICS ); - cpu_enumerated =1 ; loongson_sysconf.nr_cpus = num_processors; }
@@ -306,6 +325,10 @@ static int __ref acpi_map_cpu2node(acpi_handle handle, int cpu, int physid)int nid; nid =acpi_get_node (handle); + +if (nid !=NUMA_NO_NODE ) + nid =early_cpu_to_node (cpu); +if (nid !=NUMA_NO_NODE ) {set_cpuid_to_node (physid, nid);node_set (nid, numa_nodes_parsed);
@@ -320,12 +343,14 @@ int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id, int *pcpu {int cpu; - cpu =set_processor_mask (physid,ACPI_MADT_ENABLED ); -if (cpu <0 ) { + cpu =cpu_number_map (physid); +if (cpu <0 || cpu >= nr_cpu_ids) {pr_info (PREFIX "Unable to map lapic to logical cpu number\n" ); -return cpu; +return -ERANGE ; } + num_processors++; +set_cpu_present (cpu, true);acpi_map_cpu2node (handle, cpu, physid); *pcpu = cpu;
arch/loongarch/kernel/smp.c +2 -1
@@ -325,11 +325,11 @@ void __init loongson_prepare_cpus(unsigned int max_cpus)int i =0 ;parse_acpi_topology (); + cpu_data[0 ].global_id =cpu_logical_map (0 );for (i =0 ; i < loongson_sysconf.nr_cpus; i++) {set_cpu_present (i, true);csr_mail_send (0 , __cpu_logical_map[i],0 ); - cpu_data[i].global_id = __cpu_logical_map[i]; }per_cpu (cpu_state,smp_processor_id ()) =CPU_ONLINE ;
@@ -374,6 +374,7 @@ void loongson_init_secondary(void)cpu_logical_map (cpu) / loongson_sysconf.cores_per_package; cpu_data[cpu].core = pptt_enabled ? cpu_data[cpu].core :cpu_logical_map (cpu) % loongson_sysconf.cores_per_package; + cpu_data[cpu].global_id =cpu_logical_map (cpu); }void loongson_smp_finish (void )
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 40/817 LoongArch: Define a default value for VM_DATA_DEFAULT_FLAGS
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yuli Wang <[email protected]>
[ Upstream commit c859900a841b0a6cd9a73d16426465e44cdde29c ]
This is a trivial cleanup, commit c62da0c35d58518d ("mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS") has unified default values of VM_DATA_DEFAULT_FLAGS across different platforms.
Apply the same consistency to LoongArch.
--- arch/loongarch/include/asm/page.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
arch/loongarch/include/asm/page.h +1 -4
@@ -113,10 +113,7 @@ struct page *tlb_virt_to_page(unsigned long kaddr);extern int __virt_addr_valid (volatile void *kaddr);#define virt_addr_valid (kaddr) __virt_addr_valid((volatile void *)(kaddr)) -#define VM_DATA_DEFAULT_FLAGS \ - (VM_READ | VM_WRITE | \ - ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) +#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC#include <asm-generic/memory_model.h> #include <asm-generic/getorder.h>
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 41/817 ASoC: max9768: Fix event generation for playback mute
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Brown <[email protected]>
[ Upstream commit 2ae6da569e34e1d26c5275442d17ffd75fd343b3 ]
The max9768 has a custom control for playback mute which unconditionally returns 0 from the put() operation, rather than returning 1 on change to ensure notifications are generated to userspace. Check to see if the value has changed and return appropriately.
--- sound/soc/codecs/max9768.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
sound/soc/codecs/max9768.c +9 -2
@@ -54,10 +54,17 @@ static int max9768_set_gpio(struct snd_kcontrol *kcontrol, {struct snd_soc_component *c =snd_soc_kcontrol_component (kcontrol);struct max9768 *max9768 =snd_soc_component_get_drvdata (c); +bool val = !ucontrol->value.integer.value[0 ]; +int ret; -gpiod_set_value_cansleep (max9768->mute, !ucontrol->value.integer.value[0 ]); +if (val !=gpiod_get_value_cansleep (max9768->mute)) + ret =1 ; +else + ret =0 ; -return 0 ; +gpiod_set_value_cansleep (max9768->mute, val); + +return ret; } static const DECLARE_TLV_DB_RANGE(volume_tlv,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 42/817 ALSA: usb-audio: Fix Yamaha P-125 Quirk Entry
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eryk Zagorski <[email protected]>
[ Upstream commit 6f891ca15b017707840c9e7f5afd9fc6cfd7d8b1 ]
This patch switches the P-125 quirk entry to use a composite quirk as the P-125 supplies both MIDI and Audio like many of the other Yamaha keyboards
--- sound/usb/quirks-table.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
sound/usb/quirks-table.h +13 -1
@@ -324,7 +324,6 @@ YAMAHA_DEVICE(0x105a, NULL),YAMAHA_DEVICE (0x105b ,NULL ),YAMAHA_DEVICE (0x105c ,NULL ),YAMAHA_DEVICE (0x105d ,NULL ), -YAMAHA_DEVICE (0x1718 ,"P-125" ), {USB_DEVICE (0x0499 ,0x1503 ), QUIRK_DRIVER_INFO {
@@ -391,6 +390,19 @@ YAMAHA_DEVICE(0x1718, "P-125"), } } }, +{ +USB_DEVICE (0x0499 ,0x1718 ), + QUIRK_DRIVER_INFO { +/* .vendor_name = "Yamaha", */ +/* .product_name = "P-125", */ + QUIRK_DATA_COMPOSITE { + { QUIRK_DATA_STANDARD_AUDIO(1) }, + { QUIRK_DATA_STANDARD_AUDIO(2) }, + { QUIRK_DATA_MIDI_YAMAHA(3) }, + QUIRK_COMPOSITE_END + } + } +},YAMAHA_DEVICE (0x2000 ,"DGP-7" ),YAMAHA_DEVICE (0x2001 ,"DGP-5" ), YAMAHA_DEVICE(0x2002, NULL),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 43/817 ARM: 9420/1: smp: Fix SMP for xip kernels
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Harith G <[email protected]>
[ Upstream commit 9e9b0cf9319b4db143014477b0bc4b39894248f1 ]
Fix the physical address calculation of the following to get smp working on xip kernels.
- secondary_data needed for secondary cpu bootup.
- secondary_startup address passed through psci.
- identity mapped code region needed for enabling mmu for secondary cpus.
--- arch/arm/kernel/head.S | 4 ++++ arch/arm/kernel/psci_smp.c | 7 +++++++ arch/arm/mm/idmap.c | 7 +++++++ 3 files changed, 18 insertions(+)
arch/arm/kernel/head.S +4 -0
@@ -411,7 +411,11 @@ ENTRY(secondary_startup) /* * Use the page tables supplied from __cpu_up. */ +#ifdef CONFIG_XIP_KERNEL + ldr r3, =(secondary_data + PLAT_PHYS_OFFSET - PAGE_OFFSET) +#else adr_l r3, secondary_data +#endif mov_l r12, __secondary_switched ldrd r4, r5, [r3, #0] @ get secondary_data.pgdir ARM_BE8(eor r4, r4, r5) @ Swap r5 and r4 in BE:
arch/arm/kernel/psci_smp.c +7 -0
@@ -45,8 +45,15 @@ extern void secondary_startup(void);static int psci_boot_secondary (unsigned int cpu,struct task_struct *idle) { if (psci_ops.cpu_on) +#ifdef CONFIG_XIP_KERNEL +return psci_ops.cpu_on (cpu_logical_map (cpu), + ((phys_addr_t)(&secondary_startup) + -XIP_VIRT_ADDR (CONFIG_XIP_PHYS_ADDR ) + +CONFIG_XIP_PHYS_ADDR )); +#else return psci_ops.cpu_on (cpu_logical_map (cpu),virt_to_idmap (&secondary_startup)); +#endif return -ENODEV ; }
arch/arm/mm/idmap.c +7 -0
@@ -84,8 +84,15 @@ static void identity_mapping_add(pgd_t *pgd, const char *text_start,unsigned long addr, end;unsigned long next; +#ifdef CONFIG_XIP_KERNEL + addr = (phys_addr_t)(text_start) -XIP_VIRT_ADDR (CONFIG_XIP_PHYS_ADDR ) + +CONFIG_XIP_PHYS_ADDR ; + end = (phys_addr_t)(text_end) -XIP_VIRT_ADDR (CONFIG_XIP_PHYS_ADDR ) + +CONFIG_XIP_PHYS_ADDR ; +#else addr =virt_to_idmap (text_start); end =virt_to_idmap (text_end); +#endif pr_info ("Setting up static identity map for 0x%lx - 0x%lx\n" , addr, end); prot |=PMD_TYPE_SECT |PMD_SECT_AP_WRITE |PMD_SECT_AF ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 44/817 ARM: 9434/1: cfi: Fix compilation corner case
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Walleij <[email protected]>
[ Upstream commit 4aea16b7cfb76bd3361858ceee6893ef5c9b5570 ]
When enabling expert mode CONFIG_EXPERT and using that power user mode to disable the branch prediction hardening !CONFIG_HARDEN_BRANCH_PREDICTOR, the assembly linker in CLANG notices that some assembly in proc-v7.S does not have corresponding C call sites, i.e. the prototypes in proc-v7-bugs.c are enclosed in ifdef CONFIG_HARDEN_BRANCH_PREDICTOR so this assembly:
SYM_TYPED_FUNC_START(cpu_v7_smc_switch_mm)SYM_TYPED_FUNC_START(cpu_v7_hvc_switch_mm)
Results in:
ld.lld: error: undefined symbol: __kcfi_typeid_cpu_v7_smc_switch_mm
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
referenced by proc-v7.S:94 (
.../arch/arm/mm/proc-v7.S:94) arch/arm/mm/proc-v7.o:(.text+0x108) in archive vmlinux.a
ld.lld: error: undefined symbol: __kcfi_typeid_cpu_v7_hvc_switch_mm
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
referenced by proc-v7.S:105 (
.../arch/arm/mm/proc-v7.S:105) arch/arm/mm/proc-v7.o:(.text+0x124) in archive vmlinux.a
Fix this by adding an additional requirement that CONFIG_HARDEN_BRANCH_PREDICTOR has to be enabled to compile these assembly calls.
--- arch/arm/mm/proc-v7.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/mm/proc-v7.S +1 -1
@@ -94,7 +94,7 @@ SYM_TYPED_FUNC_START(cpu_v7_dcache_clean_area) ret lr SYM_FUNC_END(cpu_v7_dcache_clean_area) -#ifdef CONFIG_ARM_PSCI +#if defined(CONFIG_ARM_PSCI) && defined(CONFIG_HARDEN_BRANCH_PREDICTOR) .arch_extension sec SYM_TYPED_FUNC_START(cpu_v7_smc_switch_mm) stmfd sp!, {r0 - r3}
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 45/817 ipmr: Fix access to mfc_cache_list without lock held
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Breno Leitao <[email protected]>
[ Upstream commit e28acc9c1ccfcb24c08e020828f69d0a915b06ae ]
Accessing mr_table->mfc_cache_list is protected by an RCU lock. In the following code flow, the RCU read lock is not held, causing the following error when RCU_PROVE is not held. The same problem might show up in the IPv6 code path.
6.12.0-rc5-kbuilder-01145-gbac17284bdcb #33 Tainted: G E N
-----------------------------
net/ipv4/ipmr_base.c:313 RCU-list traversed in non-reader section!!
rcu_scheduler_active = 2, debug_locks = 1
2 locks held by RetransmitAggre/3519:
#0: ffff88816188c6c0 (nlk_cb_mutex-ROUTE){+.+.}-{3:3}, at: __netlink_dump_start+0x8a/0x290
#1: ffffffff83fcf7a8 (rtnl_mutex){+.+.}-{3:3}, at: rtnl_dumpit+0x6b/0x90
stack backtrace:
lockdep_rcu_suspicious
mr_table_dump
ipmr_rtm_dumproute
rtnl_dump_all
rtnl_dumpit
netlink_dump
__netlink_dump_start
rtnetlink_rcv_msg
netlink_rcv_skb
netlink_unicast
netlink_sendmsgThis is not a problem per see, since the RTNL lock is held here, so, it is safe to iterate in the list without the RCU read lock, as suggested by Eric.
To alleviate the concern, modify the code to use list_for_each_entry_rcu() with the RTNL-held argument.
The annotation will raise an error only if RTNL or RCU read lock are missing during iteration, signaling a legitimate problem, otherwise it will avoid this false positive.
This will solve the IPv6 case as well, since ip6mr_rtm_dumproute() calls this function as well.
--- net/ipv4/ipmr_base.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/ipv4/ipmr_base.c +2 -1
@@ -310,7 +310,8 @@ int mr_table_dump(struct mr_table *mrt, struct sk_buff *skb,if (filter->filter_set) flags |=NLM_F_DUMP_FILTERED ; -list_for_each_entry_rcu (mfc, &mrt->mfc_cache_list, list) { +list_for_each_entry_rcu (mfc, &mrt->mfc_cache_list, list, +lockdep_rtnl_is_held ()) {if (e < s_e) goto next_entry; if (filter->dev &&
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 46/817 f2fs: fix fiemap failure issue when page size is 16KB
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiuhong Wang <[email protected]>
commit a7a7c1d423a6351a6541e95c797da5358e5ad1ea upstream.
After enable 16K page size, an infinite loop may occur in fiemap (fm_length=UINT64_MAX) on a file, such as the 16KB scratch.img during the remount operation in Android.
The condition for whether fiemap continues to map is to check whether the number of bytes corresponding to the next map.m_lblk exceeds blks_to_bytes(inode,max_inode_blocks(inode)) if there are HOLE. The latter does not take into account the maximum size of a file with 16KB page size, so the loop cannot be jumped out.
The following is the fail trace:
When f2fs_map_blocks reaches map.m_lblk=3936, it needs to go to the first direct node block, so the map is 3936 + 4090 = 8026, The next map is the second direct node block, that is, 8026 + 4090 = 12116,
The next map is the first indirect node block, that is, 12116 + 4090 * 4090 = 16740216,
The next map is the second indirect node block, that is, 16740216 + 4090 * 4090 = 33468316,
The next map is the first double indirect node block, that is, 33468316 + 4090 * 4090 * 4090 = 68451397316
Since map.m_lblk represents the address of a block, which is 32 bits, truncation will occur, that is, 68451397316 becomes 4026887876, and the number of bytes corresponding to the block number does not exceed blks_to_bytes(inode,max_inode_blocks(inode)), so the loop will not be jumped out.
The next time, it will be considered that it should still be a double indirect node block, that is,
4026887876 + 4090 * 4090 * 4090 = 72444816876, which will be truncated to 3725340140, and the loop will not be jumped out.
156.374871: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 0, start blkaddr = 0x8e00, len = 0x200, flags = 2,seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.374916: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 512, start blkaddr = 0x0, len = 0x0, flags = 0 , seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.374920: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 513, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0
......
156.385747: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 3935, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385752: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 3936, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385755: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 8026, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385758: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 12116, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385761: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 16740216, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385764: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 33468316, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385767: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 4026887876, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385770: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 3725340140, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385772: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 4026887876, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0 156.385775: f2fs_map_blocks: dev = (254,57), ino = 7449, file offset = 3725340140, start blkaddr = 0x0, len = 0x0, flags = 0, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0
Commit a6a010f5def5 ("f2fs: Restrict max filesize for 16K f2fs") has set the maximum allowed file size to (U32_MAX + 1) * F2FS_BLKSIZE, so max_file_blocks should be used here to limit it, that is, maxbytes defined above. And the max_inode_blocks function is not called by other functions except here, so cleanup it.
--- fs/f2fs/data.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-)
fs/f2fs/data.c +1 -21
@@ -1894,25 +1894,6 @@ static int f2fs_xattr_fiemap(struct inodreturn (err <0 ? err :0 ); } -static loff_t max_inode_blocks (struct inode *inode) -{ -loff_t result =ADDRS_PER_INODE (inode); -loff_t leaf_count =ADDRS_PER_BLOCK (inode); - -/* two direct node blocks */ - result += (leaf_count *2 ); - -/* two indirect node blocks */ - leaf_count *=NIDS_PER_BLOCK ; - result += (leaf_count *2 ); - -/* one double indirect node block */ - leaf_count *=NIDS_PER_BLOCK ; - result += leaf_count; - -return result; -} -int f2fs_fiemap (struct inode *inode,struct fiemap_extent_info *fieinfo,u64 start,u64 len) {
@@ -1985,8 +1966,7 @@ next:if (!compr_cluster && !(map.m_flags &F2FS_MAP_FLAGS )) { start_blk = next_pgofs; -if (blks_to_bytes (inode, start_blk) <blks_to_bytes (inode, -max_inode_blocks (inode))) +if (blks_to_bytes (inode, start_blk) < maxbytes) goto prep_next; flags |=FIEMAP_EXTENT_LAST ;
Greg Kroah-Hartman
maintainerPATCH 47/817 drm/amd/display: Skip Invalid Streams from DSC Policy
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fangzhi Zuo <[email protected]>
[ Upstream commit 9afeda04964281e9f708b92c2a9c4f8a1387b46e ]
Streams with invalid new connector state should be elimiated from dsc policy.
--- .../drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +12 -1
@@ -1120,6 +1120,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,int i, k, ret;bool debugfs_overwrite = false;uint16_t fec_overhead_multiplier_x1000 =get_fec_overhead_multiplier (dc_link); +struct drm_connector_state *new_conn_state;memset (params,0 ,sizeof (params));
@@ -1127,7 +1128,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,return PTR_ERR (mst_state);/* Set up params */ -DRM_DEBUG_DRIVER ("%s: MST_DSC Set up params for %d streams\n" , __func__, dc_state->stream_count); +DRM_DEBUG_DRIVER ("%s: MST_DSC Try to set up params from %d streams\n" , __func__, dc_state->stream_count);for (i =0 ; i < dc_state->stream_count; i++) {struct dc_dsc_policy dsc_policy = {0 };
@@ -1143,6 +1144,14 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,if (!aconnector->mst_output_port)continue ; + new_conn_state =drm_atomic_get_new_connector_state (state, &aconnector->base); + +if (!new_conn_state) { +DRM_DEBUG_DRIVER ("%s:%d MST_DSC Skip the stream 0x%p with invalid new_conn_state\n" , + __func__, __LINE__, stream); +continue ; + } + stream->timing.flags.DSC =0 ; params[count].timing = &stream->timing;
@@ -1175,6 +1184,8 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, count++; } +DRM_DEBUG_DRIVER ("%s: MST_DSC Params set up for %d streams\n" , __func__, count); +if (count ==0 ) {ASSERT (0 );return 0 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 48/817 drm/amd/display: Fix incorrect DSC recompute trigger
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fangzhi Zuo <[email protected]>
[ Upstream commit 4641169a8c95d9efc35d2d3c55c3948f3b375ff9 ]
A stream without dsc_aux should not be eliminated from
the dsc determination. Whether it needs a dsc recompute depends on whether its mode has changed or not. Eliminating such a no-dsc stream from the dsc determination policy will end up with inconsistencies in the new dc_state when compared to the current dc_state, triggering a dsc recompute that should not have happened.
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +1 -1
@@ -1313,7 +1313,7 @@ static bool is_dsc_need_re_compute(continue ; aconnector = (struct amdgpu_dm_connector *) stream->dm_stream_context; -if (!aconnector || !aconnector->dsc_aux) +if (!aconnector)continue ; stream_on_link[new_stream_on_link_num] = aconnector;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 49/817 s390/facilities: Fix warning about shadow of global variable
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gerd Bayer <[email protected]>
[ Upstream commit 61997c1e947dbf8bc625ef86ceee00fdf2a5dba1 ]
Compiling the kernel with clang W=2 produces a warning that the parameter declarations in some routines would shadow the definition of the global variable stfle_fac_list. Address this warning by renaming the parameters to fac_list.
--- arch/s390/include/asm/facility.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
arch/s390/include/asm/facility.h +9 -9
@@ -67,7 +67,7 @@ static inline int test_facility(unsigned long nr)return __test_facility (nr, &stfle_fac_list); } -static inline unsigned long __stfle_asm (u64 *stfle_fac_list,int size) +static inline unsigned long __stfle_asm (u64 *fac_list,int size) {unsigned long reg0 = size -1 ;
@@ -75,7 +75,7 @@ static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)" lgr 0,%[reg0]\n" " .insn s,0xb2b00000,%[list]\n" /* stfle */ " lgr %[reg0],0\n" - : [reg0] "+&d" (reg0), [list] "+Q" (*stfle_fac_list) + : [reg0] "+&d" (reg0), [list] "+Q" (*fac_list) : : "memory", "cc", "0"); return reg0;
@@ -83,10 +83,10 @@ static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)/** * stfle - Store facility list extended -* @stfle_fac_list: array where facility list can be stored +* @fac_list: array where facility list can be stored * @size: size of passed in array in double words */ -static inline void __stfle (u64 *stfle_fac_list,int size) +static inline void __stfle (u64 *fac_list,int size) {unsigned long nr;u32 stfl_fac_list;
@@ -95,20 +95,20 @@ static inline void __stfle(u64 *stfle_fac_list, int size) " stfl 0(0)\n" : "=m" (get_lowcore()->stfl_fac_list)); stfl_fac_list =get_lowcore ()->stfl_fac_list; -memcpy (stfle_fac_list, &stfl_fac_list,4 ); +memcpy (fac_list, &stfl_fac_list,4 ); nr =4 ;/* bytes stored by stfl */ if (stfl_fac_list &0x01000000 ) {/* More facility bits available with stfle */ - nr =__stfle_asm (stfle_fac_list, size); + nr =__stfle_asm (fac_list, size); nr = min_t(unsigned long, (nr + 1) * 8, size * 8); } -memset ((char *) stfle_fac_list + nr,0 , size *8 - nr); +memset ((char *)fac_list + nr,0 , size *8 - nr); } -static inline void stfle (u64 *stfle_fac_list,int size) +static inline void stfle (u64 *fac_list,int size) {preempt_disable (); -__stfle (stfle_fac_list, size); +__stfle (fac_list, size);preempt_enable (); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 50/817 efs: fix the efs new mount api implementation
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bill O'Donnell <[email protected]>
[ Upstream commit 51ceeb1a8142537b9f65aeaac6c301560a948197 ]
Commit 39a6c668e4 (efs: convert efs to use the new mount api) did not include anything from v2 and v3 that were also submitted. Fix this by bringing in those changes that were proposed in v2 and v3.
--- fs/efs/super.c | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-)
fs/efs/super.c +3 -40
@@ -15,7 +15,6 @@#include <linux/vfs.h> #include <linux/blkdev.h> #include <linux/fs_context.h> -#include <linux/fs_parser.h> #include "efs.h" #include <linux/efs_vh.h> #include <linux/efs_fs_sb.h>
@@ -49,15 +48,6 @@ static struct pt_types sgi_pt_types[] = { {0, NULL} }; -enum { - Opt_explicit_open, -}; - -static const struct fs_parameter_spec efs_param_spec[] = { -fsparam_flag ("explicit-open" , Opt_explicit_open), - {} -}; -/* * File system definition and registration. */
@@ -67,7 +57,6 @@ static struct file_system_type efs_fs_type = { .kill_sb = efs_kill_sb, .fs_flags = FS_REQUIRES_DEV, .init_fs_context = efs_init_fs_context, - .parameters = efs_param_spec, };MODULE_ALIAS_FS ("efs" );
@@ -265,7 +254,8 @@ static int efs_fill_super(struct super_block *s, struct fs_context *fc)if (!sb_set_blocksize (s,EFS_BLOCKSIZE )) {pr_err ("device does not support %d byte blocks\n" ,EFS_BLOCKSIZE ); -return -EINVAL ; +return invalf (fc,"device does not support %d byte blocks\n" , +EFS_BLOCKSIZE ); }/* read the vh (volume header) block */
@@ -327,43 +317,22 @@ static int efs_fill_super(struct super_block *s, struct fs_context *fc)return 0 ; } -static void efs_free_fc (struct fs_context *fc) -{ -kfree (fc->fs_private); -} -static int efs_get_tree (struct fs_context *fc) {return get_tree_bdev (fc, efs_fill_super); } -static int efs_parse_param (struct fs_context *fc,struct fs_parameter *param) -{ -int token; -struct fs_parse_result result; - - token =fs_parse (fc, efs_param_spec, param, &result); -if (token <0 ) -return token; -return 0 ; -} -static int efs_reconfigure (struct fs_context *fc) {sync_filesystem (fc->root->d_sb); + fc->sb_flags |=SB_RDONLY ;return 0 ; } -struct efs_context { -unsigned long s_mount_opts; -}; -static const struct fs_context_operations efs_context_opts = { - .parse_param = efs_parse_param, .get_tree = efs_get_tree, .reconfigure = efs_reconfigure, - .free = efs_free_fc, };/*
@@ -371,12 +340,6 @@ static const struct fs_context_operations efs_context_opts = {*/ static int efs_init_fs_context (struct fs_context *fc) { -struct efs_context *ctx; - - ctx =kzalloc (sizeof (struct efs_context ),GFP_KERNEL ); -if (!ctx) -return -ENOMEM ; - fc->fs_private = ctx; fc->ops = &efs_context_opts;return 0 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 51/817 arm64: probes: Disable kprobes/uprobes on MOPS instructions
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kristina Martsenko <[email protected]>
[ Upstream commit c56c599d9002d44f559be3852b371db46adac87c ]
FEAT_MOPS instructions require that all three instructions (prologue, main and epilogue) appear consecutively in memory. Placing a kprobe/uprobe on one of them doesn't work as only a single instruction gets executed out-of-line or simulated. So don't allow placing a probe on a MOPS instruction.
--- arch/arm64/include/asm/insn.h | 1 + arch/arm64/kernel/probes/decode-insn.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-)
arch/arm64/include/asm/insn.h +1 -0
@@ -353,6 +353,7 @@ __AARCH64_INSN_FUNCS(ldrsw_lit, 0xFF000000, 0x98000000) __AARCH64_INSN_FUNCS(exclusive, 0x3F800000, 0x08000000) __AARCH64_INSN_FUNCS(load_ex, 0x3F400000, 0x08400000) __AARCH64_INSN_FUNCS(store_ex, 0x3F400000, 0x08000000) +__AARCH64_INSN_FUNCS(mops, 0x3B200C00, 0x19000400) __AARCH64_INSN_FUNCS(stp, 0x7FC00000, 0x29000000) __AARCH64_INSN_FUNCS(ldp, 0x7FC00000, 0x29400000)__AARCH64_INSN_FUNCS (stp_post,0x7FC00000 ,0x28800000 )
arch/arm64/kernel/probes/decode-insn.c +5 -2
@@ -58,10 +58,13 @@ static bool __kprobes aarch64_insn_is_steppable(u32 insn)* Instructions which load PC relative literals are not going to work * when executed from an XOL slot. Instructions doing an exclusive * load/store are not going to complete successfully when single-step -* exception handling happens in the middle of the sequence. +* exception handling happens in the middle of the sequence. Memory +* copy/set instructions require that all three instructions be placed +* consecutively in memory. */ if (aarch64_insn_uses_literal (insn) || -aarch64_insn_is_exclusive (insn)) +aarch64_insn_is_exclusive (insn) || +aarch64_insn_is_mops (insn))return false;return true;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 52/817 kselftest/arm64: hwcap: fix f8dp2 cpuinfo name
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Przywara <[email protected]>
[ Upstream commit b0d80dbc378d52155c9ecf9579986edccceed3aa ]
The F8DP2 DPISA extension has a separate cpuinfo field, named accordingly.
Change the erroneously placed name of "f8dp4" to "f8dp2".
--- tools/testing/selftests/arm64/abi/hwcap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/arm64/abi/hwcap.c +1 -1
@@ -484,7 +484,7 @@ static const struct hwcap_data { .name = "F8DP2", .at_hwcap = AT_HWCAP2, .hwcap_bit = HWCAP2_F8DP2, - .cpuinfo = "f8dp4", + .cpuinfo = "f8dp2", .sigill_fn = f8dp2_sigill, }, {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 53/817 kselftest/arm64: mte: fix printf type warnings about __u64
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Przywara <[email protected]>
[ Upstream commit 7e893dc81de3e342156389ea0b83ec7d07f25281 ]
When printing the signal context's PC, we use a "%lx" format specifier, which matches the common userland (glibc's) definition of uint64_t as an "unsigned long". However the structure in question is defined in a kernel uapi header, which uses a self defined __u64 type, and the arm64 kernel headers define this using "int-ll64.h", so it becomes an "unsigned long long". This mismatch leads to the usual compiler warning.
The common fix would be to use "PRIx64", but because this is defined by the userland's toolchain libc headers, it wouldn't match as well. Since we know the exact type of __u64, just use "%llx" here instead, to silence this warning.
This also fixes a more severe typo: "$lx" is not a valid format specifier.
--- tools/testing/selftests/arm64/mte/mte_common_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/testing/selftests/arm64/mte/mte_common_util.c +2 -2
@@ -38,7 +38,7 @@ void mte_default_handler(int signum, siginfo_t *si, void *uc)if (cur_mte_cxt.trig_si_code == si->si_code) cur_mte_cxt.fault_valid = true;else -ksft_print_msg ("Got unexpected SEGV_MTEAERR at pc=$lx, fault addr=%lx\n" , +ksft_print_msg ("Got unexpected SEGV_MTEAERR at pc=%llx, fault addr=%lx\n" , ((ucontext_t *)uc)->uc_mcontext.pc, addr);return ;
@@ -64,7 +64,7 @@ void mte_default_handler(int signum, siginfo_t *si, void *uc)exit (1 ); } }else if (signum ==SIGBUS ) { -ksft_print_msg ("INFO: SIGBUS signal at pc=%lx, fault addr=%lx, si_code=%lx\n" , +ksft_print_msg ("INFO: SIGBUS signal at pc=%llx, fault addr=%lx, si_code=%x\n" , ((ucontext_t *)uc)->uc_mcontext.pc, addr, si->si_code); if ((cur_mte_cxt.trig_range >= 0 && addr >= MT_CLEAR_TAG(cur_mte_cxt.trig_addr) &&
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 54/817 kselftest/arm64: mte: fix printf type warnings about longs
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Przywara <[email protected]>
[ Upstream commit 96dddb7b9406259baace9a1831e8da155311be6f ]
When checking MTE tags, we print some diagnostic messages when the tests fail. Some variables uses there are "longs", however we only use "%x" for the format specifier.
Update the format specifiers to "%lx", to match the variable types they are supposed to print.
--- tools/testing/selftests/arm64/mte/check_tags_inclusion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/testing/selftests/arm64/mte/check_tags_inclusion.c +2 -2
@@ -65,7 +65,7 @@ static int check_single_included_tags(int mem_type, int mode) ptr =mte_insert_tags (ptr,BUFFER_SIZE );/* Check tag value */ if (MT_FETCH_TAG ((uintptr_t )ptr) == tag) { -ksft_print_msg ("FAIL: wrong tag = 0x%x with include mask=0x%x\n" , +ksft_print_msg ("FAIL: wrong tag = 0x%lx with include mask=0x%x\n" ,MT_FETCH_TAG ((uintptr_t )ptr),MT_INCLUDE_VALID_TAG (tag)); result =KSFT_FAIL ;
@@ -97,7 +97,7 @@ static int check_multiple_included_tags(int mem_type, int mode) ptr =mte_insert_tags (ptr,BUFFER_SIZE );/* Check tag value */ if (MT_FETCH_TAG ((uintptr_t )ptr) < tag) { -ksft_print_msg ("FAIL: wrong tag = 0x%x with include mask=0x%x\n" , +ksft_print_msg ("FAIL: wrong tag = 0x%lx with include mask=0x%lx\n" ,MT_FETCH_TAG ((uintptr_t )ptr),MT_INCLUDE_VALID_TAGS (excl_mask)); result =KSFT_FAIL ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 55/817 block/fs: Pass an iocb to generic_atomic_write_valid()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Garry <[email protected]>
[ Upstream commit 9a8dbdadae509e5717ff6e5aa572ca0974d2101d ]
Darrick and Hannes both thought it better that generic_atomic_write_valid() should be passed a struct iocb, and not just the member of that struct which is referenced; see [0] and [1].
I think that makes a more generic and clean API, so make that change.
[0] https://lore.kernel.org/linux-block/[email protected]/
[1] https://lore.kernel.org/linux-xfs/20240620212401.GA3058325@frogsfrogsfrogs/
--- block/fops.c | 8 ++++---- fs/read_write.c | 4 ++-- include/linux/fs.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-)
block/fops.c +4 -4
@@ -34,13 +34,13 @@ static blk_opf_t dio_bio_write_op(struct kiocb *iocb)return opf; } -static bool blkdev_dio_invalid (struct block_device *bdev,loff_t pos, +static bool blkdev_dio_invalid (struct block_device *bdev,struct kiocb *iocb,struct iov_iter *iter,bool is_atomic) { -if (is_atomic && !generic_atomic_write_valid (iter, pos)) +if (is_atomic && !generic_atomic_write_valid (iocb, iter))return true; -return pos & (bdev_logical_block_size (bdev) -1 ) || +return iocb->ki_pos & (bdev_logical_block_size (bdev) -1 ) || !bdev_iter_is_aligned (bdev, iter); }
@@ -373,7 +373,7 @@ static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)if (!iov_iter_count (iter))return 0 ; -if (blkdev_dio_invalid (bdev, iocb->ki_pos, iter, is_atomic)) +if (blkdev_dio_invalid (bdev, iocb, iter, is_atomic))return -EINVAL ; nr_pages =bio_iov_vecs_to_alloc (iter,BIO_MAX_VECS +1 );
fs/read_write.c +2 -2
@@ -1737,7 +1737,7 @@ int generic_file_rw_checks(struct file *file_in, struct file *file_out)return 0 ; } -bool generic_atomic_write_valid (struct iov_iter *iter,loff_t pos) +bool generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter) {size_t len =iov_iter_count (iter);
@@ -1747,7 +1747,7 @@ bool generic_atomic_write_valid(struct iov_iter *iter, loff_t pos)if (!is_power_of_2 (len))return false; -if (!IS_ALIGNED (pos, len)) +if (!IS_ALIGNED (iocb->ki_pos, len))return false;return true;
include/linux/fs.h +1 -1
@@ -3663,6 +3663,6 @@ static inline bool vfs_empty_path(int dfd, const char __user *path) return !c; } -bool generic_atomic_write_valid (struct iov_iter *iter,loff_t pos); +bool generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter);#endif /* _LINUX_FS_H */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 56/817 fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Garry <[email protected]>
[ Upstream commit c3be7ebbbce5201e151f17e28a6c807602f369c9 ]
Currently FMODE_CAN_ATOMIC_WRITE is set if the bdev can atomic write and the file is open for direct IO. This does not work if the file is not opened for direct IO, yet fcntl(O_DIRECT) is used on the fd later.
Change to check for direct IO on a per-IO basis in generic_atomic_write_valid(). Since we want to report -EOPNOTSUPP for non-direct IO for an atomic write, change to return an error code.
Relocate the block fops atomic write checks to the common write path, as to catch non-direct IO.
--- block/fops.c | 18 ++++++++++-------- fs/read_write.c | 13 ++++++++----- include/linux/fs.h | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-)
block/fops.c +10 -8
@@ -35,11 +35,8 @@ static blk_opf_t dio_bio_write_op(struct kiocb *iocb) }static bool blkdev_dio_invalid (struct block_device *bdev,struct kiocb *iocb, -struct iov_iter *iter,bool is_atomic) +struct iov_iter *iter) { -if (is_atomic && !generic_atomic_write_valid (iocb, iter)) -return true; -return iocb->ki_pos & (bdev_logical_block_size (bdev) -1 ) || !bdev_iter_is_aligned (bdev, iter); }
@@ -367,13 +364,12 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,static ssize_t blkdev_direct_IO (struct kiocb *iocb,struct iov_iter *iter) {struct block_device *bdev =I_BDEV (iocb->ki_filp->f_mapping->host); -bool is_atomic = iocb->ki_flags &IOCB_ATOMIC ;unsigned int nr_pages;if (!iov_iter_count (iter))return 0 ; -if (blkdev_dio_invalid (bdev, iocb, iter, is_atomic)) +if (blkdev_dio_invalid (bdev, iocb, iter))return -EINVAL ; nr_pages =bio_iov_vecs_to_alloc (iter,BIO_MAX_VECS +1 );
@@ -382,7 +378,7 @@ static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)return __blkdev_direct_IO_simple (iocb, iter, bdev, nr_pages);return __blkdev_direct_IO_async (iocb, iter, bdev, nr_pages); - }else if (is_atomic) { + }else if (iocb->ki_flags &IOCB_ATOMIC ) {return -EINVAL ; }return __blkdev_direct_IO (iocb, iter, bdev,bio_max_segs (nr_pages));
@@ -624,7 +620,7 @@ static int blkdev_open(struct inode *inode, struct file *filp)if (!bdev)return -ENXIO ; -if (bdev_can_atomic_write (bdev) && filp->f_flags &O_DIRECT ) +if (bdev_can_atomic_write (bdev)) filp->f_mode |=FMODE_CAN_ATOMIC_WRITE ; ret =bdev_open (bdev, mode, filp->private_data,NULL , filp);
@@ -699,6 +695,12 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)if ((iocb->ki_flags & (IOCB_NOWAIT |IOCB_DIRECT )) ==IOCB_NOWAIT )return -EOPNOTSUPP ; +if (iocb->ki_flags &IOCB_ATOMIC ) { + ret =generic_atomic_write_valid (iocb, from); +if (ret) +return ret; + } + size -= iocb->ki_pos;if (iov_iter_count (from) > size) { shorted =iov_iter_count (from) - size;
fs/read_write.c +8 -5
@@ -1737,18 +1737,21 @@ int generic_file_rw_checks(struct file *file_in, struct file *file_out)return 0 ; } -bool generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter) +int generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter) {size_t len =iov_iter_count (iter);if (!iter_is_ubuf (iter)) -return false; +return -EINVAL ;if (!is_power_of_2 (len)) -return false; +return -EINVAL ;if (!IS_ALIGNED (iocb->ki_pos, len)) -return false; +return -EINVAL ; -return true; +if (!(iocb->ki_flags &IOCB_DIRECT )) +return -EOPNOTSUPP ; + +return 0 ; }
include/linux/fs.h +1 -1
@@ -3663,6 +3663,6 @@ static inline bool vfs_empty_path(int dfd, const char __user *path) return !c; } -bool generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter); +int generic_atomic_write_valid (struct kiocb *iocb,struct iov_iter *iter);#endif /* _LINUX_FS_H */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 57/817 s390/cio: Do not unregister the subchannel based on DNV
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vineeth Vijayan <[email protected]>
[ Upstream commit 8c58a229688ce3a097b3b1a2efe1b4f5508c2123 ]
Starting with commit 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers"), CIO does not unregister subchannels when the attached device is invalid or unavailable. Instead, it allows subchannels to exist without a connected device. However, if the DNV value is 0, such as, when all the CHPIDs of a subchannel are configured in standby state, the subchannel is unregistered, which contradicts the current subchannel specification.
Update the logic so that subchannels are not unregistered based on the DNV value. Also update the SCHIB information even if the DNV bit is zero.
--- drivers/s390/cio/cio.c | 6 +++++- drivers/s390/cio/device.c | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-)
drivers/s390/cio/cio.c +5 -1
@@ -459,10 +459,14 @@ int cio_update_schib(struct subchannel *sch) {struct schib schib; -if (stsch (sch->schid, &schib) || !css_sch_is_valid (&schib)) +if (stsch (sch->schid, &schib))return -ENODEV ;memcpy (&sch->schib, &schib,sizeof (schib)); + +if (!css_sch_is_valid (&schib)) +return -EACCES ; +return 0 ; }EXPORT_SYMBOL_GPL (cio_update_schib);
drivers/s390/cio/device.c +17 -1
@@ -1387,14 +1387,18 @@ enum io_sch_action {IO_SCH_VERIFY ,IO_SCH_DISC ,IO_SCH_NOP , + IO_SCH_ORPH_CDEV, };static enum io_sch_action sch_get_action (struct subchannel *sch) {struct ccw_device *cdev; +int rc; cdev =sch_get_cdev (sch); -if (cio_update_schib (sch)) { + rc =cio_update_schib (sch); + +if (rc == -ENODEV ) {/* Not operational. */ if (!cdev)return IO_SCH_UNREG ;
@@ -1402,6 +1406,16 @@ static enum io_sch_action sch_get_action(struct subchannel *sch)return IO_SCH_UNREG ;return IO_SCH_ORPH_UNREG ; } + +/* Avoid unregistering subchannels without working device. */ +if (rc == -EACCES ) { +if (!cdev) +return IO_SCH_NOP ; +if (ccw_device_notify (cdev,CIO_GONE ) !=NOTIFY_OK ) +return IO_SCH_UNREG_CDEV ; +return IO_SCH_ORPH_CDEV ; + } +/* Operational. */ if (!cdev)return IO_SCH_ATTACH ;
@@ -1471,6 +1485,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process) rc =0 ; goto out_unlock;case IO_SCH_ORPH_UNREG : +case IO_SCH_ORPH_CDEV :case IO_SCH_ORPH_ATTACH :ccw_device_set_disconnected (cdev);break ;
@@ -1502,6 +1517,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)/* Handle attached ccw device. */ switch (action) {case IO_SCH_ORPH_UNREG : +case IO_SCH_ORPH_CDEV :case IO_SCH_ORPH_ATTACH :/* Move ccw device to orphanage. */ rc =ccw_device_move_to_orph (cdev);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 58/817 s390/pageattr: Implement missing kernel_page_present()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiko Carstens <[email protected]>
[ Upstream commit 2835f8bf5530750c3381166005934f996a83ad05 ]
kernel_page_present() was intentionally not implemented when adding ARCH_HAS_SET_DIRECT_MAP support, since it was only used for suspend/resume which is not supported anymore on s390.
A new bpf use case led to a compile error specific to s390. Even though this specific use case went away implement kernel_page_present(), so that the API is complete and potential future users won't run into this problem.
--- arch/s390/include/asm/set_memory.h | 1 + arch/s390/mm/pageattr.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+)
arch/s390/include/asm/set_memory.h +1 -0
@@ -62,5 +62,6 @@ __SET_MEMORY_FUNC(set_memory_4k, SET_MEMORY_4K)int set_direct_map_invalid_noflush (struct page *page);int set_direct_map_default_noflush (struct page *page); +bool kernel_page_present (struct page *page);#endif
arch/s390/mm/pageattr.c +15 -0
@@ -406,6 +406,21 @@ int set_direct_map_default_noflush(struct page *page)return __set_memory ((unsigned long )page_to_virt (page),1 ,SET_MEMORY_DEF ); } +bool kernel_page_present (struct page *page) +{ +unsigned long addr; +unsigned int cc; + + addr = (unsigned long )page_address (page); + asmvolatile ( +" lra %[addr],0(%[addr])\n" +" ipm %[cc]\n" + : [cc]"=d" (cc), [addr]"+a" (addr) + : + :"cc" ); +return (cc >>28 ) ==0 ; +} +#if defined(CONFIG_DEBUG_PAGEALLOC ) || defined(CONFIG_KFENCE )static void ipte_range (pte_t *pte,unsigned long address,int nr)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 59/817 x86/pvh: Set phys_base when calling xen_prepare_pvh()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason Andryuk <[email protected]>
[ Upstream commit b464b461d27d564125db760938643374864c1b1f ]
phys_base needs to be set for __pa() to work in xen_pvh_init() when finding the hypercall page. Set it before calling into xen_prepare_pvh(), which calls xen_pvh_init(). Clear it afterward to avoid __startup_64() adding to it and creating an incorrect value.
Message-ID: <[email protected]>
Stable-dep-of: e8fbc0d9cab6 ("x86/pvh: Call C code via the kernel virtual mapping")
--- arch/x86/platform/pvh/head.S | 13 +++++++++++++ 1 file changed, 13 insertions(+)
arch/x86/platform/pvh/head.S +13 -0
@@ -101,7 +101,20 @@ SYM_CODE_START_LOCAL(pvh_start_xen) xor %edx, %edx wrmsr + /* + * Calculate load offset and store in phys_base. __pa() needs + * phys_base set to calculate the hypercall page in xen_pvh_init(). + */ + movq %rbp, %rbx + subq $_pa(pvh_start_xen), %rbx + movq %rbx, phys_base(%rip) call xen_prepare_pvh + /* + * Clear phys_base. __startup_64 will *add* to its value, + * so reset to 0. + */ + xor %rbx, %rbx + movq %rbx, phys_base(%rip) /* startup_64 expects boot_params in %rsi. */ mov $_pa(pvh_bootparams), %rsi
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 60/817 x86/pvh: Call C code via the kernel virtual mapping
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ard Biesheuvel <[email protected]>
[ Upstream commit e8fbc0d9cab6c1ee6403f42c0991b0c1d5dbc092 ]
Calling C code via a different mapping than it was linked at is problematic, because the compiler assumes that RIP-relative and absolute symbol references are interchangeable. GCC in particular may use RIP-relative per-CPU variable references even when not using -fpic.
So call xen_prepare_pvh() via its kernel virtual mapping on x86_64, so that those RIP-relative references produce the correct values. This matches the pre-existing behavior for i386, which also invokes xen_prepare_pvh() via the kernel virtual mapping before invoking startup_32 with paging disabled again.
Message-ID: <[email protected]>
--- arch/x86/platform/pvh/head.S | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
arch/x86/platform/pvh/head.S +8 -1
@@ -108,7 +108,14 @@ SYM_CODE_START_LOCAL(pvh_start_xen) movq %rbp, %rbx subq $_pa(pvh_start_xen), %rbx movq %rbx, phys_base(%rip) - call xen_prepare_pvh + + /* Call xen_prepare_pvh() via the kernel virtual mapping */ + leaq xen_prepare_pvh(%rip), %rax + subq phys_base(%rip), %rax + addq $__START_KERNEL_map, %rax + ANNOTATE_RETPOLINE_SAFE + call *%rax + /* * Clear phys_base. __startup_64 will *add* to its value, * so reset to 0.
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 61/817 brd: defer automatic disk creation until module initialization succeeds
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Erkun <[email protected]>
[ Upstream commit 826cc42adf44930a633d11a5993676d85ddb0842 ]
My colleague Wupeng found the following problems during fault injection:
BUG: unable to handle page fault for address: fffffbfff809d073 PGD 6e648067 P4D 123ec8067 PUD 123ec4067 PMD 100e38067 PTE 0 Oops: Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI CPU: 5 UID: 0 PID: 755 Comm: modprobe Not tainted 6.12.0-rc3+ #17 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.1-2.fc37 04/01/2014 RIP: 0010:__asan_load8+0x4c/0xa0 ... Call Trace: <TASK> blkdev_put_whole+0x41/0x70 bdev_release+0x1a3/0x250 blkdev_release+0x11/0x20 __fput+0x1d7/0x4a0 task_work_run+0xfc/0x180 syscall_exit_to_user_mode+0x1de/0x1f0 do_syscall_64+0x6b/0x170 entry_SYSCALL_64_after_hwframe+0x76/0x7e
loop_init() is calling loop_add() after __register_blkdev() succeeds and is ignoring disk_add() failure from loop_add(), for loop_add() failure is not fatal and successfully created disks are already visible to bdev_open().
brd_init() is currently calling brd_alloc() before __register_blkdev() succeeds and is releasing successfully created disks when brd_init() returns an error. This can cause UAF for the latter two case:
case 1:
T1:
modprobe brd
brd_init
brd_alloc(0) // success
add_disk
disk_scan_partitions
bdev_file_open_by_dev // alloc file fput // won't free until back to userspace
brd_alloc(1) // failed since mem alloc error inject
// error path for modprobe will release code segment // back to userspace
__fput
blkdev_release
bdev_release
blkdev_put_whole
bdev->bd_disk->fops->release // fops is freed now, UAF!case 2:
T1: T2:
modprobe brd
brd_init
brd_alloc(0) // success
open(/dev/ram0)
brd_alloc(1) // fail// error path for modprobe
close(/dev/ram0)
...
/* UAF! */
bdev->bd_disk->fops->releaseFix this problem by following what loop_init() does. Besides, reintroduce brd_devices_mutex to help serialize modifications to brd_list.
--- drivers/block/brd.c | 66 ++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 22 deletions(-)
drivers/block/brd.c +44 -22
@@ -316,8 +316,40 @@ __setup("ramdisk_size=", ramdisk_size);* (should share code eventually). */ static LIST_HEAD (brd_devices); +static DEFINE_MUTEX (brd_devices_mutex);static struct dentry *brd_debugfs_dir; +static struct brd_device *brd_find_or_alloc_device (int i) +{ +struct brd_device *brd; + +mutex_lock (&brd_devices_mutex); +list_for_each_entry (brd, &brd_devices, brd_list) { +if (brd->brd_number == i) { +mutex_unlock (&brd_devices_mutex); +return ERR_PTR (-EEXIST ); + } + } + + brd =kzalloc (sizeof (*brd),GFP_KERNEL ); +if (!brd) { +mutex_unlock (&brd_devices_mutex); +return ERR_PTR (-ENOMEM ); + } + brd->brd_number = i; +list_add_tail (&brd->brd_list, &brd_devices); +mutex_unlock (&brd_devices_mutex); +return brd; +} + +static void brd_free_device (struct brd_device *brd) +{ +mutex_lock (&brd_devices_mutex); +list_del (&brd->brd_list); +mutex_unlock (&brd_devices_mutex); +kfree (brd); +} +static int brd_alloc (int i) {struct brd_device *brd;
@@ -340,14 +372,9 @@ static int brd_alloc(int i) BLK_FEAT_NOWAIT, }; -list_for_each_entry (brd, &brd_devices, brd_list) -if (brd->brd_number == i) -return -EEXIST ; - brd =kzalloc (sizeof (*brd),GFP_KERNEL ); -if (!brd) -return -ENOMEM ; - brd->brd_number = i; -list_add_tail (&brd->brd_list, &brd_devices); + brd =brd_find_or_alloc_device (i); +if (IS_ERR (brd)) +return PTR_ERR (brd);xa_init (&brd->brd_pages);
@@ -378,8 +405,7 @@ static int brd_alloc(int i) out_cleanup_disk:put_disk (disk); out_free_dev: -list_del (&brd->brd_list); -kfree (brd); +brd_free_device (brd);return err; }
@@ -398,8 +424,7 @@ static void brd_cleanup(void)del_gendisk (brd->brd_disk);put_disk (brd->brd_disk);brd_free_pages (brd); -list_del (&brd->brd_list); -kfree (brd); +brd_free_device (brd); } }
@@ -426,16 +451,6 @@ static int __init brd_init(void) {int err, i; -brd_check_and_reset_par (); - - brd_debugfs_dir =debugfs_create_dir ("ramdisk_pages" ,NULL ); - -for (i =0 ; i < rd_nr; i++) { - err =brd_alloc (i); -if (err) - goto out_free; - } -/* * brd module now has a feature to instantiate underlying device * structure on-demand, provided that there is an access dev node.
@@ -451,11 +466,18 @@ static int __init brd_init(void)* dynamically. */ +brd_check_and_reset_par (); + + brd_debugfs_dir =debugfs_create_dir ("ramdisk_pages" ,NULL ); +if (__register_blkdev (RAMDISK_MAJOR ,"ramdisk" , brd_probe)) { err = -EIO ; goto out_free; } +for (i =0 ; i < rd_nr; i++) +brd_alloc (i); +pr_info ("brd: module loaded\n" );return 0 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 62/817 ext4: avoid remount errors with abort mount option
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
[ Upstream commit 76486b104168ae59703190566e372badf433314b ]
When we remount filesystem with 'abort' mount option while changing other mount options as well (as is LTP test doing), we can return error from the system call after commit d3476f3dad4a ("ext4: don't set SB_RDONLY after filesystem errors") because the application of mount option changes detects shutdown filesystem and refuses to do anything. The behavior of application of other mount options in presence of 'abort' mount option is currently rather arbitary as some mount option changes are handled before 'abort' and some after it.
Move aborting of the filesystem to the end of remount handling so all requested changes are properly applied before the filesystem is shutdown to have a reasonably consistent behavior.
--- fs/ext4/super.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
fs/ext4/super.c +8 -3
@@ -6518,9 +6518,6 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb) goto restore_opts; } -if (test_opt2 (sb,ABORT )) -ext4_abort (sb,ESHUTDOWN ,"Abort forced by user" ); - sb->s_flags = (sb->s_flags & ~SB_POSIXACL ) | (test_opt (sb,POSIX_ACL ) ?SB_POSIXACL :0 );
@@ -6689,6 +6686,14 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)if (!ext4_has_feature_mmp (sb) ||sb_rdonly (sb))ext4_stop_mmpd (sbi); +/* +* Handle aborting the filesystem as the last thing during remount to +* avoid obsure errors during remount when some option changes fail to +* apply due to shutdown filesystem. +*/ +if (test_opt2 (sb,ABORT )) +ext4_abort (sb,ESHUTDOWN ,"Abort forced by user" ); +return 0 ; restore_opts:
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 63/817 mips: asm: fix warning when disabling MIPS_FP_SUPPORT
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Gorski <[email protected]>
[ Upstream commit da09935975c8f8c90d6f57be2422dee5557206cd ]
When MIPS_FP_SUPPORT is disabled, __sanitize_fcr31() is defined as nothing, which triggers a gcc warning:
In file included from kernel/sched/core.c:79:
kernel/sched/core.c: In function 'context_switch':
./arch/mips/include/asm/switch_to.h:114:39: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
114 | __sanitize_fcr31(next); \
| ^
kernel/sched/core.c:5316:9: note: in expansion of macro 'switch_to'
5316 | switch_to(prev, next, prev);
| ^~~~~~~~~
Fix this by providing an empty body for __sanitize_fcr31() like one is defined for __mips_mt_fpaff_switch_to().
--- arch/mips/include/asm/switch_to.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/include/asm/switch_to.h +1 -1
@@ -97,7 +97,7 @@ do { \ } \ } while (0)#else -# define __sanitize_fcr31 (next) +# define __sanitize_fcr31 (next) do { (void) (next); } while (0)#endif /*
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 64/817 initramfs: avoid filename buffer overrun
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Disseldorp <[email protected]>
[ Upstream commit e017671f534dd3f568db9e47b0583e853d2da9b5 ]
The initramfs filename field is defined in Documentation/driver-api/early-userspace/buffer-format.rst as:
37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data
...
55 ============= ================== =========================
56 Field name Field size Meaning
57 ============= ================== =========================
...
70 c_namesize 8 bytes Length of filename, including final \0
When extracting an initramfs cpio archive, the kernel's do_name() path handler assumes a zero-terminated path at @collected, passing it directly to filp_open() / init_mkdir() / init_mknod().
If a specially crafted cpio entry carries a non-zero-terminated filename and is followed by uninitialized memory, then a file may be created with trailing characters that represent the uninitialized memory. The ability to create an initramfs entry would imply already having full control of the system, so the buffer overrun shouldn't be considered a security vulnerability.
Append the output of the following bash script to an existing initramfs and observe any created /initramfs_test_fname_overrunAA* path. E.g.
./reproducer.sh | gzip >> /myinitramfs
It's easiest to observe non-zero uninitialized memory when the output is gzipped, as it'll overflow the heap allocated @out_buf in __gunzip(), rather than the initrd_start+initrd_size block.
---- reproducer.sh ----
nilchar="A" # change to "\0" to properly zero terminate / pad
magic="070701"
ino=1
mode=$(( 0100777 ))
uid=0
gid=0
nlink=1
mtime=1
filesize=0
devmajor=0
devminor=1
rdevmajor=0
rdevminor=0
csum=0
fname="initramfs_test_fname_overrun"
namelen=$(( ${#fname} + 1 )) # plus one to account for terminator
printf "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%s" \ $magic $ino $mode $uid $gid $nlink $mtime $filesize \ $devmajor $devminor $rdevmajor $rdevminor $namelen $csum $fname
termpadlen=$(( 1 + ((4 - ((110 + $namelen) & 3)) % 4) )) printf "%.s${nilchar}" $(seq 1 $termpadlen) ---- reproducer.sh ----
Symlink filename fields handled in do_symlink() won't overrun past the data segment, due to the explicit zero-termination of the symlink target.
Fix filename buffer overrun by aborting the initramfs FSM if any cpio entry doesn't carry a zero-terminator at the expected (name_len - 1) offset.
--- init/initramfs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
init/initramfs.c +15 -0
@@ -359,6 +359,15 @@ static int __init do_name(void) { state = SkipIt; next_state = Reset; + +/* name_len > 0 && name_len <= PATH_MAX checked in do_header */ +if (collected[name_len -1 ] !='\0' ) { +pr_err ("initramfs name without nulterm: %.*s\n" , + (int )name_len, collected); +error ("malformed archive" ); +return 1 ; + } +if (strcmp (collected,"TRAILER!!!" ) ==0 ) {free_hash ();return 0 ;
@@ -423,6 +432,12 @@ static int __init do_copy(void)static int __init do_symlink (void ) { +if (collected[name_len -1 ] !='\0' ) { +pr_err ("initramfs symlink without nulterm: %.*s\n" , + (int )name_len, collected); +error ("malformed archive" ); +return 1 ; + } collected[N_ALIGN (name_len) + body_len] ='\0' ;clean_path (collected,0 );init_symlink (collected +N_ALIGN (name_len), collected);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 65/817 arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumers
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marc Zyngier <[email protected]>
[ Upstream commit 2287a4c1e11822d05a70d22f28b26bd810dd204e ]
Despite KVM now being able to deal with XS-tagged TLBIs, we still don't expose these feature bits to KVM.
Plumb in the feature in ID_AA64ISAR1_EL1.
--- arch/arm64/kernel/cpufeature.c | 1 + 1 file changed, 1 insertion(+)
arch/arm64/kernel/cpufeature.c +1 -0
@@ -228,6 +228,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = { };static const struct arm64_ftr_bits ftr_id_aa64isar1[] = { +ARM64_FTR_BITS (FTR_HIDDEN ,FTR_STRICT ,FTR_LOWER_SAFE ,ID_AA64ISAR1_EL1_XS_SHIFT ,4 ,0 ),ARM64_FTR_BITS (FTR_VISIBLE ,FTR_STRICT ,FTR_LOWER_SAFE ,ID_AA64ISAR1_EL1_I8MM_SHIFT ,4 ,0 ),ARM64_FTR_BITS (FTR_VISIBLE ,FTR_STRICT ,FTR_LOWER_SAFE ,ID_AA64ISAR1_EL1_DGH_SHIFT ,4 ,0 ),ARM64_FTR_BITS (FTR_VISIBLE ,FTR_STRICT ,FTR_LOWER_SAFE ,ID_AA64ISAR1_EL1_BF16_SHIFT ,4 ,0 ),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 66/817 kselftest/arm64: Fix encoding for SVE B16B16 test
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Brown <[email protected]>
[ Upstream commit 69c0d824779843b51ca2339b2163db4d3b40c54c ]
The test for SVE_B16B16 had a cut'n'paste of a SME instruction, fix it with a relevant SVE instruction.
--- tools/testing/selftests/arm64/abi/hwcap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/testing/selftests/arm64/abi/hwcap.c +2 -2
@@ -355,8 +355,8 @@ static void sveaes_sigill(void)static void sveb16b16_sigill (void ) { -/* BFADD ZA.H[W0, 0], {Z0.H-Z1.H} */ - asmvolatile (".inst 0xC1E41C00" : : : ); +/* BFADD Z0.H, Z0.H, Z0.H */ + asmvolatile (".inst 0x65000000" : : : ); }static void svepmull_sigill (void )
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 67/817 nvme-pci: fix freeing of the HMB descriptor table
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 3c2fb1ca8086eb139b2a551358137525ae8e0d7a ]
The HMB descriptor table is sized to the maximum number of descriptors that could be used for a given device, but __nvme_alloc_host_mem could break out of the loop earlier on memory allocation failure and end up using less descriptors than planned for, which leads to an incorrect size passed to dma_free_coherent.
In practice this was not showing up because the number of descriptors tends to be low and the dma coherent allocator always allocates and frees at least a page.
--- drivers/nvme/host/pci.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/nvme/host/pci.c +9 -7
@@ -153,6 +153,7 @@ struct nvme_dev {/* host memory buffer support: */ u64 host_mem_size;u32 nr_host_mem_descs; +u32 host_mem_descs_size;dma_addr_t host_mem_descs_dma;struct nvme_host_mem_buf_desc *host_mem_descs;void **host_mem_desc_bufs;
@@ -1966,10 +1967,10 @@ static void nvme_free_host_mem(struct nvme_dev *dev)kfree (dev->host_mem_desc_bufs); dev->host_mem_desc_bufs =NULL ; -dma_free_coherent (dev->dev, - dev->nr_host_mem_descs *sizeof (*dev->host_mem_descs), +dma_free_coherent (dev->dev, dev->host_mem_descs_size, dev->host_mem_descs, dev->host_mem_descs_dma); dev->host_mem_descs =NULL ; + dev->host_mem_descs_size =0 ; dev->nr_host_mem_descs =0 ; }
@@ -1977,7 +1978,7 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred, u32 chunk_size) {struct nvme_host_mem_buf_desc *descs; -u32 max_entries, len; +u32 max_entries, len, descs_size;dma_addr_t descs_dma;int i =0 ;void **bufs;
@@ -1990,8 +1991,9 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,if (dev->ctrl.hmmaxd && dev->ctrl.hmmaxd < max_entries) max_entries = dev->ctrl.hmmaxd; - descs =dma_alloc_coherent (dev->dev, max_entries *sizeof (*descs), - &descs_dma,GFP_KERNEL ); + descs_size = max_entries *sizeof (*descs); + descs =dma_alloc_coherent (dev->dev, descs_size, &descs_dma, +GFP_KERNEL );if (!descs) goto out;
@@ -2020,6 +2022,7 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred, dev->host_mem_size = size; dev->host_mem_descs = descs; dev->host_mem_descs_dma = descs_dma; + dev->host_mem_descs_size = descs_size; dev->host_mem_desc_bufs = bufs;return 0 ;
@@ -2034,8 +2037,7 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,kfree (bufs); out_free_descs: -dma_free_coherent (dev->dev, max_entries *sizeof (*descs), descs, - descs_dma); +dma_free_coherent (dev->dev, descs_size, descs, descs_dma); out: dev->host_mem_descs =NULL ;return -ENOMEM ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 68/817 m68k: mvme147: Fix SCSI controller IRQ numbers
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Palmer <[email protected]>
[ Upstream commit 47bc874427382018fa2e3e982480e156271eee70 ]
Sometime long ago the m68k IRQ code was refactored and the interrupt numbers for SCSI controller on this board ended up wrong, and it hasn't worked since.
The PCC adds 0x40 to the vector for its interrupts so they end up in the user interrupt range. Hence, the kernel number should be the kernel offset for user interrupt range + the PCC interrupt number.
--- arch/m68k/include/asm/mvme147hw.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/m68k/include/asm/mvme147hw.h +2 -2
@@ -93,8 +93,8 @@ struct pcc_regs {#define M147_SCC_B_ADDR 0xfffe3000#define M147_SCC_PCLK 5000000 -#define MVME147_IRQ_SCSI_PORT (IRQ_USER+0x45) -#define MVME147_IRQ_SCSI_DMA (IRQ_USER+0x46) +#define MVME147_IRQ_SCSI_PORT (IRQ_USER + 5) +#define MVME147_IRQ_SCSI_DMA (IRQ_USER + 6)/* SCC interrupts, for MVME147 */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 69/817 m68k: mvme147: Reinstate early console
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Palmer <[email protected]>
[ Upstream commit 077b33b9e2833ff25050d986178a2c4c4036cbac ]
Commit a38eaa07a0ce ("m68k/mvme147: config.c - Remove unused functions"), removed the console functionality for the mvme147 instead of wiring it up to an early console. Put the console write function back and wire it up like mvme16x does so it's possible to see Linux boot on this fine hardware once more.
--- arch/m68k/kernel/early_printk.c | 5 ++++- arch/m68k/mvme147/config.c | 30 ++++++++++++++++++++++++++++++ arch/m68k/mvme147/mvme147.h | 6 ++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 arch/m68k/mvme147/mvme147.h
arch/m68k/kernel/early_printk.c +4 -1
@@ -13,6 +13,7 @@#include <asm/setup.h> +#include "../mvme147/mvme147.h" #include "../mvme16x/mvme16x.h" asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
@@ -22,7 +23,9 @@ static void __ref debug_cons_write(struct console *c, {#if !(defined(CONFIG_SUN3 ) || defined(CONFIG_M68000 ) || \ defined(CONFIG_COLDFIRE )) -if (MACH_IS_MVME16x) +if (MACH_IS_MVME147 ) +mvme147_scc_write (c, s, n); +else if (MACH_IS_MVME16x)mvme16x_cons_write (c, s, n);else debug_cons_nputs (s, n);
arch/m68k/mvme147/config.c +30 -0
@@ -32,6 +32,7 @@#include <asm/mvme147hw.h> #include <asm/config.h> +#include "mvme147.h" static void mvme147_get_model (char *model);extern void mvme147_sched_init (void );
@@ -185,3 +186,32 @@ int mvme147_hwclk(int op, struct rtc_time *t) }return 0 ; } + +static void scc_delay (void ) +{ + __asm__ __volatile__ ("nop; nop;" ); +} + +static void scc_write (char ch) +{ +do { +scc_delay (); + }while (!(in_8 (M147_SCC_A_ADDR ) &BIT (2 ))); +scc_delay (); +out_8 (M147_SCC_A_ADDR ,8 ); +scc_delay (); +out_8 (M147_SCC_A_ADDR , ch); +} + +void mvme147_scc_write (struct console *co,const char *str,unsigned int count) +{ +unsigned long flags; + +local_irq_save (flags); +while (count--) { +if (*str =='\n' ) +scc_write ('\r' ); +scc_write (*str++); + } +local_irq_restore (flags); +}
arch/m68k/mvme147/mvme147.h new file +6 -0
@@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +struct console ; + +/* config.c */ +void mvme147_scc_write (struct console *co,const char *str,unsigned int count);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 70/817 arm64: fix .data.rel.ro size assertion when CONFIG_LTO_CLANG
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
[ Upstream commit 340fd66c856651d8c1d29f392dd26ad674d2db0e ]
Commit be2881824ae9 ("arm64/build: Assert for unwanted sections") introduced an assertion to ensure that the .data.rel.ro section does not exist.
However, this check does not work when CONFIG_LTO_CLANG is enabled, because .data.rel.ro matches the .data.[0-9a-zA-Z_]* pattern in the DATA_MAIN macro.
Move the ASSERT() above the RW_DATA() line.
--- arch/arm64/kernel/vmlinux.lds.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm64/kernel/vmlinux.lds.S +3 -3
@@ -288,6 +288,9 @@ SECTIONS __initdata_end = .; __init_end = .; + .data.rel.ro : { *(.data.rel.ro) } + ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!") + _data = .; _sdata = .; RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN)
@@ -344,9 +347,6 @@ SECTIONS *(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt) } ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!") - - .data.rel.ro : { *(.data.rel.ro) } - ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!") } #include "image-vars.h"
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 71/817 acpi/arm64: Adjust error handling procedure in gtdt_parse_timer_block()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aleksandr Mishin <[email protected]>
[ Upstream commit 1a9de2f6fda69d5f105dd8af776856a66abdaa64 ]
In case of error in gtdt_parse_timer_block() invalid 'gtdt_frame' will be used in 'do {} while (i-- >= 0 && gtdt_frame--);' statement block because do{} block will be executed even if 'i == 0'.
Adjust error handling procedure by replacing 'i-- >= 0' with 'i-- > 0'.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- drivers/acpi/arm64/gtdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/arm64/gtdt.c +1 -1
@@ -283,7 +283,7 @@ static int __init gtdt_parse_timer_block(struct acpi_gtdt_timer_block *block,if (frame->virt_irq >0 )acpi_unregister_gsi (gtdt_frame->virtual_timer_interrupt); frame->virt_irq =0 ; - }while (i-- >=0 && gtdt_frame--); + }while (i-- >0 && gtdt_frame--);return -EINVAL ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 72/817 loop: fix type of block size
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Wang <[email protected]>
[ Upstream commit 8e604cac499248c75ad3a26695a743ff879ded5c ]
PAGE_SIZE may be 64K, and the max block size can be PAGE_SIZE, so any variable for holding block size can't be defined as 'unsigned short'.
Unfortunately commit 473516b36193 ("loop: use the atomic queue limits update API") passes 'bsize' with type of 'unsigned short' to loop_reconfigure_limits(), and causes LTP/ioctl_loop06 test failure:
12 ioctl_loop06.c:76: TINFO: Using LOOP_SET_BLOCK_SIZE with arg > PAGE_SIZE 13 ioctl_loop06.c:59: TFAIL: Set block size succeed unexpectedly
...
18 ioctl_loop06.c:76: TINFO: Using LOOP_CONFIGURE with block_size > PAGE_SIZE 19 ioctl_loop06.c:59: TFAIL: Set block size succeed unexpectedly
Fixes the issue by defining 'block size' variable with 'unsigned int', which is aligned with block layer's definition.
(improve commit log & add fixes tag)
--- drivers/block/loop.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/block/loop.c +3 -3
@@ -173,7 +173,7 @@ static loff_t get_loop_size(struct loop_device *lo, struct file *file)static bool lo_bdev_can_use_dio (struct loop_device *lo,struct block_device *backing_bdev) { -unsigned short sb_bsize =bdev_logical_block_size (backing_bdev); +unsigned int sb_bsize =bdev_logical_block_size (backing_bdev);if (queue_logical_block_size (lo->lo_queue) < sb_bsize)return false;
@@ -977,7 +977,7 @@ loop_set_status_from_info(struct loop_device *lo,return 0 ; } -static unsigned short loop_default_blocksize (struct loop_device *lo, +static unsigned int loop_default_blocksize (struct loop_device *lo,struct block_device *backing_bdev) {/* In case of direct I/O, match underlying block size */
@@ -986,7 +986,7 @@ static unsigned short loop_default_blocksize(struct loop_device *lo,return SECTOR_SIZE ; } -static int loop_reconfigure_limits (struct loop_device *lo,unsigned short bsize) +static int loop_reconfigure_limits (struct loop_device *lo,unsigned int bsize) {struct file *file = lo->lo_backing_file;struct inode *inode = file->f_mapping->host;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 73/817 cachefiles: Fix incorrect length return value in cachefiles_ondemand_fd_write_iter()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zizhi Wo <[email protected]>
[ Upstream commit 10c35abd35aa62c9aac56898ae0c63b4d7d115e5 ]
cachefiles_ondemand_fd_write_iter() function first aligns "pos" and "len" to block boundaries. When calling __cachefiles_write(), the aligned "pos" is passed in, but "len" is the original unaligned value(iter->count). Additionally, the returned length of the write operation is the modified "len" aligned by block size, which is unreasonable.
The alignment of "pos" and "len" is intended only to check whether the cache has enough space. But the modified len should not be used as the return value of cachefiles_ondemand_fd_write_iter() because the length we passed to __cachefiles_write() is the previous "len". Doing so would result in a mismatch in the data written on-demand. For example, if the length of the user state passed in is not aligned to the block size (the preread scene/DIO writes only need 512 alignment/Fault injection), the length of the write will differ from the actual length of the return.
To solve this issue, since the __cachefiles_prepare_write() modifies the size of "len", we pass "aligned_len" to __cachefiles_prepare_write() to calculate the free blocks and use the original "len" as the return value of cachefiles_ondemand_fd_write_iter().
--- fs/cachefiles/ondemand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/cachefiles/ondemand.c +2 -2
@@ -61,7 +61,7 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,struct cachefiles_object *object = kiocb->ki_filp->private_data;struct cachefiles_cache *cache = object->volume->cache;struct file *file = object->file; -size_t len = iter->count; +size_t len = iter->count, aligned_len = len;loff_t pos = kiocb->ki_pos;const struct cred *saved_cred;int ret;
@@ -70,7 +70,7 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,return -ENOBUFS ;cachefiles_begin_secure (cache, &saved_cred); - ret =__cachefiles_prepare_write (object, file, &pos, &len, len, true); + ret =__cachefiles_prepare_write (object, file, &pos, &aligned_len, len, true);cachefiles_end_secure (cache, saved_cred);if (ret <0 )return ret;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 74/817 cachefiles: Fix missing pos updates in cachefiles_ondemand_fd_write_iter()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zizhi Wo <[email protected]>
[ Upstream commit 56f4856b425a30e1d8b3e41e6cde8bfba90ba5f8 ]
In the erofs on-demand loading scenario, read and write operations are usually delivered through "off" and "len" contained in read req in user mode. Naturally, pwrite is used to specify a specific offset to complete write operations.
However, if the write(not pwrite) syscall is called multiple times in the read-ahead scenario, we need to manually update ki_pos after each write operation to update file->f_pos.
This step is currently missing from the cachefiles_ondemand_fd_write_iter function, added to address this issue.
--- fs/cachefiles/ondemand.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/cachefiles/ondemand.c +3 -1
@@ -77,8 +77,10 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,trace_cachefiles_ondemand_fd_write (object,file_inode (file), pos, len); ret =__cachefiles_write (object, file, pos, iter,NULL ,NULL ); -if (!ret) +if (!ret) { ret = len; + kiocb->ki_pos += ret; + }return ret; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 75/817 cachefiles: Fix NULL pointer dereference in object->file
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zizhi Wo <[email protected]>
[ Upstream commit 31ad74b20227ce6b40910ff78b1c604e42975cf1 ]
At present, the object->file has the NULL pointer dereference problem in ondemand-mode. The root cause is that the allocated fd and object->file lifetime are inconsistent, and the user-space invocation to anon_fd uses object->file. Following is the process that triggers the issue:
[write fd] [umount]
cachefiles_ondemand_fd_write_iter
fscache_cookie_state_machine
cachefiles_withdraw_cookie
if (!file) return -ENOBUFS
cachefiles_clean_up_object cachefiles_unmark_inode_in_use fput(object->file) object->file = NULL
// file NULL pointer dereference!
__cachefiles_write(..., file, ...)
Fix this issue by add an additional reference count to the object->file before write/llseek, and decrement after it finished.
--- fs/cachefiles/interface.c | 14 ++++++++++---- fs/cachefiles/ondemand.c | 30 ++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 10 deletions(-)
fs/cachefiles/interface.c +10 -4
@@ -327,6 +327,8 @@ static void cachefiles_commit_object(struct cachefiles_object *object,static void cachefiles_clean_up_object (struct cachefiles_object *object,struct cachefiles_cache *cache) { +struct file *file; +if (test_bit (FSCACHE_COOKIE_RETIRED , &object->cookie->flags)) {if (!test_bit (CACHEFILES_OBJECT_USING_TMPFILE , &object->flags)) {cachefiles_see_object (object, cachefiles_obj_see_clean_delete);
@@ -342,10 +344,14 @@ static void cachefiles_clean_up_object(struct cachefiles_object *object, }cachefiles_unmark_inode_in_use (object, object->file); -if (object->file) { -fput (object->file); - object->file =NULL ; - } + +spin_lock (&object->lock); + file = object->file; + object->file =NULL ; +spin_unlock (&object->lock); + +if (file) +fput (file); }/*
fs/cachefiles/ondemand.c +24 -6
@@ -60,20 +60,26 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb, {struct cachefiles_object *object = kiocb->ki_filp->private_data;struct cachefiles_cache *cache = object->volume->cache; -struct file *file = object->file; +struct file *file;size_t len = iter->count, aligned_len = len;loff_t pos = kiocb->ki_pos;const struct cred *saved_cred;int ret; -if (!file) +spin_lock (&object->lock); + file = object->file; +if (!file) { +spin_unlock (&object->lock);return -ENOBUFS ; + } +get_file (file); +spin_unlock (&object->lock);cachefiles_begin_secure (cache, &saved_cred); ret =__cachefiles_prepare_write (object, file, &pos, &aligned_len, len, true);cachefiles_end_secure (cache, saved_cred);if (ret <0 ) -return ret; + goto out;trace_cachefiles_ondemand_fd_write (object,file_inode (file), pos, len); ret =__cachefiles_write (object, file, pos, iter,NULL ,NULL );
@@ -82,6 +88,8 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb, kiocb->ki_pos += ret; } +out: +fput (file);return ret; }
@@ -89,12 +97,22 @@ static loff_t cachefiles_ondemand_fd_llseek(struct file *filp, loff_t pos, int whence) {struct cachefiles_object *object = filp->private_data; -struct file *file = object->file; +struct file *file; +loff_t ret; -if (!file) +spin_lock (&object->lock); + file = object->file; +if (!file) { +spin_unlock (&object->lock);return -ENOBUFS ; + } +get_file (file); +spin_unlock (&object->lock); -return vfs_llseek (file, pos, whence); + ret =vfs_llseek (file, pos, whence); +fput (file); + +return ret; } static long cachefiles_ondemand_fd_ioctl(struct file *filp, unsigned int ioctl,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 76/817 netfs/fscache: Add a memory barrier for FSCACHE_VOLUME_CREATING
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zizhi Wo <[email protected]>
[ Upstream commit 22f9400a6f3560629478e0a64247b8fcc811a24d ]
In fscache_create_volume(), there is a missing memory barrier between the bit-clearing operation and the wake-up operation. This may cause a situation where, after a wake-up, the bit-clearing operation hasn't been detected yet, leading to an indefinite wait. The triggering process is as follows:
[cookie1] [cookie2] [volume_work]fscache_perform_lookup
fscache_create_volume
fscache_perform_lookup
fscache_create_volume
fscache_create_volume_work
cachefiles_acquire_volume clear_and_wake_up_bit
test_and_set_bit
test_and_set_bit
goto maybe_wait
goto no_wait
In the above process, cookie1 and cookie2 has the same volume. When cookie1 enters the -no_wait- process, it will clear the bit and wake up the waiting process. If a barrier is missing, it may cause cookie2 to remain in the -wait- process indefinitely.
In commit 3288666c7256 ("fscache: Use clear_and_wake_up_bit() in fscache_create_volume_work()"), barriers were added to similar operations in fscache_create_volume_work(), but fscache_create_volume() was missed.
By combining the clear and wake operations into clear_and_wake_up_bit() to fix this issue.
--- fs/netfs/fscache_volume.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
fs/netfs/fscache_volume.c +1 -2
@@ -322,8 +322,7 @@ void fscache_create_volume(struct fscache_volume *volume, bool wait) }return ; no_wait: -clear_bit_unlock (FSCACHE_VOLUME_CREATING , &volume->flags); -wake_up_bit (&volume->flags,FSCACHE_VOLUME_CREATING ); +clear_and_wake_up_bit (FSCACHE_VOLUME_CREATING , &volume->flags); }/*
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 77/817 block: constify the lim argument to queue_limits_max_zone_append_sectors
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 379b122a3ec8033aa43cb70e8ecb6fb7f98aa68f ]
queue_limits_max_zone_append_sectors doesn't change the lim argument, so mark it as const.
--- include/linux/blkdev.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/linux/blkdev.h +2 -1
@@ -1187,7 +1187,8 @@ static inline unsigned int queue_max_segment_size(const struct request_queue *q)return q->limits.max_segment_size; } -static inline unsigned int queue_limits_max_zone_append_sectors (struct queue_limits *l) +static inline unsigned int +queue_limits_max_zone_append_sectors (const struct queue_limits *l) {unsigned int max_sectors =min (l->chunk_sectors, l->max_hw_sectors);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 78/817 block: properly handle REQ_OP_ZONE_APPEND in __bio_split_to_limits
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 1e8a7f6af926e266cc1d7ac49b56bd064057d625 ]
Currently REQ_OP_ZONE_APPEND is handled by the bio_split_rw case in __bio_split_to_limits. This is harmful because REQ_OP_ZONE_APPEND bios do not adhere to the soft max_limits value but instead use their own capped version of max_hw_sectors, leading to incorrect splits that later blow up in bio_split.
We still need the bio_split_rw logic to count nr_segs for blk-mq code, so add a new wrapper that passes in the right limit, and turns any bio that would need a split into an error as an additional debugging aid.
Stable-dep-of: 60dc5ea6bcfd ("block: take chunk_sectors into account in bio_split_write_zeroes")
--- block/blk-merge.c | 20 ++++++++++++++++++++ block/blk.h | 4 ++++ 2 files changed, 24 insertions(+)
block/blk-merge.c +20 -0
@@ -378,6 +378,26 @@ struct bio *bio_split_rw(struct bio *bio, const struct queue_limits *lim, get_max_io_size(bio, lim) << SECTOR_SHIFT)); } +/* +* REQ_OP_ZONE_APPEND bios must never be split by the block layer. +* +* But we want the nr_segs calculation provided by bio_split_rw_at, and having +* a good sanity check that the submitter built the bio correctly is nice to +* have as well. +*/ +struct bio *bio_split_zone_append (struct bio *bio, +const struct queue_limits *lim,unsigned *nr_segs) +{ +unsigned int max_sectors =queue_limits_max_zone_append_sectors (lim); +int split_sectors; + + split_sectors =bio_split_rw_at (bio, lim, nr_segs, + max_sectors <<SECTOR_SHIFT ); +if (WARN_ON_ONCE (split_sectors >0 )) + split_sectors = -EINVAL ; +return bio_submit_split (bio, split_sectors); +} +/** * bio_split_to_limits - split a bio to fit the queue limits * @bio: bio to be split
block/blk.h +4 -0
@@ -337,6 +337,8 @@ struct bio *bio_split_write_zeroes(struct bio *bio, const struct queue_limits *lim, unsigned *nsegs);struct bio *bio_split_rw (struct bio *bio,const struct queue_limits *lim,unsigned *nr_segs); +struct bio *bio_split_zone_append (struct bio *bio, +const struct queue_limits *lim,unsigned *nr_segs);/* * All drivers must accept single-segments bios that are smaller than PAGE_SIZE.
@@ -375,6 +377,8 @@ static inline struct bio *__bio_split_to_limits(struct bio *bio,return bio_split_rw (bio, lim, nr_segs); *nr_segs =1 ;return bio; +case REQ_OP_ZONE_APPEND : +return bio_split_zone_append (bio, lim, nr_segs);case REQ_OP_DISCARD :case REQ_OP_SECURE_ERASE :return bio_split_discard (bio, lim, nr_segs);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 79/817 block: take chunk_sectors into account in bio_split_write_zeroes
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 60dc5ea6bcfd078b71419640d49afa649acf9450 ]
For zoned devices, write zeroes must be split at the zone boundary which is represented as chunk_sectors. For other uses like the internally RAIDed NVMe devices it is probably at least useful.
Enhance get_max_io_size to know about write zeroes and use it in bio_split_write_zeroes. Also add a comment about the seemingly nonsensical zero max_write_zeroes limit.
--- block/blk-merge.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-)
block/blk-merge.c +23 -12
@@ -166,17 +166,6 @@ struct bio *bio_split_discard(struct bio *bio, const struct queue_limits *lim,return bio_submit_split (bio, split_sectors); } -struct bio *bio_split_write_zeroes (struct bio *bio, -const struct queue_limits *lim,unsigned *nsegs) -{ - *nsegs =0 ; -if (!lim->max_write_zeroes_sectors) -return bio; -if (bio_sectors (bio) <= lim->max_write_zeroes_sectors) -return bio; -return bio_submit_split (bio, lim->max_write_zeroes_sectors); -} -static inline unsigned int blk_boundary_sectors (const struct queue_limits *lim,bool is_atomic) {
@@ -211,7 +200,9 @@ static inline unsigned get_max_io_size(struct bio *bio,* We ignore lim->max_sectors for atomic writes because it may less * than the actual bio size, which we cannot tolerate. */ -if (is_atomic) +if (bio_op (bio) ==REQ_OP_WRITE_ZEROES ) + max_sectors = lim->max_write_zeroes_sectors; +else if (is_atomic) max_sectors = lim->atomic_write_max_sectors;else max_sectors = lim->max_sectors;
@@ -398,6 +389,26 @@ struct bio *bio_split_zone_append(struct bio *bio,return bio_submit_split (bio, split_sectors); } +struct bio *bio_split_write_zeroes (struct bio *bio, +const struct queue_limits *lim,unsigned *nsegs) +{ +unsigned int max_sectors =get_max_io_size (bio, lim); + + *nsegs =0 ; + +/* +* An unset limit should normally not happen, as bio submission is keyed +* off having a non-zero limit. But SCSI can clear the limit in the +* I/O completion handler, and we can race and see this. Splitting to a +* zero limit obviously doesn't make sense, so band-aid it here. +*/ +if (!max_sectors) +return bio; +if (bio_sectors (bio) <= max_sectors) +return bio; +return bio_submit_split (bio, max_sectors); +} +/** * bio_split_to_limits - split a bio to fit the queue limits * @bio: bio to be split
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 80/817 block: fix bio_split_rw_at to take zone_write_granularity into account
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 7ecd2cd4fae3e8410c0a6620f3a83dcdbb254f02 ]
Otherwise it can create unaligned writes on zoned devices.
--- block/blk-merge.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
block/blk-merge.c +9 -1
@@ -287,6 +287,14 @@ static bool bvec_split_segs(const struct queue_limits *lim,return len >0 || bv->bv_len > max_len; } +static unsigned int bio_split_alignment (struct bio *bio, +const struct queue_limits *lim) +{ +if (op_is_write (bio_op (bio)) && lim->zone_write_granularity) +return lim->zone_write_granularity; +return lim->logical_block_size; +} +/** * bio_split_rw_at - check if and where to split a read/write bio * @bio: [in] bio to be split
@@ -349,7 +357,7 @@ int bio_split_rw_at(struct bio *bio, const struct queue_limits *lim,* split size so that each bio is properly block size aligned, even if * we do not use the full hardware limits. */ - bytes =ALIGN_DOWN (bytes, lim->logical_block_size); + bytes =ALIGN_DOWN (bytes,bio_split_alignment (bio, lim));/* * Bio splitting may cause subtle trouble such as hang when doing sync
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 81/817 s390/syscalls: Avoid creation of arch/arch/ directory
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
[ Upstream commit 0708967e2d56e370231fd07defa0d69f9ad125e8 ]
Building the kernel with ARCH=s390 creates a weird arch/arch/ directory.
$ find arch/arch arch/arch arch/arch/s390 arch/arch/s390/include arch/arch/s390/include/generated arch/arch/s390/include/generated/asm arch/arch/s390/include/generated/uapi arch/arch/s390/include/generated/uapi/asm
The root cause is 'targets' in arch/s390/kernel/syscalls/Makefile, where the relative path is incorrect.
Strictly speaking, 'targets' was not necessary in the first place because this Makefile uses 'filechk' instead of 'if_changed'.
However, this commit keeps it, as it will be useful when converting 'filechk' to 'if_changed' later.
--- arch/s390/kernel/syscalls/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/kernel/syscalls/Makefile +1 -1
@@ -12,7 +12,7 @@ kapi-hdrs-y := $(kapi)/unistd_nr.h uapi-hdrs-y := $(uapi)/unistd_32.h uapi-hdrs-y += $(uapi)/unistd_64.h -targets += $(addprefix ../../../,$(gen-y) $(kapi-hdrs-y) $(uapi-hdrs-y)) +targets += $(addprefix ../../../../,$(gen-y) $(kapi-hdrs-y) $(uapi-hdrs-y)) PHONY += kapi uapi
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 82/817 hfsplus: dont query the device logical block size multiple times
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thadeu Lima de Souza Cascardo <[email protected]>
[ Upstream commit 1c82587cb57687de3f18ab4b98a8850c789bedcf ]
Devices block sizes may change. One of these cases is a loop device by using ioctl LOOP_SET_BLOCK_SIZE.
While this may cause other issues like IO being rejected, in the case of hfsplus, it will allocate a block by using that size and potentially write out-of-bounds when hfsplus_read_wrapper calls hfsplus_submit_bio and the latter function reads a different io_size.
Using a new min_io_size initally set to sb_min_blocksize works for the purposes of the original fix, since it will be set to the max between HFSPLUS_SECTOR_SIZE and the first seen logical block size. We still use the max between HFSPLUS_SECTOR_SIZE and min_io_size in case the latter is not initialized.
Tested by mounting an hfsplus filesystem with loop block sizes 512, 1024 and 4096.
The produced KASAN report before the fix looks like this:
[ 419.944641] ================================================================== [ 419.945655] BUG: KASAN: slab-use-after-free in hfsplus_read_wrapper+0x659/0xa0a [ 419.946703] Read of size 2 at addr ffff88800721fc00 by task repro/10678 [ 419.947612] [ 419.947846] CPU: 0 UID: 0 PID: 10678 Comm: repro Not tainted 6.12.0-rc5-00008-gdf56e0f2f3ca #84 [ 419.949007] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014 [ 419.950035] Call Trace: [ 419.950384] <TASK> [ 419.950676] dump_stack_lvl+0x57/0x78 [ 419.951212] ? hfsplus_read_wrapper+0x659/0xa0a [ 419.951830] print_report+0x14c/0x49e [ 419.952361] ? __virt_addr_valid+0x267/0x278 [ 419.952979] ? kmem_cache_debug_flags+0xc/0x1d [ 419.953561] ? hfsplus_read_wrapper+0x659/0xa0a [ 419.954231] kasan_report+0x89/0xb0 [ 419.954748] ? hfsplus_read_wrapper+0x659/0xa0a [ 419.955367] hfsplus_read_wrapper+0x659/0xa0a [ 419.955948] ? __pfx_hfsplus_read_wrapper+0x10/0x10 [ 419.956618] ? do_raw_spin_unlock+0x59/0x1a9 [ 419.957214] ? _raw_spin_unlock+0x1a/0x2e [ 419.957772] hfsplus_fill_super+0x348/0x1590 [ 419.958355] ? hlock_class+0x4c/0x109 [ 419.958867] ? __pfx_hfsplus_fill_super+0x10/0x10 [ 419.959499] ? __pfx_string+0x10/0x10 [ 419.960006] ? lock_acquire+0x3e2/0x454 [ 419.960532] ? bdev_name.constprop.0+0xce/0x243 [ 419.961129] ? __pfx_bdev_name.constprop.0+0x10/0x10 [ 419.961799] ? pointer+0x3f0/0x62f [ 419.962277] ? __pfx_pointer+0x10/0x10 [ 419.962761] ? vsnprintf+0x6c4/0xfba [ 419.963178] ? __pfx_vsnprintf+0x10/0x10 [ 419.963621] ? setup_bdev_super+0x376/0x3b3 [ 419.964029] ? snprintf+0x9d/0xd2 [ 419.964344] ? __pfx_snprintf+0x10/0x10 [ 419.964675] ? lock_acquired+0x45c/0x5e9 [ 419.965016] ? set_blocksize+0x139/0x1c1 [ 419.965381] ? sb_set_blocksize+0x6d/0xae [ 419.965742] ? __pfx_hfsplus_fill_super+0x10/0x10 [ 419.966179] mount_bdev+0x12f/0x1bf [ 419.966512] ? __pfx_mount_bdev+0x10/0x10 [ 419.966886] ? vfs_parse_fs_string+0xce/0x111 [ 419.967293] ? __pfx_vfs_parse_fs_string+0x10/0x10 [ 419.967702] ? __pfx_hfsplus_mount+0x10/0x10 [ 419.968073] legacy_get_tree+0x104/0x178 [ 419.968414] vfs_get_tree+0x86/0x296 [ 419.968751] path_mount+0xba3/0xd0b [ 419.969157] ? __pfx_path_mount+0x10/0x10 [ 419.969594] ? kmem_cache_free+0x1e2/0x260 [ 419.970311] do_mount+0x99/0xe0 [ 419.970630] ? __pfx_do_mount+0x10/0x10 [ 419.971008] __do_sys_mount+0x199/0x1c9 [ 419.971397] do_syscall_64+0xd0/0x135 [ 419.971761] entry_SYSCALL_64_after_hwframe+0x76/0x7e [ 419.972233] RIP: 0033:0x7c3cb812972e [ 419.972564] Code: 48 8b 0d f5 46 0d 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c2 46 0d 00 f7 d8 64 89 01 48 [ 419.974371] RSP: 002b:00007ffe30632548 EFLAGS: 00000286 ORIG_RAX: 00000000000000a5 [ 419.975048] RAX: ffffffffffffffda RBX: 00007ffe306328d8 RCX: 00007c3cb812972e [ 419.975701] RDX: 0000000020000000 RSI: 0000000020000c80 RDI: 00007ffe306325d0 [ 419.976363] RBP: 00007ffe30632720 R08: 00007ffe30632610 R09: 0000000000000000 [ 419.977034] R10: 0000000000200008 R11: 0000000000000286 R12: 0000000000000000 [ 419.977713] R13: 00007ffe306328e8 R14: 00005a0eb298bc68 R15: 00007c3cb8356000 [ 419.978375] </TASK> [ 419.978589]
--- fs/hfsplus/hfsplus_fs.h | 3 ++- fs/hfsplus/wrapper.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-)
fs/hfsplus/hfsplus_fs.h +2 -1
@@ -156,6 +156,7 @@ struct hfsplus_sb_info {/* Runtime variables */ u32 blockoffset; +u32 min_io_size;sector_t part_start;sector_t sect_count;int fs_shift;
@@ -307,7 +308,7 @@ struct hfsplus_readdir_data {*/ static inline unsigned short hfsplus_min_io_size (struct super_block *sb) { - return max_t(unsigned short, bdev_logical_block_size(sb->s_bdev), + return max_t(unsigned short, HFSPLUS_SB(sb)->min_io_size,HFSPLUS_SECTOR_SIZE ); }
fs/hfsplus/wrapper.c +2 -0
@@ -172,6 +172,8 @@ int hfsplus_read_wrapper(struct super_block *sb)if (!blocksize) goto out; + sbi->min_io_size = blocksize; +if (hfsplus_get_last_session (sb, &part_start, &part_size)) goto out;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 83/817 ext4: pipeline buffer reads in mext_page_mkuptodate()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Wilcox (Oracle) <[email protected]>
[ Upstream commit 368a83cebbb949adbcc20877c35367178497d9cc ]
Instead of synchronously reading one buffer at a time, submit reads as we walk the buffers in the first loop, then wait for them in the second loop. This should be significantly more efficient, particularly on HDDs, but I have not measured.
Stable-dep-of: 2f3d93e210b9 ("ext4: fix race in buffer_head read fault injection")
--- fs/ext4/move_extent.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
fs/ext4/move_extent.c +15 -8
@@ -173,7 +173,9 @@ mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to)sector_t block;struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE ];unsigned int blocksize, block_start, block_end; -int i, err, nr =0 , partial =0 ; +int i, nr =0 ; +bool partial = false; +BUG_ON (!folio_test_locked (folio));BUG_ON (folio_test_writeback (folio));
@@ -191,13 +193,13 @@ mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to) block_end = block_start + blocksize;if (block_end <= from || block_start >= to) {if (!buffer_uptodate (bh)) - partial =1 ; + partial = true;continue ; }if (buffer_uptodate (bh))continue ;if (!buffer_mapped (bh)) { - err =ext4_get_block (inode, block, bh,0 ); +int err =ext4_get_block (inode, block, bh,0 );if (err)return err;if (!buffer_mapped (bh)) {
@@ -206,6 +208,12 @@ mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to)continue ; } } +lock_buffer (bh); +if (buffer_uptodate (bh)) { +unlock_buffer (bh); +continue ; + } +ext4_read_bh_nowait (bh,0 ,NULL );BUG_ON (nr >=MAX_BUF_PER_PAGE ); arr[nr++] = bh; }
@@ -215,11 +223,10 @@ mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to)for (i =0 ; i < nr; i++) { bh = arr[i]; -if (!bh_uptodate_or_lock (bh)) { - err =ext4_read_bh (bh,0 ,NULL ); -if (err) -return err; - } +wait_on_buffer (bh); +if (buffer_uptodate (bh)) +continue ; +return -EIO ; } out:if (!partial)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 84/817 ext4: remove array of buffer_heads from mext_page_mkuptodate()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Wilcox (Oracle) <[email protected]>
[ Upstream commit a40759fb16ae839f8c769174fde017564ea564ff ]
Iterate the folio's list of buffer_heads twice instead of keeping an array of pointers. This solves a too-large-array-for-stack problem on architectures with a ridiculoously large PAGE_SIZE and prepares ext4 to support larger folios.
Stable-dep-of: 2f3d93e210b9 ("ext4: fix race in buffer_head read fault injection")
--- fs/ext4/move_extent.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
fs/ext4/move_extent.c +12 -10
@@ -165,15 +165,14 @@ mext_folio_double_lock(struct inode *inode1, struct inode *inode2,return 0 ; } -/* Force page buffers uptodate w/o dropping page's lock */ -static int -mext_page_mkuptodate (struct folio *folio,unsigned from,unsigned to) +/* Force folio buffers uptodate w/o dropping folio's lock */ +static int mext_page_mkuptodate (struct folio *folio,size_t from,size_t to) {struct inode *inode = folio->mapping->host;sector_t block; -struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE ]; +struct buffer_head *bh, *head;unsigned int blocksize, block_start, block_end; -int i, nr =0 ; +int nr =0 ;bool partial = false;BUG_ON (!folio_test_locked (folio));
@@ -214,20 +213,23 @@ mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to)continue ; }ext4_read_bh_nowait (bh,0 ,NULL ); -BUG_ON (nr >=MAX_BUF_PER_PAGE ); - arr[nr++] = bh; + nr++; }/* No io required */ if (!nr) goto out; -for (i =0 ; i < nr; i++) { - bh = arr[i]; + bh = head; +do { +if (bh_offset (bh) + blocksize <= from) +continue ; +if (bh_offset (bh) > to) +break ;wait_on_buffer (bh);if (buffer_uptodate (bh))continue ;return -EIO ; - } + }while ((bh = bh->b_this_page) != head); out:if (!partial)folio_mark_uptodate (folio);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 85/817 ext4: fix race in buffer_head read fault injection
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Long Li <[email protected]>
[ Upstream commit 2f3d93e210b9c2866c8b3662adae427d5bf511ec ]
When I enabled ext4 debug for fault injection testing, I encountered the following warning:
EXT4-fs error (device sda): ext4_read_inode_bitmap:201: comm fsstress:
Cannot read inode bitmap - block_group = 8, inode_bitmap = 1051
WARNING: CPU: 0 PID: 511 at fs/buffer.c:1181 mark_buffer_dirty+0x1b3/0x1d0
The root cause of the issue lies in the improper implementation of ext4's buffer_head read fault injection. The actual completion of buffer_head read and the buffer_head fault injection are not atomic, which can lead to the uptodate flag being cleared on normally used buffer_heads in race conditions.
[CPU0] [CPU1] [CPU2]ext4_read_inode_bitmap
ext4_read_bh()
<bh read complete>
ext4_read_inode_bitmap
if (buffer_uptodate(bh))
return bh
jbd2_journal_commit_transaction
__jbd2_journal_refile_buffer
__jbd2_journal_unfile_buffer
__jbd2_journal_temp_unlink_buffer
ext4_simulate_fail_bh()
clear_buffer_uptodate
mark_buffer_dirty
<report warning> WARN_ON_ONCE(!buffer_uptodate(bh))
The best approach would be to perform fault injection in the IO completion callback function, rather than after IO completion. However, the IO completion callback function cannot get the fault injection code in sb.
Fix it by passing the result of fault injection into the bh read function, we simulate faults within the bh read function itself. This requires adding an extra parameter to the bh read functions that need fault injection.
--- fs/ext4/balloc.c | 4 ++-- fs/ext4/ext4.h | 12 ++---------- fs/ext4/extents.c | 2 +- fs/ext4/ialloc.c | 5 +++-- fs/ext4/indirect.c | 2 +- fs/ext4/inode.c | 4 ++-- fs/ext4/mmp.c | 2 +- fs/ext4/move_extent.c | 2 +- fs/ext4/resize.c | 2 +- fs/ext4/super.c | 23 +++++++++++++++-------- 10 files changed, 29 insertions(+), 29 deletions(-)
fs/ext4/balloc.c +2 -2
@@ -550,7 +550,8 @@ ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group,trace_ext4_read_block_bitmap_load (sb, block_group, ignore_locked);ext4_read_bh_nowait (bh,REQ_META |REQ_PRIO | (ignore_locked ?REQ_RAHEAD :0 ), - ext4_end_bitmap_read); + ext4_end_bitmap_read, +ext4_simulate_fail (sb,EXT4_SIM_BBITMAP_EIO ));return bh; verify: err =ext4_validate_block_bitmap (sb, desc, block_group, bh);
@@ -577,7 +578,6 @@ int ext4_wait_block_bitmap(struct super_block *sb, ext4_group_t block_group,if (!desc)return -EFSCORRUPTED ;wait_on_buffer (bh); -ext4_simulate_fail_bh (sb, bh,EXT4_SIM_BBITMAP_EIO );if (!buffer_uptodate (bh)) { ext4_error_err(sb, EIO, "Cannot read block bitmap - " "block_group = %u, block_bitmap = %llu",
fs/ext4/ext4.h +2 -10
@@ -1865,14 +1865,6 @@ static inline bool ext4_simulate_fail(struct super_block *sb,return false; } -static inline void ext4_simulate_fail_bh (struct super_block *sb, -struct buffer_head *bh, -unsigned long code) -{ -if (!IS_ERR (bh) &&ext4_simulate_fail (sb, code)) -clear_buffer_uptodate (bh); -} -/* * Error number codes for s_{first,last}_error_errno *
@@ -3098,9 +3090,9 @@ extern struct buffer_head *ext4_sb_bread(struct super_block *sb,extern struct buffer_head *ext4_sb_bread_unmovable (struct super_block *sb,sector_t block);extern void ext4_read_bh_nowait (struct buffer_head *bh,blk_opf_t op_flags, -bh_end_io_t *end_io); +bh_end_io_t *end_io,bool simu_fail);extern int ext4_read_bh (struct buffer_head *bh,blk_opf_t op_flags, -bh_end_io_t *end_io); +bh_end_io_t *end_io,bool simu_fail);extern int ext4_read_bh_lock (struct buffer_head *bh,blk_opf_t op_flags,bool wait);extern void ext4_sb_breadahead_unmovable (struct super_block *sb,sector_t block);extern int ext4_seq_options_show (struct seq_file *seq,void *offset);
fs/ext4/extents.c +1 -1
@@ -564,7 +564,7 @@ __read_extent_tree_block(const char *function, unsigned int line,if (!bh_uptodate_or_lock (bh)) {trace_ext4_ext_load_extent (inode, pblk, _RET_IP_); - err =ext4_read_bh (bh,0 ,NULL ); + err =ext4_read_bh (bh,0 ,NULL , false);if (err <0 ) goto errout; }
fs/ext4/ialloc.c +3 -2
@@ -194,8 +194,9 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)* submit the buffer_head for reading */ trace_ext4_load_inode_bitmap (sb, block_group); -ext4_read_bh (bh,REQ_META |REQ_PRIO , ext4_end_bitmap_read); -ext4_simulate_fail_bh (sb, bh,EXT4_SIM_IBITMAP_EIO ); +ext4_read_bh (bh,REQ_META |REQ_PRIO , + ext4_end_bitmap_read, +ext4_simulate_fail (sb,EXT4_SIM_IBITMAP_EIO ));if (!buffer_uptodate (bh)) {put_bh (bh); ext4_error_err(sb, EIO, "Cannot read inode bitmap - "
fs/ext4/indirect.c +1 -1
@@ -170,7 +170,7 @@ static Indirect *ext4_get_branch(struct inode *inode, int depth, }if (!bh_uptodate_or_lock (bh)) { -if (ext4_read_bh (bh,0 ,NULL ) <0 ) { +if (ext4_read_bh (bh,0 ,NULL , false) <0 ) {put_bh (bh); goto failure; }
fs/ext4/inode.c +2 -2
@@ -4530,10 +4530,10 @@ static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino,* Read the block from disk. */ trace_ext4_load_inode (sb, ino); -ext4_read_bh_nowait (bh,REQ_META |REQ_PRIO ,NULL ); +ext4_read_bh_nowait (bh,REQ_META |REQ_PRIO ,NULL , +ext4_simulate_fail (sb,EXT4_SIM_INODE_EIO ));blk_finish_plug (&plug);wait_on_buffer (bh); -ext4_simulate_fail_bh (sb, bh,EXT4_SIM_INODE_EIO );if (!buffer_uptodate (bh)) {if (ret_block) *ret_block = block;
fs/ext4/mmp.c +1 -1
@@ -94,7 +94,7 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh, }lock_buffer (*bh); - ret =ext4_read_bh (*bh,REQ_META |REQ_PRIO ,NULL ); + ret =ext4_read_bh (*bh,REQ_META |REQ_PRIO ,NULL , false);if (ret) goto warn_exit;
fs/ext4/move_extent.c +1 -1
@@ -212,7 +212,7 @@ static int mext_page_mkuptodate(struct folio *folio, size_t from, size_t to)unlock_buffer (bh);continue ; } -ext4_read_bh_nowait (bh,0 ,NULL ); +ext4_read_bh_nowait (bh,0 ,NULL , false); nr++; }/* No io required */
fs/ext4/resize.c +1 -1
@@ -1300,7 +1300,7 @@ static struct buffer_head *ext4_get_bitmap(struct super_block *sb, __u64 block)if (unlikely (!bh))return NULL ;if (!bh_uptodate_or_lock (bh)) { -if (ext4_read_bh (bh,0 ,NULL ) <0 ) { +if (ext4_read_bh (bh,0 ,NULL , false) <0 ) {brelse (bh);return NULL ; }
fs/ext4/super.c +15 -8
@@ -161,8 +161,14 @@ MODULE_ALIAS("ext3");static inline void __ext4_read_bh (struct buffer_head *bh,blk_opf_t op_flags, -bh_end_io_t *end_io) +bh_end_io_t *end_io,bool simu_fail) { +if (simu_fail) { +clear_buffer_uptodate (bh); +unlock_buffer (bh); +return ; + } +/* * buffer's verified bit is no longer valid after reading from * disk again due to write out error, clear it to make sure we
@@ -176,7 +182,7 @@ static inline void __ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, }void ext4_read_bh_nowait (struct buffer_head *bh,blk_opf_t op_flags, -bh_end_io_t *end_io) +bh_end_io_t *end_io,bool simu_fail) {BUG_ON (!buffer_locked (bh));
@@ -184,10 +190,11 @@ void ext4_read_bh_nowait(struct buffer_head *bh, blk_opf_t op_flags,unlock_buffer (bh);return ; } -__ext4_read_bh (bh, op_flags, end_io); +__ext4_read_bh (bh, op_flags, end_io, simu_fail); } -int ext4_read_bh (struct buffer_head *bh,blk_opf_t op_flags,bh_end_io_t *end_io) +int ext4_read_bh (struct buffer_head *bh,blk_opf_t op_flags, +bh_end_io_t *end_io,bool simu_fail) {BUG_ON (!buffer_locked (bh));
@@ -196,7 +203,7 @@ int ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, bh_end_io_t *end_ioreturn 0 ; } -__ext4_read_bh (bh, op_flags, end_io); +__ext4_read_bh (bh, op_flags, end_io, simu_fail);wait_on_buffer (bh);if (buffer_uptodate (bh))
@@ -208,10 +215,10 @@ int ext4_read_bh_lock(struct buffer_head *bh, blk_opf_t op_flags, bool wait) {lock_buffer (bh);if (!wait) { -ext4_read_bh_nowait (bh, op_flags,NULL ); +ext4_read_bh_nowait (bh, op_flags,NULL , false);return 0 ; } -return ext4_read_bh (bh, op_flags,NULL ); +return ext4_read_bh (bh, op_flags,NULL , false); }/*
@@ -266,7 +273,7 @@ void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block)if (likely (bh)) {if (trylock_buffer (bh)) -ext4_read_bh_nowait (bh,REQ_RAHEAD ,NULL ); +ext4_read_bh_nowait (bh,REQ_RAHEAD ,NULL , false);brelse (bh); } }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 86/817 nvme-pci: reverse request order in nvme_queue_rqs
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit beadf0088501d9dcf2454b05d90d5d31ea3ba55f ]
blk_mq_flush_plug_list submits requests in the reverse order that they were submitted, which leads to a rather suboptimal I/O pattern especially in rotational devices. Fix this by rewriting nvme_queue_rqs so that it always pops the requests from the passed in request list, and then adds them to the head of a local submit list. This actually simplifies the code a bit as it removes the complicated list splicing, at the cost of extra updates of the rq_next pointer. As that should be cache hot anyway it should be an easy price to pay.
--- drivers/nvme/host/pci.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-)
drivers/nvme/host/pci.c +17 -22
@@ -905,9 +905,10 @@ static blk_status_t nvme_queue_rq(struct blk_mq_hw_ctx *hctx,static void nvme_submit_cmds (struct nvme_queue *nvmeq,struct request **rqlist) { +struct request *req; +spin_lock (&nvmeq->sq_lock); -while (!rq_list_empty (*rqlist)) { -struct request *req =rq_list_pop (rqlist); +while ((req =rq_list_pop (rqlist))) {struct nvme_iod *iod =blk_mq_rq_to_pdu (req);nvme_sq_copy_cmd (nvmeq, &iod->cmd);
@@ -932,31 +933,25 @@ static bool nvme_prep_rq_batch(struct nvme_queue *nvmeq, struct request *req)static void nvme_queue_rqs (struct request **rqlist) { -struct request *req, *next, *prev =NULL ; +struct request *submit_list =NULL ;struct request *requeue_list =NULL ; +struct request **requeue_lastp = &requeue_list; +struct nvme_queue *nvmeq =NULL ; +struct request *req; -rq_list_for_each_safe (rqlist, req, next) { -struct nvme_queue *nvmeq = req->mq_hctx->driver_data; - -if (!nvme_prep_rq_batch (nvmeq, req)) { -/* detach 'req' and add to remainder list */ -rq_list_move (rqlist, &requeue_list, req, prev); - - req = prev; -if (!req) -continue ; - } +while ((req =rq_list_pop (rqlist))) { +if (nvmeq && nvmeq != req->mq_hctx->driver_data) +nvme_submit_cmds (nvmeq, &submit_list); + nvmeq = req->mq_hctx->driver_data; -if (!next || req->mq_hctx != next->mq_hctx) { -/* detach rest of list, and submit */ - req->rq_next =NULL ; -nvme_submit_cmds (nvmeq, rqlist); - *rqlist = next; - prev =NULL ; - }else - prev = req; +if (nvme_prep_rq_batch (nvmeq, req)) +rq_list_add (&submit_list, req);/* reverse order */ +else +rq_list_add_tail (&requeue_lastp, req); } +if (nvmeq) +nvme_submit_cmds (nvmeq, &submit_list); *rqlist = requeue_list; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 87/817 virtio_blk: reverse request order in virtio_queue_rqs
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 7f212e997edbb7a2cb85cef2ac14265dfaf88717 ]
blk_mq_flush_plug_list submits requests in the reverse order that they were submitted, which leads to a rather suboptimal I/O pattern especially in rotational devices. Fix this by rewriting virtio_queue_rqs so that it always pops the requests from the passed in request list, and then adds them to the head of a local submit list. This actually simplifies the code a bit as it removes the complicated list splicing, at the cost of extra updates of the rq_next pointer. As that should be cache hot anyway it should be an easy price to pay.
--- drivers/block/virtio_blk.c | 46 +++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 25 deletions(-)
drivers/block/virtio_blk.c +21 -25
@@ -471,18 +471,18 @@ static bool virtblk_prep_rq_batch(struct request *req)return virtblk_prep_rq (req->mq_hctx, vblk, req, vbr) ==BLK_STS_OK ; } -static bool virtblk_add_req_batch (struct virtio_blk_vq *vq, +static void virtblk_add_req_batch (struct virtio_blk_vq *vq,struct request **rqlist) { +struct request *req;unsigned long flags; -int err;bool kick;spin_lock_irqsave (&vq->lock, flags); -while (!rq_list_empty (*rqlist)) { -struct request *req =rq_list_pop (rqlist); +while ((req =rq_list_pop (rqlist))) {struct virtblk_req *vbr =blk_mq_rq_to_pdu (req); +int err; err =virtblk_add_req (vq->vq, vbr);if (err) {
@@ -495,37 +495,33 @@ static bool virtblk_add_req_batch(struct virtio_blk_vq *vq, kick =virtqueue_kick_prepare (vq->vq);spin_unlock_irqrestore (&vq->lock, flags); -return kick; +if (kick) +virtqueue_notify (vq->vq); }static void virtio_queue_rqs (struct request **rqlist) { -struct request *req, *next, *prev =NULL ; +struct request *submit_list =NULL ;struct request *requeue_list =NULL ; +struct request **requeue_lastp = &requeue_list; +struct virtio_blk_vq *vq =NULL ; +struct request *req; -rq_list_for_each_safe (rqlist, req, next) { -struct virtio_blk_vq *vq =get_virtio_blk_vq (req->mq_hctx); -bool kick; - -if (!virtblk_prep_rq_batch (req)) { -rq_list_move (rqlist, &requeue_list, req, prev); - req = prev; -if (!req) -continue ; - } +while ((req =rq_list_pop (rqlist))) { +struct virtio_blk_vq *this_vq =get_virtio_blk_vq (req->mq_hctx); -if (!next || req->mq_hctx != next->mq_hctx) { - req->rq_next =NULL ; - kick =virtblk_add_req_batch (vq, rqlist); -if (kick) -virtqueue_notify (vq->vq); +if (vq && vq != this_vq) +virtblk_add_req_batch (vq, &submit_list); + vq = this_vq; - *rqlist = next; - prev =NULL ; - }else - prev = req; +if (virtblk_prep_rq_batch (req)) +rq_list_add (&submit_list, req);/* reverse order */ +else +rq_list_add_tail (&requeue_lastp, req); } +if (vq) +virtblk_add_req_batch (vq, &submit_list); *rqlist = requeue_list; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 88/817 crypto: mxs-dcp - Fix AES-CBC with hardware-bound keys
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Paukrt <[email protected]>
[ Upstream commit 0dbb6854ca14933e194e8e46c894ca7bff95d0f3 ]
Fix passing an initialization vector in the payload field which is necessary for AES in CBC mode even with hardware-bound keys.
--- drivers/crypto/mxs-dcp.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
drivers/crypto/mxs-dcp.c +12 -8
@@ -225,21 +225,22 @@ static int mxs_dcp_start_dma(struct dcp_async_ctx *actx)static int mxs_dcp_run_aes (struct dcp_async_ctx *actx,struct skcipher_request *req,int init) { -dma_addr_t key_phys =0 ; -dma_addr_t src_phys, dst_phys; +dma_addr_t key_phys, src_phys, dst_phys;struct dcp *sdcp = global_sdcp;struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan];struct dcp_aes_req_ctx *rctx =skcipher_request_ctx (req);bool key_referenced = actx->key_referenced;int ret; -if (!key_referenced) { +if (key_referenced) + key_phys =dma_map_single (sdcp->dev, sdcp->coh->aes_key +AES_KEYSIZE_128 , +AES_KEYSIZE_128 ,DMA_TO_DEVICE ); +else key_phys =dma_map_single (sdcp->dev, sdcp->coh->aes_key,2 *AES_KEYSIZE_128 ,DMA_TO_DEVICE ); - ret =dma_mapping_error (sdcp->dev, key_phys); -if (ret) -return ret; - } + ret =dma_mapping_error (sdcp->dev, key_phys); +if (ret) +return ret; src_phys =dma_map_single (sdcp->dev, sdcp->coh->aes_in_buf,DCP_BUF_SZ ,DMA_TO_DEVICE );
@@ -300,7 +301,10 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, err_dst:dma_unmap_single (sdcp->dev, src_phys,DCP_BUF_SZ ,DMA_TO_DEVICE ); err_src: -if (!key_referenced) +if (key_referenced) +dma_unmap_single (sdcp->dev, key_phys,AES_KEYSIZE_128 , +DMA_TO_DEVICE ); +else dma_unmap_single (sdcp->dev, key_phys,2 *AES_KEYSIZE_128 ,DMA_TO_DEVICE );return ret;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 89/817 crypto: caam - Fix the pointer passed to caam_qi_shutdown()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit ad980b04f51f7fb503530bd1cb328ba5e75a250e ]
The type of the last parameter given to devm_add_action_or_reset() is "struct caam_drv_private *", but in caam_qi_shutdown(), it is casted to "struct device *".
Pass the correct parameter to devm_add_action_or_reset() so that the resources are released as expected.
--- drivers/crypto/caam/qi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/caam/qi.c +1 -1
@@ -793,7 +793,7 @@ int caam_qi_init(struct platform_device *caam_pdev)caam_debugfs_qi_init (ctrlpriv); - err =devm_add_action_or_reset (qidev, caam_qi_shutdown, ctrlpriv); + err =devm_add_action_or_reset (qidev, caam_qi_shutdown, qidev);if (err) goto fail2;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 90/817 crypto: qat - remove check after debugfs_create_dir()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cabiddu, Giovanni <[email protected]>
[ Upstream commit 23717055a79981daf7fafa09a4b0d7566f8384aa ]
The debugfs functions are guaranteed to return a valid error code instead of NULL upon failure. Consequently, the driver can directly propagate any error returned without additional checks.
Remove the unnecessary if statement after debugfs_create_dir(). If this function fails, the error code is stored in accel_dev->debugfs_dir and utilized in subsequent debugfs calls.
Additionally, since accel_dev->debugfs_dir is assured to be non-NULL, remove the superfluous NULL pointer checks within the adf_dbgfs_add() and adf_dbgfs_rm().
--- drivers/crypto/intel/qat/qat_common/adf_dbgfs.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-)
drivers/crypto/intel/qat/qat_common/adf_dbgfs.c +1 -12
@@ -22,18 +22,13 @@void adf_dbgfs_init (struct adf_accel_dev *accel_dev) {char name[ADF_DEVICE_NAME_LENGTH ]; -void *ret;/* Create dev top level debugfs entry */ snprintf (name,sizeof (name),"%s%s_%s" ,ADF_DEVICE_NAME_PREFIX , accel_dev->hw_device->dev_class->name,pci_name (accel_dev->accel_pci_dev.pci_dev)); - ret =debugfs_create_dir (name,NULL ); -if (IS_ERR_OR_NULL (ret)) -return ; - - accel_dev->debugfs_dir = ret; + accel_dev->debugfs_dir =debugfs_create_dir (name,NULL );adf_cfg_dev_dbgfs_add (accel_dev); }
@@ -59,9 +54,6 @@ EXPORT_SYMBOL_GPL(adf_dbgfs_exit);*/ void adf_dbgfs_add (struct adf_accel_dev *accel_dev) { -if (!accel_dev->debugfs_dir) -return ; -if (!accel_dev->is_vf) {adf_fw_counters_dbgfs_add (accel_dev);adf_heartbeat_dbgfs_add (accel_dev);
@@ -77,9 +69,6 @@ void adf_dbgfs_add(struct adf_accel_dev *accel_dev)*/ void adf_dbgfs_rm (struct adf_accel_dev *accel_dev) { -if (!accel_dev->debugfs_dir) -return ; -if (!accel_dev->is_vf) {adf_tl_dbgfs_rm (accel_dev);adf_cnv_dbgfs_rm (accel_dev);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 91/817 crypto: powerpc/p10-aes-gcm - Register modules as SIMD
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Danny Tsen <[email protected]>
[ Upstream commit c954b252dee956d33ee59f594710af28fb3037d9 ]
This patch is to fix an issue when simd is not usable that data mismatch may occur. The fix is to register algs as SIMD modules so that the algorithm is excecuted when SIMD instructions is usable. Called gcm_update() to generate the final digest if needed.
A new module rfc4106(gcm(aes)) is also added.
--- arch/powerpc/crypto/aes-gcm-p10-glue.c | 141 +++++++++++++++++++++---- 1 file changed, 118 insertions(+), 23 deletions(-)
arch/powerpc/crypto/aes-gcm-p10-glue.c +118 -23
@@ -8,6 +8,7 @@#include <asm/unaligned.h> #include <asm/simd.h> #include <asm/switch_to.h> +#include <crypto/gcm.h> #include <crypto/aes.h> #include <crypto/algapi.h> #include <crypto/b128ops.h>
@@ -24,6 +25,7 @@#define PPC_ALIGN 16#define GCM_IV_SIZE 12 +#define RFC4106_NONCE_SIZE 4MODULE_DESCRIPTION ("PPC64le AES-GCM with Stitched implementation" );MODULE_AUTHOR ("Danny Tsen <[email protected]" );
@@ -31,7 +33,7 @@ MODULE_LICENSE("GPL v2");MODULE_ALIAS_CRYPTO ("aes" ); asmlinkage int aes_p10_set_encrypt_key(const u8 *userKey, const int bits, -void *key); +void *key); asmlinkage void aes_p10_encrypt(const u8 *in, u8 *out, const void *key); asmlinkage void aes_p10_gcm_encrypt(u8 *in, u8 *out, size_t len,void *rkey,u8 *iv,void *Xi);
@@ -39,7 +41,8 @@ asmlinkage void aes_p10_gcm_decrypt(u8 *in, u8 *out, size_t len, void *rkey, u8 *iv, void *Xi); asmlinkage void gcm_init_htable(unsigned char htable[], unsigned char Xi[]); asmlinkage void gcm_ghash_p10(unsigned char *Xi, unsigned char *Htable, -unsigned char *aad,unsigned int alen); +unsigned char *aad,unsigned int alen); +asmlinkage void gcm_update(u8 *iv, void *Xi);struct aes_key {u8 key[AES_MAX_KEYLENGTH ];
@@ -52,6 +55,7 @@ struct gcm_ctx {u8 aad_hash[16 ];u64 aadLen;u64 Plen;/* offset 56 - used in aes_p10_gcm_{en/de}crypt */ +u8 pblock[16 ]; };struct Hash_ctx {u8 H[16 ];/* subkey */
@@ -60,17 +64,20 @@ struct Hash_ctx {struct p10_aes_gcm_ctx {struct aes_key enc_key; +u8 nonce[RFC4106_NONCE_SIZE ]; };static void vsx_begin (void ) {preempt_disable (); +pagefault_disable ();enable_kernel_vsx (); }static void vsx_end (void ) {disable_kernel_vsx (); +pagefault_enable ();preempt_enable (); }
@@ -185,7 +192,7 @@ static int set_authsize(struct crypto_aead *tfm, unsigned int authsize) }static int p10_aes_gcm_setkey (struct crypto_aead *aead,const u8 *key, -unsigned int keylen) +unsigned int keylen) {struct crypto_tfm *tfm =crypto_aead_tfm (aead);struct p10_aes_gcm_ctx *ctx =crypto_tfm_ctx (tfm);
@@ -198,7 +205,8 @@ static int p10_aes_gcm_setkey(struct crypto_aead *aead, const u8 *key,return ret ? -EINVAL :0 ; } -static int p10_aes_gcm_crypt (struct aead_request *req,int enc) +static int p10_aes_gcm_crypt (struct aead_request *req,u8 *riv, +int assoclen,int enc) {struct crypto_tfm *tfm = req->base.tfm;struct p10_aes_gcm_ctx *ctx =crypto_tfm_ctx (tfm);
@@ -210,7 +218,6 @@ static int p10_aes_gcm_crypt(struct aead_request *req, int enc)struct skcipher_walk walk;u8 *assocmem =NULL ;u8 *assoc; -unsigned int assoclen = req->assoclen;unsigned int cryptlen = req->cryptlen;unsigned char ivbuf[AES_BLOCK_SIZE +PPC_ALIGN ];unsigned char *iv =PTR_ALIGN ((void *)ivbuf,PPC_ALIGN );
@@ -218,11 +225,12 @@ static int p10_aes_gcm_crypt(struct aead_request *req, int enc)unsigned long auth_tag_len =crypto_aead_authsize (__crypto_aead_cast (tfm));u8 otag[16 ];int total_processed =0 ; +int nbytes;memset (databuf,0 ,sizeof (databuf));memset (hashbuf,0 ,sizeof (hashbuf));memset (ivbuf,0 ,sizeof (ivbuf)); -memcpy (iv, req->iv,GCM_IV_SIZE ); +memcpy (iv, riv,GCM_IV_SIZE );/* Linearize assoc, if not already linear */ if (req->src->length >= assoclen && req->src->length) {
@@ -257,19 +265,25 @@ static int p10_aes_gcm_crypt(struct aead_request *req, int enc)if (ret)return ret; -while (walk.nbytes >0 && ret ==0 ) { +while ((nbytes = walk.nbytes) >0 && ret ==0 ) { +u8 *src = walk.src.virt.addr; +u8 *dst = walk.dst.virt.addr; +u8 buf[AES_BLOCK_SIZE ]; + +if (unlikely (nbytes >0 && nbytes <AES_BLOCK_SIZE )) + src = dst =memcpy (buf, src, nbytes);vsx_begin ();if (enc) -aes_p10_gcm_encrypt (walk.src.virt.addr, - walk.dst.virt.addr, - walk.nbytes, +aes_p10_gcm_encrypt (src, dst, nbytes, &ctx->enc_key, gctx->iv, hash->Htable);else -aes_p10_gcm_decrypt (walk.src.virt.addr, - walk.dst.virt.addr, - walk.nbytes, +aes_p10_gcm_decrypt (src, dst, nbytes, &ctx->enc_key, gctx->iv, hash->Htable); + +if (unlikely (nbytes >0 && nbytes <AES_BLOCK_SIZE )) +memcpy (walk.dst.virt.addr, buf, nbytes); +vsx_end (); total_processed += walk.nbytes;
@@ -281,6 +295,7 @@ static int p10_aes_gcm_crypt(struct aead_request *req, int enc)/* Finalize hash */ vsx_begin (); +gcm_update (gctx->iv, hash->Htable);finish_tag (gctx, hash, total_processed);vsx_end ();
@@ -302,17 +317,63 @@ static int p10_aes_gcm_crypt(struct aead_request *req, int enc)return 0 ; } +static int rfc4106_setkey (struct crypto_aead *tfm,const u8 *inkey, +unsigned int keylen) +{ +struct p10_aes_gcm_ctx *ctx =crypto_aead_ctx (tfm); +int err; + + keylen -=RFC4106_NONCE_SIZE ; + err =p10_aes_gcm_setkey (tfm, inkey, keylen); +if (err) +return err; + +memcpy (ctx->nonce, inkey + keylen,RFC4106_NONCE_SIZE ); +return 0 ; +} + +static int rfc4106_setauthsize (struct crypto_aead *tfm,unsigned int authsize) +{ +return crypto_rfc4106_check_authsize (authsize); +} + +static int rfc4106_encrypt (struct aead_request *req) +{ +struct crypto_aead *aead =crypto_aead_reqtfm (req); +struct p10_aes_gcm_ctx *ctx =crypto_aead_ctx (aead); +u8 iv[AES_BLOCK_SIZE ]; + +memcpy (iv, ctx->nonce,RFC4106_NONCE_SIZE ); +memcpy (iv +RFC4106_NONCE_SIZE , req->iv,GCM_RFC4106_IV_SIZE ); + +return crypto_ipsec_check_assoclen (req->assoclen) ?: +p10_aes_gcm_crypt (req, iv, req->assoclen -GCM_RFC4106_IV_SIZE ,1 ); +} + +static int rfc4106_decrypt (struct aead_request *req) +{ +struct crypto_aead *aead =crypto_aead_reqtfm (req); +struct p10_aes_gcm_ctx *ctx =crypto_aead_ctx (aead); +u8 iv[AES_BLOCK_SIZE ]; + +memcpy (iv, ctx->nonce,RFC4106_NONCE_SIZE ); +memcpy (iv +RFC4106_NONCE_SIZE , req->iv,GCM_RFC4106_IV_SIZE ); + +return crypto_ipsec_check_assoclen (req->assoclen) ?: +p10_aes_gcm_crypt (req, iv, req->assoclen -GCM_RFC4106_IV_SIZE ,0 ); +} +static int p10_aes_gcm_encrypt (struct aead_request *req) { -return p10_aes_gcm_crypt (req,1 ); +return p10_aes_gcm_crypt (req, req->iv, req->assoclen,1 ); }static int p10_aes_gcm_decrypt (struct aead_request *req) { -return p10_aes_gcm_crypt (req,0 ); +return p10_aes_gcm_crypt (req, req->iv, req->assoclen,0 ); } -static struct aead_alg gcm_aes_alg = { +static struct aead_alg gcm_aes_algs[] = {{ .ivsize =GCM_IV_SIZE , .maxauthsize =16 ,
@@ -321,23 +382,57 @@ static struct aead_alg gcm_aes_alg = { .encrypt = p10_aes_gcm_encrypt, .decrypt = p10_aes_gcm_decrypt, - .base.cra_name = "gcm(aes)", - .base.cra_driver_name = "aes_gcm_p10", + .base.cra_name = "__gcm(aes)", + .base.cra_driver_name = "__aes_gcm_p10", .base.cra_priority = 2100, .base.cra_blocksize = 1, - .base.cra_ctxsize = sizeof(struct p10_aes_gcm_ctx), + .base.cra_ctxsize =sizeof (struct p10_aes_gcm_ctx )+ + 4 * sizeof(u64[2]), .base.cra_module = THIS_MODULE, -}; + .base.cra_flags = CRYPTO_ALG_INTERNAL, +}, { + .ivsize = GCM_RFC4106_IV_SIZE, + .maxauthsize = 16, + .setkey = rfc4106_setkey, + .setauthsize = rfc4106_setauthsize, + .encrypt = rfc4106_encrypt, + .decrypt = rfc4106_decrypt, + + .base.cra_name = "__rfc4106(gcm(aes))", + .base.cra_driver_name = "__rfc4106_aes_gcm_p10", + .base.cra_priority = 2100, + .base.cra_blocksize = 1, + .base.cra_ctxsize =sizeof (struct p10_aes_gcm_ctx ) + + 4 * sizeof(u64[2]), + .base.cra_module = THIS_MODULE, + .base.cra_flags = CRYPTO_ALG_INTERNAL, +}}; + +static struct simd_aead_alg *p10_simd_aeads[ARRAY_SIZE (gcm_aes_algs)];static int __init p10_init (void ) { -return crypto_register_aead (&gcm_aes_alg); +int ret; + +if (!cpu_has_feature (PPC_FEATURE2_ARCH_3_1 )) +return 0 ; + + ret =simd_register_aeads_compat (gcm_aes_algs, +ARRAY_SIZE (gcm_aes_algs), + p10_simd_aeads); +if (ret) { +simd_unregister_aeads (gcm_aes_algs,ARRAY_SIZE (gcm_aes_algs), + p10_simd_aeads); +return ret; + } +return 0 ; } static void __exit p10_exit(void) { -crypto_unregister_aead (&gcm_aes_alg); +simd_unregister_aeads (gcm_aes_algs,ARRAY_SIZE (gcm_aes_algs), + p10_simd_aeads); } -module_cpu_feature_match (PPC_MODULE_FEATURE_P10 , p10_init); +module_init (p10_init);module_exit (p10_exit);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 92/817 crypto: powerpc/p10-aes-gcm - Add dependency on CRYPTO_SIMDand re-enable CRYPTO_AES_GCM_P10
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Danny Tsen <[email protected]>
[ Upstream commit 8b6c1e466eecab70c2ed686f636d56eda19f4cd6 ]
Added CRYPTO_SIMD for CRYPTO_AES_GCM_P10.
--- arch/powerpc/crypto/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/crypto/Kconfig +1 -1
@@ -107,12 +107,12 @@ config CRYPTO_AES_PPC_SPE config CRYPTO_AES_GCM_P10 tristate "Stitched AES/GCM acceleration support on P10 or later CPU (PPC)" - depends on BROKEN depends on PPC64 && CPU_LITTLE_ENDIAN && VSX select CRYPTO_LIB_AES select CRYPTO_ALGAPI select CRYPTO_AEAD select CRYPTO_SKCIPHER + select CRYPTO_SIMD help AEAD cipher: AES cipher algorithms (FIPS-197) GCM (Galois/Counter Mode) authenticated encryption mode (NIST SP800-38D)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 93/817 crypto: qat/qat_420xx - fix off by one in uof_get_name()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 93a11608fb3720e1bc2b19a2649ac2b49cca1921 ]
This is called from uof_get_name_420xx() where "num_objs" is the ARRAY_SIZE() of fw_objs[]. The > needs to be >= to prevent an out of bounds access.
--- drivers/crypto/intel/qat/qat_420xx/adf_420xx_hw_data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_420xx/adf_420xx_hw_data.c +1 -1
@@ -375,7 +375,7 @@ static const char *uof_get_name(struct adf_accel_dev *accel_dev, u32 obj_num,else id = -EINVAL ; -if (id <0 || id > num_objs) +if (id <0 || id >= num_objs)return NULL ;return fw_objs[id];
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 94/817 crypto: qat/qat_4xxx - fix off by one in uof_get_name()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 475b5098043eef6e72751aadeab687992a5b63d1 ]
The fw_objs[] array has "num_objs" elements so the > needs to be >= to prevent an out of bounds read.
--- drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c +1 -1
@@ -334,7 +334,7 @@ static const char *uof_get_name(struct adf_accel_dev *accel_dev, u32 obj_num,else id = -EINVAL ; -if (id <0 || id > num_objs) +if (id <0 || id >= num_objs)return NULL ;return fw_objs[id];
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 95/817 firmware: google: Unregister driver_info on failure
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yuan Can <[email protected]>
[ Upstream commit 32b0901e141f6d4cf49d820b53eb09b88b1f72f7 ]
When platform_device_register_full() returns error, the gsmi_init() returns without unregister gsmi_driver_info, fix by add missing platform_driver_unregister() when platform_device_register_full() failed.
--- drivers/firmware/google/gsmi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/firmware/google/gsmi.c +4 -2
@@ -918,7 +918,8 @@ static __init int gsmi_init(void) gsmi_dev.pdev =platform_device_register_full (&gsmi_dev_info);if (IS_ERR (gsmi_dev.pdev)) {printk (KERN_ERR "gsmi: unable to register platform device\n" ); -return PTR_ERR (gsmi_dev.pdev); + ret =PTR_ERR (gsmi_dev.pdev); + goto out_unregister; }/* SMI access needs to be serialized */
@@ -1056,10 +1057,11 @@ static __init int gsmi_init(void)gsmi_buf_free (gsmi_dev.name_buf);kmem_cache_destroy (gsmi_dev.mem_pool);platform_device_unregister (gsmi_dev.pdev); -pr_info ("gsmi: failed to load: %d\n" , ret); +out_unregister:#ifdef CONFIG_PM platform_driver_unregister (&gsmi_driver_info);#endif +pr_info ("gsmi: failed to load: %d\n" , ret);return ret; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 96/817 EDAC/bluefield: Fix potential integer overflow
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Thompson <[email protected]>
[ Upstream commit 1fe774a93b46bb029b8f6fa9d1f25affa53f06c6 ]
The 64-bit argument for the "get DIMM info" SMC call consists of mem_ctrl_idx left-shifted 16 bits and OR-ed with DIMM index. With mem_ctrl_idx defined as 32-bits wide the left-shift operation truncates the upper 16 bits of information during the calculation of the SMC argument.
The mem_ctrl_idx stack variable must be defined as 64-bits wide to prevent any potential integer overflow, i.e. loss of data from upper 16 bits.
--- drivers/edac/bluefield_edac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/edac/bluefield_edac.c +1 -1
@@ -180,7 +180,7 @@ static void bluefield_edac_check(struct mem_ctl_info *mci)static void bluefield_edac_init_dimms (struct mem_ctl_info *mci) {struct bluefield_edac_priv *priv = mci->pvt_info; -int mem_ctrl_idx = mci->mc_idx; +u64 mem_ctrl_idx = mci->mc_idx;struct dimm_info *dimm;u64 smc_info, smc_arg;int is_empty =1 , i;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 97/817 crypto: qat - remove faulty arbiter config reset
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ahsan Atta <[email protected]>
[ Upstream commit 70199359902f1c7187dcb28a1be679a7081de7cc ]
Resetting the service arbiter config can cause potential issues related to response ordering and ring flow control check in the event of AER or device hang. This is because it results in changing the default response ring size from 32 bytes to 16 bytes. The service arbiter config reset also disables response ring flow control check. Thus, by removing this reset we can prevent the service arbiter from being configured inappropriately, which leads to undesired device behaviour in the event of errors.
--- drivers/crypto/intel/qat/qat_common/adf_hw_arbiter.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/crypto/intel/qat/qat_common/adf_hw_arbiter.c +0 -4
@@ -90,10 +90,6 @@ void adf_exit_arb(struct adf_accel_dev *accel_dev) hw_data->get_arb_info (&info); -/* Reset arbiter configuration */ -for (i =0 ; i <ADF_ARB_NUM ; i++) -WRITE_CSR_ARB_SARCONFIG (csr, arb_off, i,0 ); -/* Unmap worker threads to service arbiters */ for (i =0 ; i < hw_data->num_engines; i++)WRITE_CSR_ARB_WT2SAM (csr, arb_off, wt_off, i,0 );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 98/817 thermal: core: Initialize thermal zones before registering them
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 662f920f7e390db5d1a6792a2b0ffa59b6c962fc ]
Since user space can start interacting with a new thermal zone as soon as device_register() called by thermal_zone_device_register_with_trips() returns, it is better to initialize the thermal zone before calling device_register() on it.
--- drivers/thermal/thermal_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/thermal/thermal_core.c +1 -1
@@ -1498,6 +1498,7 @@ thermal_zone_device_register_with_trips(const char *type,thermal_zone_destroy_device_groups (tz); goto remove_id; } +thermal_zone_device_init (tz); result =device_register (&tz->device);if (result) goto release_device;
@@ -1543,7 +1544,6 @@ thermal_zone_device_register_with_trips(const char *type,mutex_unlock (&thermal_list_lock); -thermal_zone_device_init (tz);/* Update the new thermal zone and mark it as already updated. */ if (atomic_cmpxchg (&tz->need_update,1 ,0 ))thermal_zone_device_update (tz,THERMAL_EVENT_UNSPECIFIED );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 99/817 thermal: core: Drop thermal_zone_device_is_enabled()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 54fccad63ec88924db828df6fc0648930bccf345 ]
There are only two callers of thermal_zone_device_is_enabled() and one of them call is under the zone lock and the other one uses lockdep_assert_held() on that lock. Thus the lockdep_assert_held() in thermal_zone_device_is_enabled() is redundant and it could be dropped, but then the function would merely become a wrapper around a simple tz->mode check that is more convenient to do directly.
Accordingly, drop thermal_zone_device_is_enabled() altogether and update its callers to check tz->mode directly as appropriate.
While at it, combine the tz->mode and tz->suspended checks in __thermal_zone_device_update() because they are of a similar category and if any of them evaluates to "true", the outcome is the same.
No intentinal functional impact.
Stable-dep-of: 7837fa8115e0 ("thermal: core: Mark thermal zones as initializing to start with")
--- drivers/thermal/thermal_core.c | 12 +----------- drivers/thermal/thermal_core.h | 3 --- drivers/thermal/thermal_sysfs.c | 2 +- 3 files changed, 2 insertions(+), 15 deletions(-)
drivers/thermal/thermal_core.c +1 -11
@@ -553,10 +553,7 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz,LIST_HEAD (way_up_list);int temp, ret; -if (tz->suspended) -return ; - -if (!thermal_zone_device_is_enabled (tz)) +if (tz->suspended || tz->mode !=THERMAL_DEVICE_ENABLED )return ; ret =__thermal_zone_get_temp (tz, &temp);
@@ -651,13 +648,6 @@ int thermal_zone_device_disable(struct thermal_zone_device *tz) }EXPORT_SYMBOL_GPL (thermal_zone_device_disable); -int thermal_zone_device_is_enabled (struct thermal_zone_device *tz) -{ -lockdep_assert_held (&tz->lock); - -return tz->mode ==THERMAL_DEVICE_ENABLED ; -} -static bool thermal_zone_is_present (struct thermal_zone_device *tz) {return !list_empty (&tz->node);
drivers/thermal/thermal_core.h +0 -3
@@ -293,7 +293,4 @@ thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev, unsigned long new_state) {}#endif /* CONFIG_THERMAL_STATISTICS */ -/* device tree support */ -int thermal_zone_device_is_enabled (struct thermal_zone_device *tz); -#endif /* __THERMAL_CORE_H__ */
drivers/thermal/thermal_sysfs.c +1 -1
@@ -53,7 +53,7 @@ mode_show(struct device *dev, struct device_attribute *attr, char *buf)int enabled;mutex_lock (&tz->lock); - enabled =thermal_zone_device_is_enabled (tz); + enabled = tz->mode ==THERMAL_DEVICE_ENABLED ;mutex_unlock (&tz->lock);return sprintf (buf,"%s\n" , enabled ?"enabled" :"disabled" );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 100/817 thermal: core: Rearrange PM notification code
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 7ddca5885718c2683d75689aa065c9a3bb317e5a ]
Move the code run for each thermal zone by the thermal PM notify handler to separate functions.
This will help to make some subsequent changes look somewhat more straightforward, among other things.
No intentional functional impact.
Stable-dep-of: 7837fa8115e0 ("thermal: core: Mark thermal zones as initializing to start with")
--- drivers/thermal/thermal_core.c | 88 ++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 42 deletions(-)
drivers/thermal/thermal_core.c +46 -42
@@ -1706,6 +1706,48 @@ static void thermal_zone_device_resume(struct work_struct *work)mutex_unlock (&tz->lock); } +static void thermal_zone_pm_prepare (struct thermal_zone_device *tz) +{ +mutex_lock (&tz->lock); + +if (tz->resuming) { +/* +* thermal_zone_device_resume() queued up for this zone has not +* acquired the lock yet, so release it to let the function run +* and wait util it has done the work. +*/ +mutex_unlock (&tz->lock); + +wait_for_completion (&tz->resume); + +mutex_lock (&tz->lock); + } + + tz->suspended = true; + +mutex_unlock (&tz->lock); +} + +static void thermal_zone_pm_complete (struct thermal_zone_device *tz) +{ +mutex_lock (&tz->lock); + +cancel_delayed_work (&tz->poll_queue); + +reinit_completion (&tz->resume); + tz->resuming = true; + +/* +* Replace the work function with the resume one, which will restore the +* original work function and schedule the polling work if needed. +*/ +INIT_DELAYED_WORK (&tz->poll_queue, thermal_zone_device_resume); +/* Queue up the work without a delay. */ +mod_delayed_work (system_freezable_power_efficient_wq, &tz->poll_queue,0 ); + +mutex_unlock (&tz->lock); +} +static int thermal_pm_notify (struct notifier_block *nb,unsigned long mode,void *_unused) {
@@ -1717,27 +1759,8 @@ static int thermal_pm_notify(struct notifier_block *nb,case PM_SUSPEND_PREPARE :mutex_lock (&thermal_list_lock); -list_for_each_entry (tz, &thermal_tz_list, node) { -mutex_lock (&tz->lock); - -if (tz->resuming) { -/* -* thermal_zone_device_resume() queued up for -* this zone has not acquired the lock yet, so -* release it to let the function run and wait -* util it has done the work. -*/ -mutex_unlock (&tz->lock); - -wait_for_completion (&tz->resume); - -mutex_lock (&tz->lock); - } - - tz->suspended = true; - -mutex_unlock (&tz->lock); - } +list_for_each_entry (tz, &thermal_tz_list, node) +thermal_zone_pm_prepare (tz);mutex_unlock (&thermal_list_lock);break ;
@@ -1746,27 +1769,8 @@ static int thermal_pm_notify(struct notifier_block *nb,case PM_POST_SUSPEND :mutex_lock (&thermal_list_lock); -list_for_each_entry (tz, &thermal_tz_list, node) { -mutex_lock (&tz->lock); - -cancel_delayed_work (&tz->poll_queue); - -reinit_completion (&tz->resume); - tz->resuming = true; - -/* -* Replace the work function with the resume one, which -* will restore the original work function and schedule -* the polling work if needed. -*/ -INIT_DELAYED_WORK (&tz->poll_queue, - thermal_zone_device_resume); -/* Queue up the work without a delay. */ -mod_delayed_work (system_freezable_power_efficient_wq, - &tz->poll_queue,0 ); - -mutex_unlock (&tz->lock); - } +list_for_each_entry (tz, &thermal_tz_list, node) +thermal_zone_pm_complete (tz);mutex_unlock (&thermal_list_lock);break ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 101/817 thermal: core: Represent suspend-related thermal zone flags as bits
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 26c9ab8090cda1eb3d42f491cc32d227404897da ]
Instead of using two separate fields in struct thermal_zone_device for representing flags related to thermal zone suspend, represent them explicitly as bits in one u8 "state" field.
Subsequently, that field will be used for addressing race conditions related to thermal zone initialization and exit.
No intentional functional impact.
Stable-dep-of: 7837fa8115e0 ("thermal: core: Mark thermal zones as initializing to start with")
--- drivers/thermal/thermal_core.c | 11 +++++------ drivers/thermal/thermal_core.h | 11 +++++++---- 2 files changed, 12 insertions(+), 10 deletions(-)
drivers/thermal/thermal_core.c +5 -6
@@ -553,7 +553,7 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz,LIST_HEAD (way_up_list);int temp, ret; -if (tz->suspended || tz->mode !=THERMAL_DEVICE_ENABLED ) +if (tz->state !=TZ_STATE_READY || tz->mode !=THERMAL_DEVICE_ENABLED )return ; ret =__thermal_zone_get_temp (tz, &temp);
@@ -1693,7 +1693,7 @@ static void thermal_zone_device_resume(struct work_struct *work)mutex_lock (&tz->lock); - tz->suspended = false; + tz->state &= ~(TZ_STATE_FLAG_SUSPENDED |TZ_STATE_FLAG_RESUMING );thermal_debug_tz_resume (tz);thermal_zone_device_init (tz);
@@ -1701,7 +1701,6 @@ static void thermal_zone_device_resume(struct work_struct *work)__thermal_zone_device_update (tz,THERMAL_TZ_RESUME );complete (&tz->resume); - tz->resuming = false;mutex_unlock (&tz->lock); }
@@ -1710,7 +1709,7 @@ static void thermal_zone_pm_prepare(struct thermal_zone_device *tz) {mutex_lock (&tz->lock); -if (tz->resuming) { +if (tz->state &TZ_STATE_FLAG_RESUMING ) {/* * thermal_zone_device_resume() queued up for this zone has not * acquired the lock yet, so release it to let the function run
@@ -1723,7 +1722,7 @@ static void thermal_zone_pm_prepare(struct thermal_zone_device *tz)mutex_lock (&tz->lock); } - tz->suspended = true; + tz->state |=TZ_STATE_FLAG_SUSPENDED ;mutex_unlock (&tz->lock); }
@@ -1735,7 +1734,7 @@ static void thermal_zone_pm_complete(struct thermal_zone_device *tz)cancel_delayed_work (&tz->poll_queue);reinit_completion (&tz->resume); - tz->resuming = true; + tz->state |=TZ_STATE_FLAG_RESUMING ;/* * Replace the work function with the resume one, which will restore the
drivers/thermal/thermal_core.h +7 -4
@@ -61,6 +61,11 @@ struct thermal_governor {struct list_head governor_list; }; +#define TZ_STATE_FLAG_SUSPENDED BIT(0) +#define TZ_STATE_FLAG_RESUMING BIT(1) + +#define TZ_STATE_READY 0 +/** * struct thermal_zone_device - structure for a thermal zone * @id: unique id number for each thermal zone
@@ -100,8 +105,7 @@ struct thermal_governor {* @node: node in thermal_tz_list (in thermal_core.c) * @poll_queue: delayed work for polling * @notify_event: Last notification event -* @suspended: thermal zone suspend indicator -* @resuming: indicates whether or not thermal zone resume is in progress +* @state: current state of the thermal zone * @trips: array of struct thermal_trip objects */ struct thermal_zone_device {
@@ -134,8 +138,7 @@ struct thermal_zone_device {struct list_head node;struct delayed_work poll_queue;enum thermal_notify_event notify_event; -bool suspended; -bool resuming; +u8 state;#ifdef CONFIG_THERMAL_DEBUGFS struct thermal_debugfs *debugfs;#endif
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 102/817 thermal: core: Mark thermal zones as initializing to start with
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 7837fa8115e0273d3cfbd3d17b3f7b7291ceac08 ]
After thermal_zone_device_register_with_trips() has called device_register() and it has registered the new thermal zone device with the driver core, user space may access its sysfs attributes and, among other things, it may enable the thermal zone before it is ready.
To address this, introduce a new thermal zone state flag for initialization and set it before calling device_register() in thermal_zone_device_register_with_trips(). This causes __thermal_zone_device_update() to return early until the new flag is cleared.
To clear it when the thermal zone is ready, introduce a new function called thermal_zone_init_complete() that will also invoke __thermal_zone_device_update() after clearing that flag (both under the thernal zone lock) and make thermal_zone_device_register_with_trips() call the new function instead of checking need_update and calling thermal_zone_device_update() when it is set.
After this change, if user space enables the thermal zone prematurely, __thermal_zone_device_update() will return early for it until thermal_zone_init_complete() is called. In turn, if the thermal zone is not enabled by user space before thermal_zone_init_complete() is called, the __thermal_zone_device_update() call in it will return early because the thermal zone has not been enabled yet, but that function will be invoked again by thermal_zone_device_set_mode() when the thermal zone is enabled and it will not return early this time.
The checking of need_update is not necessary any more because the __thermal_zone_device_update() calls potentially triggered by cooling device binding take place before calling thermal_zone_init_complete(), so they all will return early, which means that thermal_zone_init_complete() must call __thermal_zone_device_update() in case the thermal zone is enabled prematurely by user space.
--- drivers/thermal/thermal_core.c | 16 +++++++++++++--- drivers/thermal/thermal_core.h | 1 + 2 files changed, 14 insertions(+), 3 deletions(-)
drivers/thermal/thermal_core.c +13 -3
@@ -1351,6 +1351,16 @@ int thermal_zone_get_crit_temp(struct thermal_zone_device *tz, int *temp) }EXPORT_SYMBOL_GPL (thermal_zone_get_crit_temp); +static void thermal_zone_init_complete (struct thermal_zone_device *tz) +{ +mutex_lock (&tz->lock); + + tz->state &= ~TZ_STATE_FLAG_INIT ; +__thermal_zone_device_update (tz,THERMAL_EVENT_UNSPECIFIED ); + +mutex_unlock (&tz->lock); +} +/** * thermal_zone_device_register_with_trips() - register a new thermal zone device * @type: the thermal zone device type
@@ -1474,6 +1484,8 @@ thermal_zone_device_register_with_trips(const char *type, tz->passive_delay_jiffies =msecs_to_jiffies (passive_delay); tz->recheck_delay_jiffies =THERMAL_RECHECK_DELAY ; + tz->state =TZ_STATE_FLAG_INIT ; +/* sys I/F */ /* Add nodes that are always present via .groups */ result =thermal_zone_create_device_groups (tz);
@@ -1534,9 +1546,7 @@ thermal_zone_device_register_with_trips(const char *type,mutex_unlock (&thermal_list_lock); -/* Update the new thermal zone and mark it as already updated. */ -if (atomic_cmpxchg (&tz->need_update,1 ,0 )) -thermal_zone_device_update (tz,THERMAL_EVENT_UNSPECIFIED ); +thermal_zone_init_complete (tz);thermal_notify_tz_create (tz);
drivers/thermal/thermal_core.h +1 -0
@@ -63,6 +63,7 @@ struct thermal_governor {#define TZ_STATE_FLAG_SUSPENDED BIT(0)#define TZ_STATE_FLAG_RESUMING BIT(1) +#define TZ_STATE_FLAG_INIT BIT(2)#define TZ_STATE_READY 0
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 103/817 thermal: core: Fix race between zone registration and system suspend
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit cdf771ab476bd9acb0948f3088a277d5c3cacc6b ]
If the registration of a thermal zone takes place at the time when system suspend is started, thermal_pm_notify() can run before the new thermal zone is added to thermal_tz_list and its "suspended" flag will not be set. Consequently, if __thermal_zone_device_update() is called for that thermal zone, it will not return early as expected which may cause some destructive interference with the system suspend or resume flow to occur.
To avoid that, make thermal_zone_init_complete() introduced previously set the "suspended" flag for new thermal zones if it runs during system suspend or resume.
--- drivers/thermal/thermal_core.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
drivers/thermal/thermal_core.c +16 -2
@@ -40,6 +40,8 @@ static DEFINE_MUTEX(thermal_governor_lock);static struct thermal_governor *def_governor; +static bool thermal_pm_suspended; +/* * Governor section: set of functions to handle thermal governors *
@@ -1356,6 +1358,14 @@ static void thermal_zone_init_complete(struct thermal_zone_device *tz)mutex_lock (&tz->lock); tz->state &= ~TZ_STATE_FLAG_INIT ; +/* +* If system suspend or resume is in progress at this point, the +* new thermal zone needs to be marked as suspended because +* thermal_pm_notify() has run already. +*/ +if (thermal_pm_suspended) + tz->state |=TZ_STATE_FLAG_SUSPENDED ; +__thermal_zone_device_update (tz,THERMAL_EVENT_UNSPECIFIED );mutex_unlock (&tz->lock);
@@ -1544,10 +1554,10 @@ thermal_zone_device_register_with_trips(const char *type, } } -mutex_unlock (&thermal_list_lock); -thermal_zone_init_complete (tz); +mutex_unlock (&thermal_list_lock); +thermal_notify_tz_create (tz);thermal_debug_tz_add (tz);
@@ -1768,6 +1778,8 @@ static int thermal_pm_notify(struct notifier_block *nb,case PM_SUSPEND_PREPARE :mutex_lock (&thermal_list_lock); + thermal_pm_suspended = true; +list_for_each_entry (tz, &thermal_tz_list, node)thermal_zone_pm_prepare (tz);
@@ -1778,6 +1790,8 @@ static int thermal_pm_notify(struct notifier_block *nb,case PM_POST_SUSPEND :mutex_lock (&thermal_list_lock); + thermal_pm_suspended = false; +list_for_each_entry (tz, &thermal_tz_list, node)thermal_zone_pm_complete (tz);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 104/817 EDAC/fsl_ddr: Fix bad bit shift operations
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Priyanka Singh <[email protected]>
[ Upstream commit 9ec22ac4fe766c6abba845290d5139a3fbe0153b ]
Fix undefined behavior caused by left-shifting a negative value in the expression:
cap_high ^ (1 << (bad_data_bit - 32))
The variable bad_data_bit ranges from 0 to 63. When it is less than 32, bad_data_bit - 32 becomes negative, and left-shifting by a negative value in C is undefined behavior.
Fix this by combining cap_high and cap_low into a 64-bit variable.
[ bp: Massage commit message, simplify error bits handling. ]
--- drivers/edac/fsl_ddr_edac.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
drivers/edac/fsl_ddr_edac.c +13 -9
@@ -328,21 +328,25 @@ static void fsl_mc_check(struct mem_ctl_info *mci)* TODO: Add support for 32-bit wide buses */ if ((err_detect &DDR_EDE_SBE ) && (bus_width ==64 )) { +u64 cap = (u64 )cap_high <<32 | cap_low; +u32 s = syndrome; +sbe_ecc_decode (cap_high, cap_low, syndrome, &bad_data_bit, &bad_ecc_bit); -if (bad_data_bit !=-1 ) -fsl_mc_printk (mci,KERN_ERR , -"Faulty Data bit: %d\n" , bad_data_bit); -if (bad_ecc_bit !=-1 ) -fsl_mc_printk (mci,KERN_ERR , -"Faulty ECC bit: %d\n" , bad_ecc_bit); +if (bad_data_bit >=0 ) { +fsl_mc_printk (mci,KERN_ERR ,"Faulty Data bit: %d\n" , bad_data_bit); + cap ^=1ULL << bad_data_bit; + } + +if (bad_ecc_bit >=0 ) { +fsl_mc_printk (mci,KERN_ERR ,"Faulty ECC bit: %d\n" , bad_ecc_bit); + s ^=1 << bad_ecc_bit; + }fsl_mc_printk (mci,KERN_ERR ,"Expected Data / ECC:\t%#8.8x_%08x / %#2.2x\n" , - cap_high ^ (1 << (bad_data_bit -32 )), - cap_low ^ (1 << bad_data_bit), - syndrome ^ (1 << bad_ecc_bit)); +upper_32_bits (cap),lower_32_bits (cap), s); } fsl_mc_printk(mci, KERN_ERR,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 105/817 EDAC/skx_common: Differentiate memory error sources
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qiuxu Zhuo <[email protected]>
[ Upstream commit 2397f795735219caa9c2fe61e7bcdd0652e670d3 ]
The current skx_common determines whether the memory error source is the near memory of the 2LM system and then retrieves the decoded error results from the ADXL components (near-memory vs. far-memory) accordingly.
However, some memory controllers may have limitations in correctly reporting the memory error source, leading to the retrieval of incorrect decoded parts from the ADXL.
To address these limitations, instead of simply determining whether the memory error is from the near memory of the 2LM system, it is necessary to distinguish the memory error source details as follows:
Memory error from the near memory of the 2LM system. Memory error from the far memory of the 2LM system. Memory error from the 1LM system.
Not a memory error.
This will enable the i10nm_edac driver to take appropriate actions for those memory controllers that have limitations in reporting the memory error source.
--- drivers/edac/skx_common.c | 34 ++++++++++++++++------------------ drivers/edac/skx_common.h | 7 +++++++ 2 files changed, 23 insertions(+), 18 deletions(-)
drivers/edac/skx_common.c +16 -18
@@ -119,7 +119,7 @@ void skx_adxl_put(void) }EXPORT_SYMBOL_GPL (skx_adxl_put); -static bool skx_adxl_decode (struct decoded_addr *res,bool error_in_1st_level_mem) +static bool skx_adxl_decode (struct decoded_addr *res,enum error_source err_src) {struct skx_dev *d;int i, len =0 ;
@@ -136,7 +136,7 @@ static bool skx_adxl_decode(struct decoded_addr *res, bool error_in_1st_level_me } res->socket = (int )adxl_values[component_indices[INDEX_SOCKET ]]; -if (error_in_1st_level_mem) { +if (err_src ==ERR_SRC_2LM_NM ) { res->imc = (adxl_nm_bitmap &BIT_NM_MEMCTRL ) ? (int )adxl_values[component_indices[INDEX_NM_MEMCTRL ]] :-1 ; res->channel = (adxl_nm_bitmap & BIT_NM_CHANNEL) ?
@@ -620,31 +620,27 @@ static void skx_mce_output_error(struct mem_ctl_info *mci, optype, skx_msg); } -static bool skx_error_in_1st_level_mem (const struct mce *m) +static enum error_source skx_error_source (const struct mce *m) { -u32 errcode; +u32 errcode =GET_BITFIELD (m->status,0 ,15 ) &MCACOD_MEM_ERR_MASK ; -if (!skx_mem_cfg_2lm) -return false; - - errcode =GET_BITFIELD (m->status,0 ,15 ) &MCACOD_MEM_ERR_MASK ; - -return errcode ==MCACOD_EXT_MEM_ERR ; -} +if (errcode !=MCACOD_MEM_CTL_ERR && errcode !=MCACOD_EXT_MEM_ERR ) +return ERR_SRC_NOT_MEMORY ; -static bool skx_error_in_mem (const struct mce *m) -{ -u32 errcode; +if (!skx_mem_cfg_2lm) +return ERR_SRC_1LM ; - errcode =GET_BITFIELD (m->status,0 ,15 ) &MCACOD_MEM_ERR_MASK ; +if (errcode ==MCACOD_EXT_MEM_ERR ) +return ERR_SRC_2LM_NM ; -return (errcode ==MCACOD_MEM_CTL_ERR || errcode ==MCACOD_EXT_MEM_ERR ); +return ERR_SRC_2LM_FM ; }int skx_mce_check_error (struct notifier_block *nb,unsigned long val,void *data) {struct mce *mce = (struct mce *)data; +enum error_source err_src;struct decoded_addr res;struct mem_ctl_info *mci;char *type;
@@ -652,8 +648,10 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val,if (mce->kflags &MCE_HANDLED_CEC )return NOTIFY_DONE ; + err_src =skx_error_source (mce); +/* Ignore unless this is memory related with an address */ -if (!skx_error_in_mem (mce) || !(mce->status &MCI_STATUS_ADDRV )) +if (err_src ==ERR_SRC_NOT_MEMORY || !(mce->status &MCI_STATUS_ADDRV ))return NOTIFY_DONE ;memset (&res,0 ,sizeof (res));
@@ -667,7 +665,7 @@ int skx_mce_check_error(struct notifier_block *nb, unsigned long val,/* Try driver decoder first */ if (!(driver_decode &&driver_decode (&res))) {/* Then try firmware decoder (ACPI DSM methods) */ -if (!(adxl_component_count &&skx_adxl_decode (&res,skx_error_in_1st_level_mem (mce)))) +if (!(adxl_component_count &&skx_adxl_decode (&res, err_src)))return NOTIFY_DONE ; }
drivers/edac/skx_common.h +7 -0
@@ -146,6 +146,13 @@ enum { INDEX_MAX }; +enum error_source { +ERR_SRC_1LM , +ERR_SRC_2LM_NM , +ERR_SRC_2LM_FM , +ERR_SRC_NOT_MEMORY , +}; +#define BIT_NM_MEMCTRL BIT_ULL(INDEX_NM_MEMCTRL)#define BIT_NM_CHANNEL BIT_ULL(INDEX_NM_CHANNEL)#define BIT_NM_DIMM BIT_ULL(INDEX_NM_DIMM)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 106/817 EDAC/{skx_common,i10nm}: Fix incorrect far-memory error source indicator
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qiuxu Zhuo <[email protected]>
[ Upstream commit a36667037a0c0e36c59407f8ae636295390239a5 ]
The Granite Rapids CPUs with Flat2LM memory configurations may mistakenly report near-memory errors as far-memory errors, resulting in the invalid decoded ADXL results:
EDAC skx: Bad imc -1
Fix this incorrect far-memory error source indicator by prefetching the decoded far-memory controller ID, and adjust the error source indicator to near-memory if the far-memory controller ID is invalid.
--- drivers/edac/i10nm_base.c | 1 + drivers/edac/skx_common.c | 23 +++++++++++++++++++++++ drivers/edac/skx_common.h | 1 + 3 files changed, 25 insertions(+)
drivers/edac/i10nm_base.c +1 -0
@@ -1089,6 +1089,7 @@ static int __init i10nm_init(void)return -ENODEV ; cfg = (struct res_config *)id->driver_data; +skx_set_res_cfg (cfg); res_cfg = cfg; rc =skx_get_hi_lo (0x09a2 , off, &tolm, &tohm);
drivers/edac/skx_common.c +23 -0
@@ -47,6 +47,7 @@ static skx_show_retry_log_f skx_show_retry_rd_err_log;static u64 skx_tolm, skx_tohm;static LIST_HEAD (dev_edac_list);static bool skx_mem_cfg_2lm; +static struct res_config *skx_res_cfg;int skx_adxl_get (void ) {
@@ -135,6 +136,22 @@ static bool skx_adxl_decode(struct decoded_addr *res, enum error_source err_src)return false; } +/* +* GNR with a Flat2LM memory configuration may mistakenly classify +* a near-memory error(DDR5) as a far-memory error(CXL), resulting +* in the incorrect selection of decoded ADXL components. +* To address this, prefetch the decoded far-memory controller ID +* and adjust the error source to near-memory if the far-memory +* controller ID is invalid. +*/ +if (skx_res_cfg && skx_res_cfg->type ==GNR && err_src ==ERR_SRC_2LM_FM ) { + res->imc = (int )adxl_values[component_indices[INDEX_MEMCTRL ]]; +if (res->imc ==-1 ) { + err_src =ERR_SRC_2LM_NM ; +edac_dbg (0 ,"Adjust the error source to near-memory.\n" ); + } + } + res->socket = (int )adxl_values[component_indices[INDEX_SOCKET ]];if (err_src ==ERR_SRC_2LM_NM ) { res->imc = (adxl_nm_bitmap & BIT_NM_MEMCTRL) ?
@@ -191,6 +208,12 @@ void skx_set_mem_cfg(bool mem_cfg_2lm) }EXPORT_SYMBOL_GPL (skx_set_mem_cfg); +void skx_set_res_cfg (struct res_config *cfg) +{ + skx_res_cfg = cfg; +} +EXPORT_SYMBOL_GPL (skx_set_res_cfg); +void skx_set_decode (skx_decode_f decode,skx_show_retry_log_f show_retry_log) { driver_decode = decode;
drivers/edac/skx_common.h +1 -0
@@ -241,6 +241,7 @@ int skx_adxl_get(void);void skx_adxl_put (void );void skx_set_decode (skx_decode_f decode,skx_show_retry_log_f show_retry_log);void skx_set_mem_cfg (bool mem_cfg_2lm); +void skx_set_res_cfg (struct res_config *cfg);int skx_get_src_id (struct skx_dev *d,int off,u8 *id);int skx_get_node_id (struct skx_dev *d,u8 *id);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 107/817 crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yi Yang <[email protected]>
[ Upstream commit 662f2f13e66d3883b9238b0b96b17886179e60e2 ]
Since commit 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for PADATA_RESET"), the pcrypt encryption and decryption operations return -EAGAIN when the CPU goes online or offline. In alg_test(), a WARN is generated when pcrypt_aead_decrypt() or pcrypt_aead_encrypt() returns -EAGAIN, the unnecessary panic will occur when panic_on_warn set 1. Fix this issue by calling crypto layer directly without parallelization in that case.
--- crypto/pcrypt.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
crypto/pcrypt.c +8 -4
@@ -117,8 +117,10 @@ static int pcrypt_aead_encrypt(struct aead_request *req) err =padata_do_parallel (ictx->psenc, padata, &ctx->cb_cpu);if (!err)return -EINPROGRESS ; -if (err == -EBUSY ) -return -EAGAIN ; +if (err == -EBUSY ) { +/* try non-parallel mode */ +return crypto_aead_encrypt (creq); + }return err; }
@@ -166,8 +168,10 @@ static int pcrypt_aead_decrypt(struct aead_request *req) err =padata_do_parallel (ictx->psdec, padata, &ctx->cb_cpu);if (!err)return -EINPROGRESS ; -if (err == -EBUSY ) -return -EAGAIN ; +if (err == -EBUSY ) { +/* try non-parallel mode */ +return crypto_aead_decrypt (creq); + }return err; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 108/817 crypto: cavium - Fix the if condition to exit loop after timeout
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Everest K.C <[email protected]>
[ Upstream commit 53d91ca76b6c426c546542a44c78507b42008c9e ]
The while loop breaks in the first run because of incorrect if condition. It also causes the statements after the if to appear dead.
Fix this by changing the condition from if(timeout--) to if(!timeout--).
This bug was reported by Coverity Scan.
Report:
CID 1600859: (#1 of 1): Logically dead code (DEADCODE)dead_error_line: Execution cannot reach this statement: udelay(30UL);
--- drivers/crypto/cavium/cpt/cptpf_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/crypto/cavium/cpt/cptpf_main.c +2 -2
@@ -44,7 +44,7 @@ static void cpt_disable_cores(struct cpt_device *cpt, u64 coremask,dev_err (dev,"Cores still busy %llx" , coremask); grp =cpt_read_csr64 (cpt->reg_base,CPTX_PF_EXEC_BUSY (0 )); -if (timeout--) +if (!timeout--)break ;udelay (CSR_DELAY );
@@ -394,7 +394,7 @@ static void cpt_disable_all_cores(struct cpt_device *cpt)dev_err (dev,"Cores still busy" ); grp =cpt_read_csr64 (cpt->reg_base,CPTX_PF_EXEC_BUSY (0 )); -if (timeout--) +if (!timeout--)break ;udelay (CSR_DELAY );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 109/817 cpufreq/amd-pstate: Dont update CPPC request in amd_pstate_cpu_boost_update()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 67c08d303e0a1a5665b3f198037c9fae2d808090 ]
When boost is changed the CPPC value is changed in amd_pstate_cpu_boost_update() but then changed again when refresh_frequency_limits() and all it's callbacks occur. The first is a pointless write, so instead just update the limits for the policy and let the policy refresh anchor everything properly.
--- drivers/cpufreq/amd-pstate.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-)
drivers/cpufreq/amd-pstate.c +1 -23
@@ -698,34 +698,12 @@ static void amd_pstate_adjust_perf(unsigned int cpu,static int amd_pstate_cpu_boost_update (struct cpufreq_policy *policy,bool on) {struct amd_cpudata *cpudata = policy->driver_data; -struct cppc_perf_ctrls perf_ctrls; -u32 highest_perf, nominal_perf, nominal_freq, max_freq; +u32 nominal_freq, max_freq;int ret =0 ; - highest_perf =READ_ONCE (cpudata->highest_perf); - nominal_perf =READ_ONCE (cpudata->nominal_perf); nominal_freq =READ_ONCE (cpudata->nominal_freq); max_freq =READ_ONCE (cpudata->max_freq); -if (boot_cpu_has (X86_FEATURE_CPPC )) { -u64 value =READ_ONCE (cpudata->cppc_req_cached); - - value &= ~GENMASK_ULL (7 ,0 ); - value |= on ? highest_perf : nominal_perf; -WRITE_ONCE (cpudata->cppc_req_cached, value); - -wrmsrl_on_cpu (cpudata->cpu,MSR_AMD_CPPC_REQ , value); - }else { - perf_ctrls.max_perf = on ? highest_perf : nominal_perf; - ret =cppc_set_perf (cpudata->cpu, &perf_ctrls); -if (ret) { -cpufreq_cpu_release (policy); -pr_debug ("Failed to set max perf on CPU:%d. ret:%d\n" , - cpudata->cpu, ret); -return ret; - } - } -if (on) policy->cpuinfo.max_freq = max_freq;else if (policy->cpuinfo.max_freq > nominal_freq *1000 )
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 110/817 amd-pstate: Set min_perf to nominal_perf for active mode performance gov
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gautham R. Shenoy <[email protected]>
[ Upstream commit 0c411b39e4f4ce8861301fa201cb4f817751311e ]
The amd-pstate driver sets CPPC_REQ.min_perf to CPPC_REQ.max_perf when in active mode with performance governor. Typically CPPC_REQ.max_perf is set to CPPC.highest_perf. This causes frequency throttling on power-limited platforms which causes performance regressions on certain classes of workloads.
Hence, set the CPPC_REQ.min_perf to the CPPC.nominal_perf or CPPC_REQ.max_perf, whichever is lower of the two.
--- drivers/cpufreq/amd-pstate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/cpufreq/amd-pstate.c +1 -1
@@ -1584,7 +1584,7 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy) value =READ_ONCE (cpudata->cppc_req_cached);if (cpudata->policy ==CPUFREQ_POLICY_PERFORMANCE ) - min_perf = max_perf; + min_perf =min (cpudata->nominal_perf, max_perf);/* Initial min/max values for CPPC Performance Controls Register */ value &= ~AMD_CPPC_MIN_PERF (~0L );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 111/817 crypto: hisilicon/qm - disable same error report before resetting
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Weili Qian <[email protected]>
[ Upstream commit c418ba6baca3ae10ffaf47b0803d2a9e6bf1af96 ]
If an error indicating that the device needs to be reset is reported, disable the error reporting before device reset is complete, enable the error reporting after the reset is complete to prevent the same error from being reported repeatedly.
--- drivers/crypto/hisilicon/hpre/hpre_main.c | 35 ++++++++++++++--- drivers/crypto/hisilicon/qm.c | 47 +++++++---------------- drivers/crypto/hisilicon/sec2/sec_main.c | 35 ++++++++++++++--- drivers/crypto/hisilicon/zip/zip_main.c | 35 ++++++++++++++--- include/linux/hisi_acc_qm.h | 8 +++- 5 files changed, 110 insertions(+), 50 deletions(-)
drivers/crypto/hisilicon/hpre/hpre_main.c +30 -5
@@ -1280,11 +1280,15 @@ static u32 hpre_get_hw_err_status(struct hisi_qm *qm)static void hpre_clear_hw_err_status (struct hisi_qm *qm,u32 err_sts) { -u32 nfe; -writel (err_sts, qm->io_base +HPRE_HAC_SOURCE_INT ); - nfe =hisi_qm_get_hw_info (qm, hpre_basic_info,HPRE_NFE_MASK_CAP , qm->cap_ver); -writel (nfe, qm->io_base +HPRE_RAS_NFE_ENB ); +} + +static void hpre_disable_error_report (struct hisi_qm *qm,u32 err_type) +{ +u32 nfe_mask; + + nfe_mask =hisi_qm_get_hw_info (qm, hpre_basic_info,HPRE_NFE_MASK_CAP , qm->cap_ver); +writel (nfe_mask & (~err_type), qm->io_base +HPRE_RAS_NFE_ENB ); }static void hpre_open_axi_master_ooo (struct hisi_qm *qm)
@@ -1298,6 +1302,27 @@ static void hpre_open_axi_master_ooo(struct hisi_qm *qm) qm->io_base + HPRE_AM_OOO_SHUTDOWN_ENB); } +static enum acc_err_result hpre_get_err_result (struct hisi_qm *qm) +{ +u32 err_status; + + err_status =hpre_get_hw_err_status (qm); +if (err_status) { +if (err_status & qm->err_info.ecc_2bits_mask) + qm->err_status.is_dev_ecc_mbit = true; +hpre_log_hw_error (qm, err_status); + +if (err_status & qm->err_info.dev_reset_mask) { +/* Disable the same error reporting until device is recovered. */ +hpre_disable_error_report (qm, err_status); +return ACC_ERR_NEED_RESET ; + } +hpre_clear_hw_err_status (qm, err_status); + } + +return ACC_ERR_RECOVERED ; +} +static void hpre_err_info_init (struct hisi_qm *qm) {struct hisi_qm_err_info *err_info = &qm->err_info;
@@ -1324,12 +1349,12 @@ static const struct hisi_qm_err_ini hpre_err_ini = { .hw_err_disable = hpre_hw_error_disable, .get_dev_hw_err_status = hpre_get_hw_err_status, .clear_dev_hw_err_status = hpre_clear_hw_err_status, - .log_dev_hw_err = hpre_log_hw_error, .open_axi_master_ooo = hpre_open_axi_master_ooo, .open_sva_prefetch = hpre_open_sva_prefetch, .close_sva_prefetch = hpre_close_sva_prefetch, .show_last_dfx_regs = hpre_show_last_dfx_regs, .err_info_init = hpre_err_info_init, + .get_err_result = hpre_get_err_result, };static int hpre_pf_probe_init (struct hpre *hpre)
drivers/crypto/hisilicon/qm.c +13 -34
77 lines not on this page · raw message
drivers/crypto/hisilicon/sec2/sec_main.c +30 -5
@@ -1010,11 +1010,15 @@ static u32 sec_get_hw_err_status(struct hisi_qm *qm)static void sec_clear_hw_err_status (struct hisi_qm *qm,u32 err_sts) { -u32 nfe; -writel (err_sts, qm->io_base +SEC_CORE_INT_SOURCE ); - nfe =hisi_qm_get_hw_info (qm, sec_basic_info,SEC_NFE_MASK_CAP , qm->cap_ver); -writel (nfe, qm->io_base +SEC_RAS_NFE_REG ); +} + +static void sec_disable_error_report (struct hisi_qm *qm,u32 err_type) +{ +u32 nfe_mask; + + nfe_mask =hisi_qm_get_hw_info (qm, sec_basic_info,SEC_NFE_MASK_CAP , qm->cap_ver); +writel (nfe_mask & (~err_type), qm->io_base +SEC_RAS_NFE_REG ); }static void sec_open_axi_master_ooo (struct hisi_qm *qm)
@@ -1026,6 +1030,27 @@ static void sec_open_axi_master_ooo(struct hisi_qm *qm)writel (val |SEC_AXI_SHUTDOWN_ENABLE , qm->io_base +SEC_CONTROL_REG ); } +static enum acc_err_result sec_get_err_result (struct hisi_qm *qm) +{ +u32 err_status; + + err_status =sec_get_hw_err_status (qm); +if (err_status) { +if (err_status & qm->err_info.ecc_2bits_mask) + qm->err_status.is_dev_ecc_mbit = true; +sec_log_hw_error (qm, err_status); + +if (err_status & qm->err_info.dev_reset_mask) { +/* Disable the same error reporting until device is recovered. */ +sec_disable_error_report (qm, err_status); +return ACC_ERR_NEED_RESET ; + } +sec_clear_hw_err_status (qm, err_status); + } + +return ACC_ERR_RECOVERED ; +} +static void sec_err_info_init (struct hisi_qm *qm) {struct hisi_qm_err_info *err_info = &qm->err_info;
@@ -1052,12 +1077,12 @@ static const struct hisi_qm_err_ini sec_err_ini = { .hw_err_disable = sec_hw_error_disable, .get_dev_hw_err_status = sec_get_hw_err_status, .clear_dev_hw_err_status = sec_clear_hw_err_status, - .log_dev_hw_err = sec_log_hw_error, .open_axi_master_ooo = sec_open_axi_master_ooo, .open_sva_prefetch = sec_open_sva_prefetch, .close_sva_prefetch = sec_close_sva_prefetch, .show_last_dfx_regs = sec_show_last_dfx_regs, .err_info_init = sec_err_info_init, + .get_err_result = sec_get_err_result, };static int sec_pf_probe_init (struct sec_dev *sec)
drivers/crypto/hisilicon/zip/zip_main.c +30 -5
@@ -1059,11 +1059,15 @@ static u32 hisi_zip_get_hw_err_status(struct hisi_qm *qm)static void hisi_zip_clear_hw_err_status (struct hisi_qm *qm,u32 err_sts) { -u32 nfe; -writel (err_sts, qm->io_base +HZIP_CORE_INT_SOURCE ); - nfe =hisi_qm_get_hw_info (qm, zip_basic_cap_info,ZIP_NFE_MASK_CAP , qm->cap_ver); -writel (nfe, qm->io_base +HZIP_CORE_INT_RAS_NFE_ENB ); +} + +static void hisi_zip_disable_error_report (struct hisi_qm *qm,u32 err_type) +{ +u32 nfe_mask; + + nfe_mask =hisi_qm_get_hw_info (qm, zip_basic_cap_info,ZIP_NFE_MASK_CAP , qm->cap_ver); +writel (nfe_mask & (~err_type), qm->io_base +HZIP_CORE_INT_RAS_NFE_ENB ); }static void hisi_zip_open_axi_master_ooo (struct hisi_qm *qm)
@@ -1093,6 +1097,27 @@ static void hisi_zip_close_axi_master_ooo(struct hisi_qm *qm) qm->io_base + HZIP_CORE_INT_SET); } +static enum acc_err_result hisi_zip_get_err_result (struct hisi_qm *qm) +{ +u32 err_status; + + err_status =hisi_zip_get_hw_err_status (qm); +if (err_status) { +if (err_status & qm->err_info.ecc_2bits_mask) + qm->err_status.is_dev_ecc_mbit = true; +hisi_zip_log_hw_error (qm, err_status); + +if (err_status & qm->err_info.dev_reset_mask) { +/* Disable the same error reporting until device is recovered. */ +hisi_zip_disable_error_report (qm, err_status); +return ACC_ERR_NEED_RESET ; + } +hisi_zip_clear_hw_err_status (qm, err_status); + } + +return ACC_ERR_RECOVERED ; +} +static void hisi_zip_err_info_init (struct hisi_qm *qm) {struct hisi_qm_err_info *err_info = &qm->err_info;
@@ -1120,13 +1145,13 @@ static const struct hisi_qm_err_ini hisi_zip_err_ini = { .hw_err_disable = hisi_zip_hw_error_disable, .get_dev_hw_err_status = hisi_zip_get_hw_err_status, .clear_dev_hw_err_status = hisi_zip_clear_hw_err_status, - .log_dev_hw_err = hisi_zip_log_hw_error, .open_axi_master_ooo = hisi_zip_open_axi_master_ooo, .close_axi_master_ooo = hisi_zip_close_axi_master_ooo, .open_sva_prefetch = hisi_zip_open_sva_prefetch, .close_sva_prefetch = hisi_zip_close_sva_prefetch, .show_last_dfx_regs = hisi_zip_show_last_dfx_regs, .err_info_init = hisi_zip_err_info_init, + .get_err_result = hisi_zip_get_err_result, };static int hisi_zip_pf_probe_init (struct hisi_zip *hisi_zip)
include/linux/hisi_acc_qm.h +7 -1
@@ -229,6 +229,12 @@ struct hisi_qm_status {struct hisi_qm ; +enum acc_err_result { +ACC_ERR_NONE , +ACC_ERR_NEED_RESET , +ACC_ERR_RECOVERED , +}; +struct hisi_qm_err_info {char *acpi_rst;u32 msi_wr_port;
@@ -257,9 +263,9 @@ struct hisi_qm_err_ini {void (*close_axi_master_ooo)(struct hisi_qm *qm);void (*open_sva_prefetch)(struct hisi_qm *qm);void (*close_sva_prefetch)(struct hisi_qm *qm); -void (*log_dev_hw_err)(struct hisi_qm *qm,u32 err_sts);void (*show_last_dfx_regs)(struct hisi_qm *qm);void (*err_info_init)(struct hisi_qm *qm); +enum acc_err_result (*get_err_result)(struct hisi_qm *qm); };struct hisi_qm_cap_info {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 112/817 EDAC/igen6: Avoid segmentation fault on module unload
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Orange Kao <[email protected]>
[ Upstream commit fefaae90398d38a1100ccd73b46ab55ff4610fba ]
The segmentation fault happens because:
During modprobe:
1. In igen6_probe(), igen6_pvt will be allocated with kzalloc()
2. In igen6_register_mci(), mci->pvt_info will point to &igen6_pvt->imc[mc]
During rmmod:
1. In mci_release() in edac_mc.c, it will kfree(mci->pvt_info)
2. In igen6_remove(), it will kfree(igen6_pvt);
Fix this issue by setting mci->pvt_info to NULL to avoid the double kfree.
--- drivers/edac/igen6_edac.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/edac/igen6_edac.c +2 -0
@@ -1245,6 +1245,7 @@ static int igen6_register_mci(int mc, u64 mchbar, struct pci_dev *pdev) imc->mci = mci;return 0 ; fail3: + mci->pvt_info =NULL ;kfree (mci->ctl_name); fail2:edac_mc_free (mci);
@@ -1269,6 +1270,7 @@ static void igen6_unregister_mcis(void)edac_mc_del_mc (mci->pdev);kfree (mci->ctl_name); + mci->pvt_info =NULL ;edac_mc_free (mci);iounmap (imc->window); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 113/817 crypto: qat - Fix missing destroy_workqueue in adf_init_aer()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wang Hai <[email protected]>
[ Upstream commit d8920a722a8cec625267c09ed40af8fd433d7f9a ]
The adf_init_aer() won't destroy device_reset_wq when alloc_workqueue() for device_sriov_wq failed. Add destroy_workqueue for device_reset_wq to fix this issue.
--- drivers/crypto/intel/qat/qat_common/adf_aer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_common/adf_aer.c +4 -1
@@ -281,8 +281,11 @@ int adf_init_aer(void)return -EFAULT ; device_sriov_wq =alloc_workqueue ("qat_device_sriov_wq" ,0 ,0 ); -if (!device_sriov_wq) +if (!device_sriov_wq) { +destroy_workqueue (device_reset_wq); + device_reset_wq =NULL ;return -EFAULT ; + }return 0 ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 114/817 crypto: inside-secure - Fix the return value of safexcel_xcbcmac_cra_init()
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Huafei <[email protected]>
[ Upstream commit a10549fcce2913be7dc581562ffd8ea35653853e ]
The commit 320406cb60b6 ("crypto: inside-secure - Replace generic aes with libaes") replaced crypto_alloc_cipher() with kmalloc(), but did not modify the handling of the return value. When kmalloc() returns NULL, PTR_ERR_OR_ZERO(NULL) returns 0, but in fact, the memory allocation has failed, and -ENOMEM should be returned.
--- drivers/crypto/inside-secure/safexcel_hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/inside-secure/safexcel_hash.c +1 -1
@@ -2093,7 +2093,7 @@ static int safexcel_xcbcmac_cra_init(struct crypto_tfm *tfm)safexcel_ahash_cra_init (tfm); ctx->aes =kmalloc (sizeof (*ctx->aes),GFP_KERNEL ); -return PTR_ERR_OR_ZERO (ctx->aes); +return ctx->aes ==NULL ? -ENOMEM :0 ; }static void safexcel_xcbcmac_cra_exit (struct crypto_tfm *tfm)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 115/817 sched/cpufreq: Ensure sd is rebuilt for EAS check
In reply to Greg Kroah-Hartman6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Loehle <[email protected]>
[ Upstream commit 70d8b6485b0bcd135b6699fc4252d2272818d1fb ]
Ensure sugov_eas_rebuild_sd() is always called when sugov_init() succeeds. The out goto initialized sugov without forcing the rebuild.
Previously the missing call to sugov_eas_rebuild_sd() could lead to EAS not being enabled on boot when it should have been, because it requires all policies to be controlled by schedutil while they might not have been initialized yet.
--- kernel/sched/cpufreq_schedutil.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
kernel/sched/cpufreq_schedutil.c +1 -2
@@ -775,9 +775,8 @@ static int sugov_init(struct cpufreq_policy *policy)if (ret) goto fail; -sugov_eas_rebuild_sd (); - out: +sugov_eas_rebuild_sd ();mutex_unlock (&global_tunables_lock);return 0 ;
Signature · 1 line
2.43.0