7.2.11-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainerPATCH 274/281 drm/vc4: Fix binner slot allocation failing on an idle GPU
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maíra Canal <[email protected]>
[ Upstream commit cca01232d94adcb10f7c8c5bb8ce072b045fcb58 ]
A job's binner slots are returned to bin_alloc_used by vc4_complete_exec(), which runs from the job_done workqueue, but the seqno vc4_v3d_get_bin_slot() waits on is incremented earlier, in the function vc4_irq_finish_render_job(). Therefore, a waiter can wake, retry, and still find the pool full because the worker has not run. By then, the job might have left the render_job_list, so no seqno remains to wait on and the allocation fails returning -ENOMEM.
This scenario can be reproduced on a Raspberry Pi 3 by using a burst of small jobs (e.g. Piglit's quick_gl suite), with userspace seeing a rejected submit for a pool about to become free.
Note that the slots are held from validation until the render completes, so the pool can also be exhausted by jobs still queued on bin_job_list, leaving render_job_list empty and nothing to wait on.
Release the slots from the FRDONE handler and wait on the pool instead of on one job's seqno. This bounds the wait to the actual resource. Also, by claiming the slot inside the wait condition, another submit is unable to take the slot between the wakeup and the retry. vc4_complete_exec() keeps clearing the slots for jobs that never completed, and now wakes the waiters too.
Note that the wait takes a deadline, since the two callers need different ones. The submit path is a user task and can be interrupted, so it waits without one. On the other hand, vc4_overflow_mem_work() runs on a worker and never sees a signal, so it needs a deadline. During a reset, vc4_irq_disable() masks V3D_DRIVER_IRQS before draining the worker, and with those masked nothing can release a slot. This deadlocks: the worker would wait for slots that only the reset can free, while the reset waits in cancel_work_sync() for the worker.
--- drivers/gpu/drm/vc4/vc4_drv.h | 2 +- drivers/gpu/drm/vc4/vc4_gem.c | 8 +++++- drivers/gpu/drm/vc4/vc4_irq.c | 6 +++- drivers/gpu/drm/vc4/vc4_v3d.c | 44 ++++++++++++++---------------- drivers/gpu/drm/vc4/vc4_validate.c | 2 +- 5 files changed, 34 insertions(+), 28 deletions(-)
drivers/gpu/drm/vc4/vc4_drv.h +1 -1
@@ -1051,7 +1051,7 @@ void vc4_plane_async_set_fb(struct drm_plane *plane,/* vc4_v3d.c */ extern struct platform_driver vc4_v3d_driver;extern const struct of_device_id vc4_v3d_dt_match[]; -int vc4_v3d_get_bin_slot (struct vc4_dev *vc4); +int vc4_v3d_get_bin_slot (struct vc4_dev *vc4,long timeout);int vc4_v3d_bin_bo_get (struct vc4_dev *vc4,bool *used);void vc4_v3d_bin_bo_put (struct vc4_dev *vc4);int vc4_v3d_pm_get (struct vc4_dev *vc4);
drivers/gpu/drm/vc4/vc4_gem.c +7 -1
@@ -877,11 +877,17 @@ vc4_complete_exec(struct drm_device *dev, struct vc4_exec_info *exec)drm_gem_object_put (&bo->base.base); } -/* Free up the allocation of any bin slots we used. */ +/* Free up the allocation of any bin slots we used. Jobs that ran to +* completion had their slots released in vc4_irq_finish_render_job(). +* Only jobs that never completed still have slots to be released here. +*/ spin_lock_irqsave (&vc4->job_lock, irqflags); vc4->bin_alloc_used &= ~exec->bin_slots;spin_unlock_irqrestore (&vc4->job_lock, irqflags); +/* Let anyone waiting on the binner pool retry. */ +wake_up_all (&vc4->job_wait_queue); +/* Release the reference on the binner BO if needed. */ if (exec->bin_bo_used)vc4_v3d_bin_bo_put (vc4);
drivers/gpu/drm/vc4/vc4_irq.c +5 -1
@@ -74,7 +74,7 @@ vc4_overflow_mem_work(struct work_struct *work) bo = vc4->bin_bo; - bin_bo_slot =vc4_v3d_get_bin_slot (vc4); + bin_bo_slot =vc4_v3d_get_bin_slot (vc4,msecs_to_jiffies (500 ));if (bin_bo_slot <0 ) {drm_err (&vc4->base,"Couldn't allocate binner overflow mem\n" ); goto complete;
@@ -165,6 +165,10 @@ vc4_irq_finish_render_job(struct drm_device *dev)trace_vc4_rcl_end_irq (dev, exec->seqno); vc4->finished_seqno++; + + vc4->bin_alloc_used &= ~exec->bin_slots; + exec->bin_slots =0 ; +list_move_tail (&exec->head, &vc4->job_done_list); nextbin =vc4_first_bin_job (vc4);
drivers/gpu/drm/vc4/vc4_v3d.c +20 -24
66 lines not on this page · raw message
drivers/gpu/drm/vc4/vc4_validate.c +1 -1
@@ -402,7 +402,7 @@ validate_tile_binning_config(VALIDATE_ARGS)return -EINVAL ; } - bin_slot =vc4_v3d_get_bin_slot (vc4); + bin_slot =vc4_v3d_get_bin_slot (vc4,MAX_SCHEDULE_TIMEOUT );if (bin_slot <0 ) {if (bin_slot != -EINTR && bin_slot != -ERESTARTSYS ) { drm_err(dev, "Failed to allocate binner memory: %d\n",
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 275/281 sched_ext: Generate qseq from a per-task counter
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuba Piecuch <[email protected]>
commit e6ac89b8b1c12e9104df45a14a26e2dfa96ded06 upstream.
finish_dispatch() uses the qseq embedded in p->scx.ops_state to tell whether the QUEUED instance of a task it's about to claim is the one scx_bpf_dsq_insert() saw. qseq is generated from rq->scx.ops_qseq, but the counters of different rqs are independent, so if a task is dequeued and re-enqueued on a different rq between scx_bpf_dsq_insert() and finish_dispatch(), the new QUEUED instance can end up with the same qseq as the old one:
CPU X CPU Z
----- -----
enqueue p on rq A, qseq = N
ops.dispatch()
scx_bpf_dsq_insert(p)
records qseq N
sched_setaffinity(p)
dequeue p from rq A enqueue p on rq B, qseq = N
finish_dispatch(p, N)
qseq matches, p is claimed
The claim itself is still atomic so the core stays consistent, but an insert issued for a previous QUEUED instance gets applied to a new one which the BPF scheduler has just received through ops.enqueue(). This breaks the guarantee that dispatches targeting a stale instance are ignored.
Generate qseq from a per-task counter, p->scx.ops_qseq, instead so that consecutive QUEUED instances of a task never share a qseq regardless of which rq they're on. The counter is only updated in scx_do_enqueue_task() with the task's rq locked, so no additional synchronization is needed, and it fits in an existing hole in struct sched_ext_entity on 64bit. Remove the now unused rq->scx.ops_qseq.
Never generate qseq 0. NONE and DISPATCHING don't carry a qseq, so scx_bpf_dsq_insert() on a task in either state records 0. With a per-task counter, every task's first QUEUED instance would otherwise get qseq 0 and could be claimed by such an insert. Wrap the counter where the QSEQ field wraps so that it can't reach a value that shifts to 0 on 32bit either.
[ jpiecuch: 7.2.y lacks runnable_cpu in sched_ext_entity, so ops_qseq goes
after selected_cpu; adjust context in scx_rq and the dump_line() CPU line ]
--- include/linux/sched/ext.h | 1 + kernel/sched/ext/ext.c | 15 ++++++++++----- kernel/sched/ext/internal.h | 5 +++++ kernel/sched/sched.h | 1 - 4 files changed, 16 insertions(+), 6 deletions(-)
include/linux/sched/ext.h +1 -0
@@ -198,6 +198,7 @@ struct sched_ext_entity {s32 sticky_cpu;s32 holding_cpu;s32 selected_cpu; +u32 ops_qseq;/* protected by rq lock */ struct task_struct *kf_tasks[2 ];/* see SCX_CALL_OP_TASK() */ struct list_head runnable_node;/* rq->scx.runnable_list */
kernel/sched/ext/ext.c +10 -5
@@ -1953,8 +1953,14 @@ static void do_enqueue_task(struct rq *rif (unlikely (!SCX_HAS_OP (sch, enqueue))) goto global; -/* DSQ bypass didn't trigger, enqueue on the BPF scheduler */ - qseq = rq->scx.ops_qseq++ <<SCX_OPSS_QSEQ_SHIFT ; +/* +* DSQ bypass didn't trigger, enqueue on the BPF scheduler. Wrap the +* per-task qseq counter where the QSEQ field wraps and skip 0, which is +* what scx_bpf_dsq_insert() records for a task in NONE or DISPATCHING. +*/ + p->scx.ops_qseq = ((p->scx.ops_qseq +1 ) & + (SCX_OPSS_QSEQ_MASK >>SCX_OPSS_QSEQ_SHIFT )) ?:1 ; + qseq = (unsigned long )p->scx.ops_qseq <<SCX_OPSS_QSEQ_SHIFT ;WARN_ON_ONCE (atomic_long_read (&p->scx.ops_state) !=SCX_OPSS_NONE );atomic_long_set (&p->scx.ops_state,SCX_OPSS_QUEUEING | qseq);
@@ -6690,10 +6696,9 @@ static void scx_dump_cpu(struct scx_scheseq_buf_init (&ns, buf, avail);dump_newline (&ns); -dump_line (&ns,"CPU %-4d: nr_run=%u flags=0x%x cpu_rel=%d ops_qseq=%lu ksync=%lu" , +dump_line (&ns,"CPU %-4d: nr_run=%u flags=0x%x cpu_rel=%d ksync=%lu" , cpu, rq->scx.nr_running, rq->scx.flags, - rq->scx.cpu_released, rq->scx.ops_qseq, - rq->scx.kick_sync); + rq->scx.cpu_released, rq->scx.kick_sync);dump_line (&ns," curr=%s[%d] class=%ps" , rq->curr->comm, rq->curr->pid, rq->curr->sched_class);
kernel/sched/ext/internal.h +5 -0
@@ -1508,6 +1508,11 @@ enum scx_ops_state {* dequeue/requeue, the dispatcher can tell whether it still has a claim * on the task being dispatched. * +* QSEQ is generated from the per-task p->scx.ops_qseq counter so that +* it doesn't repeat across QUEUED instances of the same task even if +* the task moves between rqs. 0 is never used as a valid QSEQ since +* NONE and DISPATCHING map to this value. +* * As some 32bit archs can't do 64bit store_release/load_acquire, * p->scx.ops_state is atomic_long_t which leaves 30 bits for QSEQ on * 32bit machines. The dispatch race window QSEQ protects is very narrow
kernel/sched/sched.h +0 -1
@@ -795,7 +795,6 @@ struct scx_rq {struct scx_dispatch_q local_dsq;struct list_head runnable_list;/* runnable tasks on this rq */ struct list_head ddsp_deferred_locals;/* deferred ddsps from enq */ -unsigned long ops_qseq;u64 extra_enq_flags;/* see move_task_to_local_dsq() */ u32 nr_running;u32 cpuperf_target;/* [0, SCHED_CAPACITY_SCALE] */
Greg Kroah-Hartman
maintainerPATCH 276/281 sched_ext: Call ops.dequeue() when a task arrives on a remote local DSQ
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuba Piecuch <[email protected]>
commit af701b8d3238b9eb7cd450b0491300452c700bf5 upstream.
When a task in the BPF scheduler's custody is moved to another CPU's local DSQ, ops.dequeue() is only called once the task is picked for execution, from set_next_task_scx() with SCX_DEQ_CORE_SCHED_EXEC, even though no core-sched pick took place. It should instead be called without flags when the task is inserted into the destination DSQ, as it is for same-rq dispatches.
move_remote_task_to_local_dsq() sets p->scx.sticky_cpu across the migration so that deactivate_task() on the source rq doesn't end custody. Since commit b75aaea24c9f ("sched_ext: Properly mark SCX-internal migrations via sticky_cpu"), enqueue_task_scx() only clears it after inserting the task, so task_leave_custody() still sees the migration in progress and skips the custody exit.
Clear p->scx.sticky_cpu as soon as enqueue_task_scx() has read it, as was done before that commit. The source side is unaffected.
[ jpiecuch: resolved context conflict, 7.2.y still names the function
do_enqueue_task() rather than scx_do_enqueue_task() ]
--- kernel/sched/ext/ext.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
kernel/sched/ext/ext.c +7 -3
@@ -2051,6 +2051,13 @@ static void enqueue_task_scx(struct rq *u64 enq_flags = core_enq_flags | rq->scx.extra_enq_flags;/* +* An SCX-internal migration ends on arrival. Clear sticky_cpu so @p can +* leave custody when inserted into the destination DSQ. +*/ +if (sticky_cpu >=0 ) + p->scx.sticky_cpu =-1 ; + +/* * SCX_RQ_IN_WAKEUP promises a task_woken_scx() call once this enqueue * returns. Only the core's wakeup path delivers one. The flags stashed * for a remote activation may carry the wakeup bit without it.
@@ -2088,9 +2095,6 @@ static void enqueue_task_scx(struct rq *dl_server_start (&rq->ext_server);do_enqueue_task (rq, p, enq_flags, sticky_cpu); - -if (sticky_cpu >=0 ) - p->scx.sticky_cpu =-1 ; out: rq->scx.flags &= ~SCX_RQ_IN_WAKEUP ;
Greg Kroah-Hartman
maintainerPATCH 277/281 drm/amd/display: Dont replace a sink mode that shares the native totals
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Betschart <[email protected]>
commit 54c998c55fc9cbc391b350d67b86e0c2a0748f1a upstream.
decide_crtc_timing_for_drm_display_mode() copies the native mode's CRTC timing into the requested mode when clock, htotal and vtotal match. That is meant for the modes amdgpu inserts itself:amdgpu_dm_create_common_mode() duplicates the native mode and changes only hdisplay and vdisplay, so those are sent with the native timing and scaled.
A sink can also offer a real mode with the same clock and totals as its native mode. CTA-861 VIC 102 (4096x2160@60) and VIC 97 (3840x2160@60) both use 594 MHz and 4400x2250. With 3840x2160@60 as the preferred mode, a 4096x2160@60 request goes out with the 3840x2160 timing and the framebuffer scaled into it (dst 3840x2025 at y=67), while the AVI InfoFrame still carries VIC 102. A JVC projector then reports 3840x2160 and shows a corrupted right edge. 4096x2160@24, whose totals differ, is sent and displayed correctly.
Inserted modes keep the native sync positions; a real mode with its own active width does not. Compare those too, so only inserted modes are patched.
[ Adrian: this tree keeps the function in amdgpu_dm.c; dropped the KUnit
test, its file does not exist here. ]
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +6 -1
@@ -7260,10 +7260,15 @@ decide_crtc_timing_for_drm_display_mode( const struct drm_display_mode *native_mode, bool scale_enabled) { + /* Inserted modes copy the native sync; a sink mode with equal totals may not */ if (scale_enabled || ( native_mode->clock == drm_mode->clock && native_mode->htotal == drm_mode->htotal && - native_mode->vtotal == drm_mode->vtotal)) { + native_mode->vtotal == drm_mode->vtotal && + native_mode->hsync_start == drm_mode->hsync_start && + native_mode->hsync_end == drm_mode->hsync_end && + native_mode->vsync_start == drm_mode->vsync_start && + native_mode->vsync_end == drm_mode->vsync_end)) { if (native_mode->crtc_clock) copy_crtc_timing_for_drm_display_mode(native_mode, drm_mode); } else {
Greg Kroah-Hartman
maintainerPATCH 278/281 io_uring/memmap: account the pages a compound region really uses
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ali Ahmet Memis <[email protected]>
[ Upstream commit f12f0234cc14886bcfd53ffb7c8df4216dad51f1 ]
io_mem_alloc_compound() allocates get_order(size) pages, which rounds a region size that is not a power of two up to the next order. The pages past the region are part of the same allocation and cannot be used for anything else, but io_create_region() accounts reg->size >> PAGE_SHIFT, so they are never charged against RLIMIT_MEMLOCK. For a ring with 4096 SQ entries and the default CQ size the region is 37 pages while the allocation is 64.
Account the tail pages together with the region, and fall back to the exact sized bulk allocation when they do not fit the limit, so a user close to their limit still gets the region rather than an error. io_free_region() gives the same amount back, the compound case being the one that set IO_REGION_F_SINGLE_REF.
Counting how many 4096 entry rings an unprivileged user can create under a given RLIMIT_MEMLOCK, before and after:
limit (pages) before after 256 2 2 300 2 2 350 3 2 400 3 3 512 5 4
Five rings under a 512 page limit really pin 640 pages.
Stable-dep-of: b59cabf9b4ac ("io_uring: do not charge the SQ/CQ rings to RLIMIT_MEMLOCK")
--- io_uring/memmap.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-)
io_uring/memmap.c +30 -7
@@ -16,8 +16,10 @@#include "zcrx.h" static bool io_mem_alloc_compound (struct page **pages,int nr_pages, -size_t size,gfp_t gfp) +size_t size,gfp_t gfp, +struct user_struct *user) { +unsigned long nr_compound, extra;struct page *page;int i, order;
@@ -27,9 +29,22 @@ static bool io_mem_alloc_compound(structelse if (order) gfp |= __GFP_COMP; +/* +* get_order() rounds a non power of two size up, so the allocation +* can hold more pages than the region exposes. Account those too, +* and leave the compound allocation alone if they do not fit. +*/ + nr_compound =1UL << order; + extra = nr_compound - nr_pages; +if (extra && user &&__io_account_mem (user, extra)) +return false; + page =alloc_pages (gfp, order); -if (!page) +if (!page) { +if (extra && user) +__io_unaccount_mem (user, extra);return false; + }for (i =0 ; i < nr_pages; i++) pages[i] = page + i;
@@ -105,8 +120,15 @@ void io_free_region(struct user_struct * }if ((mr->flags &IO_REGION_F_VMAP ) && mr->ptr)vunmap (mr->ptr); -if (mr->nr_pages && user) -__io_unaccount_mem (user, mr->nr_pages); +if (mr->nr_pages && user) { +unsigned long nr_accounted = mr->nr_pages; + +/* a compound region was accounted for the whole allocation */ +if (mr->flags &IO_REGION_F_SINGLE_REF ) + nr_accounted =1UL <<get_order (io_region_size (mr)); + +__io_unaccount_mem (user, nr_accounted); + }memset (mr,0 ,sizeof (*mr)); }
@@ -151,7 +173,8 @@ static int io_region_pin_pages(struct iostatic int io_region_allocate_pages (struct io_mapped_region *mr,struct io_uring_region_desc *reg, -unsigned long mmap_offset) +unsigned long mmap_offset, +struct user_struct *user) {gfp_t gfp =GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN;size_t size =io_region_size (mr);
@@ -162,7 +185,7 @@ static int io_region_allocate_pages(struif (!pages)return -ENOMEM ; -if (io_mem_alloc_compound (pages, mr->nr_pages, size, gfp)) { +if (io_mem_alloc_compound (pages, mr->nr_pages, size, gfp, user)) { mr->flags |=IO_REGION_F_SINGLE_REF ; goto done; }
@@ -217,7 +240,7 @@ int io_create_region(struct io_ring_ctxif (reg->flags &IORING_MEM_REGION_TYPE_USER ) ret =io_region_pin_pages (mr, reg);else - ret =io_region_allocate_pages (mr, reg, mmap_offset); + ret =io_region_allocate_pages (mr, reg, mmap_offset, ctx->user);if (ret) goto out_free;
Greg Kroah-Hartman
maintainerPATCH 279/281 io_uring: do not charge the SQ/CQ rings to RLIMIT_MEMLOCK
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hengyu Liang <[email protected]>
[ Upstream commit b59cabf9b4acb65f3f9968087ca0e18010d85076 ]
Commit 8078486e1d53 ("io_uring: use region api for SQ") and commit 81a4058e0cd0 ("io_uring: use region api for CQ") made io_uring_setup() allocate the rings with io_create_region().
However, io_create_region() charges the memory to RLIMIT_MEMLOCK, and the rings had been exempt from that limit since commit 26bfa89e25f4 ("io_uring: place ring SQ/CQ arrays under memcg memory limits"). As of now, a user without CAP_IPC_LOCK gets ENOMEM from io_uring_setup() when their rings exceed the limit, which is 8 MiB by default. PostgreSQL developers have already hit this in their io_uring tests [1].
The issue can be reproduced with a simple liburing program, run as an unprivileged user:
#include <liburing.h>
#include <stdio.h>
int main(void)
{
static struct io_uring ring[64];
int i;
for (i = 0; i < 64; i++)
if (io_uring_queue_init(4096, &ring[i], 0) < 0)
break;
printf("%d rings\n", i);
return 0;
}Before those commits (v6.13), it prints "64 rings". After those commits (v6.14), it prints "21 rings".
This patch makes io_create_region() take the user to charge, and passes no user for the SQ/CQ rings.
--- io_uring/io_uring.c | 10 ++++++---- io_uring/kbuf.c | 2 +- io_uring/memmap.c | 10 +++++----- io_uring/memmap.h | 2 +- io_uring/register.c | 12 +++++++----- io_uring/zcrx.c | 2 +- 6 files changed, 21 insertions(+), 17 deletions(-)
io_uring/io_uring.c +6 -4
@@ -2077,8 +2077,9 @@ int io_submit_sqes(struct io_ring_ctx *cstatic void io_rings_free (struct io_ring_ctx *ctx) { -io_free_region (ctx->user, &ctx->sq_region); -io_free_region (ctx->user, &ctx->ring_region); +/* ring memory is not charged to RLIMIT_MEMLOCK, hence no user */ +io_free_region (NULL , &ctx->sq_region); +io_free_region (NULL , &ctx->ring_region); ctx->rings =NULL ;RCU_INIT_POINTER (ctx->rings_rcu,NULL ); ctx->sq_sqes =NULL ;
@@ -2742,7 +2743,8 @@ static __cold int io_allocate_scq_urings rd.user_addr = p->cq_off.user_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx, &ctx->ring_region, &rd,IORING_OFF_CQ_RING ); +/* ring memory is not charged to RLIMIT_MEMLOCK, hence no user */ + ret =io_create_region (NULL , &ctx->ring_region, &rd,IORING_OFF_CQ_RING );if (ret)return ret; ctx->rings = rings =io_region_get_ptr (&ctx->ring_region);
@@ -2756,7 +2758,7 @@ static __cold int io_allocate_scq_urings rd.user_addr = p->sq_off.user_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx, &ctx->sq_region, &rd,IORING_OFF_SQES ); + ret =io_create_region (NULL , &ctx->sq_region, &rd,IORING_OFF_SQES );if (ret) {io_rings_free (ctx);return ret;
io_uring/kbuf.c +1 -1
@@ -675,7 +675,7 @@ int io_register_pbuf_ring(struct io_ring rd.user_addr = reg.ring_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx, &bl->region, &rd, mmap_offset); + ret =io_create_region (ctx->user, &bl->region, &rd, mmap_offset);if (ret) goto fail; br =io_region_get_ptr (&bl->region);
io_uring/memmap.c +5 -5
@@ -204,7 +204,7 @@ done:return 0 ; } -int io_create_region (struct io_ring_ctx *ctx,struct io_mapped_region *mr, +int io_create_region (struct user_struct *user,struct io_mapped_region *mr,struct io_uring_region_desc *reg,unsigned long mmap_offset) {
@@ -230,8 +230,8 @@ int io_create_region(struct io_ring_ctxreturn -EOVERFLOW ; nr_pages = reg->size >>PAGE_SHIFT ; -if (ctx->user) { - ret =__io_account_mem (ctx->user, nr_pages); +if (user) { + ret =__io_account_mem (user, nr_pages);if (ret)return ret; }
@@ -240,7 +240,7 @@ int io_create_region(struct io_ring_ctxif (reg->flags &IORING_MEM_REGION_TYPE_USER ) ret =io_region_pin_pages (mr, reg);else - ret =io_region_allocate_pages (mr, reg, mmap_offset, ctx->user); + ret =io_region_allocate_pages (mr, reg, mmap_offset, user);if (ret) goto out_free;
@@ -249,7 +249,7 @@ int io_create_region(struct io_ring_ctx goto out_free;return 0 ; out_free: -io_free_region (ctx->user, mr); +io_free_region (user, mr);return ret; }
io_uring/memmap.h +1 -1
@@ -18,7 +18,7 @@ unsigned long io_uring_get_unmapped_areaint io_uring_mmap (struct file *file,struct vm_area_struct *vma);void io_free_region (struct user_struct *user,struct io_mapped_region *mr); -int io_create_region (struct io_ring_ctx *ctx,struct io_mapped_region *mr, +int io_create_region (struct user_struct *user,struct io_mapped_region *mr,struct io_uring_region_desc *reg,unsigned long mmap_offset);
io_uring/register.c +7 -5
@@ -480,8 +480,9 @@ struct io_ring_ctx_rings {static void io_register_free_rings (struct io_ring_ctx *ctx,struct io_ring_ctx_rings *r) { -io_free_region (ctx->user, &r->sq_region); -io_free_region (ctx->user, &r->ring_region); +/* ring memory is not charged to RLIMIT_MEMLOCK, hence no user */ +io_free_region (NULL , &r->sq_region); +io_free_region (NULL , &r->ring_region); }#define swap_old (ctx, o, n, field) \
@@ -529,7 +530,7 @@ static int io_register_resize_rings(stru rd.user_addr = p->cq_off.user_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx, &n.ring_region, &rd,IORING_OFF_CQ_RING ); + ret =io_create_region (NULL , &n.ring_region, &rd,IORING_OFF_CQ_RING );if (ret)return ret;
@@ -559,7 +560,7 @@ static int io_register_resize_rings(stru rd.user_addr = p->sq_off.user_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx, &n.sq_region, &rd,IORING_OFF_SQES ); + ret =io_create_region (NULL , &n.sq_region, &rd,IORING_OFF_SQES );if (ret) {io_register_free_rings (ctx, &n);return ret;
@@ -730,7 +731,8 @@ static int io_register_mem_region(struct !(ctx->flags & IORING_SETUP_R_DISABLED))return -EINVAL ; - ret =io_create_region (ctx, ®ion, &rd,IORING_MAP_OFF_PARAM_REGION ); + ret =io_create_region (ctx->user, ®ion, &rd, +IORING_MAP_OFF_PARAM_REGION );if (ret)return ret;if (copy_to_user (rd_uptr, &rd,sizeof (rd))) {
io_uring/zcrx.c +1 -1
@@ -398,7 +398,7 @@ static int io_allocate_rbuf_ring(struct mmap_offset =IORING_MAP_OFF_ZCRX_REGION ; mmap_offset += (u64 )id <<IORING_OFF_ZCRX_SHIFT ; - ret =io_create_region (ctx, &ifq->rq_region, rd, mmap_offset); + ret =io_create_region (ctx->user, &ifq->rq_region, rd, mmap_offset);if (ret <0 )return ret;
Greg Kroah-Hartman
maintainerPATCH 280/281 io_uring/kbuf: dont charge provided buffer rings to RLIMIT_MEMLOCK
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
[ Upstream commit cde56daf4b93f474dc256dbcc5205035223ae6f5 ]
Just like with the SQ and CQ rings, the provided buffer rings were also not charged against the memlock limit prior to the below mentioned commit. Restore that behavior.
---
Depends on <[email protected]>
io_uring/kbuf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
io_uring/kbuf.c +3 -3
@@ -458,7 +458,7 @@ static int io_remove_buffers_legacy(strustatic void io_put_bl (struct io_ring_ctx *ctx,struct io_buffer_list *bl) {if (bl->flags &IOBL_BUF_RING ) -io_free_region (ctx->user, &bl->region); +io_free_region (NULL , &bl->region);else io_remove_buffers_legacy (ctx, bl,-1U );
@@ -675,7 +675,7 @@ int io_register_pbuf_ring(struct io_ring rd.user_addr = reg.ring_addr; rd.flags |=IORING_MEM_REGION_TYPE_USER ; } - ret =io_create_region (ctx->user, &bl->region, &rd, mmap_offset); + ret =io_create_region (NULL , &bl->region, &rd, mmap_offset);if (ret) goto fail; br =io_region_get_ptr (&bl->region);
@@ -708,7 +708,7 @@ int io_register_pbuf_ring(struct io_ringif (!ret)return 0 ; fail: -io_free_region (ctx->user, &bl->region); +io_free_region (NULL , &bl->region);kfree (bl);return ret; }
Greg Kroah-Hartman
maintainerPATCH 281/281 mm/mremap: fix locked_vm leak from MREMAP_DONTUNMAP self-merge
In reply to Greg Kroah-Hartman7.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Lorenzo Stoakes (ARM)" <[email protected]>
[ Upstream commit 838bb60dc21553e32df90f2f3bac5b905376e7aa ]
Patch series "mm/mremap: fix two issues with MREMAP_DONTUNMAP", v2.
The MREMAP_DONTUNMAP feature is highly unusual in that it permits mremap() operations that keep the original VMA in place.
Historically this has led to a lot of bugs where non-obvious interactions occur between existing mremap() operations and the original VMA.
Commit 397432cab17b ("mm/mremap: account mm->locked_vm correctly for MREMAP_DONTUNMAP") fixed an accidentally introduced bug around mm->locked_vm accounting, but this wasn't the only issue.
And thus history repeats itself, as it turns out that mm->locked_vm accounting is broken by MREMAP_DONTUNMAP yet again by two further cases, and has been broken ever since the feature was introduced.
Both relate to the fact that VMA_LOCKED_BIT is cleared on the source VMA (it has to be as all page tables are moved):
1. If an unfaulted VMA_LOCKONFAULT_BIT anonymous VMA self-merges it clears the VMA_LOCKED_BIT flag and permanently leaks mm->locked_vm pages.
2. If a partial mremap() is performed on a locked VMA there is a leak equal to the number of pages not copied.
(Both for MREMAP_DONTUNMAP operations only)
Both issues can be fixed by treating the source range as distinct from the destination range, which is the definition of what MREMAP_DONTUNMAP does so is appropriate.
In case 1, simply disallow the self-merge, keeping adjacent source and destination VMAs distinct.
In case 2, split the source range ahead of time if the VMA is mlock()'d, so accounting is always correct.
Both changes were tested locally and confirmed to fix the issues.
For the purposes of a backport, the fixes are kept distinct, a follow-up series can add self-tests.
This patch (of 2):
The MREMAP_DONTUNMAP feature is highly unusual in that it permits mremap() operations that keep the original VMA in place.
Historically this has led to a lot of bugs where non-obvious interactions occur between existing mremap() operations and the original VMA.
Fix another of these - self-merge.
Self-merge occurs when a VMA is moved in front of or behind itself and the attributes of the VMA permit such a merge.
Practically this can only happen for unfaulted anonymous VMAs due to the page offset equality requirement for merge:
|------------|
| |
| v
|...........||-----------||...........|
| || unfaulted || |
|...........||-----------||...........|
^ |
| |
|------------|This becomes problematic if the VMA is configured by the user to mlock-on-fault, i.e. the VMA_LOCKED_BIT, VMA_LOCKONFAULT_BIT VMA flags are set.
MREMAP_DONTUNMAP clears mlock flags for the source VMA and maintains them for the destination VMA.
Self-merge makes this impossible (there is only one VMA) and incorrectly clears the destination VMA's mlock flags.
This causes a leak in mm->locked_vm as clearing this flag does not decrement the counter and the VMA no longer has VMA_LOCKED_BIT set so it is not decremented on unmap.
Resolve this by simply disallowing a self-merge in this case - the source and destination VMAs are kept distinct and then are able to have distinct mlock() flags.
Update dontunmap_complete() to make the now-redundant self-merge check a VM_WARN_ON_ONCE() instead to guard against future regressions.
Also update the VMA userland tests to reflect the change.
--- mm/mremap.c | 8 ++++++-- mm/vma.c | 17 ++++++++++++++++- mm/vma.h | 2 +- tools/testing/vma/tests/vma.c | 4 ++-- 4 files changed, 25 insertions(+), 6 deletions(-)
mm/mremap.c +6 -2
@@ -1295,7 +1295,8 @@ static int copy_vma_and_data(struct vma_PAGETABLE_MOVE (pmc,NULL ,NULL , vrm->addr, vrm->new_addr, vrm->old_len); new_vma =copy_vma (&vma, vrm->new_addr, vrm->new_len, new_pgoff, - &pmc.need_rmap_locks); + &pmc.need_rmap_locks, + vrm->flags &MREMAP_DONTUNMAP );if (!new_vma) {vrm_uncharge (vrm); *new_vma_ptr =NULL ;
@@ -1355,6 +1356,9 @@ static void dontunmap_complete(struct vmunsigned long old_start = vma->vm_start;unsigned long old_end = vma->vm_end; +/* Self-merge is disallowed. */ +VM_WARN_ON_ONCE (new_vma == vma); +/* We always clear VM_LOCKED[ONFAULT] on the old VMA. */ vm_flags_clear (vma,VM_LOCKED_MASK );
@@ -1362,7 +1366,7 @@ static void dontunmap_complete(struct vm* anon_vma links of the old vma is no longer needed after its page * table has been moved. */ -if (new_vma != vma && start == old_start && end == old_end) { +if (start == old_start && end == old_end) {const pgoff_t pgoff_unfaulted = vma->vm_start >>PAGE_SHIFT ;unlink_anon_vmas (vma);
mm/vma.c +16 -1
@@ -1863,7 +1863,7 @@ static int vma_link(struct mm_struct *mm*/ struct vm_area_struct *copy_vma (struct vm_area_struct **vmap,unsigned long addr,unsigned long len,pgoff_t pgoff, -bool *need_rmap_locks) +bool *need_rmap_locks,bool keep_source) {struct vm_area_struct *vma = *vmap;unsigned long vma_start = vma->vm_start;
@@ -1896,6 +1896,21 @@ struct vm_area_struct *copy_vma(struct v vmg.pgoff = pgoff; vmg.next =vma_iter_next_rewind (&vmi,NULL ); + +/* +* If the original VMA is kept (MREMAP_DONTUNMAP), the source and +* destination VMA must be treated distinctly. +* +* A merge violates this, so in this case disallow a self-merge. +*/ +if (!faulted_in_anon_vma && keep_source) { +if (vmg.prev == vma) + vmg.prev =NULL ; +if (vmg.next == vma) + vmg.next =NULL ; + faulted_in_anon_vma = true; + } + new_vma =vma_merge_copied_range (&vmg);if (new_vma) {
mm/vma.h +1 -1
@@ -449,7 +449,7 @@ void unlink_file_vma_batch_add(struct unstruct vm_area_struct *copy_vma (struct vm_area_struct **vmap,unsigned long addr,unsigned long len,pgoff_t pgoff, -bool *need_rmap_locks); +bool *need_rmap_locks,bool keep_source);struct anon_vma *find_mergeable_anon_vma (struct vm_area_struct *vma);
tools/testing/vma/tests/vma.c +2 -2
@@ -38,7 +38,7 @@ static bool test_copy_vma(void)/* Move backwards and do not merge. */ vma =alloc_and_link_vma (&mm,0x3000 ,0x5000 ,3 , vma_flags); - vma_new =copy_vma (&vma,0 ,0x2000 ,0 , &need_locks); + vma_new =copy_vma (&vma,0 ,0x2000 ,0 , &need_locks, false);ASSERT_NE (vma_new, vma);ASSERT_EQ (vma_new->vm_start,0 );ASSERT_EQ (vma_new->vm_end,0x2000 );
@@ -51,7 +51,7 @@ static bool test_copy_vma(void) vma =alloc_and_link_vma (&mm,0 ,0x2000 ,0 , vma_flags); vma_next =alloc_and_link_vma (&mm,0x6000 ,0x8000 ,6 , vma_flags); - vma_new =copy_vma (&vma,0x4000 ,0x2000 ,4 , &need_locks); + vma_new =copy_vma (&vma,0x4000 ,0x2000 ,4 , &need_locks, false);vma_assert_attached (vma_new);ASSERT_EQ (vma_new, vma_next);
Hi!
Quoted 7 lines
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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, 15 Oct 2026 11:28:22 +0000. Anything received after that time might be too late.
There's build failure on risc-v:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/jobs/17139155257
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/pipelines/2942353460
Best regards,
Pavel
arch/riscv/kernel/cpufeature.c: In function 'riscv_clear_hypervisor_csr':
400
13:14:38arch/riscv/kernel/cpufeature.c:1189:43: error: 'RISCV_ISA_EXT_H' undeclared (first use in this function); did you mean 'RISCV_ISA_EXT_h'? 401
13:14:38
1189 | if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_H))
402
13:14:38
| ^~~~~~~~~~~~~~~
403
13:14:38
| RISCV_ISA_EXT_h
404
13:14:38arch/riscv/kernel/cpufeature.c:1189:43: note: each undeclared identifier is reported only once for each function it appears in 405
13:14:38
CC io_uring/kbuf.o
406
13:14:38
make[4]: *** [scripts/Makefile.build:289: arch/riscv/kernel/cpufeature.o] Error 1
407
13:14:38
make[3]: *** [scripts/Makefile.build:550: arch/riscv/kernel] Error 2
408
13:14:38
CC ipc/sem.o
409
13:14:38
make[3]: *** Waiting for unfinished jobs....
410
13:14:38
CC kernel/printk/printk.o
411
13:14:39
Quoted 1,156 lines
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v7.x/stable-review/patch-7.2.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-7.2.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 7.2.11-rc1Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fixlocked_vmleak fromMREMAP_DONTUNMAPself-mergeJens Axboe <[email protected]>
io_uring/kbuf: don't charge provided buffer rings toRLIMIT_MEMLOCKHengyu Liang <[email protected]>
io_uring: do not charge the SQ/CQ rings toRLIMIT_MEMLOCKAli Ahmet Memis <[email protected]>
io_uring/memmap: account the pages a compound region really usesAdrian Betschart <[email protected]>
drm/amd/display: Don't replace a sink mode that shares the native totalsKuba Piecuch <[email protected]>
sched_ext: Callops.dequeue()when a task arrives on a remote local DSQKuba Piecuch <[email protected]>
sched_ext: Generate qseq from a per-task counterMaíra Canal <[email protected]>
drm/vc4: Fix binner slot allocation failing on an idle GPUMaíra Canal <[email protected]>
drm/vc4: Disable the V3D interrupt across runtime suspendIlia Gavrilov <[email protected]>
vsock: Fix memory leak invmci_transport_recv_dgram_cb()Fernando Fernandez Mancera <[email protected]>
net: openvswitch: validate transport header presence inset_ipv6_addrVadim Fedorenko <[email protected]>
ptp: ocp: fix PCIe delay estimation calculationWillem de Bruijn <[email protected]>
net/packet: callpacket_parse_headersaftervirtio_net_hdr_to_skbPetr Machata <[email protected]>
mlxsw:spectrum_flower: Fix port range register leak intmplt_create()Li RongQing <[email protected]>
net/mlx5e: Order ICOSQ cc update after CQ doorbellTianyi Gao <[email protected]>
veth: fix peerNETDEV_XDP_ACT_NDO_XMITafter GRO is toggled while downGyeyoung Baek <[email protected]>
drm/imagination: Fix reference andvm_bohandling inremap()Haishuang Yan <[email protected]>
bareudp: set the inner protocol to the protocol of the packetEric Dumazet <[email protected]>
flow_dissector: avoid u16 truncation of hlen inbpf_flow_dissect()Pavan Chebbi <[email protected]>
bnxt_en: Re-write the BARs following any type of PCIe errorsMichael Chan <[email protected]>
bnxt_en: Fix driver init in kdump kernelMichael Chan <[email protected]>
bnxt_en: Addbnxt_clear_bars()helperZongmin Zhou <[email protected]>
riscv: ptrace: Zero-initialize regset buffers before copyinLeo Yu-Chi Liang <[email protected]>
riscv: fixNR_CPUSrange leaking 64-bit default onto 32-bit buildsRichard Fitzgerald <[email protected]>
ASoC: sdw_utils: Switch CS35L56/57/62/63 to use OT25 DAIStefan Binding <[email protected]>
ASoC:sdw_utils: Add codec info for CS35L62Haishuang Yan <[email protected]>
pfcp: make sure the SEID is linear before reading itJustin Chen <[email protected]>
net: bcmgenet: if UMAC was suspended inSW_RESET, restore it toSW_RESETOr Har-Toov <[email protected]>
Revert "net/mlx5: E-Switch, preserve max tx speed on vport state modification"Victor Nogueira <[email protected]>
net/sched:cls_route: reject change with no routing attributeHaishuang Yan <[email protected]>
devlink: fixdevlink_relreference leak when notify work is pendingQuentin Freimanis <[email protected]>
net: sparx5: start the TOD counters on non-PTP lan969x variantsEric Dumazet <[email protected]>
net: always dissect GSO packets in__virtio_net_hdr_to_skb()Eric Dumazet <[email protected]>
flow_dissector: avoid u16 truncation of skb->len when computing thoffWaiman Long <[email protected]>
cgroup/cpuset: Callis_in_v2_mode()after acquiringcpuset_mutexincpuset_handle_hotplug()Han Gao <[email protected]>
spi: sg2044-nor: Honor SPI clock limitsHan Gao <[email protected]>
spi: sg2044-nor: Return transfer errorsMarek Szyprowski <[email protected]>
ASoC: samsung: i2s: enableop_clkin probe to balance runtime PMAlvin Šipraga <[email protected]>
ASoC: adau1372: fix invalid default state of output ASRC and DAC muxesAlvin Šipraga <[email protected]>
ASoC: adau1372: allow sleepy powerdown GPIOsYingying Tang <[email protected]>
Revert "wifi: ath12k: add panic handler"Mallesh Koujalagi <[email protected]>
drm/xe/sysctrl: Fix mailbox header handlingDevin Wittmayer <[email protected]>
wifi: mt76: mt792x: pick the SAR table layout from the table itselfJunjie Cao <[email protected]>
wifi: mt76: mt792x: treat 0xff ACPI SAR entries as no limitDevin Wittmayer <[email protected]>
wifi: mt76: mt7925: don't put the band auto marker in TGIDNicolas Cavallari <[email protected]>
wifi: mt76: mt7915: disable rx napi when removing deviceTao Gong <[email protected]>
wifi: mt76: mt7996: fix struct mt7996_mcu_wed_rro_ba_delete_event layoutAaron Ma <[email protected]>
wifi: mt76: mt7925: restore the legacy BSS after MLO teardownFelix Fietkau <[email protected]>
wifi: mt76: use ALTX queue for packets to disassociated stationsFelix Fietkau <[email protected]>
wifi: mt76: account non-AQL frames per peer rather than per linkFelix Fietkau <[email protected]>
wifi: mt76: add PS buffering support for HW-managed TIM driversFelix Fietkau <[email protected]>
wifi: mac80211: add ieee80211_txq_aql_pending()Felix Fietkau <[email protected]>
wifi: mac80211: add AQL support for multicast packetsFelix Fietkau <[email protected]>
wifi: mt76: mt7996: take over connection monitoringPengpeng Hou <[email protected]>
scsi: ufs: mediatek: Handle mPHY power-on failuresJakub Kicinski <[email protected]>
Revert "net: stmmac: propagate PTP addend and system time programming errors"Aurelien Jarno <[email protected]>
riscv: vector: Fix output operands in context saveTroy Mitchell <[email protected]>
riscv: vector: Fix data pointer constraints in context save/restoreLeto Liu (刘涛) <[email protected]>
net: airoha: Add retry mechanism toairoha_qdma_set_trtcm_param()Ovidiu Panait <[email protected]>
net: stmmac: Disable S-Tag processing on dwmac4Ovidiu Panait <[email protected]>
net: stmmac: Do not advertise S-VLAN stripping when it is disabledOr Har-Toov <[email protected]>
net/mlx5: Lag, split aggregate speed into oper and max helpersJakub Kicinski <[email protected]>
net: makedev_xdp_sb_prog_count()see programs attached through a linkTvrtko Ursulin <[email protected]>
drm/xe: Do not emit Wa_16010904313 twiceAlan Previn <[email protected]>
drm/xe/mmio: Fixxe_mmio_wait32()to honor delay/sleep maximumsFilipe Manana <[email protected]>
btrfs: fix lost error return value inbtrfs_listxattr()Filipe Manana <[email protected]>
btrfs: fix xattr replace when multiple xattrs are packed in the same itemYang Xiuwei <[email protected]>
btrfs: don't stashio_uringencoded data across-EAGAINYang Xiuwei <[email protected]>
btrfs: unlock inode and extent in caller whenio_uringread extent failsYang Xiuwei <[email protected]>
btrfs: free iov whenbtrfs_uring_read_extent()failsYang Xiuwei <[email protected]>
btrfs: always return-EIOCBQUEUEDafterbtrfs_uring_read_extent_endioShin'ichiro Kawasaki <[email protected]>
zloop: zero out only the unread tail of short readsHaibo Chen <[email protected]>
spi: spi-nxp-fspi: exit stop mode before waiting for DLL lockFuad Tabba <[email protected]>
arm64/boot: Don't set PMUv3p9 FGT2 bits without PMUv3Sang-Hoon Choi <[email protected]>
nvmet: use the local P2P device on metadata allocation failureGuixin Liu <[email protected]>
nvmet: return Invalid Field for invalid NSIDs feature 82hBryan Fraschetti <[email protected]>
ice: Restore Ordered MMIO Writes for Tx DoorbellsJakub Kicinski <[email protected]>
bonding: fix the program leak when XDP is replacedMahantesh Salimath <[email protected]>
tee: optee: ffa: support shared memory offsets on large-page kernelsLorenzo Bianconi <[email protected]>
net: stmmac: propagate PTP addend and system time programming errorsFelix Fietkau <[email protected]>
wifi: mt76: mt7996: program a link again if the driver holds itSang-Hoon Choi <[email protected]>
cxgb4/ch_ktls: disable softirqs aroundtid_listerasesShashank Mohan Jain <[email protected]>
lib/dim: fix 32-bit overflow indim_calc_stats()ratesOmar Ramadan <[email protected]>
amt: send the relay's General Query directly from the receive pathJamal Hadi Salim <[email protected]>
net/sched:em_text: reject unterminated algo before autoloadMaíra Canal <[email protected]>
drm/vc4: Usekvmalloc_objs()for the BO cache size listMaíra Canal <[email protected]>
drm/vc4: Free the BO cache size list on teardownMyeonghun Pak <[email protected]>
drm/aspeed: Balance the display clock enable on teardownSang-Hoon Choi <[email protected]>
gpio: exar: initialize the ID before registering its cleanupOleg Keri <[email protected]>
drm/dp: don't mark the AUX backlight enabled when enabling failedWaiman Long <[email protected]>
cgroup/cpuset: Don't access cpuset_cgrp_subsys.root inis_in_v2_mode()Cristian Ciocaltea <[email protected]>
drm/bridge: Fix unlocked list access indrm_bridge_attach()Cristian Ciocaltea <[email protected]>
drm/bridge: Fix unlockedlist_delindrm_bridge_add()Sai Teja Aluvala <[email protected]>
Bluetooth:btintel_pcie: Add shared HW reset for clean startRavindra <[email protected]>
Bluetooth:btintel_pcie: fix TX descriptor bounds checkNaomi Chu <[email protected]>
scsi: ufs: core: Hold a clock reference across the probeChristian Brauner <[email protected]>
fs: don't let a migrating task hide its reference fromdo_umount()Christian Brauner <[email protected]>
mount: refuseMOVE_MOUNT_SET_GROUPon an unbindable mountPeng Fan <[email protected]>
iommu/dma: skip swiotlb bounce forDMA_ATTR_MMIOiniommu_dma_map_physVincent Jardin <[email protected]>
arm64: dts: lx2160a: fix the iic5 spi3 pinmux offset and valueVincent Jardin <[email protected]>
arm64: dts: lx2160a: fix IIC1 pinmux submask rejected by pinctrl-singleVincent Jardin <[email protected]>
arm64: dts: lx2160a: fix incorrect pinmuxTaniya Das <[email protected]>
clk: qcom: gpucc-kaanapali: Mark the GPU CX GDSC as votableTaniya Das <[email protected]>
clk: qcom: gpucc-glymur: Mark the GPU CX GDSC as votableLuca Weiss <[email protected]>
clk: qcom: gcc-kaanapali: Fix always-enablingPCIE_RSCCclocksLuca Weiss <[email protected]>
clk: qcom: gcc-eliza: Fix always-enablingPCIE_RSCCclocksDarrick J. Wong <[email protected]>
xfs: fix exchange-range-to-eof file size exchangeNorbert Szetei <[email protected]>
xfs: stop exchanging reflink flags when exchanging mappingsChristian Brauner <[email protected]>
namespace: keep the lock on a mount that a propagated copy is moved beneathChristian Brauner <[email protected]>
namespace: handle mount locking for automounts correctlyChristian Brauner <[email protected]>
namespace: never expire a locked mountChristian Brauner <[email protected]>
nullfs: don't update the access timeChristian Brauner <[email protected]>
namespace: refuse an automount below a mount that is in no namespaceChristian Brauner <[email protected]>
fcntl: refuseF_SET_RW_HINTon an immutable inodeChristian Brauner <[email protected]>
namei: don't reveal overmounted entries in refwalkChristian Brauner <[email protected]>
namespace: unhash a dentry before detaching the mounts on itChristian Brauner <[email protected]>
namespace: don't let a pseudo dentry become the root of a mountChristian Brauner <[email protected]>
unshare: don't drop active namespace references that were never takenChristian Brauner <[email protected]>
dcache: don't put a mountpoint on a dentry that's being removedChristian Brauner <[email protected]>
namespace: check the mounts before reading their parents inpivot_root()Christian Brauner <[email protected]>
namespace: remove the fsnotify marks of a mount namespace in process contextChristian Brauner <[email protected]>
namespace: don't reconfigure internal superblocks via remount and umountChristian Brauner <[email protected]>
namespace: look at the topmost mount for a mount namespace fileChristian Brauner <[email protected]>
namespace: keep covered mounts covered inOPEN_TREE_NAMESPACEChristian Brauner <[email protected]>
namespace: check a recursive bind mount for mount namespace loopsChristian Brauner <[email protected]>
namespace: check a submount for references right before unmounting itChristian Brauner <[email protected]>
namespace: queue a mount only once for mount notificationsChristian Brauner <[email protected]>
namespace: check the target before walking it indo_mount_setattr()Christian Brauner <[email protected]>
fs: refusefspick()on internal superblocksChristian Brauner <[email protected]>
namespace: don't copy an unmounted mount treeChristian Brauner <[email protected]>
namespace: don't inheritMNT_UMOUNTinclone_mnt()Christian Brauner <[email protected]>
statmount: read the parent of an unmounted mount undermount_lockChristian Brauner <[email protected]>
namespace: reset the old parent's ->overmount in mnt_change_mountpoint()Christian Brauner <[email protected]>
fs: don't silently unmount busy mountsChristian Brauner <[email protected]>
mount: keep a copied mount unbindableLeo Li <[email protected]>
drm/amd/display: disable self-refresh on tearing flipsLeo Li <[email protected]>
drm/amd/display: Fix direct scanout alpha on someDRM_FORMATsJesse Zhang <[email protected]>
drm/amdgpu/userq: return thememdup_user()error for the user MQDJesse Zhang <[email protected]>
drm/amdgpu/userq: only accept doorbell BOs as queue doorbellMikhail Gavrilov <[email protected]>
drm/amdgpu: copy debugfs register data outside the GRBM/SRBM locksAlex Deucher <[email protected]>
drm/amdgpu: make Mac FB workaround genericVitaly Prosyak <[email protected]>
drm/amdgpu: serialize vblank counter reads against GPU resetHaojie Li <[email protected]>
drm/amdkfd: fixdma_bufreference leak inget_dmabuf_infoSaleel Kudchadker <[email protected]>
drm/amdkfd: align SDMA doorbell base for shader doorbell writesFelix Gu <[email protected]>
drm/bridge: th1520-dw-hdmi: Fixremove()callbackFelix Gu <[email protected]>
drm/bridge: th1520-dw-hdmi: Fix error check ondw_hdmi_probe()return valueThomas Hellström <[email protected]>
drm/xe: Fix stalepinned_linkentry when fb-pin performs the final unpinThomas Hellström <[email protected]>
drm/xe: Fix shrinker accounting double-subtraction on nested external pinsFan Wu <[email protected]>
drm/xe/i2c: cancel the client work on removeZack Rusin <[email protected]>
drm/vmwgfx: validate pitch coming from userspaceWentao Liang <[email protected]>
drm/vc4: Fix firmware reference leak invc4_drm_bind()Fan Wu <[email protected]>
drm/vc4: drain the hangcheck timer and works on V3D unbindOsama Abdelkader <[email protected]>
drm/panthor: validate userspace queue count against initialized firmware slot countGyeyoung Baek <[email protected]>
drm/imagination: Size page table preallocation by device addressKrzysztof Karas <[email protected]>
drm/i915/gt: Unmask interrupts only when ACTIVE is trueKrzysztof Karas <[email protected]>
drm/i915/gem: Prevent overstepping exec array boundarySajal Gupta <[email protected]>
drm/gud: don't keep a connector without a CRTC asconnector_stateNguyen Ngoc Thang <[email protected]>
drm/fb-helper: defer setup whenfbdev_probe()fails, not just on-EAGAINPalla Raghunath <[email protected]>
Bluetooth: RFCOMM: Fix NULLtty_devdereference inrfcomm_dev_shutdownMikhail Gavrilov <[email protected]>
Bluetooth: RFCOMM: connect the session socket withoutrfcomm_mutexMaxim Skokov <[email protected]>
Bluetooth: RFCOMM: free the skb when the DLC has no ownerAldo Ariel Panzardo <[email protected]>
Bluetooth: SCO: serialisesco_connlifetime againstsco_recv_scodata()Iaroslav Voitovych <[email protected]>
Bluetooth: MGMT: Fix status of pending commands flushed on power offChengfeng Ye <[email protected]>
Bluetooth: ISO: Serialize concurrent connect callsChengfeng Ye <[email protected]>
Bluetooth: ISO: Reject concurrent BIS listener setupChengfeng Ye <[email protected]>
Bluetooth:hci_sync: Fix command skb lifetime during scan setupChengfeng Ye <[email protected]>
Bluetooth:hci_sock: Serialize dead-device detachmentRunyu Xiao <[email protected]>
Bluetooth:btintel_pcie: use managed IRQ teardownChen Pei <[email protected]>
riscv: ptrace: reject CFI regset access when extensions are absentWei-Jie Hung <[email protected]>
riscv: patch: fix handling of bpf-jit execmem addressesShao Mingyin <[email protected]>
riscv: lib: Fix ZBB strnlen wrap-around regression on huge countsZongmin Zhou <[email protected]>
riscv: hwprobe: use_BITULL()rather thanBIT()in MIPS vendor uapi headerZiyi Guo <[email protected]>
riscv: futex: untag the user pointer before the atomic accessKarl Mehltretter <[email protected]>
riscv: fixload_unaligned_zeropad()fixup for RV32Zongmin Zhou <[email protected]>
riscv: errata: selectRISCV_ALTERNATIVE_EARLYfor THEAD GHOSTWRITEZiyi Guo <[email protected]>
riscv: entry: gate shadow call stack reload on sstatus.SPP, not tpStanley Jhu <[email protected]>
scsi: ufs: core: Decouple CQ sweep from request iterator in MCQStanley Jhu <[email protected]>
scsi: ufs: core: Avoid unsafe MMIO reads inufshcd_mcq_compl_all_cqes_lock()Runyu Xiao <[email protected]>
scsi: qedi: Initialize callback state before registrationAhmed Abdelhaleem Ahmed <[email protected]>
scsi: ch: Do not keep references to data transfer element devicesShawn Lin <[email protected]>
pmdomain: rockchip: propagate subdomain add errorsShawn Lin <[email protected]>
pmdomain: rockchip: fix clock leak on domain probe failureShawn Lin <[email protected]>
pmdomain: rockchip: don't ignore clock lookup errors on attachMing Qian <[email protected]>
pmdomain: imx8m-blk-ctrl: Serialize power on/off across sibling domainsRidham Khurana <[email protected]>
regulator: tps6594-regulator: Fixn_linear_rangesfor TPS65224 BUCK2-4Alexey Charkov <[email protected]>
regulator: of: fill in supply names inof_regulator_bulk_get_all()Abhishek Ojha <[email protected]>
regulator: ltc3676: don't read the write-only HRST and CLIRQ registersAlexey Charkov <[email protected]>
power: sequencing: pcie-m2: Fix leaking array fromof_regulator_bulk_get_all()Shao-Fu Chen <[email protected]>
optee: register TEE devices only once fully initializedDenis V. Lunev <[email protected]>
openvswitch: fix soft lockup in the netlink flow dumpKarl Bonde Torp <[email protected]>
nvme: fix swapped ZRASF zone state values for full and read onlyWeiming Shi <[email protected]>
net: team: free skb when broadcast has no txable portWeiming Shi <[email protected]>
net: team: stop reusing skb after queue overrideSuraj Gupta <[email protected]>
net: xilinx: axienet: Free outstanding DMA buffers on dmaengine stopFredrik Nyberg <[email protected]>
net: usb:ax88179_178a: fix rx frame length for non-last packetsDaniel Machon <[email protected]>
net: sparx5: free the matchall entry on destroyJosef Bacik <[email protected]>
net: skbuff: don't leave stale bytes inskb_copy_and_csum_bits()Sebastien Royen <[email protected]>
net: dsa: microchip: fix KSZ8765 fiber detectionZixuan Chai <[email protected]>
net: bridge: avoid recursive multicast port cleanupChengfeng Ye <[email protected]>
net/smc: protect clcsock lifetime insmc_getnameQuchaosheng <[email protected]>
net/packet: guard the ll header push inpacket_rcv_spkt()Guangshuo Li <[email protected]>
mmc: sdhci-sprd: disable runtime PM on removeYibo Tan <[email protected]>
mmc: mtk-sd: Cancel request timeout work on removeGuangshuo Li <[email protected]>
mmc: cavium-thunderx: destroy slot platform devices on removeGuangshuo Li <[email protected]>
mmc: cavium-octeon: destroy slot platform devices on removeMikulas Patocka <[email protected]>
dm: fix reading free memory indo_resumeMa Xinmeng <[email protected]>
dm-snap: reject the transient exception store for snapshot-mergeBen Cressey <[email protected]>
dm-integrity: fix buffer overflow in inline mode with large tag sizeBen Cressey <[email protected]>
dm-crypt: reject the lmk IV mode with AEAD ciphersMikhail Gavrilov <[email protected]>
mm: don't schedule deferred kernel page table freeing while bootingLorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fixlocked_vmleak by splitting VMA forMREMAP_DONTUNMAPNguyen Ngoc Thang <[email protected]>
memstick:rtsx_usb_ms: complete requests after eject instead of dropping themRaj Ojha <[email protected]>
memstick: core: wait for request completion before freeing card성병찬 <[email protected]>
KEYS: Fixadd_key()race with keyring restrictionKarl Mehltretter <[email protected]>
keys: finalize persistent keyring timeout after link attemptDaehyeon Ko <[email protected]>
ip6_gre: remove obsolete ERSPAN PMTU updateNatasha Klaus <[email protected]>
io_uring/net: populate CONNECT filter fields for 24-bytesockaddr_in6Eugene Gvozdetsky <[email protected]>
io_uring/register: don't exempt disabled rings from task restrictionsTristan Madani <[email protected]>
ice: fixmetadata_dstrefcount handling on representor teardownXuanqiang Luo <[email protected]>
ice: fix use-after-free in dynamic port cleanupMingming Cao <[email protected]>
ibmveth: fix TX LTB and filter unwind on open-failMingming Cao <[email protected]>
ibmveth:h_freelogical LAN on open-fail after registerJoshua Washington <[email protected]>
gve: fix XSK buffer leak on error descriptorJoshua Washington <[email protected]>
gve: fix XSK buffer leak when rings are stoppedJoshua Washington <[email protected]>
gve: fixnapi_disabledeadlock when attempting to disable XSK poolsJose Ignacio Tornos Martinez <[email protected]>
iavf: send MAC change request synchronouslyRidham Khurana <[email protected]>
gpio: xilinx: fix runtime PM leak on request error pathFan Wu <[email protected]>
gpio: mpsse: fix race when arming the IRQ poll workerEric Biggers <[email protected]>
fsverity: RCU-delay the freeing of structfsverity_infoVishal Badole <[email protected]>
EDAC/amd64: Mask UMC chip select to the four implemented selectsTony Nguyen <[email protected]>
e1000e: add system to disable K1 listCarlos Llamas <[email protected]>
selftests/mm: cleanup -Wformat issues in hugetlb-mmapHui Peng <[email protected]>
sctp: copy zeroed stats to user insctp_getsockopt_pr_streamstatus()when !streamouteStephen Smalley <[email protected]>
selinux: preserveNATIVE_LABELSon already-initialized sb inset_mnt_optsChristian Göttsche <[email protected]>
selinux: fix data race on AVClatest_notifYong-Xuan Wang <[email protected]>
RISC-V: Clear HSTATUS.HU on CPU initializationJohannes Berg <[email protected]>
Revert "wifi: libertas: reject short monitor TX frames"Chengfeng Ye <[email protected]>
tipc: hold a reference to nodes found by link nameYuqi Xu <[email protected]>
tipc: destroy topsrv workqueues before closing connectionsDaehyeon Ko <[email protected]>
tcp: rejectnet_iovin zerocopy receive mapping hintsMarek Szyprowski <[email protected]>
swiotlb: fixdefault_swiotlb_limit()for non-growable default poolSabrina Dubroca <[email protected]>
strparser: make sure__strp_recvisn't running before tearing down the parserGeorgiy Osokin <[email protected]>
tee: shm: reject zero-sized allocations intee_dyn_shm_alloc_helper()Josef Bacik <[email protected]>
xen/netfront: don't leak the skb whenxennet_fill_frags()failsBorislav Petkov (AMD) <[email protected]>
x86/CPU/AMD: Fix AMD TLBI Erratum #1718Pavankumar Kondeti <[email protected]>
workqueue: Fix NULLcurrent_pwqderef in chained work checkJason A. Donenfeld <[email protected]>
wireguard: noise: reject response consumption after intermediate initiationRamses de Norre <[email protected]>
wireguard: queueing: preservetstamp_typewhen encapsulating packetLu Huang <[email protected]>
wifi: mt76: mt7996: fix uninitialized buf read inmt7996_variant_fem_init()Cristian Papa <[email protected]>
wifi: mt76: mt7603: initialize global station WCIDMichele Dionisio <[email protected]>
wifi: brcmfmac: fix P2P device removal race inbrcmf_detach()Daehyeon Ko <[email protected]>
vsock/virtio: account only unread bytes inread_skb()Ji-Ze Hong (Peter Hong) <[email protected]>
usb: f81604: fix struct f81604_int_data size mismatchPalla Raghunath <[email protected]>
dm ioctl: don't letdata_startrun past the bufferDaehyeon Ko <[email protected]>
cipso: adjust cached option offsets when removing CIPSOWaiman Long <[email protected]>
cgroup/cpuset: Handle cpu hotplug race inguarantee_active_cpus()Oliver Hartkopp <[email protected]>
can: fix unique skb identifier regression under RPSzjamg <[email protected]>
can: dev:init_can_skb(): restore skb header initializationWentao Liang <[email protected]>
btrfs: scrub: fixlocal_rootreference leak inscrub_print_warning_inode()Hengyu Liang <[email protected]>
ata: libata-scsi: do not lose CHECK CONDITION for failed ATAPI commandsMichael Garland <[email protected]>
ASoC: amd: yc: Add DMI quirk for Acer Aspire Go 15 (AG15-21P)Karl Mehltretter <[email protected]>
arm64: irq: exclude the softirq stack switch from KCOVMohamed Yassine Jebabli <[email protected]>
ALSA: hda/tas2781: Accept V1 calibration data without CRCHarin Lee <[email protected]>
ALSA: ctxfi: Fix memory leakage when clearing DAO input mappersKrzysztof Furman <[email protected]>
Input: xpad - add support for Corsair Novablade ProBihaan Sen <[email protected]>
Input: xpad - add support for 8BitDo Pro 2 Wired Controller for XboxHaotian Zhang <[email protected]>
Input:ati_remote2- fix type confusion in device attribute handlersDaehyeon Ko <[email protected]>
ipv6: do not warn on route notification size raceDaehyeon Ko <[email protected]>
ipv4: do not warn on route notification size raceDaehyeon Ko <[email protected]>
ipv4: stop route notification sizing when nexthop group shrinksDaehyeon Ko <[email protected]>
ipv4: stop exception dump when nexthop group shrinksDaehyeon Ko <[email protected]>
ipv4: stop PMTU walk when nexthop group shrinksAlice Ryhl <[email protected]>
rust_binder: reschedule node refcount update on thread exitMichael S. Tsirkin <[email protected]>
ipv4: validatechecksum_startbefore completing checksumIdo Schimmel <[email protected]>
ipv6: udp: Create exceptions before socket matchingIdo Schimmel <[email protected]>
ipv4: udp: Create exceptions before socket matchingIdo Schimmel <[email protected]>
ipv6: Fix redirect exception creation for UDP/RAW socketsJerome Tollet <[email protected]>
net/mlx5e: Prevent stale XSK buffer release on MPWQE refill retryJerome Tollet <[email protected]>
net/mlx5e: Prevent stale XSK buffer release on refill retryMatthew Wilcox (Oracle) <[email protected]>
fs: Free any excess xarray nodes inclear_inode()Eric Dumazet <[email protected]>
bnxt_en: fix DMA mapping length for padded small packets-------------
Diffstat:
Documentation/networking/strparser.rst | 2 +- Makefile | 4 +- arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi | 19 +- arch/arm64/include/asm/el2_setup.h | 5 +- arch/arm64/kernel/Makefile | 3 + arch/riscv/Kconfig | 5 +- arch/riscv/Kconfig.errata | 1 + arch/riscv/include/asm/cpufeature.h | 2 + arch/riscv/include/asm/futex.h | 2 + arch/riscv/include/asm/scs.h | 17 +- arch/riscv/include/asm/vector.h | 8 +- arch/riscv/include/uapi/asm/vendor/mips.h | 4 +- arch/riscv/kernel/cpufeature.c | 12 + arch/riscv/kernel/entry.S | 2 +- arch/riscv/kernel/patch.c | 2 +- arch/riscv/kernel/ptrace.c | 8 + arch/riscv/kernel/setup.c | 2 + arch/riscv/kernel/smpboot.c | 2 + arch/riscv/kernel/suspend.c | 2 + arch/riscv/lib/strnlen.S | 20 +- arch/riscv/mm/extable.c | 4 +- arch/um/drivers/vector_transports.c | 1 + arch/x86/include/asm/cpufeatures.h | 3 + arch/x86/include/asm/tlb.h | 6 + arch/x86/kernel/cpu/amd.c | 4 + drivers/android/binder/node.rs | 20 +- drivers/android/binder/node/wrapper.rs | 34 ++- drivers/ata/libata-scsi.c | 13 +- drivers/block/zloop.c | 31 ++- drivers/bluetooth/btintel_pcie.c | 17 +- drivers/clk/qcom/gcc-eliza.c | 6 +- drivers/clk/qcom/gcc-kaanapali.c | 6 +- drivers/clk/qcom/gpucc-glymur.c | 2 +- drivers/clk/qcom/gpucc-kaanapali.c | 2 +- drivers/edac/amd64_edac.c | 4 +- drivers/gpio/gpio-exar.c | 2 +- drivers/gpio/gpio-mpsse.c | 24 +- drivers/gpio/gpio-xilinx.c | 9 +- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 8 +- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 77 ++++--- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 17 +- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 + drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 13 +- drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 9 +- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 32 ++- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 7 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 ++- .../drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 20 +- drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 5 +- drivers/gpu/drm/bridge/th1520-dw-hdmi.c | 8 +- drivers/gpu/drm/display/drm_dp_helper.c | 4 +- drivers/gpu/drm/drm_bridge.c | 8 +- drivers/gpu/drm/drm_fb_helper.c | 6 +- drivers/gpu/drm/gud/gud_pipe.c | 1 + drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- drivers/gpu/drm/i915/gt/intel_rps.c | 3 +- drivers/gpu/drm/imagination/pvr_mmu.c | 25 +- drivers/gpu/drm/imagination/pvr_vm.c | 8 +- drivers/gpu/drm/panthor/panthor_sched.c | 3 + drivers/gpu/drm/vc4/vc4_bo.c | 5 +- drivers/gpu/drm/vc4/vc4_drv.c | 5 +- drivers/gpu/drm/vc4/vc4_drv.h | 2 +- drivers/gpu/drm/vc4/vc4_gem.c | 8 +- drivers/gpu/drm/vc4/vc4_irq.c | 24 +- drivers/gpu/drm/vc4/vc4_v3d.c | 65 +++--- drivers/gpu/drm/vc4/vc4_validate.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_cursor_plane.c | 26 ++- drivers/gpu/drm/xe/display/xe_fb_pin.c | 6 +- drivers/gpu/drm/xe/xe_bo.c | 139 ++++++++--- drivers/gpu/drm/xe/xe_bo.h | 2 + drivers/gpu/drm/xe/xe_i2c.c | 5 +- drivers/gpu/drm/xe/xe_lrc.c | 38 +-- drivers/gpu/drm/xe/xe_mmio.c | 5 +- drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 16 +- drivers/input/joystick/xpad.c | 4 + drivers/input/misc/ati_remote2.c | 12 +- drivers/iommu/dma-iommu.c | 4 +- drivers/md/dm-crypt.c | 7 +- drivers/md/dm-integrity.c | 4 +- drivers/md/dm-ioctl.c | 14 +- drivers/md/dm-snap.c | 14 ++ drivers/memstick/core/memstick.c | 8 +- drivers/memstick/host/rtsx_usb_ms.c | 31 +-- drivers/mmc/host/cavium-octeon.c | 5 +- drivers/mmc/host/cavium-thunderx.c | 5 +- drivers/mmc/host/mtk-sd.c | 1 + drivers/mmc/host/sdhci-sprd.c | 4 + drivers/net/amt.c | 48 ++-- drivers/net/bareudp.c | 3 +- drivers/net/bonding/bond_main.c | 8 +- drivers/net/can/dev/skb.c | 4 + drivers/net/can/usb/f81604.c | 2 +- drivers/net/can/vxcan.c | 3 + drivers/net/dsa/microchip/ksz_common.h | 2 +- drivers/net/ethernet/airoha/airoha_eth.c | 32 ++- drivers/net/ethernet/airoha/airoha_eth.h | 2 + drivers/net/ethernet/broadcom/bnxt/bnxt.c | 199 ++++++++++------ drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 - drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 11 + .../chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 4 +- drivers/net/ethernet/google/gve/gve_main.c | 8 +- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 13 +- drivers/net/ethernet/ibm/ibmveth.c | 22 +- drivers/net/ethernet/intel/e1000e/netdev.c | 7 + drivers/net/ethernet/intel/iavf/iavf.h | 11 +- drivers/net/ethernet/intel/iavf/iavf_main.c | 85 +++++-- drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 99 +++++++- drivers/net/ethernet/intel/ice/devlink/port.c | 2 +- drivers/net/ethernet/intel/ice/ice_eswitch.c | 2 +- drivers/net/ethernet/intel/ice/ice_txrx.c | 4 +- .../net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 + drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 13 +- .../ethernet/mellanox/mlx5/core/esw/adj_vport.c | 20 -- drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c | 79 +++++-- drivers/net/ethernet/mellanox/mlx5/core/vport.c | 24 -- drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 2 + drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 10 +- .../net/ethernet/mellanox/mlxsw/spectrum_flower.c | 9 +- drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c | 28 ++- .../ethernet/microchip/sparx5/sparx5_tc_matchall.c | 1 + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 15 +- drivers/net/ethernet/xilinx/xilinx_axienet.h | 7 +- drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 53 ++++- drivers/net/pfcp.c | 7 + drivers/net/team/team_core.c | 16 +- drivers/net/team/team_mode_broadcast.c | 2 + drivers/net/tun.c | 23 +- drivers/net/usb/ax88179_178a.c | 6 +- drivers/net/veth.c | 1 + drivers/net/virtio_net.c | 2 + drivers/net/wireguard/noise.c | 7 +- drivers/net/wireguard/queueing.h | 2 + drivers/net/wireless/ath/ath12k/core.c | 33 +-- drivers/net/wireless/ath/ath12k/core.h | 3 - drivers/net/wireless/ath/ath12k/hif.h | 9 - drivers/net/wireless/ath/ath12k/pci.c | 8 - .../wireless/broadcom/brcm80211/brcmfmac/core.c | 27 ++- drivers/net/wireless/marvell/libertas/tx.c | 7 - drivers/net/wireless/mediatek/mt76/mt76.h | 10 + drivers/net/wireless/mediatek/mt76/mt7603/init.c | 1 + .../net/wireless/mediatek/mt76/mt76_connac_mcu.h | 1 + drivers/net/wireless/mediatek/mt76/mt7915/init.c | 6 + drivers/net/wireless/mediatek/mt76/mt7915/main.c | 2 + drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 3 +- drivers/net/wireless/mediatek/mt76/mt7925/main.c | 12 + .../net/wireless/mediatek/mt76/mt792x_acpi_sar.c | 134 +++++++---- .../net/wireless/mediatek/mt76/mt792x_acpi_sar.h | 2 + drivers/net/wireless/mediatek/mt76/mt7996/init.c | 3 +- drivers/net/wireless/mediatek/mt76/mt7996/main.c | 10 +- drivers/net/wireless/mediatek/mt76/mt7996/mcu.h | 3 + drivers/net/wireless/mediatek/mt76/tx.c | 89 +++++++- drivers/net/xen-netfront.c | 4 +- drivers/nvme/target/core.c | 2 +- drivers/nvme/target/pr.c | 4 + drivers/pmdomain/imx/imx8m-blk-ctrl.c | 15 ++ drivers/pmdomain/rockchip/pm-domains.c | 20 +- drivers/power/sequencing/pwrseq-pcie-m2.c | 2 + drivers/ptp/ptp_ocp.c | 2 +- drivers/regulator/ltc3676.c | 15 +- drivers/regulator/of_regulator.c | 24 +- drivers/regulator/tps6594-regulator.c | 6 +- drivers/scsi/ch.c | 29 +-- drivers/scsi/qedi/qedi_main.c | 3 +- drivers/spi/spi-nxp-fspi.c | 22 +- drivers/spi/spi-sg2044-nor.c | 60 ++++- drivers/tee/optee/ffa_abi.c | 38 ++- drivers/tee/optee/optee_msg.h | 4 +- drivers/tee/optee/smc_abi.c | 17 +- drivers/tee/tee_shm.c | 4 + drivers/ufs/core/ufs-mcq.c | 30 +-- drivers/ufs/core/ufshcd.c | 53 +++-- drivers/ufs/host/ufs-mediatek.c | 18 +- fs/btrfs/inode.c | 7 +- fs/btrfs/ioctl.c | 31 +-- fs/btrfs/scrub.c | 4 +- fs/btrfs/xattr.c | 15 +- fs/dcache.c | 4 +- fs/fcntl.c | 3 + fs/fs_context.c | 4 + fs/inode.c | 23 +- fs/mount.h | 6 +- fs/namei.c | 29 +++ fs/namespace.c | 254 ++++++++++++++++----- fs/nullfs.c | 4 +- fs/pnode.c | 108 +++++++-- fs/verity/fsverity_private.h | 15 +- fs/verity/open.c | 13 +- fs/xfs/libxfs/xfs_exchmaps.c | 103 ++------- fs/xfs/libxfs/xfs_log_format.h | 4 +- fs/xfs/xfs_bmap_util.c | 15 +- fs/xfs/xfs_exchrange.c | 51 +++-- include/linux/can/core.h | 3 +- include/linux/can/skb.h | 4 +- include/linux/io_uring_types.h | 2 + include/linux/mount.h | 2 +- include/linux/nsproxy.h | 1 + include/linux/nvme.h | 4 +- include/linux/sched/ext.h | 1 + include/linux/virtio_net.h | 64 +++--- include/net/amt.h | 4 - include/net/bluetooth/rfcomm.h | 1 + include/net/can.h | 2 + include/net/cfg80211.h | 1 + include/net/ip.h | 7 + include/net/mac80211.h | 14 +- include/net/strparser.h | 10 +- io_uring/io_uring.c | 13 +- io_uring/kbuf.c | 6 +- io_uring/memmap.c | 47 +++- io_uring/memmap.h | 2 +- io_uring/net.c | 4 +- io_uring/register.c | 21 +- io_uring/zcrx.c | 2 +- kernel/cgroup/cpuset.c | 40 +++- kernel/dma/swiotlb.c | 6 +- kernel/fork.c | 3 +- kernel/nsproxy.c | 2 +- kernel/sched/ext/ext.c | 25 +- kernel/sched/ext/internal.h | 5 + kernel/sched/sched.h | 1 - kernel/workqueue.c | 2 +- lib/dim/dim.c | 10 +- mm/mremap.c | 70 ++++-- mm/pgtable-generic.c | 20 +- mm/vma.c | 21 +- mm/vma.h | 7 +- net/bluetooth/hci_core.c | 4 + net/bluetooth/hci_sock.c | 2 + net/bluetooth/hci_sync.c | 10 +- net/bluetooth/iso.c | 52 ++++- net/bluetooth/mgmt.c | 2 +- net/bluetooth/rfcomm/core.c | 134 +++++++---- net/bluetooth/rfcomm/sock.c | 5 +- net/bluetooth/rfcomm/tty.c | 2 +- net/bluetooth/sco.c | 87 +++++-- net/bridge/br_multicast.c | 23 +- net/bridge/netfilter/nf_conntrack_bridge.c | 10 +- net/can/af_can.c | 47 +++- net/can/gw.c | 3 + net/can/isotp.c | 16 +- net/can/raw.c | 10 +- net/core/dev.c | 11 +- net/core/flow_dissector.c | 11 +- net/core/skbuff.c | 6 +- net/devlink/core.c | 10 +- net/ipv4/cipso_ipv4.c | 8 + net/ipv4/fib_semantics.c | 3 + net/ipv4/fib_trie.c | 2 - net/ipv4/ip_output.c | 10 +- net/ipv4/route.c | 5 + net/ipv4/tcp.c | 2 + net/ipv4/udp.c | 11 + net/ipv6/ip6_gre.c | 7 - net/ipv6/route.c | 4 +- net/ipv6/udp.c | 13 ++ net/mac80211/debugfs.c | 13 +- net/mac80211/ieee80211_i.h | 2 + net/mac80211/main.c | 1 + net/mac80211/sta_info.c | 17 +- net/mac80211/sta_info.h | 3 +- net/mac80211/status.c | 5 +- net/mac80211/tx.c | 70 ++++-- net/netfilter/nfnetlink_queue.c | 7 + net/netfilter/xt_CHECKSUM.c | 6 +- net/openvswitch/actions.c | 7 +- net/openvswitch/datapath.c | 8 + net/packet/af_packet.c | 28 ++- net/sched/cls_route.c | 6 + net/sched/em_text.c | 3 + net/sctp/socket.c | 6 +- net/smc/af_smc.c | 7 +- net/strparser/strparser.c | 6 +- net/tipc/node.c | 10 +- net/tipc/topsrv.c | 80 +++++-- net/vmw_vsock/af_vsock.c | 2 + net/vmw_vsock/virtio_transport_common.c | 4 +- net/xfrm/xfrm_output.c | 16 +- security/keys/key.c | 6 +- security/keys/persistent.c | 55 +++-- security/selinux/avc.c | 5 +- security/selinux/hooks.c | 9 +- sound/hda/codecs/side-codecs/tas2781_hda.c | 18 +- sound/pci/ctxfi/ctdaio.c | 6 +- sound/soc/amd/yc/acp6x-mach.c | 7 + sound/soc/codecs/adau1372.c | 18 +- sound/soc/samsung/i2s.c | 8 + sound/soc/sdw_utils/soc_sdw_utils.c | 35 ++- tools/testing/selftests/mm/hugetlb-mmap.c | 4 +- tools/testing/vma/tests/vma.c | 4 +- 289 files changed, 3322 insertions(+), 1484 deletions(-)
Hi
kernel build / boot test on x86_64 (Intel).
No regressions here.
Thanks
Quoted 8 lines · On Tue, 13 Oct 2026 13:35:16 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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, 15 Oct 2026 11:28:22 +0000. Anything received after that time might be too late.
Boot-tested under QEMU for Rust x86_64, arm64; built-tested for loongarch64 and arm32:
riscv64 fails (as mentioned in the patch).
Thanks!
Cheers,
Miguel
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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, 15 Oct 2026 11:28:22 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v7.x/stable-review/patch-7.2.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-7.2.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Am 13.10.2026 um 13:35 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697v2 server. No dmesg oddities or regressions found.
Beste Grüße,
Peter Schneider
Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge, enjoy the air and behold the view. Climb it so you can see the world, not so the world can see you. -- David McCullough Jr. OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244 Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc https://keys.mailvelope.com/pks/lookup?op=get&[email protected] https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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, 15 Oct 2026 11:28:22 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v7.x/stable-review/patch-7.2.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-7.2.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 7.2.11 release. There are 281 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, 15 Oct 2026 11:28:22 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v7.x/stable-review/patch-7.2.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-7.2.y
and the diffstat can be found below.thanks,
greg k-h
Tested rc1 against the Fedora build system (aarch64, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.
# Librecast Test Results
044/044 [ OK ] liblcrq
010/010 [ OK ] libmld
120/120 [ OK ] liblibrecast
CPU/kernel: Linux auntie 7.2.11-rc1-gc24fcd821ad0 #2 SMP PREEMPT_DYNAMIC Wed Oct 14 11:40:20 -00 2026 x86_64 AMD Ryzen 9 9950X 16-Core Processor AuthenticAMD GNU/Linux