* Linux 6.15-rc3
@ 2025-04-20 21:01 Linus Torvalds
2025-04-20 23:03 ` Linus Torvalds
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Linus Torvalds @ 2025-04-20 21:01 UTC (permalink / raw)
To: Linux Kernel Mailing List
There's absolutely nothing of huge note here as far as I can tell.
Just a fair number of small fixes all over the place - the biggest
changes are to fix some ublk driver issues, and the related selftests
for same. The rest is generally one- or few-lines.
So everything looks fine, and while the merge window was fairly big,
that doesn't seem to have resulted in any particular pain. At least so
far. Knock wood.
So a happy Easter Sunday to everybody (or a regular Sunday in case you
don't care, and don't do the "eat odd traditional Finnish foods" like
we do here in our family).
Because regardless of whether you observe the day or not, now you can
download a fresh new release candidate, and that's always cause for
celebration, isn't it? Even if it's the regularly scheduled
every-Sunday-afternoon-like-clockwork-unless-Linus-forgets kind of
thing.
Linus
---
Abdun Nihaal (7):
wifi: at76c50x: fix use after free access in at76_disconnect
wifi: brcmfmac: fix memory leak in brcmf_get_module_param
wifi: wl1251: fix memory leak in wl1251_tx_work
pds_core: fix memory leak in pdsc_debugfs_add_qcq()
net: ngbe: fix memory leak in ngbe_probe() error path
cxgb4: fix memory leak in cxgb4_init_ethtool_filters() error path
net: txgbe: fix memory leak in txgbe_probe() error path
Ahmad Fatoum (1):
docs: ABI: replace mcroce@microsoft.com with new Meta address
Akhil R (1):
crypto: tegra - Fix IV usage for AES ECB
Alan Huang (1):
bcachefs: Add missing error handling
Alex Deucher (1):
drm/amd/display/dml2: use vzalloc rather than kzalloc
Alex Williamson (2):
vfio/pci: Virtualize zero INTx PIN if no pdev->irq
Revert "PCI: Avoid reset when disabled via sysfs"
Alexei Starovoitov (2):
locking/local_lock, mm: replace localtry_ helpers with
local_trylock_t type
mm/page_alloc: avoid second trylock of zone->lock
Amadeusz Sławiński (1):
ASoC: Intel: avs: Constrain path based on BE capabilities
Andreas Gruenbacher (1):
writeback: fix false warning in inode_to_wb()
Andrew Jones (2):
riscv: Fix unaligned access info messages
riscv: Provide all alternative macros all the time
Andrzej Kacprowski (2):
accel/ivpu: Fix the NPU's DPU frequency calculation
accel/ivpu: Show NPU frequency in sysfs
Andy Shevchenko (1):
i2c: atr: Fix wrong include
Ankit Nautiyal (2):
drm/i915/display: Add macro for checking 3 DSC engines
drm/i915/dp: Check for HAS_DSC_3ENGINES while configuring DSC slices
Anshuman Khandual (1):
selftests/mm: fix compiler -Wmaybe-uninitialized warning
Ard Biesheuvel (1):
x86/boot/sev: Avoid shared GHCB page for early memory acceptance
Armin Wolf (2):
platform/x86: msi-wmi-platform: Rename "data" variable
platform/x86: msi-wmi-platform: Workaround a ACPI firmware bug
Arnaldo Carvalho de Melo (1):
perf libunwind arm64: Fix missing close parens in an if statement
Arnd Bergmann (9):
iwlwifi: mld: fix building with CONFIG_PM_SLEEP disabled
RDMA/ucaps: Avoid format-security warning
ASN.1: add module description
samples/livepatch: add module descriptions
fpga: tests: add module descriptions
zlib: add module description
ucs2_string: add module description
mm/kasan: add module decription
kunit: slub: add module description
Bao D. Nguyen (2):
scsi: ufs: core: Rename ufshcd_wb_presrv_usrspc_keep_vcc_on()
scsi: ufs: core: Add device level exception support
Baolin Wang (1):
selftests: mincore: fix tmpfs mincore test failure
Baoquan He (2):
MAINTAINERS: add Andrew and Baoquan as kexec maintainers
mm/gup: fix wrongly calculated returned value in fault_in_safe_writeable()
Bart Van Assche (1):
scsi: ufs: core: Fix a race condition related to device commands
Biju Das (1):
irqchip/renesas-rzv2h: Prevent TINT spurious interrupt
Bird, Tim (1):
block: add SPDX header line to blk-throttle.h
Björn Töpel (1):
riscv: Properly export reserved regions in /proc/iomem
Bo-Cun Chen (3):
net: ethernet: mtk_eth_soc: reapply mdc divider on reset
net: ethernet: mtk_eth_soc: correct the max weight of the queue
limit for 100Mbps
net: ethernet: mtk_eth_soc: revise QDMA packet scheduler settings
Borislav Petkov (AMD) (1):
x86/microcode/AMD: Extend the SHA check to Zen5, block loading
of any unreleased standalone Zen5 microcode patches
Brady Norander (1):
ASoC: dwc: always enable/disable i2s irqs
Breno Leitao (2):
spi: tegra210-quad: use WARN_ON_ONCE instead of WARN_ON for timeouts
spi: tegra210-quad: add rate limiting and simplify timeout error message
Caleb Sander Mateos (1):
ublk: don't suggest CONFIG_BLK_DEV_UBLK=Y
Chandrakanth Patil (2):
scsi: megaraid_sas: Block zero-length ATA VPD inquiry
scsi: megaraid_sas: Driver version update to 07.734.00.00-rc1
Charles Keepax (1):
ASoC: cs42l43: Reset clamp override on jack removal
Chen Ni (1):
ALSA: hda/tas2781: Remove unnecessary NULL check before release_firmware()
Chengchang Tang (1):
RDMA/hns: Fix wrong maximum DMA segment size
Chenyuan Yang (2):
drm/msm/dpu: Fix error pointers in dpu_plane_virtual_atomic_check
octeontx2-pf: handle otx2_mbox_get_rsp errors
Christian Brauner (6):
mount: ensure we don't pointlessly walk the mount tree
Kconfig: switch CONFIG_SYSFS_SYCALL default to n
hfs{plus}: add deprecation warning
fs: add kern_path_locked_negative()
fs: ensure that *path_locked*() helpers leave passed path pristine
Revert "hfs{plus}: add deprecation warning"
Christian König (1):
drm/amdgpu: use a dummy owner for sysfs triggered cleaner shaders v4
Christoph Hellwig (4):
xfs: remove the leftover xfs_{set,clear}_li_failed infrastructure
xfs: mark xfs_buf_free as might_sleep()
loop: stop using vfs_iter_{read,write} for buffered I/O
fs: move the bdex_statx call to vfs_getattr_nosec
Christopher S M Hall (6):
igc: fix PTM cycle trigger logic
igc: increase wait time before retrying PTM
igc: move ktime snapshot into PTM retry loop
igc: handle the IGC_PTP_ENABLED flag correctly
igc: cleanup PTP module if probe fails
igc: add lock preventing multiple simultaneous PTM transactions
Chunjie Zhu (1):
smb3 client: fix open hardlink on deferred close file error
Damien Le Moal (4):
nvmet: auth: use NULL to clear a pointer in nvmet_auth_sq_free()
nvmet: pci-epf: always fully initialize completion entries
nvmet: pci-epf: clear CC and CSTS when disabling the controller
nvmet: pci-epf: cleanup link state management
Damodharam Ammepalli (1):
ethtool: cmis_cdb: use correct rpl size in ethtool_cmis_module_poll()
Dan Carpenter (3):
wifi: iwlwifi: mld: silence uninitialized variable warning
Bluetooth: btrtl: Prevent potential NULL dereference
dma-buf/sw_sync: Decrement refcount on error in
sw_sync_ioctl_get_deadline()
Dan Williams (1):
fwctl/cxl: Fix uuid_t usage in uapi
Daniel Gomez (1):
radix-tree: add missing cleanup.h
Daniele Ceraolo Spurio (1):
drm/xe/pxp: do not queue unneeded terminations from debugfs
Dapeng Mi (2):
perf/x86/intel: Don't clear perf metrics overflow bit unconditionally
perf/x86/intel: Allow to update user space GPRs from PEBS records
Darrick J. Wong (2):
xfs: compute buffer address correctly in xmbuf_map_backing_mem
xfs: fix fsmap for internal zoned devices
David E. Box (1):
platform/x86: intel_pmc_ipc: add option to build without ACPI
David Hildenbrand (3):
mm: (un)track_pfn_copy() fix + doc improvements
fs/dax: fix folio splitting issue by resetting old folio order + _nr_pages
mm/memory: move sanity checks in do_wp_page() after mapcount vs.
refcount stabilization
David Howells (2):
devpts: Fix type for uid and gid params
afs: Fix afs_dynroot_readdir() to not use the RCU read lock
David Rosca (1):
drm/amdgpu: Add back JPEG to video caps for carrizo and newer
David Thompson (1):
mlxbf-bootctl: use sysfs_emit_at() in secure_boot_fuse_state_show()
David Wei (1):
io_uring/zcrx: enable tcp-data-split in selftest
Davide Caratti (1):
can: fix missing decrement of j1939_proto.inuse_idx
Denis Arefev (2):
asus-laptop: Fix an uninitialized variable
ksmbd: Prevent integer overflow in calculation of deadtime
Dhananjay Ugwekar (1):
cpufreq/amd-pstate: Fix min_limit perf and freq updation for
performance governor
Dmitry Baryshkov (2):
Bluetooth: qca: fix NV variant for one of WCN3950 SoCs
drm/msm/dpu: drop rogue intr_tear_rd_ptr values
Edward Adam Davis (1):
isofs: Prevent the use of too small fid
Eric Biggers (1):
nfs: add missing selections of CONFIG_CRC32
Evgeny Pimenov (1):
ASoC: qcom: Fix sc7280 lpass potential buffer overflow
FUJITA Tomonori (2):
rust: helpers: Remove volatile qualifier from io helpers
rust: helpers: Add dma_alloc_attrs() and dma_free_attrs()
Fernando Fernandez Mancera (1):
x86/i8253: Call clockevent_i8253_disable() with interrupts disabled
Florian Westphal (1):
netfilter: conntrack: fix erronous removal of offload bit
Frank Li (3):
dt-bindings: display: nwl-dsi: Allow 'data-lanes' property for port@1
dt-bindings: interrupt-controller: fsl,irqsteer: Add i.MX94 support
dt-bindings: timer: nxp,sysctr-timer: Add i.MX94 support
Frank van der Linden (1):
mm/cma: report base address of single range correctly
Frédéric Danis (2):
Bluetooth: l2cap: Check encryption key size on incoming connection
Bluetooth: l2cap: Process valid commands in too long frame
Gabriel Shahrouzi (1):
bcachefs: Prevent granting write refs when filesystem is read-only
Geert Uytterhoeven (2):
dt-bindings: soc: fsl: fsl,ls1028a-reset: Fix maintainer entry
lib/prime_numbers: KUnit test should not select PRIME_NUMBERS
Giuseppe Scrivano (1):
ovl: remove unused forward declaration
Gou Hao (1):
iomap: skip unnecessary ifs_block_is_uptodate check
Hannes Reinecke (2):
nvme: fixup scan failure for non-ANA multipath controllers
nvme-multipath: sysfs links may not be created for devices
Hans Holmberg (2):
xfs: add tunable threshold parameter for triggering zone GC
xfs: document zoned rt specifics in admin-guide
Hans de Goede (2):
platform/x86: x86-android-tablets: Add "9v" to Vexia EDU ATLA 10
tablet symbols
platform/x86: x86-android-tablets: Add Vexia Edu Atla 10 tablet 5V data
Henry Martin (1):
ASoC: Intel: avs: Fix null-ptr-deref in avs_component_probe()
Herbert Xu (4):
crypto: scomp - Fix null-pointer deref when freeing streams
crypto: caam/qi - Fix drv_ctx refcount bug
crypto: scomp - Fix wild memory accesses in scomp_free_streams
crypto: ahash - Disable request chaining
Herve Codina (1):
ASoC: fsl: fsl_qmc_audio: Reset audio data pointers on TRIGGER_START event
Ido Schimmel (2):
net: fib_rules: Fix iif / oif matching on L3 master device
selftests: fib_rule_tests: Add VRF match tests
Igor Pylypiv (1):
scsi: pm80xx: Set phy_attached to zero when device is gone
Ilya Leoshkevich (1):
ftrace: Fix type of ftrace_graph_ent_entry.depth
Ilya Maximets (1):
net: openvswitch: fix nested key length validation in the set() action
Ingo Molnar (1):
clang-format: Update the ForEachMacros list for v6.15-rc1
Jakub Kicinski (12):
net: don't mix device locking in dev_close_many() calls
netlink: specs: ovs_vport: align with C codegen capabilities
eth: bnxt: fix missing ring index trim on error path
tools: ynl-gen: don't declare loop iterator in place
tools: ynl-gen: move local vars after the opening bracket
tools: ynl-gen: individually free previous values on double set
tools: ynl-gen: make sure we validate subtype of array-nest
netlink: specs: rt-link: add an attr layer around alt-ifname
netlink: specs: rtnetlink: attribute naming corrections
netlink: specs: rt-link: adjust mctp attribute naming
netlink: specs: rt-neigh: prefix struct nfmsg members with ndm
net: don't try to ops lock uninitialized devs
Jan Stancek (1):
fs: use namespace_{lock,unlock} in dissolve_on_fput()
Jason Andryuk (1):
x86/xen: Fix __xen_hypercall_setfunc()
Jean-Michel Hautbois (1):
mailmap: add entry for Jean-Michel Hautbois
Jens Axboe (1):
io_uring/rsrc: ensure segments counts are correct on kbuf buffers
Jijie Shao (7):
net: hibmcge: fix incorrect pause frame statistics issue
net: hibmcge: fix incorrect multicast filtering issue
net: hibmcge: fix the share of irq statistics among different
network ports issue
net: hibmcge: fix wrong mtu log issue
net: hibmcge: fix the incorrect np_link fail state issue.
net: hibmcge: fix not restore rx pause mac addr after reset issue
net: hibmcge: fix multiple phy_stop() issue
Jinjiang Tu (1):
mm/hugetlb: fix set_max_huge_pages() when there are surplus pages
Joe Damato (1):
eventpoll: Set epoll timeout if it's in the future
Johannes Berg (4):
wifi: iwlwifi: mld: fix PM_SLEEP -Wundef warning
wifi: add wireless list to MAINTAINERS
wifi: iwlwifi: pcie: set state to no-FW before reset handshake
Revert "wifi: mac80211: Update skb's control block key in
ieee80211_tx_dequeue()"
Johannes Kimmel (1):
btrfs: correctly escape subvol in btrfs_show_options()
Johannes Weiner (3):
mm: page_alloc: speed up fallbacks in rmqueue_bulk()
mm: vmscan: restore high-cpu watermark safety in kswapd
mm: vmscan: fix kswapd exit condition in defrag_mode
Jonas Gorski (2):
net: b53: enable BPDU reception for management port
net: bridge: switchdev: do not notify new brentries as changed
Jonathan Currier (2):
PCI/MSI: Add an option to write MSIX ENTRY_DATA before any reads
net/niu: Niu requires MSIX ENTRY_DATA fields touch before entry reads
Juergen Gross (1):
xen: fix multicall debug feature
Jun Nie (1):
drm/msm/dpu: check every pipe per capability
K Prateek Nayak (1):
cpufreq/amd-pstate: Enable ITMT support after initializing core rankings
Kailang Yang (1):
ALSA: hda/realtek - Fixed ASUS platform headset Mic issue
Kan Liang (4):
perf/x86/intel/uncore: Fix the scale of IIO free running counters on SNR
perf/x86/intel/uncore: Fix the scale of IIO free running counters on ICX
perf/x86/intel/uncore: Fix the scale of IIO free running counters on SPR
perf/x86/intel: Add Panther Lake support
Karol Wachowski (2):
accel/ivpu: Update FW Boot API to version 3.28.3
accel/ivpu: Add cmdq_id to job related logs
Kashyap Desai (1):
RDMA/bnxt_re: Fix budget handling of notification queue
Kees Cook (3):
hardening: Disable GCC randstruct for COMPILE_TEST
Bluetooth: vhci: Avoid needless snprintf() calls
netfs: Mark __nonstring lookup tables
Kent Overstreet (9):
bcachefs: Don't print data read retry success on non-errors
bcachefs: fix bch2_dev_usage_full_read_fast()
bcachefs: btree_root_unreadable_and_scan_found_nothing now AUTOFIX
bcachefs: Silence extent_poisoned error messages
bcachefs: Print version_incompat_allowed on startup
bcachefs: Log message when incompat version requested but not enabled
bcachefs: snapshot_node_missing is now autofix
bcachefs: Add missing READ_ONCE() for metadata replicas
bcachefs: Fix snapshotting a subvolume, then renaming it
Kirill A. Shutemov (2):
mm: fix apply_to_existing_page_range()
mm/page_alloc: fix deadlock on cpu_hotplug_lock in __accept_page()
Kuninori Morimoto (2):
ASoC: hdmi-codec: use RTD ID instead of DAI ID for ELD entry
dt-bindings: timer: renesas,tpu: remove obsolete binding
Kuniyuki Iwashima (3):
smc: Fix lockdep false-positive for IPPROTO_SMC.
Revert "smb: client: Fix netns refcount imbalance causing leaks
and use-after-free"
Revert "smb: client: fix TCP timers deadlock after rmmod"
Kurt Borja (2):
platform/x86: alienware-wmi-wmax: Add G-Mode support to Alienware m16 R1
platform/x86: alienware-wmi-wmax: Extend support to more laptops
Leon Romanovsky (1):
RDMA/bnxt_re: Remove unusable nq variable
Li Haoran (1):
scsi: scsi_transport_srp: Replace min/max nesting with clamp()
Li Lingfeng (1):
nfsd: decrease sc_count directly if fail to queue dl_recall
Li Zhijian (1):
RDMA/rxe: Fix null pointer dereference in ODP MR check
Liam R. Howlett (1):
MAINTAINERS: add mmap trace events to MEMORY MAPPING
Lijo Lazar (1):
drm/amdgpu: Use the right function for hdp flush
Linus Torvalds (6):
gcc-15: make 'unterminated string initialization' just a warning
gcc-15: acpi: sprinkle random '__nonstring' crumbles around
gcc-15: get rid of misc extra NUL character padding
gcc-15: add '__nonstring' markers to byte arrays
gcc-15: work around sequence-point warning
Linux 6.15-rc3
Liu Shixin (1):
mm/hugetlb: fix nid mismatch in alloc_surplus_hugetlb_folio()
Loic Poulain (1):
mailmap: map Loic Poulain's old email addresses
Lorenzo Stoakes (4):
mm/vma: add give_up_on_oom option on modify/merge, use in uffd release
MAINTAINERS: add memory advice section
MAINTAINERS: add Pedro as reviewer to the MEMORY MAPPING section
MAINTAINERS: add section for locking of mm's and VMAs
Lucas De Marchi (1):
drm/xe: Set LRC addresses before guc load
Luiz Augusto von Dentz (1):
Bluetooth: hci_event: Fix sending MGMT_EV_DEVICE_FOUND for invalid address
Lukas Fischer (1):
scripts: generate_rust_analyzer: Add ffi crate
Lukas Wunner (1):
wifi: iwlwifi: mld: Restart firmware on iwl_mld_no_wowlan_resume() error
Maciej Falkowski (1):
accel/ivpu: Flush pending jobs of device's workqueues
Mans Rullgard (1):
spi: sun4i: add support for GPIO chip select lines
Mario Limonciello (2):
platform/x86: amd: pmf: Fix STT limits
drm/amd: Forbid suspending into non-default suspend states
Mark Bloch (1):
RDMA/mlx5: Fix compilation warning when USER_ACCESS isn't set
Mark Brown (1):
selftests/mm: generate a temporary mountpoint for cgroup filesystem
Martin K. Petersen (1):
block: integrity: Do not call set_page_dirty_lock()
Martin Wilck (1):
scsi: smartpqi: Use is_kdump_kernel() to check for kdump
Mathieu Dubois-Briand (1):
gpiolib: Allow to use setters with return value for output-only gpios
Matt Johnston (1):
net: mctp: Set SOCK_RCU_FREE
Matthew Auld (2):
drm/xe/userptr: fix notifier vs folio deadlock
drm/xe/dma_buf: stop relying on placement in unmap
Matthew Wilcox (Oracle) (1):
test suite: use %zu to print size_t
Maíra Canal (1):
drm/v3d: Fix Indirect Dispatch configuration for V3D 7.1.6 and later
Meghana Malladi (3):
net: ti: icssg-prueth: Fix kernel warning while bringing down
network interface
net: ti: icssg-prueth: Fix possible NULL pointer dereference
inside emac_xmit_xdp_frame()
net: ti: icss-iep: Fix possible NULL pointer dereference for
perout request
Meir Elisha (1):
md/raid1: Add check for missing source disk in process_checks()
Menglong Dong (1):
ftrace: fix incorrect hash size in register_ftrace_direct()
Miaoqian Lin (1):
scsi: iscsi: Fix missing scsi_host_put() in error path
Michael Walle (1):
net: ethernet: ti: am65-cpsw: fix port_np reference counting
Miguel Ojeda (6):
rust: pin-init: alloc: restrict `impl ZeroableOption` for `Box`
to `T: Sized`
rust: pin-init: use Markdown autolinks in Rust comments
rust: disable `clippy::needless_continue`
rust: kasan/kbuild: fix missing flags on first build
objtool/rust: add one more `noreturn` Rust function for Rust 1.86.0
rust: kbuild: use `pound` to support GNU Make < 4.3
Miklos Szeredi (1):
ovl: don't allow datadir only
Ming Lei (18):
selftests: ublk: fix ublk_find_tgt()
selftests: ublk: add io_uring uapi header
selftests: ublk: cleanup backfile automatically
selftests: ublk: make sure _add_ublk_dev can return in sub-shell
selftests: ublk: run stress tests in parallel
selftests: ublk: add two stress tests for zero copy feature
selftests: ublk: setup ring with
IORING_SETUP_SINGLE_ISSUER/IORING_SETUP_DEFER_TASKRUN
selftests: ublk: set queue pthread's cpu affinity
selftests: ublk: increase max nr_queues and queue depth
selftests: ublk: support target specific command line
selftests: ublk: support user recovery
selftests: ublk: add test_stress_05.sh
selftests: ublk: move creating UBLK_TMP into _prep_test()
ublk: add ublk_force_abort_dev()
ublk: rely on ->canceling for dealing with ublk_nosrv_dev_should_queue_io
ublk: move device reset into ublk_ch_release()
ublk: remove __ublk_quiesce_dev()
ublk: simplify aborting ublk request
Mostafa Saleh (1):
ubsan: Fix panic from test_ubsan_out_of_bounds
Mubin Sayyed (1):
dt-bindings: xilinx: Remove myself from maintainership
Muchun Song (1):
mm: memcontrol: fix swap counter leak from offline cgroup
Nam Cao (1):
Documentation: riscv: Fix typo MIMPLID -> MIMPID
Namhyung Kim (11):
tools headers: Update the KVM headers with the kernel sources
tools headers: Update the socket headers with the kernel sources
tools headers: Update the uapi/linux/perf_event.h copy with the
kernel sources
tools headers: Update the VFS headers with the kernel sources
tools headers: Update the syscall table with the kernel sources
tools headers: Update the uapi/linux/prctl.h copy with the kernel sources
tools headers: Update the uapi/asm-generic/mman-common.h copy
with the kernel sources
tools headers: Update the linux/unaligned.h copy with the kernel sources
tools headers: Update the x86 headers with the kernel sources
tools headers: Update the arch/x86/lib/memset_64.S copy with the
kernel sources
perf tools: Remove evsel__handle_error_quirks()
Namjae Jeon (4):
ksmbd: fix WARNING "do not call blocking ops when !TASK_RUNNING"
ksmbd: fix use-after-free in __smb2_lease_break_noti()
ksmbd: fix use-after-free in smb_break_all_levII_oplock()
ksmbd: fix the warning from __kernel_write_iter
Nathan Chancellor (3):
riscv: Avoid fortify warning in syscall_get_arguments()
lib/Kconfig.ubsan: Remove 'default UBSAN' from UBSAN_INTEGER_WRAP
riscv: Avoid fortify warning in syscall_get_arguments()
Neeraj Sanjay Kale (2):
Bluetooth: btnxpuart: Revert baudrate change in nxp_shutdown
Bluetooth: btnxpuart: Add an error message if FW dump trigger fails
Niklas Cassel (1):
ata: libata-sata: Save all fields from sense data descriptor
Nitesh Shetty (1):
io_uring/rsrc: send exact nr_segs for fixed buffer
Omar Sandoval (1):
dcache: convert dentry flag macros to enum
Oscar Salvador (2):
MAINTAINERS: update HUGETLB reviewers
mm, hugetlb: increment the number of pages to be reset on HVO
Pauli Virtanen (1):
Bluetooth: increment TX timestamping tskey always for stream sockets
Pavel Begunkov (6):
io_uring/zcrx: return ifq id to the user
io_uring/zcrx: add pp to ifq conversion helper
io_uring/rsrc: don't skip offset calculation
io_uring/rsrc: separate kbuf offset adjustments
io_uring/rsrc: refactor io_import_fixed
io_uring/zcrx: fix late dma unmap for a dead dev
Peter Collingbourne (1):
string: Add load_unaligned_zeropad() code path to sized_strscpy()
Peter Griffin (7):
scsi: ufs: exynos: Ensure pre_link() executes before exynos_ufs_phy_init()
scsi: ufs: exynos: Move UFS shareability value to drvdata
scsi: ufs: exynos: Disable iocc if dma-coherent property isn't set
scsi: ufs: exynos: Ensure consistent phy reference counts
scsi: ufs: exynos: Enable PRDT pre-fetching with UFSHCD_CAP_CRYPTO
scsi: ufs: exynos: Move phy calls to .exit() callback
scsi: ufs: exynos: gs101: Put UFS device in reset on .suspend()
Peter Robinson (1):
irqchip/irq-bcm2712-mip: Enable driver when ARCH_BCM2835 is enabled
Peter Ujfalusi (1):
ASoC: Intel: sof_sdw: Add quirk for Asus Zenbook S16
Pi Xiange (1):
x86/cpu: Add CPU model number for Bartlett Lake CPUs with Raptor
Cove cores
Qasim Ijaz (1):
drm/msm/dpu: reorder pointer operations after sanity checks to
avoid NULL deref
Qu Wenruo (1):
btrfs: remove folio order ASSERT()s in super block writeback path
Rafael J. Wysocki (5):
cpufreq: intel_pstate: Fix hwp_get_cpu_scaling()
cpufreq/sched: Fix the usage of CPUFREQ_NEED_UPDATE_LIMITS
cpufreq/sched: Explicitly synchronize limits_changed flag handling
cpufreq/sched: Set need_freq_update in ignore_dl_rate_limit()
cpufreq: Avoid using inconsistent policy->min and policy->max
Remi Pommarel (2):
wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()
wifi: mac80211: Purge vif txq in ieee80211_do_stop()
Richard Fitzgerald (2):
ALSA: hda/cirrus_scodec_test: Don't select dependencies
firmware: cs_dsp: test_bin_error: Fix uninitialized data used as
fw version
Rob Clark (1):
drm/msm/a6xx+: Don't let IB_SIZE overflow
Sagi Maimon (1):
ptp: ocp: fix start time alignment in ptp_ocp_signal_set
Sakari Ailus (1):
Documentation: PM: runtime: Fix a reference to pm_runtime_autosuspend()
Sami Tolvanen (1):
rust: kbuild: Don't export __pfx symbols
Samuel Holland (2):
riscv: module: Fix out-of-bounds relocation access
riscv: module: Allocate PLT entries for R_RISCV_PLT32
Sandipan Das (1):
x86/cpu/amd: Fix workaround for erratum 1054
Sean Heelan (1):
ksmbd: Fix dangling pointer in krb_authenticate
Shannon Nelson (2):
pds_fwctl: Fix type and endian complaints
fwctl: Fix repeated device word in log message
Sharath Srinivasan (1):
RDMA/cma: Fix workqueue crash in cma_netevent_work_handler
Shay Drory (1):
RDMA/core: Silence oversized kvmalloc() warning
Sheng Yong (1):
lib/iov_iter: fix to increase non slab folio refcount
Shengjiu Wang (1):
ASoC: fsl_asrc_dma: get codec or cpu dai from backend
Sidong Yang (1):
btrfs: ioctl: don't free iov when btrfs_encoded_read() returns -EAGAIN
Song Liu (2):
netfs: Only create /proc/fs/netfs with CONFIG_PROC_FS
fs: Fix filename init after recent refactoring
Srinivas Kandagatla (4):
ASoC: codecs:lpass-wsa-macro: Fix vi feedback rate
ASoC: codecs:lpass-wsa-macro: Fix logic of enabling vi channels
MAINTAINERS: use kernel.org alias
mailmap: Add entry for Srinivas Kandagatla
Srinivas Pandruvada (2):
thermal: intel: int340x: Add missing DVFS support flags
thermal: intel: int340x: Fix Panther Lake DLVR support
Stanislav Fomichev (1):
bonding: hold ops lock around get_link
Steven Rostedt (6):
selftests/ftrace: Differentiate bash and dash in dynevent_limitations.tc
ftrace: Initialize variables for ftrace_startup/shutdown_subops()
ftrace: Reinitialize hash to EMPTY_HASH after freeing
ftrace: Free ftrace hashes after they are replaced in the subops code
tracing: Fix filter string testing
tracing: selftests: Add testing a user string to filters
Suren Baghdasaryan (1):
slab: ensure slab->obj_exts is clear in a newly allocated slab page
Sven Eckelmann (1):
batman-adv: Fix double-hold of meshif when getting enabled
T.J. Mercier (1):
alloc_tag: handle incomplete bulk allocations in vm_module_tags_populate
Takuma Watanabe (1):
mseal: fix typo and style in documentation
Tamura Dai (1):
spi: spi-imx: Add check for spi_imx_setupxfer()
Thadeu Lima de Souza Cascardo (1):
i2c: cros-ec-tunnel: defer probe if parent EC is not present
Thomas Weißschuh (3):
kunit: qemu_configs: SH: Respect kunit cmdline
loop: properly send KOBJ_CHANGED uevent for disk device
loop: LOOP_SET_FD: send uevents for partitions
Thomas Zimmermann (2):
drm/gem: Internally test import_attach for imported objects
drm/mgag200: Fix value in <VBLKSTR> register
Thorsten Blum (1):
ALSA: azt2320: Replace deprecated strcpy() with strscpy()
Toke Høiland-Jørgensen (1):
selftests/tc-testing: Add test for echo of big TC filters
Uday Shankar (3):
ublk: properly serialize all FETCH_REQs
ublk: improve detection and handling of ublk server exit
selftests: ublk: add generic_06 for covering fault inject
Uros Bizjak (1):
genksyms: Handle typeof_unqual keyword and __seg_{fs,gs} qualifiers
Vasiliy Kovalev (1):
hfs/hfsplus: fix slab-out-of-bounds in hfs_bnode_read_key
Vincenzo Frascino (1):
kasan: Add strscpy() test to trigger tag fault on arm64
Vishal Moola (Oracle) (2):
mm/compaction: fix bug in hugetlb handling pathway
mm: fix filemap_get_folios_contig returning batches of identical folios
Vladimir Oltean (5):
net: dsa: mv88e6xxx: avoid unregistering devlink regions which
were never registered
net: dsa: mv88e6xxx: fix -ENOENT when deleting VLANs and MST is
unsupported
net: dsa: clean up FDB, MDB, VLAN entries on unbind
net: dsa: free routing table on probe failure
net: dsa: avoid refcount warnings when ds->ops->tag_8021q_vlan_del() fails
Vlastimil Babka (2):
MAINTAINERS: update SLAB ALLOCATOR maintainers
MAINTAINERS: add MM subsection for the page allocator
WangYuli (2):
riscv: KGDB: Do not inline arch_kgdb_breakpoint()
riscv: KGDB: Remove ".option norvc/.option rvc" for kgdb_compiled_break
Weidong Wang (1):
ASoC: codecs: Add of_match_table for aw888081 driver
Weizhao Ouyang (1):
can: rockchip_canfd: fix broken quirks checks
Will Pierce (1):
riscv: Use kvmalloc_array on relocation_hashtable
Xiangsheng Hou (1):
virtiofs: add filesystem context source name check
Xin Long (1):
ipv6: add exception routes to GC list in rt6_insert_exception
Xingui Yang (2):
scsi: hisi_sas: Enable force phy when SATA disk directly connected
scsi: hisi_sas: Fix I/O errors caused by hardware port ID changes
Yazen Ghannam (2):
RAS/AMD/ATL: Include row[13] bit in row retirement
RAS/AMD/FMPM: Get masked address
Yedidya Benshimol (1):
wifi: iwlwifi: mld: reduce scope for uninitialized variable
Yu Kuai (1):
md/raid10: fix missing discard IO accounting
Yue Haibing (1):
RDMA/usnic: Fix passing zero to PTR_ERR in usnic_ib_pci_probe()
Yunlong Xing (1):
loop: aio inherit the ioprio of original request
Zhang Xianwei (1):
xfs: Fix spelling mistake "drity" -> "dirty"
ZhenGuo Yin (1):
drm/amdgpu: fix warning of drm_mm_clean
Zheng Qixing (2):
md/md-bitmap: fix stats collection for external bitmaps
block: fix resource leak in blk_register_queue() error path
wangxuewen (1):
mm/hugetlb: add a line break at the end of the format string
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-20 21:01 Linux 6.15-rc3 Linus Torvalds
@ 2025-04-20 23:03 ` Linus Torvalds
2025-04-21 13:20 ` Guenter Roeck
2025-04-22 23:01 ` Dave Airlie
2 siblings, 0 replies; 16+ messages in thread
From: Linus Torvalds @ 2025-04-20 23:03 UTC (permalink / raw)
To: Linux Kernel Mailing List
On Sun, 20 Apr 2025 at 14:01, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> So everything looks fine, and while the merge window was fairly big,
> that doesn't seem to have resulted in any particular pain. At least so
> far. Knock wood.
Well, that was short-lived - my last-minute fixes to make things build
for me with gcc-15 ends up having broken the gcc-14, as reported by
Chris Clayton.
I try to do my build environment updates when it's all very quiet, but
clearly I should do them on a Tuesday, not on a weekend when I also do
my release candidates.
Anyway, I pushed out a fix.
Hopefully everybody is too busy eating strange Easter desserts(*) that
nobody else even noticed.
Linus
(*) "What? You're telling me you don't eat memma/mämmi all day for
Easter? What's the point of it all then?"
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-20 21:01 Linux 6.15-rc3 Linus Torvalds
2025-04-20 23:03 ` Linus Torvalds
@ 2025-04-21 13:20 ` Guenter Roeck
2025-04-22 23:01 ` Dave Airlie
2 siblings, 0 replies; 16+ messages in thread
From: Guenter Roeck @ 2025-04-21 13:20 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux Kernel Mailing List
On Sun, Apr 20, 2025 at 02:01:49PM -0700, Linus Torvalds wrote:
> There's absolutely nothing of huge note here as far as I can tell.
> Just a fair number of small fixes all over the place - the biggest
> changes are to fix some ublk driver issues, and the related selftests
> for same. The rest is generally one- or few-lines.
>
> So everything looks fine, and while the merge window was fairly big,
> that doesn't seem to have resulted in any particular pain. At least so
> far. Knock wood.
>
For v6.15-rc3-1-g9d7a0577c9db:
Build results:
total: 162 pass: 158 fail: 4
Failed builds:
openrisc:allmodconfig
parisc:allmodconfig
x86_64:allyesconfig
xtensa:allmodconfig
Qemu test results:
total: 635 pass: 627 fail: 8
Failed tests:
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:ext2
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:erofs
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:f2fs
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:ext2
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:erofs
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:f2fs
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:btrfs
mipsel64:boston:64r6el_defconfig:notests:nonet:smp:ide:cd
Unit test results:
pass: 594143 fail: 0
There is a new build failure, affecting openrisc, parisc, and xtensa.
Example from parisc:
Building parisc:allmodconfig ... failed
--------------
Error log:
ERROR: modpost: "__divdi3" [fs/xfs/xfs.ko] undefined!
ERROR: modpost: "__umoddi3" [fs/xfs/xfs.ko] undefined!
ERROR: modpost: "__moddi3" [fs/xfs/xfs.ko] undefined!
ERROR: modpost: "__udivdi3" [fs/xfs/xfs.ko] undefined!
Commit 845abeb1f06a ("xfs: add tunable threshold parameter for triggering
zone GC") introduced a 64-bit divide operation. I reported this to the
author, and a fix is in discussion.
Other than that, there is the known allyesconfig build failure for
x86_64:allyesconfig. I submitted a number of different proposals for
fixing it. We'll see if one of them makes it.
The fix for the mipsel64 test failure is known and will hopefully be pushed
soon.
Guenter
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-20 21:01 Linux 6.15-rc3 Linus Torvalds
2025-04-20 23:03 ` Linus Torvalds
2025-04-21 13:20 ` Guenter Roeck
@ 2025-04-22 23:01 ` Dave Airlie
2025-04-22 23:37 ` Alexei Starovoitov
2 siblings, 1 reply; 16+ messages in thread
From: Dave Airlie @ 2025-04-22 23:01 UTC (permalink / raw)
To: Linus Torvalds, ast; +Cc: Linux Kernel Mailing List
> Alexei Starovoitov (2):
> locking/local_lock, mm: replace localtry_ helpers with
> local_trylock_t type
This seems to have upset some phoronix nginx workload
https://www.phoronix.com/review/linux-615-nginx-regression/2
Dave.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-22 23:01 ` Dave Airlie
@ 2025-04-22 23:37 ` Alexei Starovoitov
2025-04-23 0:12 ` Shakeel Butt
2025-04-23 7:14 ` Vlastimil Babka
0 siblings, 2 replies; 16+ messages in thread
From: Alexei Starovoitov @ 2025-04-22 23:37 UTC (permalink / raw)
To: Dave Airlie, Shakeel Butt, Vlastimil Babka, Sebastian Sewior,
Andrew Morton
Cc: Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>
> > Alexei Starovoitov (2):
> > locking/local_lock, mm: replace localtry_ helpers with
> > local_trylock_t type
>
> This seems to have upset some phoronix nginx workload
> https://www.phoronix.com/review/linux-615-nginx-regression/2
3x regression? wow.
Thanks for heads up.
I'm staring at the patch and don't see it.
Adding more experts.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-22 23:37 ` Alexei Starovoitov
@ 2025-04-23 0:12 ` Shakeel Butt
2025-04-23 0:54 ` Michael Larabel
2025-04-23 7:14 ` Vlastimil Babka
1 sibling, 1 reply; 16+ messages in thread
From: Shakeel Butt @ 2025-04-23 0:12 UTC (permalink / raw)
To: Michael Larabel
Cc: Dave Airlie, Vlastimil Babka, Alexei Starovoitov,
Sebastian Sewior, Andrew Morton, Linus Torvalds,
Alexei Starovoitov, Linux Kernel Mailing List
Ccing Michael
On Tue, Apr 22, 2025 at 04:37:59PM -0700, Alexei Starovoitov wrote:
> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
> >
> > > Alexei Starovoitov (2):
> > > locking/local_lock, mm: replace localtry_ helpers with
> > > local_trylock_t type
> >
> > This seems to have upset some phoronix nginx workload
> > https://www.phoronix.com/review/linux-615-nginx-regression/2
>
> 3x regression? wow.
> Thanks for heads up.
> I'm staring at the patch and don't see it.
> Adding more experts.
Hi Michael,
Can you please share a bit more on your nginx workload and how can we
reproduce locally? In the mean time, I can try netperf locally to
reproduce.
I do have some followup optimizations [1, 2] which hopefully are aimed
for next release but we can try those as well.
[1] https://lkml.kernel.org/r/20250416180229.2902751-1-shakeel.butt@linux.dev
[2] https://lkml.kernel.org/r/20250410025752.92159-1-shakeel.butt@linux.dev
thanks,
Shakeel
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 0:12 ` Shakeel Butt
@ 2025-04-23 0:54 ` Michael Larabel
2025-04-23 8:42 ` Vlastimil Babka
0 siblings, 1 reply; 16+ messages in thread
From: Michael Larabel @ 2025-04-23 0:54 UTC (permalink / raw)
To: Shakeel Butt
Cc: Dave Airlie, Vlastimil Babka, Alexei Starovoitov,
Sebastian Sewior, Andrew Morton, Linus Torvalds,
Alexei Starovoitov, Linux Kernel Mailing List
On 4/22/25 7:12 PM, Shakeel Butt wrote:
> Ccing Michael
>
> On Tue, Apr 22, 2025 at 04:37:59PM -0700, Alexei Starovoitov wrote:
>> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>>>> Alexei Starovoitov (2):
>>>> locking/local_lock, mm: replace localtry_ helpers with
>>>> local_trylock_t type
>>> This seems to have upset some phoronix nginx workload
>>> https://www.phoronix.com/review/linux-615-nginx-regression/2
>> 3x regression? wow.
>> Thanks for heads up.
>> I'm staring at the patch and don't see it.
>> Adding more experts.
> Hi Michael,
>
> Can you please share a bit more on your nginx workload and how can we
> reproduce locally? In the mean time, I can try netperf locally to
> reproduce.
>
> I do have some followup optimizations [1, 2] which hopefully are aimed
> for next release but we can try those as well.
>
> [1] https://lkml.kernel.org/r/20250416180229.2902751-1-shakeel.butt@linux.dev
> [2] https://lkml.kernel.org/r/20250410025752.92159-1-shakeel.butt@linux.dev
>
> thanks,
> Shakeel
The Nginx test case is a fairly stock Nginx build measuring HTTPS
throughput for serving some static web page with Wrk used as the
stressor, all on the same host for stressing just the local host. All of
the assets and execution scripts used for that Nginx test in raw form
are here -
https://openbenchmarking.org/innhold/c7b555063f5732b4f1bb08444e258984d1dbb94b
Let me know if any problems reproducing, etc.
Thanks, I can try out those patches tomorrow. At the moment on that same
server currently running through some of the other workloads I also
found regressed on Linux 6.15 GIt to see if attributed to same commit or
not.
So far, when comparing 51339d99c0131bc0d16d378e9b05bc498d2967e2 as the
first bad commit against the parent commit
a30951d09c33c899f0e4aca80eb87fad5f10ecfa, I was able to reproduce a
regression for the OpenFOAM CFD software using drivaerFastback with the
small mesh size: 30.6 seconds on the bad commit, 23.6 seconds on the
parent. So that too seems to be related while the other tests are still
running at the moment.
Michael
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-22 23:37 ` Alexei Starovoitov
2025-04-23 0:12 ` Shakeel Butt
@ 2025-04-23 7:14 ` Vlastimil Babka
2025-04-23 8:03 ` Vlastimil Babka
1 sibling, 1 reply; 16+ messages in thread
From: Vlastimil Babka @ 2025-04-23 7:14 UTC (permalink / raw)
To: Alexei Starovoitov, Dave Airlie, Shakeel Butt, Sebastian Sewior,
Andrew Morton
Cc: Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 01:37, Alexei Starovoitov wrote:
> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>>
>> > Alexei Starovoitov (2):
>> > locking/local_lock, mm: replace localtry_ helpers with
>> > local_trylock_t type
>>
>> This seems to have upset some phoronix nginx workload
>> https://www.phoronix.com/review/linux-615-nginx-regression/2
>
> 3x regression? wow.
> Thanks for heads up.
> I'm staring at the patch and don't see it.
> Adding more experts.
Incidentally my work on slab sheaves using local_trylock() got to a phase
yesterday when after rebasing on rc3 and some refactoring I was looking at
sheaf stats that showed the percpu sheaves were used exactly once per cpu,
and other attempts failed. Which would be explained by local_trylock()
failing. In the context of rc3 itself it would mean the memcg stocks aren't
used at all because they can't be try-locked. Which could make benchmarks
unhappy of course, although surprising that it would be that much.
What I suspect now is the _Generic() part doesn't work as expected. So consider:
local_trylock() (or _irqsave variant) has no _Generic() part, does the
"if (READ_ONCE(tl->acquired))" and "WRITE_ONCE(tl->acquired, 1)" directly,
succeeds the first attempt on each cpu where executed.
local_unlock() goes via __local_lock_release() and since the _Generic() part
there doesn't work, we don't do WRITE_ONCE(tl->acquired, 0); so it stays 1.
preempt or irq handling is fine so nothing like lockdep, preempt debugging,
watchdogs gets suspicious, just the cpu can never succeed local_trylock() again
local_lock(_irqsave()) uses __local_lock_acquire() which also has a
_Generic() part but since it doesn't work, the "lockdep_assert(tl->acquired
== 0);" there isn't triggered either
In fact I've put BUG() in the _Generic() sections of _acquire() and _release()
and it didn't trigger, which would prove the code isn't executed. But I don't
know why _Generic() doesn't recognize the correct type there.
--- a/include/linux/local_lock_internal.h
+++ b/include/linux/local_lock_internal.h
@@ -104,6 +104,7 @@ do { \
_Generic((lock), \
local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 0); \
+ BUG(); \
WRITE_ONCE(tl->acquired, 1); \
}), \
default:(void)0); \
@@ -173,6 +174,7 @@ do { \
_Generic((lock), \
local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 1); \
+ BUG(); \
WRITE_ONCE(tl->acquired, 0); \
}), \
default:(void)0); \
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 7:14 ` Vlastimil Babka
@ 2025-04-23 8:03 ` Vlastimil Babka
2025-04-23 8:08 ` Vlastimil Babka
2025-04-23 15:06 ` Alexei Starovoitov
0 siblings, 2 replies; 16+ messages in thread
From: Vlastimil Babka @ 2025-04-23 8:03 UTC (permalink / raw)
To: Alexei Starovoitov, Dave Airlie, Shakeel Butt, Sebastian Sewior,
Andrew Morton
Cc: Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 09:14, Vlastimil Babka wrote:
> On 4/23/25 01:37, Alexei Starovoitov wrote:
>> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>>>
>>> > Alexei Starovoitov (2):
>>> > locking/local_lock, mm: replace localtry_ helpers with
>>> > local_trylock_t type
>>>
>>> This seems to have upset some phoronix nginx workload
>>> https://www.phoronix.com/review/linux-615-nginx-regression/2
>>
>> 3x regression? wow.
>> Thanks for heads up.
>> I'm staring at the patch and don't see it.
>> Adding more experts.
>
> Incidentally my work on slab sheaves using local_trylock() got to a phase
> yesterday when after rebasing on rc3 and some refactoring I was looking at
> sheaf stats that showed the percpu sheaves were used exactly once per cpu,
> and other attempts failed. Which would be explained by local_trylock()
> failing. In the context of rc3 itself it would mean the memcg stocks aren't
> used at all because they can't be try-locked. Which could make benchmarks
> unhappy of course, although surprising that it would be that much.
>
> What I suspect now is the _Generic() part doesn't work as expected. So consider:
>
> local_trylock() (or _irqsave variant) has no _Generic() part, does the
> "if (READ_ONCE(tl->acquired))" and "WRITE_ONCE(tl->acquired, 1)" directly,
> succeeds the first attempt on each cpu where executed.
>
> local_unlock() goes via __local_lock_release() and since the _Generic() part
> there doesn't work, we don't do WRITE_ONCE(tl->acquired, 0); so it stays 1.
>
> preempt or irq handling is fine so nothing like lockdep, preempt debugging,
> watchdogs gets suspicious, just the cpu can never succeed local_trylock() again
>
> local_lock(_irqsave()) uses __local_lock_acquire() which also has a
> _Generic() part but since it doesn't work, the "lockdep_assert(tl->acquired
> == 0);" there isn't triggered either
>
> In fact I've put BUG() in the _Generic() sections of _acquire() and _release()
> and it didn't trigger, which would prove the code isn't executed. But I don't
> know why _Generic() doesn't recognize the correct type there.
>
> --- a/include/linux/local_lock_internal.h
> +++ b/include/linux/local_lock_internal.h
> @@ -104,6 +104,7 @@ do { \
> _Generic((lock), \
> local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 0); \
> + BUG(); \
> WRITE_ONCE(tl->acquired, 1); \
> }), \
> default:(void)0); \
> @@ -173,6 +174,7 @@ do { \
> _Generic((lock), \
> local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 1); \
> + BUG(); \
> WRITE_ONCE(tl->acquired, 0); \
> }), \
> default:(void)0); \
>
Oh I see, replacing the default: which "local_lock_t *:" which is the only
other expected type, forces the compiler to actually tell me what's wrong:
./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
type ‘__seg_gs local_lock_t *’ is not compatible with any association
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 8:03 ` Vlastimil Babka
@ 2025-04-23 8:08 ` Vlastimil Babka
2025-04-23 14:38 ` Michael Larabel
2025-04-23 15:06 ` Alexei Starovoitov
1 sibling, 1 reply; 16+ messages in thread
From: Vlastimil Babka @ 2025-04-23 8:08 UTC (permalink / raw)
To: Alexei Starovoitov, Dave Airlie, Shakeel Butt, Sebastian Sewior,
Andrew Morton
Cc: Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 10:03, Vlastimil Babka wrote:
> On 4/23/25 09:14, Vlastimil Babka wrote:
>
> Oh I see, replacing the default: which "local_lock_t *:" which is the only
> other expected type, forces the compiler to actually tell me what's wrong:
>
> ./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
> type ‘__seg_gs local_lock_t *’ is not compatible with any association
>
>
This should fix the issue hopefully and prevent more unexpected default matches:
diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h
index bf2bf40d7b18..8d5ac16a9b17 100644
--- a/include/linux/local_lock_internal.h
+++ b/include/linux/local_lock_internal.h
@@ -102,11 +102,11 @@ do { \
l = (local_lock_t *)this_cpu_ptr(lock); \
tl = (local_trylock_t *)l; \
_Generic((lock), \
- local_trylock_t *: ({ \
+ __percpu local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 0); \
WRITE_ONCE(tl->acquired, 1); \
}), \
- default:(void)0); \
+ __percpu local_lock_t *: (void)0); \
local_lock_acquire(l); \
} while (0)
@@ -171,11 +171,11 @@ do { \
tl = (local_trylock_t *)l; \
local_lock_release(l); \
_Generic((lock), \
- local_trylock_t *: ({ \
+ __percpu local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 1); \
WRITE_ONCE(tl->acquired, 0); \
}), \
- default:(void)0); \
+ __percpu local_lock_t *: (void)0); \
} while (0)
#define __local_unlock(lock) \
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 0:54 ` Michael Larabel
@ 2025-04-23 8:42 ` Vlastimil Babka
2025-04-23 13:57 ` Michael Larabel
2025-04-23 15:41 ` Alexei Starovoitov
0 siblings, 2 replies; 16+ messages in thread
From: Vlastimil Babka @ 2025-04-23 8:42 UTC (permalink / raw)
To: Michael Larabel, Shakeel Butt
Cc: Dave Airlie, Alexei Starovoitov, Sebastian Sewior, Andrew Morton,
Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 02:54, Michael Larabel wrote:
> On 4/22/25 7:12 PM, Shakeel Butt wrote:
>> Ccing Michael
>>
>> On Tue, Apr 22, 2025 at 04:37:59PM -0700, Alexei Starovoitov wrote:
>>> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>>>>> Alexei Starovoitov (2):
>>>>> locking/local_lock, mm: replace localtry_ helpers with
>>>>> local_trylock_t type
>>>> This seems to have upset some phoronix nginx workload
>>>> https://www.phoronix.com/review/linux-615-nginx-regression/2
>>> 3x regression? wow.
>>> Thanks for heads up.
>>> I'm staring at the patch and don't see it.
>>> Adding more experts.
>> Hi Michael,
>>
>> Can you please share a bit more on your nginx workload and how can we
>> reproduce locally? In the mean time, I can try netperf locally to
>> reproduce.
>>
>> I do have some followup optimizations [1, 2] which hopefully are aimed
>> for next release but we can try those as well.
>>
>> [1] https://lkml.kernel.org/r/20250416180229.2902751-1-shakeel.butt@linux.dev
>> [2] https://lkml.kernel.org/r/20250410025752.92159-1-shakeel.butt@linux.dev
>>
>> thanks,
>> Shakeel
>
> The Nginx test case is a fairly stock Nginx build measuring HTTPS
> throughput for serving some static web page with Wrk used as the
> stressor, all on the same host for stressing just the local host. All of
> the assets and execution scripts used for that Nginx test in raw form
> are here -
> https://openbenchmarking.org/innhold/c7b555063f5732b4f1bb08444e258984d1dbb94b
> Let me know if any problems reproducing, etc.
>
> Thanks, I can try out those patches tomorrow. At the moment on that same
> server currently running through some of the other workloads I also
> found regressed on Linux 6.15 GIt to see if attributed to same commit or
> not.
Hi, please try the following patch. I also realized I left you out of my previous
replies leading to it, due to replying to an earlier mail of the thread:
https://lore.kernel.org/all/0981c1fe-05d2-4bab-a0a4-6dc5666d98d7@suse.cz/
Thanks,
Vlastimil
----8<----
From: Vlastimil Babka <vbabka@suse.cz>
Date: Wed, 23 Apr 2025 10:21:29 +0200
Subject: [PATCH] locking/local_lock: fix _Generic() matching of
local_trylock_t
Michael Larabel reported [1] a nginx performance regression in v6.15-rc3 and
bisected it to commit 51339d99c013 ("locking/local_lock, mm: replace
localtry_ helpers with local_trylock_t type")
The problem is the _Generic() usage with a default association that
masks the fact that "local_trylock_t *" association is not being
selected as expected. Replacing the default with the only other expected
type "local_lock_t *" reveals the underlying problem:
./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
type ‘__seg_gs local_lock_t *’ is not compatible with any association
The local_locki's are part of __percpu structures and thus the __percpu
attribute is needed to associate the type properly. Add the attribute
and keep the default replaced to turn any further mismatches into
compile errors.
The failure to recognize local_try_lock_t in __local_lock_release()
means that a local_trylock[_irqsave]() operation will set tl->acquired
to 1 (there's no _Generic() part in the trylock code), but then
local_unlock[_irqrestore]() will not set tl->acquired back to 0, so
further trylock operations will always fail on the same cpu+lock, while
non-trylock operations continue to work - a lockdep_assert() is also
not being executed in the _Generic() part of local_lock() code.
This means consume_stock() and refill_stock() operations will fail
deterministically, resulting in taking the slow paths and worse
performance.
Fixes: 51339d99c013 ("locking/local_lock, mm: replace localtry_ helpers with local_trylock_t type")
Reported-by: Michael Larabel <Michael@phoronix.com>
Closes: https://www.phoronix.com/review/linux-615-nginx-regression/2 [1]
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
include/linux/local_lock_internal.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h
index bf2bf40d7b18..8d5ac16a9b17 100644
--- a/include/linux/local_lock_internal.h
+++ b/include/linux/local_lock_internal.h
@@ -102,11 +102,11 @@ do { \
l = (local_lock_t *)this_cpu_ptr(lock); \
tl = (local_trylock_t *)l; \
_Generic((lock), \
- local_trylock_t *: ({ \
+ __percpu local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 0); \
WRITE_ONCE(tl->acquired, 1); \
}), \
- default:(void)0); \
+ __percpu local_lock_t *: (void)0); \
local_lock_acquire(l); \
} while (0)
@@ -171,11 +171,11 @@ do { \
tl = (local_trylock_t *)l; \
local_lock_release(l); \
_Generic((lock), \
- local_trylock_t *: ({ \
+ __percpu local_trylock_t *: ({ \
lockdep_assert(tl->acquired == 1); \
WRITE_ONCE(tl->acquired, 0); \
}), \
- default:(void)0); \
+ __percpu local_lock_t *: (void)0); \
} while (0)
#define __local_unlock(lock) \
--
2.49.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 8:42 ` Vlastimil Babka
@ 2025-04-23 13:57 ` Michael Larabel
2025-04-23 15:41 ` Alexei Starovoitov
1 sibling, 0 replies; 16+ messages in thread
From: Michael Larabel @ 2025-04-23 13:57 UTC (permalink / raw)
To: Vlastimil Babka, Shakeel Butt
Cc: Dave Airlie, Alexei Starovoitov, Sebastian Sewior, Andrew Morton,
Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 3:42 AM, Vlastimil Babka wrote:
> On 4/23/25 02:54, Michael Larabel wrote:
>> On 4/22/25 7:12 PM, Shakeel Butt wrote:
>>> Ccing Michael
>>>
>>> On Tue, Apr 22, 2025 at 04:37:59PM -0700, Alexei Starovoitov wrote:
>>>> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
>>>>>> Alexei Starovoitov (2):
>>>>>> locking/local_lock, mm: replace localtry_ helpers with
>>>>>> local_trylock_t type
>>>>> This seems to have upset some phoronix nginx workload
>>>>> https://www.phoronix.com/review/linux-615-nginx-regression/2
>>>> 3x regression? wow.
>>>> Thanks for heads up.
>>>> I'm staring at the patch and don't see it.
>>>> Adding more experts.
>>> Hi Michael,
>>>
>>> Can you please share a bit more on your nginx workload and how can we
>>> reproduce locally? In the mean time, I can try netperf locally to
>>> reproduce.
>>>
>>> I do have some followup optimizations [1, 2] which hopefully are aimed
>>> for next release but we can try those as well.
>>>
>>> [1] https://lkml.kernel.org/r/20250416180229.2902751-1-shakeel.butt@linux.dev
>>> [2] https://lkml.kernel.org/r/20250410025752.92159-1-shakeel.butt@linux.dev
>>>
>>> thanks,
>>> Shakeel
>> The Nginx test case is a fairly stock Nginx build measuring HTTPS
>> throughput for serving some static web page with Wrk used as the
>> stressor, all on the same host for stressing just the local host. All of
>> the assets and execution scripts used for that Nginx test in raw form
>> are here -
>> https://openbenchmarking.org/innhold/c7b555063f5732b4f1bb08444e258984d1dbb94b
>> Let me know if any problems reproducing, etc.
>>
>> Thanks, I can try out those patches tomorrow. At the moment on that same
>> server currently running through some of the other workloads I also
>> found regressed on Linux 6.15 GIt to see if attributed to same commit or
>> not.
> Hi, please try the following patch. I also realized I left you out of my previous
> replies leading to it, due to replying to an earlier mail of the thread:
> https://lore.kernel.org/all/0981c1fe-05d2-4bab-a0a4-6dc5666d98d7@suse.cz/
>
> Thanks,
> Vlastimil
Thanks, Vlastimil. I tested your later patch @
https://lore.kernel.org/all/d1c0f057-63c8-4be5-9638-d1a67d9b9e15@suse.cz/#t
I can confirm that latest Git + that patch does indeed correct the
regression affecting Nginx. All the Nginx runs I have carried out this
morning are back aligned with the 6.14 and the results prior to the
bisected commit.
Currently repeating tests for other regressed workloads to confirm there
but at least for the Nginx case is resolved by that patch.
Michael
>
> ----8<----
> From: Vlastimil Babka <vbabka@suse.cz>
> Date: Wed, 23 Apr 2025 10:21:29 +0200
> Subject: [PATCH] locking/local_lock: fix _Generic() matching of
> local_trylock_t
>
> Michael Larabel reported [1] a nginx performance regression in v6.15-rc3 and
> bisected it to commit 51339d99c013 ("locking/local_lock, mm: replace
> localtry_ helpers with local_trylock_t type")
>
> The problem is the _Generic() usage with a default association that
> masks the fact that "local_trylock_t *" association is not being
> selected as expected. Replacing the default with the only other expected
> type "local_lock_t *" reveals the underlying problem:
>
> ./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
> type ‘__seg_gs local_lock_t *’ is not compatible with any association
>
> The local_locki's are part of __percpu structures and thus the __percpu
> attribute is needed to associate the type properly. Add the attribute
> and keep the default replaced to turn any further mismatches into
> compile errors.
>
> The failure to recognize local_try_lock_t in __local_lock_release()
> means that a local_trylock[_irqsave]() operation will set tl->acquired
> to 1 (there's no _Generic() part in the trylock code), but then
> local_unlock[_irqrestore]() will not set tl->acquired back to 0, so
> further trylock operations will always fail on the same cpu+lock, while
> non-trylock operations continue to work - a lockdep_assert() is also
> not being executed in the _Generic() part of local_lock() code.
>
> This means consume_stock() and refill_stock() operations will fail
> deterministically, resulting in taking the slow paths and worse
> performance.
>
> Fixes: 51339d99c013 ("locking/local_lock, mm: replace localtry_ helpers with local_trylock_t type")
> Reported-by: Michael Larabel <Michael@phoronix.com>
> Closes: https://www.phoronix.com/review/linux-615-nginx-regression/2 [1]
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> include/linux/local_lock_internal.h | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h
> index bf2bf40d7b18..8d5ac16a9b17 100644
> --- a/include/linux/local_lock_internal.h
> +++ b/include/linux/local_lock_internal.h
> @@ -102,11 +102,11 @@ do { \
> l = (local_lock_t *)this_cpu_ptr(lock); \
> tl = (local_trylock_t *)l; \
> _Generic((lock), \
> - local_trylock_t *: ({ \
> + __percpu local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 0); \
> WRITE_ONCE(tl->acquired, 1); \
> }), \
> - default:(void)0); \
> + __percpu local_lock_t *: (void)0); \
> local_lock_acquire(l); \
> } while (0)
>
> @@ -171,11 +171,11 @@ do { \
> tl = (local_trylock_t *)l; \
> local_lock_release(l); \
> _Generic((lock), \
> - local_trylock_t *: ({ \
> + __percpu local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 1); \
> WRITE_ONCE(tl->acquired, 0); \
> }), \
> - default:(void)0); \
> + __percpu local_lock_t *: (void)0); \
> } while (0)
>
> #define __local_unlock(lock) \
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 8:08 ` Vlastimil Babka
@ 2025-04-23 14:38 ` Michael Larabel
0 siblings, 0 replies; 16+ messages in thread
From: Michael Larabel @ 2025-04-23 14:38 UTC (permalink / raw)
To: Vlastimil Babka, Alexei Starovoitov, Dave Airlie, Shakeel Butt,
Sebastian Sewior, Andrew Morton
Cc: Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On 4/23/25 3:08 AM, Vlastimil Babka wrote:
> On 4/23/25 10:03, Vlastimil Babka wrote:
>> On 4/23/25 09:14, Vlastimil Babka wrote:
>>
>> Oh I see, replacing the default: which "local_lock_t *:" which is the only
>> other expected type, forces the compiler to actually tell me what's wrong:
>>
>> ./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
>> type ‘__seg_gs local_lock_t *’ is not compatible with any association
>>
>>
> This should fix the issue hopefully and prevent more unexpected default matches:
>
> diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h
> index bf2bf40d7b18..8d5ac16a9b17 100644
> --- a/include/linux/local_lock_internal.h
> +++ b/include/linux/local_lock_internal.h
> @@ -102,11 +102,11 @@ do { \
> l = (local_lock_t *)this_cpu_ptr(lock); \
> tl = (local_trylock_t *)l; \
> _Generic((lock), \
> - local_trylock_t *: ({ \
> + __percpu local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 0); \
> WRITE_ONCE(tl->acquired, 1); \
> }), \
> - default:(void)0); \
> + __percpu local_lock_t *: (void)0); \
> local_lock_acquire(l); \
> } while (0)
>
> @@ -171,11 +171,11 @@ do { \
> tl = (local_trylock_t *)l; \
> local_lock_release(l); \
> _Generic((lock), \
> - local_trylock_t *: ({ \
> + __percpu local_trylock_t *: ({ \
> lockdep_assert(tl->acquired == 1); \
> WRITE_ONCE(tl->acquired, 0); \
> }), \
> - default:(void)0); \
> + __percpu local_lock_t *: (void)0); \
> } while (0)
>
> #define __local_unlock(lock) \
>
>
In addition to fixing the Nginx performance, I can confirm this patch
does also fix the other regressions I found as well caused by 51339d99c
with Memcached, ClickHouse, and OpenFOAM. All the tests I have been
running with current Git + this patch have been working out well and
haven't noticed any other problems from it. Will keep running through
some more workloads on that server but seems to now be in good shape.
Thanks,
Michael
Tested-by: Michael Larabel <Michael@phoronix.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 8:03 ` Vlastimil Babka
2025-04-23 8:08 ` Vlastimil Babka
@ 2025-04-23 15:06 ` Alexei Starovoitov
1 sibling, 0 replies; 16+ messages in thread
From: Alexei Starovoitov @ 2025-04-23 15:06 UTC (permalink / raw)
To: Vlastimil Babka
Cc: Dave Airlie, Shakeel Butt, Sebastian Sewior, Andrew Morton,
Linus Torvalds, Alexei Starovoitov, Linux Kernel Mailing List
On Wed, Apr 23, 2025 at 1:03 AM Vlastimil Babka <vbabka@suse.cz> wrote:
>
> On 4/23/25 09:14, Vlastimil Babka wrote:
> > On 4/23/25 01:37, Alexei Starovoitov wrote:
> >> On Tue, Apr 22, 2025 at 4:01 PM Dave Airlie <airlied@gmail.com> wrote:
> >>>
> >>> > Alexei Starovoitov (2):
> >>> > locking/local_lock, mm: replace localtry_ helpers with
> >>> > local_trylock_t type
> >>>
> >>> This seems to have upset some phoronix nginx workload
> >>> https://www.phoronix.com/review/linux-615-nginx-regression/2
> >>
> >> 3x regression? wow.
> >> Thanks for heads up.
> >> I'm staring at the patch and don't see it.
> >> Adding more experts.
> >
> > Incidentally my work on slab sheaves using local_trylock() got to a phase
> > yesterday when after rebasing on rc3 and some refactoring I was looking at
> > sheaf stats that showed the percpu sheaves were used exactly once per cpu,
> > and other attempts failed. Which would be explained by local_trylock()
> > failing. In the context of rc3 itself it would mean the memcg stocks aren't
> > used at all because they can't be try-locked. Which could make benchmarks
> > unhappy of course, although surprising that it would be that much.
> >
> > What I suspect now is the _Generic() part doesn't work as expected. So consider:
> >
> > local_trylock() (or _irqsave variant) has no _Generic() part, does the
> > "if (READ_ONCE(tl->acquired))" and "WRITE_ONCE(tl->acquired, 1)" directly,
> > succeeds the first attempt on each cpu where executed.
> >
> > local_unlock() goes via __local_lock_release() and since the _Generic() part
> > there doesn't work, we don't do WRITE_ONCE(tl->acquired, 0); so it stays 1.
> >
> > preempt or irq handling is fine so nothing like lockdep, preempt debugging,
> > watchdogs gets suspicious, just the cpu can never succeed local_trylock() again
> >
> > local_lock(_irqsave()) uses __local_lock_acquire() which also has a
> > _Generic() part but since it doesn't work, the "lockdep_assert(tl->acquired
> > == 0);" there isn't triggered either
> >
> > In fact I've put BUG() in the _Generic() sections of _acquire() and _release()
> > and it didn't trigger, which would prove the code isn't executed. But I don't
> > know why _Generic() doesn't recognize the correct type there.
> >
> > --- a/include/linux/local_lock_internal.h
> > +++ b/include/linux/local_lock_internal.h
> > @@ -104,6 +104,7 @@ do { \
> > _Generic((lock), \
> > local_trylock_t *: ({ \
> > lockdep_assert(tl->acquired == 0); \
> > + BUG(); \
> > WRITE_ONCE(tl->acquired, 1); \
> > }), \
> > default:(void)0); \
> > @@ -173,6 +174,7 @@ do { \
> > _Generic((lock), \
> > local_trylock_t *: ({ \
> > lockdep_assert(tl->acquired == 1); \
> > + BUG(); \
> > WRITE_ONCE(tl->acquired, 0); \
> > }), \
> > default:(void)0); \
> >
>
> Oh I see, replacing the default: which "local_lock_t *:" which is the only
> other expected type, forces the compiler to actually tell me what's wrong:
>
> ./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
> type ‘__seg_gs local_lock_t *’ is not compatible with any association
That explains why I and others couldn't repro it yesterday
no matter what we tried.
We're still on gcc-13 and this bit wasn't triggering:
#define CC_HAS_TYPEOF_UNQUAL (__GNUC__ >= 14)
Upgraded the compiler and can confirm everything.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 8:42 ` Vlastimil Babka
2025-04-23 13:57 ` Michael Larabel
@ 2025-04-23 15:41 ` Alexei Starovoitov
2025-04-23 16:05 ` Linus Torvalds
1 sibling, 1 reply; 16+ messages in thread
From: Alexei Starovoitov @ 2025-04-23 15:41 UTC (permalink / raw)
To: Vlastimil Babka
Cc: Michael Larabel, Shakeel Butt, Dave Airlie, Sebastian Sewior,
Andrew Morton, Linus Torvalds, Alexei Starovoitov,
Linux Kernel Mailing List
On Wed, Apr 23, 2025 at 1:42 AM Vlastimil Babka <vbabka@suse.cz> wrote:
>
>
> ----8<----
> From: Vlastimil Babka <vbabka@suse.cz>
> Date: Wed, 23 Apr 2025 10:21:29 +0200
> Subject: [PATCH] locking/local_lock: fix _Generic() matching of
> local_trylock_t
>
> Michael Larabel reported [1] a nginx performance regression in v6.15-rc3 and
> bisected it to commit 51339d99c013 ("locking/local_lock, mm: replace
> localtry_ helpers with local_trylock_t type")
>
> The problem is the _Generic() usage with a default association that
> masks the fact that "local_trylock_t *" association is not being
> selected as expected. Replacing the default with the only other expected
> type "local_lock_t *" reveals the underlying problem:
>
> ./include/linux/local_lock_internal.h:174:26: error: ‘_Generic’ selector of
> type ‘__seg_gs local_lock_t *’ is not compatible with any association
>
> The local_locki's are part of __percpu structures and thus the __percpu
> attribute is needed to associate the type properly. Add the attribute
> and keep the default replaced to turn any further mismatches into
> compile errors.
>
> The failure to recognize local_try_lock_t in __local_lock_release()
> means that a local_trylock[_irqsave]() operation will set tl->acquired
> to 1 (there's no _Generic() part in the trylock code), but then
> local_unlock[_irqrestore]() will not set tl->acquired back to 0, so
> further trylock operations will always fail on the same cpu+lock, while
> non-trylock operations continue to work - a lockdep_assert() is also
> not being executed in the _Generic() part of local_lock() code.
>
> This means consume_stock() and refill_stock() operations will fail
> deterministically, resulting in taking the slow paths and worse
> performance.
>
> Fixes: 51339d99c013 ("locking/local_lock, mm: replace localtry_ helpers with local_trylock_t type")
> Reported-by: Michael Larabel <Michael@phoronix.com>
> Closes: https://www.phoronix.com/review/linux-615-nginx-regression/2 [1]
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Another lesson learned. I stayed on gcc-13 for too long :(
Linus,
maybe take the fix directly, since perf regression is severe
for network heavy workloads.
I can confirm netperf -t TCP_STREAM 3x regression and "perf report" shows:
12.90% netperf [kernel.kallsyms] [k] page_counter_uncharge
|
---page_counter_uncharge
|
|--11.68%--try_charge_memcg
| |
| --11.68%--mem_cgroup_charge_skmem
| |
| --11.50%--__sk_mem_raise_allocated
| __sk_mem_schedule
| |
| |--9.42%--tcp_wmem_schedule
| | tcp_sendmsg_locked
| | tcp_sendmsg
With the fix memcg accounting takes < 1 %.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Linux 6.15-rc3
2025-04-23 15:41 ` Alexei Starovoitov
@ 2025-04-23 16:05 ` Linus Torvalds
0 siblings, 0 replies; 16+ messages in thread
From: Linus Torvalds @ 2025-04-23 16:05 UTC (permalink / raw)
To: Alexei Starovoitov
Cc: Vlastimil Babka, Michael Larabel, Shakeel Butt, Dave Airlie,
Sebastian Sewior, Andrew Morton, Alexei Starovoitov,
Linux Kernel Mailing List
On Wed, 23 Apr 2025 at 08:41, Alexei Starovoitov
<alexei.starovoitov@gmail.com> wrote:
>
> Linus,
>
> maybe take the fix directly, since perf regression is severe
> for network heavy workloads.
Done. Thanks everybody,
Linus
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-04-23 16:06 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-20 21:01 Linux 6.15-rc3 Linus Torvalds
2025-04-20 23:03 ` Linus Torvalds
2025-04-21 13:20 ` Guenter Roeck
2025-04-22 23:01 ` Dave Airlie
2025-04-22 23:37 ` Alexei Starovoitov
2025-04-23 0:12 ` Shakeel Butt
2025-04-23 0:54 ` Michael Larabel
2025-04-23 8:42 ` Vlastimil Babka
2025-04-23 13:57 ` Michael Larabel
2025-04-23 15:41 ` Alexei Starovoitov
2025-04-23 16:05 ` Linus Torvalds
2025-04-23 7:14 ` Vlastimil Babka
2025-04-23 8:03 ` Vlastimil Babka
2025-04-23 8:08 ` Vlastimil Babka
2025-04-23 14:38 ` Michael Larabel
2025-04-23 15:06 ` Alexei Starovoitov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®