6.12.46-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainerPATCH 138/175 mm: slub: call WARN() when detecting a slab corruption
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hyesoo Yu <[email protected]>
[ Upstream commit 3f6f32b14ab35452d2ed52f7821cf2829923c98d ]
If a slab object is corrupted or an error occurs in its internal validation, continuing after restoration may cause other side effects. At this point, it is difficult to debug because the problem occurred in the past. It is useful to use WARN() to catch errors at the point of issue because WARN() could trigger panic for system debugging when panic_on_warn is enabled. WARN() is added where to detect the error on slab_err and object_err.
It makes sense to only do the WARN() after printing the logs. slab_err is splited to __slab_err that calls the WARN() and it is called after printing logs.
Stable-dep-of: b4efccec8d06 ("mm/slub: avoid accessing metadata when pointer is invalid in object_err()")
--- mm/slub.c | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-)
mm/slub.c +29 -18
@@ -1036,7 +1036,7 @@ static void slab_bug(struct kmem_cache * vaf.fmt = fmt; vaf.va = &args;pr_err ("=============================================================================\n" ); -pr_err ("BUG %s (%s): %pV\n" , s->name,print_tainted (), &vaf); +pr_err ("BUG %s (%s): %pV\n" , s ? s->name :"<unknown>" ,print_tainted (), &vaf);pr_err ("-----------------------------------------------------------------------------\n\n" );va_end (args); }
@@ -1095,8 +1095,6 @@ static void print_trailer(struct kmem_ca/* Beginning of the filler is the free pointer */ print_section (KERN_ERR ,"Padding " , p + off,size_from_object (s) - off); - -dump_stack (); } static void object_err(struct kmem_cache *s, struct slab *slab,
@@ -1108,6 +1106,8 @@ static void object_err(struct kmem_cacheslab_bug (s,"%s" , reason);print_trailer (s, slab, object);add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE ); + +WARN_ON (1 ); } static bool freelist_corrupted(struct kmem_cache *s, struct slab *slab,
@@ -1124,6 +1124,17 @@ static bool freelist_corrupted(struct kmreturn false; } +static void __slab_err (struct slab *slab) +{ +if (slab_in_kunit_test ()) +return ; + +print_slab_info (slab); +add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE ); + +WARN_ON (1 ); +} + static __printf(3, 4) void slab_err(struct kmem_cache *s, struct slab *slab, const char *fmt, ...) {
@@ -1137,9 +1148,7 @@ static __printf(3, 4) void slab_err(struvsnprintf (buf,sizeof (buf), fmt, args);va_end (args);slab_bug (s,"%s" , buf); -print_slab_info (slab); -dump_stack (); -add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE ); +__slab_err (slab); }static void init_object (struct kmem_cache *s,void *object,u8 val)
@@ -1312,9 +1321,10 @@ slab_pad_check(struct kmem_cache *s, strwhile (end > fault && end[-1 ] ==POISON_INUSE ) end--; -slab_err (s, slab,"Padding overwritten. 0x%p-0x%p @offset=%tu" , - fault, end -1 , fault - start); +slab_bug (s,"Padding overwritten. 0x%p-0x%p @offset=%tu" , + fault, end -1 , fault - start);print_section (KERN_ERR ,"Padding " , pad, remainder); +__slab_err (slab);restore_bytes (s,"slab padding" ,POISON_INUSE , fault, end); }
@@ -1630,12 +1640,12 @@ static inline int free_consistency_checkslab_err (s, slab,"Attempt to free object(0x%p) outside of slab" , object); }else if (!slab->slab_cache) { -pr_err ("SLUB <none>: no slab for object 0x%p.\n" , - object); -dump_stack (); - }else +slab_err (NULL , slab,"No slab cache for object 0x%p" , + object); + }else {object_err (s, slab, object, -"page slab pointer corrupt." ); +"page slab pointer corrupt." ); + }return 0 ; }return 1 ;
@@ -5450,14 +5460,14 @@ static int calculate_sizes(struct kmem_creturn !!oo_objects (s->oo); } -static void list_slab_objects (struct kmem_cache *s,struct slab *slab, -const char *text) +static void list_slab_objects (struct kmem_cache *s,struct slab *slab) {#ifdef CONFIG_SLUB_DEBUG void *addr =slab_address (slab);void *p; -slab_err (s, slab, text, s->name); +if (!slab_add_kunit_errors ()) +slab_bug (s,"Objects remaining on __kmem_cache_shutdown()" );spin_lock (&object_map_lock);__fill_map (object_map, s, slab);
@@ -5472,6 +5482,8 @@ static void list_slab_objects(struct kme } }spin_unlock (&object_map_lock); + +__slab_err (slab);#endif }
@@ -5492,8 +5504,7 @@ static void free_partial(struct kmem_cacremove_partial (n, slab);list_add (&slab->slab_list, &discard); }else { -list_slab_objects (s, slab, -"Objects remaining in %s on __kmem_cache_shutdown()" ); +list_slab_objects (s, slab); } }spin_unlock_irq (&n->list_lock);
Greg Kroah-Hartman
maintainerPATCH 139/175 mm, slab: cleanup slab_bug() parameters
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vlastimil Babka <[email protected]>
[ Upstream commit 4b183dd9359d5772446cb634b12a383bed98c4fc ]
slab_err() has variadic printf arguments but instead of passing them to slab_bug() it does vsnprintf() to a buffer and passes %s, buf.
To allow passing them directly, turn slab_bug() to __slab_bug() with a va_list parameter, and slab_bug() a wrapper with fmt, ... parameters. Then slab_err() can call __slab_bug() without the intermediate buffer.
Also constify fmt everywhere, which also simplifies object_err()'s call to slab_bug().
Stable-dep-of: b4efccec8d06 ("mm/slub: avoid accessing metadata when pointer is invalid in object_err()")
--- mm/slub.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
mm/slub.c +18 -10
@@ -1027,12 +1027,12 @@ void skip_orig_size_check(struct kmem_caset_orig_size (s, (void *)object, s->object_size); } -static void slab_bug (struct kmem_cache *s,char *fmt, ...) +static void __slab_bug (struct kmem_cache *s,const char *fmt,va_list argsp) {struct va_format vaf;va_list args; -va_start (args, fmt); +va_copy (args, argsp); vaf.fmt = fmt; vaf.va = &args;pr_err ("=============================================================================\n" );
@@ -1041,8 +1041,17 @@ static void slab_bug(struct kmem_cache *va_end (args); } +static void slab_bug (struct kmem_cache *s,const char *fmt, ...) +{ +va_list args; + +va_start (args, fmt); +__slab_bug (s, fmt, args); +va_end (args); +} + __printf(2, 3) -static void slab_fix (struct kmem_cache *s,char *fmt, ...) +static void slab_fix (struct kmem_cache *s,const char *fmt, ...) {struct va_format vaf;va_list args;
@@ -1098,12 +1107,12 @@ static void print_trailer(struct kmem_ca }static void object_err (struct kmem_cache *s,struct slab *slab, -u8 *object,char *reason) +u8 *object,const char *reason) {if (slab_add_kunit_errors ())return ; -slab_bug (s,"%s" , reason); +slab_bug (s, reason);print_trailer (s, slab, object);add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE );
@@ -1139,15 +1148,14 @@ static __printf(3, 4) void slab_err(stru const char *fmt, ...) {va_list args; -char buf[100 ];if (slab_add_kunit_errors ())return ;va_start (args, fmt); -vsnprintf (buf,sizeof (buf), fmt, args); +__slab_bug (s, fmt, args);va_end (args); -slab_bug (s,"%s" , buf); +__slab_err (slab); }
@@ -1185,7 +1193,7 @@ static void init_object(struct kmem_cach s->inuse - poison_size); } -static void restore_bytes (struct kmem_cache *s,char *message,u8 data, +static void restore_bytes (struct kmem_cache *s,const char *message,u8 data,void *from,void *to) {slab_fix (s,"Restoring %s 0x%p-0x%p=0x%x" , message, from, to -1 , data);
@@ -1200,7 +1208,7 @@ static void restore_bytes(struct kmem_ca static pad_check_attributes intcheck_bytes_and_report (struct kmem_cache *s,struct slab *slab, -u8 *object,char *what,u8 *start,unsigned int value, +u8 *object,const char *what,u8 *start,unsigned int value,unsigned int bytes,bool slab_obj_print) {u8 *fault;
Greg Kroah-Hartman
maintainerPATCH 140/175 mm/slub: avoid accessing metadata when pointer is invalid in object_err()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Qiong <[email protected]>
[ Upstream commit b4efccec8d06ceb10a7d34d7b1c449c569d53770 ]
object_err() reports details of an object for further debugging, such as the freelist pointer, redzone, etc. However, if the pointer is invalid, attempting to access object metadata can lead to a crash since it does not point to a valid object.
One known path to the crash is when alloc_consistency_checks() determines the pointer to the allocated object is invalid because of a freelist corruption, and calls object_err() to report it. The debug code should report and handle the corruption gracefully and not crash in the process.
In case the pointer is NULL or check_valid_pointer() returns false for the pointer, only print the pointer value and skip accessing metadata.
--- mm/slub.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
mm/slub.c +6 -1
@@ -1113,7 +1113,12 @@ static void object_err(struct kmem_cachereturn ;slab_bug (s, reason); -print_trailer (s, slab, object); +if (!object || !check_valid_pointer (s, slab, object)) { +print_slab_info (slab); +pr_err ("Invalid pointer 0x%p\n" , object); + }else { +print_trailer (s, slab, object); + }add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE );WARN_ON (1 );
Greg Kroah-Hartman
maintainerPATCH 141/175 nouveau: fix disabling the nonstall irq due to storm code
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Airlie <[email protected]>
[ Upstream commit 0ef5c4e4dbbfcebaa9b2eca18097b43016727dfe ]
Nouveau has code that when it gets an IRQ with no allowed handler it disables it to avoid storms.
However with nonstall interrupts, we often disable them from the drm driver, but still request their emission via the push submission.
Just don't disable nonstall irqs ever in normal operation, the event handling code will filter them out, and the driver will just enable/disable them at load time.
This fixes timeouts we've been seeing on/off for a long time, but they became a lot more noticeable on Blackwell.
This doesn't fix all of them, there is a subsequent fence emission fix to fix the last few.
[ Fix a typo and a minor checkpatch.pl warning; remove "v2" from commit
subject. - Danilo ]
--- drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c | 23 +++++++++++++++-------- drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c | 1 + drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.c | 1 + 5 files changed, 21 insertions(+), 8 deletions(-)
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +2 -0
@@ -352,6 +352,8 @@ nvkm_fifo_dtor(struct nvkm_engine *enginmutex_destroy (&fifo->userd.mutex);nvkm_event_fini (&fifo->nonstall.event); +if (fifo->func->nonstall_dtor) + fifo->func->nonstall_dtor (fifo);mutex_destroy (&fifo->mutex);if (fifo->func->dtor)
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c +15 -8
@@ -517,19 +517,11 @@ ga100_fifo_nonstall_intr(struct nvkm_intstatic void ga100_fifo_nonstall_block (struct nvkm_event *event,int type,int index) { -struct nvkm_fifo *fifo =container_of (event,typeof (*fifo), nonstall.event); -struct nvkm_runl *runl =nvkm_runl_get (fifo, index,0 ); - -nvkm_inth_block (&runl->nonstall.inth); }static void ga100_fifo_nonstall_allow (struct nvkm_event *event,int type,int index) { -struct nvkm_fifo *fifo =container_of (event,typeof (*fifo), nonstall.event); -struct nvkm_runl *runl =nvkm_runl_get (fifo, index,0 ); - -nvkm_inth_allow (&runl->nonstall.inth); } const struct nvkm_event_func
@@ -564,12 +556,26 @@ ga100_fifo_nonstall_ctor(struct nvkm_fifif (ret)return ret; +nvkm_inth_allow (&runl->nonstall.inth); + nr =max (nr, runl->id +1 ); }return nr; } +void +ga100_fifo_nonstall_dtor (struct nvkm_fifo *fifo) +{ +struct nvkm_runl *runl; + + nvkm_runl_foreach(runl, fifo) { +if (runl->nonstall.vector <0 ) +continue ; +nvkm_inth_block (&runl->nonstall.inth); + } +} +int ga100_fifo_runl_ctor (struct nvkm_fifo *fifo) {
@@ -599,6 +605,7 @@ ga100_fifo = { .runl_ctor = ga100_fifo_runl_ctor, .mmu_fault = &tu102_fifo_mmu_fault, .nonstall_ctor = ga100_fifo_nonstall_ctor, + .nonstall_dtor = ga100_fifo_nonstall_dtor, .nonstall = &ga100_fifo_nonstall, .runl = &ga100_runl, .runq = &ga100_runq,
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.c +1 -0
@@ -30,6 +30,7 @@ ga102_fifo = { .runl_ctor = ga100_fifo_runl_ctor, .mmu_fault = &tu102_fifo_mmu_fault, .nonstall_ctor = ga100_fifo_nonstall_ctor, + .nonstall_dtor = ga100_fifo_nonstall_dtor, .nonstall = &ga100_fifo_nonstall, .runl = &ga100_runl, .runq = &ga100_runq,
drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +2 -0
@@ -40,6 +40,7 @@ struct nvkm_fifo_func {void (*start)(struct nvkm_fifo *,unsigned long *);int (*nonstall_ctor)(struct nvkm_fifo *); +void (*nonstall_dtor)(struct nvkm_fifo *);const struct nvkm_event_func *nonstall;const struct nvkm_runl_func *runl;
@@ -198,6 +199,7 @@ extern const struct nvkm_fifo_func_mmu_fint ga100_fifo_runl_ctor (struct nvkm_fifo *);int ga100_fifo_nonstall_ctor (struct nvkm_fifo *); +void ga100_fifo_nonstall_dtor (struct nvkm_fifo *);extern const struct nvkm_event_func ga100_fifo_nonstall;extern const struct nvkm_runl_func ga100_runl;extern const struct nvkm_runq_func ga100_runq;
drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.c +1 -0
@@ -660,6 +660,7 @@ r535_fifo_new(const struct nvkm_fifo_fun rm->chan.func = &r535_chan; rm->nonstall = &ga100_fifo_nonstall; rm->nonstall_ctor = ga100_fifo_nonstall_ctor; + rm->nonstall_dtor = ga100_fifo_nonstall_dtor;return nvkm_fifo_new_ (rm, device, type, inst, pfifo); }
Greg Kroah-Hartman
maintainerPATCH 142/175 kunit: kasan_test: disable fortify string checker on kasan_strings() test
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yeoreum Yun <[email protected]>
Similar to commit 09c6304e38e4 ("kasan: test: fix compatibility with FORTIFY_SOURCE") the kernel is panicing in kasan_string().
This is due to the src and ptr not being hidden from the optimizer which would disable the runtime fortify string checker.
Call trace:
__fortify_panic+0x10/0x20 (P)
kasan_strings+0x980/0x9b0
kunit_try_run_case+0x68/0x190
kunit_generic_run_threadfn_adapter+0x34/0x68
kthread+0x1c4/0x228
ret_from_fork+0x10/0x20
Code: d503233f a9bf7bfd 910003fd 9424b243 (d4210000)
---[ end trace 0000000000000000 ]---
note: kunit_try_catch[128] exited with irqs disabled
note: kunit_try_catch[128] exited with preempt_count 1
# kasan_strings: try faulted: last** replaying previous printk message **
# kasan_strings: try faulted: last line seen mm/kasan/kasan_test_c.c:1600 # kasan_strings: internal error occurred preventing test case from running: -4
--- mm/kasan/kasan_test_c.c | 1 + 1 file changed, 1 insertion(+)
mm/kasan/kasan_test_c.c +1 -0
@@ -1548,6 +1548,7 @@ static void kasan_strings(struct kunit * ptr =kmalloc (size,GFP_KERNEL | __GFP_ZERO);KUNIT_ASSERT_NOT_ERR_OR_NULL (test, ptr); +OPTIMIZER_HIDE_VAR (ptr);kfree (ptr);
Greg Kroah-Hartman
maintainerPATCH 143/175 mm: fix accounting of memmap pages
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sumanth Korikkar <[email protected]>
[ Upstream commit c3576889d87b603cb66b417e08844a53c1077a37 ]
For !CONFIG_SPARSEMEM_VMEMMAP, memmap page accounting is currently done upfront in sparse_buffer_init(). However, sparse_buffer_alloc() may return NULL in failure scenario.
Also, memmap pages may be allocated either from the memblock allocator during early boot or from the buddy allocator. When removed via arch_remove_memory(), accounting of memmap pages must reflect the original allocation source.
To ensure correctness:
* Account memmap pages after successful allocation in sparse_init_nid() and section_activate().
* Account memmap pages in section_deactivate() based on allocation source.
--- mm/sparse-vmemmap.c | 5 ----- mm/sparse.c | 15 +++++++++------ 2 files changed, 9 insertions(+), 11 deletions(-)
mm/sparse-vmemmap.c +0 -5
@@ -474,10 +474,5 @@ struct page * __meminit __populate_sectiif (r <0 )return NULL ; -if (system_state ==SYSTEM_BOOTING ) -memmap_boot_pages_add (DIV_ROUND_UP (end - start,PAGE_SIZE )); -else -memmap_pages_add (DIV_ROUND_UP (end - start,PAGE_SIZE )); -return pfn_to_page (pfn); }
mm/sparse.c +9 -6
@@ -462,9 +462,6 @@ static void __init sparse_buffer_init(un*/ sparsemap_buf =memmap_alloc (size,section_map_size (), addr, nid, true); sparsemap_buf_end = sparsemap_buf + size; -#ifndef CONFIG_SPARSEMEM_VMEMMAP -memmap_boot_pages_add (DIV_ROUND_UP (size,PAGE_SIZE )); -#endif }static void __init sparse_buffer_fini (void )
@@ -532,6 +529,8 @@ static void __init sparse_init_nid(int nsparse_buffer_fini (); goto failed; } + memmap_boot_pages_add(DIV_ROUND_UP(PAGES_PER_SECTION * sizeof(struct page), +PAGE_SIZE ));check_usemap_section_nr (nid, usage);sparse_init_one_section (__nr_to_section (pnum), pnum, map, usage,SECTION_IS_EARLY );
@@ -643,7 +642,6 @@ static void depopulate_section_memmap(ununsigned long start = (unsigned long )pfn_to_page (pfn);unsigned long end = start + nr_pages *sizeof (struct page ); -memmap_pages_add (-1L * (DIV_ROUND_UP (end - start,PAGE_SIZE )));vmemmap_free (start, end, altmap); }static void free_map_bootmem (struct page *memmap)
@@ -819,10 +817,14 @@ static void section_deactivate(unsigned* The memmap of early sections is always fully populated. See * section_activate() and pfn_valid() . */ -if (!section_is_early) +if (!section_is_early) { +memmap_pages_add (-1L * (DIV_ROUND_UP (nr_pages *sizeof (struct page ),PAGE_SIZE )));depopulate_section_memmap (pfn, nr_pages, altmap); -else if (memmap) + }else if (memmap) { +memmap_boot_pages_add (-1L * (DIV_ROUND_UP (nr_pages *sizeof (struct page ), +PAGE_SIZE )));free_map_bootmem (memmap); + }if (empty) ms->section_mem_map = (unsigned long )NULL ;
@@ -867,6 +869,7 @@ static struct page * __meminit section_asection_deactivate (pfn, nr_pages, altmap);return ERR_PTR (-ENOMEM ); } + memmap_pages_add(DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE));return memmap; }
Greg Kroah-Hartman
maintainerPATCH 144/175 thermal/drivers/mediatek/lvts: Disable low offset IRQ for minimum threshold
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nícolas F. R. A. Prado <[email protected]>
[ Upstream commit fa17ff8e325a657c84be1083f06e54ee7eea82e4 ]
In order to get working interrupts, a low offset value needs to be configured. The minimum value for it is 20 Celsius, which is what is configured when there's no lower thermal trip (ie the thermal core passes -INT_MAX as low trip temperature). However, when the temperature gets that low and fluctuates around that value it causes an interrupt storm.
Prevent that interrupt storm by not enabling the low offset interrupt if the low threshold is the minimum one.
--- drivers/thermal/mediatek/lvts_thermal.c | 50 +++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 14 deletions(-)
drivers/thermal/mediatek/lvts_thermal.c +36 -14
@@ -66,10 +66,14 @@#define LVTS_TSSEL_CONF 0x13121110#define LVTS_CALSCALE_CONF 0x300 -#define LVTS_MONINT_OFFSET_SENSOR0 0xC -#define LVTS_MONINT_OFFSET_SENSOR1 0x180 -#define LVTS_MONINT_OFFSET_SENSOR2 0x3000 -#define LVTS_MONINT_OFFSET_SENSOR3 0x3000000 +#define LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR0 BIT(3) +#define LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR1 BIT(8) +#define LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR2 BIT(13) +#define LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR3 BIT(25) +#define LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR0 BIT(2) +#define LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR1 BIT(7) +#define LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR2 BIT(12) +#define LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR3 BIT(24)#define LVTS_INT_SENSOR0 0x0009001F#define LVTS_INT_SENSOR1 0x001203E0
@@ -329,23 +333,41 @@ static int lvts_get_temp(struct thermal_static void lvts_update_irq_mask (struct lvts_ctrl *lvts_ctrl) { -u32 masks[] = { -LVTS_MONINT_OFFSET_SENSOR0 , -LVTS_MONINT_OFFSET_SENSOR1 , -LVTS_MONINT_OFFSET_SENSOR2 , -LVTS_MONINT_OFFSET_SENSOR3 , +static const u32 high_offset_inten_masks[] = { +LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR0 , +LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR1 , +LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR2 , +LVTS_MONINT_OFFSET_HIGH_INTEN_SENSOR3 , + }; +static const u32 low_offset_inten_masks[] = { +LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR0 , +LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR1 , +LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR2 , +LVTS_MONINT_OFFSET_LOW_INTEN_SENSOR3 , };u32 value =0 ;int i; value =readl (LVTS_MONINT (lvts_ctrl->base)); -for (i =0 ; i <ARRAY_SIZE (masks); i++) { +for (i =0 ; i <ARRAY_SIZE (high_offset_inten_masks); i++) {if (lvts_ctrl->sensors[i].high_thresh == lvts_ctrl->high_thresh - && lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh) - value |= masks[i]; -else - value &= ~masks[i]; + && lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh) { +/* +* The minimum threshold needs to be configured in the +* OFFSETL register to get working interrupts, but we +* don't actually want to generate interrupts when +* crossing it. +*/ +if (lvts_ctrl->low_thresh == -INT_MAX ) { + value &= ~low_offset_inten_masks[i]; + value |= high_offset_inten_masks[i]; + }else { + value |= low_offset_inten_masks[i] | high_offset_inten_masks[i]; + } + }else { + value &= ~(low_offset_inten_masks[i] | high_offset_inten_masks[i]); + } }writel (value,LVTS_MONINT (lvts_ctrl->base));
Greg Kroah-Hartman
maintainerPATCH 145/175 dmaengine: mediatek: Fix a possible deadlock error in mtk_cqdma_tx_status()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qiu-ji Chen <[email protected]>
[ Upstream commit 157ae5ffd76a2857ccb4b7ce40bc5a344ca00395 ]
Fix a potential deadlock bug. Observe that in the mtk-cqdma.c file, functions like mtk_cqdma_issue_pending() and mtk_cqdma_free_active_desc() properly acquire the pc lock before the vc lock when handling pc and vc fields. However, mtk_cqdma_tx_status() violates this order by first acquiring the vc lock before invoking mtk_cqdma_find_active_desc(), which subsequently takes the pc lock. This reversed locking sequence (vc → pc) contradicts the established pc → vc order and creates deadlock risks.
Fix the issue by moving the vc lock acquisition code from mtk_cqdma_find_active_desc() to mtk_cqdma_tx_status(). Ensure the pc lock is acquired before the vc lock in the calling function to maintain correct locking hierarchy. Note that since mtk_cqdma_find_active_desc() is a static function with only one caller (mtk_cqdma_tx_status()), this modification safely eliminates the deadlock possibility without affecting other components.
This possible bug is found by an experimental static analysis tool developed by our team. This tool analyzes the locking APIs to extract function pairs that can be concurrently executed, and then analyzes the instructions in the paired functions to identify possible concurrency bugs including deadlocks, data races and atomicity violations.
--- drivers/dma/mediatek/mtk-cqdma.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/dma/mediatek/mtk-cqdma.c +2 -4
@@ -420,15 +420,11 @@ static struct virt_dma_desc *mtk_cqdma_f {struct mtk_cqdma_vchan *cvc =to_cqdma_vchan (c);struct virt_dma_desc *vd; -unsigned long flags; -spin_lock_irqsave (&cvc->pc->lock, flags);list_for_each_entry (vd, &cvc->pc->queue, node)if (vd->tx.cookie == cookie) { -spin_unlock_irqrestore (&cvc->pc->lock, flags);return vd; } -spin_unlock_irqrestore (&cvc->pc->lock, flags);list_for_each_entry (vd, &cvc->vc.desc_issued, node)if (vd->tx.cookie == cookie)
@@ -452,9 +448,11 @@ static enum dma_status mtk_cqdma_tx_statif (ret ==DMA_COMPLETE || !txstate)return ret; +spin_lock_irqsave (&cvc->pc->lock, flags);spin_lock_irqsave (&cvc->vc.lock, flags); vd =mtk_cqdma_find_active_desc (c, cookie);spin_unlock_irqrestore (&cvc->vc.lock, flags); +spin_unlock_irqrestore (&cvc->pc->lock, flags);if (vd) { cvd =to_cqdma_vdesc (vd);
Greg Kroah-Hartman
maintainerPATCH 146/175 rust: support Rust >= 1.91.0 target spec
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miguel Ojeda <[email protected]>
commit 8851e27d2cb947ea8bbbe8e812068f7bf5cbd00b upstream.
Starting with Rust 1.91.0 (expected 2025-10-30), the target spec format has changed the type of the target-pointer-width key from string to integer [1].
Thus conditionally use one or the other depending on the version.
--- scripts/generate_rust_target.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
scripts/generate_rust_target.rs +10 -2
@@ -223,7 +223,11 @@ fn main() { ts.push ("features" , features); ts.push ("llvm-target" ,"x86_64-linux-gnu" ); ts.push ("supported-sanitizers" , ["kcfi" ,"kernel-address" ]); - ts.push ("target-pointer-width" ,"64" ); +if cfg.rustc_version_atleast (1 ,91 ,0 ) { + ts.push ("target-pointer-width" ,64 ); + }else { + ts.push ("target-pointer-width" ,"64" ); + } }else if cfg.has ("X86_32" ) {// This only works on UML, as i386 otherwise needs regparm support in rustc if !cfg.has ("UML" ) {
@@ -243,7 +247,11 @@ fn main() { } ts.push ("features" , features); ts.push ("llvm-target" ,"i386-unknown-linux-gnu" ); - ts.push ("target-pointer-width" ,"32" ); +if cfg.rustc_version_atleast (1 ,91 ,0 ) { + ts.push ("target-pointer-width" ,32 ); + }else { + ts.push ("target-pointer-width" ,"32" ); + } }else if cfg.has ("LOONGARCH" ) {panic! ("loongarch uses the builtin rustc loongarch64-unknown-none-softfloat target" ); }else {
Greg Kroah-Hartman
maintainerPATCH 147/175 ALSA: hda/hdmi: Add pin fix for another HP EliteDesk 800 G4 model
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit bcd6659d4911c528381531472a0cefbd4003e29e upstream.
It was reported that HP EliteDesk 800 G4 DM 65W (SSID 103c:845a) needs the similar quirk for enabling HDMI outputs, too. This patch adds the corresponding quirk entry.
--- sound/pci/hda/patch_hdmi.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_hdmi.c +1 -0
@@ -1991,6 +1991,7 @@ static int hdmi_add_cvt(struct hda_codecstatic const struct snd_pci_quirk force_connect_list[] = {SND_PCI_QUIRK (0x103c ,0x83e2 ,"HP EliteDesk 800 G4" ,1 ),SND_PCI_QUIRK (0x103c ,0x83ef ,"HP MP9 G4 Retail System AMS" ,1 ), +SND_PCI_QUIRK (0x103c ,0x845a ,"HP EliteDesk 800 G4 DM 65W" ,1 ),SND_PCI_QUIRK (0x103c ,0x870f ,"HP" ,1 ),SND_PCI_QUIRK (0x103c ,0x871a ,"HP" ,1 ),SND_PCI_QUIRK (0x103c ,0x8711 ,"HP" ,1 ),
Greg Kroah-Hartman
maintainerPATCH 148/175 ALSA: hda/realtek: Fix headset mic for TongFang X6[AF]R5xxY
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaron Erhardt <[email protected]>
commit 051b02b17a8b383ee033db211f90f24b91ac7006 upstream.
Add a PCI quirk to enable microphone detection on the headphone jack of TongFang X6AR5xxY and X6FR5xxY devices.
--- sound/pci/hda/patch_realtek.c | 2 ++ 1 file changed, 2 insertions(+)
sound/pci/hda/patch_realtek.c +2 -0
@@ -11328,6 +11328,8 @@ static const struct hda_quirk alc269_fixSND_PCI_QUIRK (0x1d05 ,0x121b ,"TongFang GMxAGxx" ,ALC269_FIXUP_NO_SHUTUP ),SND_PCI_QUIRK (0x1d05 ,0x1387 ,"TongFang GMxIXxx" ,ALC2XX_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1d05 ,0x1409 ,"TongFang GMxIXxx" ,ALC2XX_FIXUP_HEADSET_MIC ), +SND_PCI_QUIRK (0x1d05 ,0x300f ,"TongFang X6AR5xxY" ,ALC2XX_FIXUP_HEADSET_MIC ), +SND_PCI_QUIRK (0x1d05 ,0x3019 ,"TongFang X6FR5xxY" ,ALC2XX_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1d17 ,0x3288 ,"Haier Boyue G42" ,ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS ),SND_PCI_QUIRK (0x1d72 ,0x1602 ,"RedmiBook" ,ALC255_FIXUP_XIAOMI_HEADSET_MIC ), SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
Greg Kroah-Hartman
maintainerPATCH 149/175 Revert "drm/amdgpu: Avoid extra evict-restore process."
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
This reverts commit 71598a5a7797f0052aaa7bcff0b8d4b8f20f1441 which is commit 1f02f2044bda1db1fd995bc35961ab075fa7b5a2 upstream.
This commit introduced a regression, however the fix for the regression:aa5fc4362fac ("drm/amdgpu: fix task hang from failed job submission during process kill") depends on things not yet present in 6.12.y and older kernels. Since this commit is more of an optimization, just revert it for 6.12.y and older stable kernels.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +4 -2
@@ -2292,11 +2292,13 @@ void amdgpu_vm_adjust_size(struct amdgpu*/ long amdgpu_vm_wait_idle (struct amdgpu_vm *vm,long timeout) { - timeout =drm_sched_entity_flush (&vm->immediate, timeout); + timeout =dma_resv_wait_timeout (vm->root.bo->tbo.base.resv, +DMA_RESV_USAGE_BOOKKEEP , + true, timeout);if (timeout <=0 )return timeout; -return drm_sched_entity_flush (&vm->delayed, timeout); +return dma_fence_wait_timeout (vm->last_unlocked, true, timeout); }static void amdgpu_vm_destroy_task_info (struct kref *kref)
Greg Kroah-Hartman
maintainerPATCH 150/175 pcmcia: omap: Add missing check for platform_get_resource
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chen Ni <[email protected]>
[ Upstream commit ecef14f70ec9344a10c817248d2ac6cddee5921e ]
Add missing check for platform_get_resource() and return error if it fails to catch the error.
--- drivers/pcmcia/omap_cf.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pcmcia/omap_cf.c +2 -0
@@ -215,6 +215,8 @@ static int __init omap_cf_probe(struct platform_device *pdev)return -EINVAL ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) +return -EINVAL ; cf =kzalloc (sizeof *cf,GFP_KERNEL );if (!cf)
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 151/175 pcmcia: Add error handling for add_interval() in do_validate_mem()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wentao Liang <[email protected]>
[ Upstream commit 4a81f78caa53e0633cf311ca1526377d9bff7479 ]
In the do_validate_mem(), the call to add_interval() does not handle errors. If kmalloc() fails in add_interval(), it could result in a null pointer being inserted into the linked list, leading to illegal memory access when sub_interval() is called next.
This patch adds an error handling for the add_interval(). If add_interval() returns an error, the function will return early with the error code.
--- drivers/pcmcia/rsrc_nonstatic.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/pcmcia/rsrc_nonstatic.c +3 -1
@@ -375,7 +375,9 @@ static int do_validate_mem(struct pcmcia_socket *s,if (validate && !s->fake_cis) {/* move it to the validated data set */ -add_interval (&s_data->mem_db_valid, base, size); + ret =add_interval (&s_data->mem_db_valid, base, size); +if (ret) +return ret;sub_interval (&s_data->mem_db, base, size); }
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 152/175 platform/x86: asus-wmi: Remove extra keys from ignore_key_wlan quirk
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Antheas Kapenekakis <[email protected]>
[ Upstream commit cf3940ac737d05c85395f343fe33a3cfcadb47db ]
Currently, the ignore_key_wlan quirk applies to keycodes 0x5D, 0x5E, and 0x5F. However, the relevant code for the Asus Zenbook Duo is only 0x5F. Since this code is emitted by other Asus devices, such as from the Z13 for its ROG button, remove the extra codes before expanding the quirk.
For the Duo devices, which are the only ones that use this quirk, there should be no effect.
--- drivers/platform/x86/asus-nb-wmi.c | 2 -- 1 file changed, 2 deletions(-)
drivers/platform/x86/asus-nb-wmi.c +0 -2
@@ -654,8 +654,6 @@ static void asus_nb_wmi_key_filter(struct asus_wmi_driver *asus_wmi, int *code,if (atkbd_reports_vol_keys) *code =ASUS_WMI_KEY_IGNORE ;break ; -case 0x5D :/* Wireless console Toggle */ -case 0x5E :/* Wireless console Enable */ case 0x5F :/* Wireless console Disable */ if (quirks->ignore_key_wlan) *code =ASUS_WMI_KEY_IGNORE ;
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 153/175 platform/x86/intel: power-domains: Use topology_logical_package_id() for package ID
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Arcari <[email protected]>
[ Upstream commit aa28991fd5dc4c01a40caab2bd9af8c5e06f9899 ]
Currently, tpmi_get_logical_id() calls topology_physical_package_id() to set the pkg_id of the info structure. Since some VM hosts assign non contiguous package IDs, topology_physical_package_id() can return a larger value than topology_max_packages(). This will result in an invalid reference into tpmi_power_domain_mask[] as that is allocatead based on topology_max_packages() as the maximum package ID.
--- drivers/platform/x86/intel/tpmi_power_domains.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/platform/x86/intel/tpmi_power_domains.c +1 -1
@@ -167,7 +167,7 @@ static int tpmi_get_logical_id(unsigned int cpu, struct tpmi_cpu_info *info) info->punit_thread_id =FIELD_GET (LP_ID_MASK , data); info->punit_core_id =FIELD_GET (MODULE_ID_MASK , data); - info->pkg_id =topology_physical_package_id (cpu); + info->pkg_id =topology_logical_package_id (cpu); info->linux_cpu = cpu;return 0 ;
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 154/175 hwmon: mlxreg-fan: Prevent fans from getting stuck at 0 RPM
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vadim Pasternak <[email protected]>
[ Upstream commit 1180c79fbf36e4c02e76ae4658509523437e52a4 ]
The fans controlled by the driver can get stuck at 0 RPM if they are configured below a 20% duty cycle. The driver tries to avoid this by enforcing a minimum duty cycle of 20%, but this is done after the fans are registered with the thermal subsystem. This is too late as the thermal subsystem can set their current state before the driver is able to enforce the minimum duty cycle.
Fix by setting the minimum duty cycle before registering the fans with the thermal subsystem.
--- drivers/hwmon/mlxreg-fan.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/hwmon/mlxreg-fan.c +2 -3
@@ -561,15 +561,14 @@ static int mlxreg_fan_cooling_config(struct device *dev, struct mlxreg_fan *fan)if (!pwm->connected)continue ; pwm->fan = fan; +/* Set minimal PWM speed. */ + pwm->last_hwmon_state =MLXREG_FAN_PWM_DUTY2STATE (MLXREG_FAN_MIN_DUTY ); pwm->cdev =devm_thermal_of_cooling_device_register (dev,NULL , mlxreg_fan_name[i], pwm, &mlxreg_fan_cooling_ops);if (IS_ERR (pwm->cdev)) {dev_err (dev,"Failed to register cooling device\n" );return PTR_ERR (pwm->cdev); } - -/* Set minimal PWM speed. */ - pwm->last_hwmon_state =MLXREG_FAN_PWM_DUTY2STATE (MLXREG_FAN_MIN_DUTY ); }return 0 ;
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 155/175 block: add a queue_limits_commit_update_frozen helper
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit aa427d7b73b196f657d6d2cf0e94eff6b883fdef ]
Add a helper that freezes the queue, updates the queue limits and unfreezes the queue and convert all open coded versions of that to the new helper.
Stable-dep-of: 708e2371f77a ("scsi: sr: Reinstate rotational media flag")
--- block/blk-integrity.c | 4 +--- block/blk-settings.c | 24 ++++++++++++++++++++++++ block/blk-zoned.c | 7 +------ drivers/block/virtio_blk.c | 4 +--- drivers/scsi/sd.c | 17 +++++------------ drivers/scsi/sr.c | 5 +---- include/linux/blkdev.h | 2 ++ 7 files changed, 35 insertions(+), 28 deletions(-)
block/blk-integrity.c +1 -3
@@ -218,9 +218,7 @@ static ssize_t flag_store(struct device *dev, const char *page, size_t count,else lim.integrity.flags |= flag; -blk_mq_freeze_queue (q); - err =queue_limits_commit_update (q, &lim); -blk_mq_unfreeze_queue (q); + err =queue_limits_commit_update_frozen (q, &lim);if (err)return err;return count;
block/blk-settings.c +24 -0
@@ -444,6 +444,30 @@ int queue_limits_commit_update(struct request_queue *q, }EXPORT_SYMBOL_GPL (queue_limits_commit_update); +/** +* queue_limits_commit_update_frozen - commit an atomic update of queue limits +* @q: queue to update +* @lim: limits to apply +* +* Apply the limits in @lim that were obtained from queue_limits_start_update() +* and updated with the new values by the caller to @q. Freezes the queue +* before the update and unfreezes it after. +* +* Returns 0 if successful, else a negative error code. +*/ +int queue_limits_commit_update_frozen (struct request_queue *q, +struct queue_limits *lim) +{ +int ret; + +blk_mq_freeze_queue (q); + ret =queue_limits_commit_update (q, lim); +blk_mq_unfreeze_queue (q); + +return ret; +} +EXPORT_SYMBOL_GPL (queue_limits_commit_update_frozen); +/** * queue_limits_set - apply queue limits to queue * @q: queue to update
block/blk-zoned.c +1 -6
@@ -1510,7 +1510,6 @@ static int disk_update_zone_resources(struct gendisk *disk,unsigned int nr_seq_zones, nr_conv_zones;unsigned int pool_size;struct queue_limits lim; -int ret; disk->nr_zones = args->nr_zones; disk->zone_capacity = args->zone_capacity;
@@ -1561,11 +1560,7 @@ static int disk_update_zone_resources(struct gendisk *disk, } commit: -blk_mq_freeze_queue (q); - ret =queue_limits_commit_update (q, &lim); -blk_mq_unfreeze_queue (q); - -return ret; +return queue_limits_commit_update_frozen (q, &lim); } static int blk_revalidate_conv_zone(struct blk_zone *zone, unsigned int idx,
drivers/block/virtio_blk.c +1 -3
@@ -1106,9 +1106,7 @@ cache_type_store(struct device *dev, struct device_attribute *attr, lim.features |=BLK_FEAT_WRITE_CACHE ; else lim.features &= ~BLK_FEAT_WRITE_CACHE; -blk_mq_freeze_queue (disk->queue); - i =queue_limits_commit_update (disk->queue, &lim); -blk_mq_unfreeze_queue (disk->queue); + i =queue_limits_commit_update_frozen (disk->queue, &lim);if (i)return i;return count;
drivers/scsi/sd.c +5 -12
@@ -177,9 +177,8 @@ cache_type_store(struct device *dev, struct device_attribute *attr, lim =queue_limits_start_update (sdkp->disk->queue);sd_set_flush_flag (sdkp, &lim); -blk_mq_freeze_queue (sdkp->disk->queue); - ret =queue_limits_commit_update (sdkp->disk->queue, &lim); -blk_mq_unfreeze_queue (sdkp->disk->queue); + ret =queue_limits_commit_update_frozen (sdkp->disk->queue, + &lim);if (ret)return ret;return count;
@@ -483,9 +482,7 @@ provisioning_mode_store(struct device *dev, struct device_attribute *attr, lim =queue_limits_start_update (sdkp->disk->queue);sd_config_discard (sdkp, &lim, mode); -blk_mq_freeze_queue (sdkp->disk->queue); - err =queue_limits_commit_update (sdkp->disk->queue, &lim); -blk_mq_unfreeze_queue (sdkp->disk->queue); + err =queue_limits_commit_update_frozen (sdkp->disk->queue, &lim);if (err)return err;return count;
@@ -594,9 +591,7 @@ max_write_same_blocks_store(struct device *dev, struct device_attribute *attr, lim =queue_limits_start_update (sdkp->disk->queue);sd_config_write_same (sdkp, &lim); -blk_mq_freeze_queue (sdkp->disk->queue); - err =queue_limits_commit_update (sdkp->disk->queue, &lim); -blk_mq_unfreeze_queue (sdkp->disk->queue); + err =queue_limits_commit_update_frozen (sdkp->disk->queue, &lim);if (err)return err;return count;
@@ -3803,9 +3798,7 @@ static int sd_revalidate_disk(struct gendisk *disk)sd_config_write_same (sdkp, &lim);kfree (buffer); -blk_mq_freeze_queue (sdkp->disk->queue); - err =queue_limits_commit_update (sdkp->disk->queue, &lim); -blk_mq_unfreeze_queue (sdkp->disk->queue); + err =queue_limits_commit_update_frozen (sdkp->disk->queue, &lim);if (err)return err;
drivers/scsi/sr.c +1 -4
@@ -797,10 +797,7 @@ static int get_sectorsize(struct scsi_cd *cd) lim =queue_limits_start_update (q); lim.logical_block_size = sector_size; -blk_mq_freeze_queue (q); - err =queue_limits_commit_update (q, &lim); -blk_mq_unfreeze_queue (q); -return err; +return queue_limits_commit_update_frozen (q, &lim); }static int get_capabilities (struct scsi_cd *cd)
include/linux/blkdev.h +2 -0
@@ -990,6 +990,8 @@ queue_limits_start_update(struct request_queue *q)mutex_lock (&q->limits_lock);return q->limits; } +int queue_limits_commit_update_frozen (struct request_queue *q, +struct queue_limits *lim);int queue_limits_commit_update (struct request_queue *q,struct queue_limits *lim);int queue_limits_set (struct request_queue *q,struct queue_limits *lim);
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 156/175 scsi: sr: Reinstate rotational media flag
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ming Lei <[email protected]>
[ Upstream commit 708e2371f77a9d3f2f1d54d1ec835d71b9d0dafe ]
Reinstate the rotational media flag for the CD-ROM driver. The flag has been cleared since commit bd4a633b6f7c ("block: move the nonrot flag to queue_limits") and this breaks some applications.
Move queue limit configuration from get_sectorsize() to sr_revalidate_disk() and set the rotational flag.
--- drivers/scsi/sr.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
drivers/scsi/sr.c +10 -6
@@ -475,13 +475,21 @@ static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt)static int sr_revalidate_disk (struct scsi_cd *cd) { +struct request_queue *q = cd->device->request_queue;struct scsi_sense_hdr sshdr; +struct queue_limits lim; +int sector_size;/* if the unit is not ready, nothing more to do */ if (scsi_test_unit_ready (cd->device,SR_TIMEOUT ,MAX_RETRIES , &sshdr))return 0 ;sr_cd_check (&cd->cdi); -return get_sectorsize (cd); + sector_size =get_sectorsize (cd); + + lim =queue_limits_start_update (q); + lim.logical_block_size = sector_size; + lim.features |=BLK_FEAT_ROTATIONAL ; +return queue_limits_commit_update_frozen (q, &lim); }static int sr_block_open (struct gendisk *disk,blk_mode_t mode)
@@ -721,10 +729,8 @@ static int sr_probe(struct device *dev)static int get_sectorsize (struct scsi_cd *cd) { -struct request_queue *q = cd->device->request_queue;static const u8 cmd[10 ] = {READ_CAPACITY };unsigned char buffer[8 ] = { }; -struct queue_limits lim;int err;int sector_size;struct scsi_failure failure_defs[] = {
@@ -795,9 +801,7 @@ static int get_sectorsize(struct scsi_cd *cd)set_capacity (cd->disk, cd->capacity); } - lim =queue_limits_start_update (q); - lim.logical_block_size = sector_size; -return queue_limits_commit_update_frozen (q, &lim); +return sector_size; }static int get_capabilities (struct scsi_cd *cd)
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 157/175 spi: spi-fsl-lpspi: Fix transmissions when using CONT
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larisa Grigore <[email protected]>
[ Upstream commit 782a7c73078e1301c0c427f21c06377d77dfa541 ]
Commit 6a130448498c ("spi: lpspi: Fix wrong transmission when don't use CONT") breaks transmissions when CONT is used. The TDIE interrupt should not be disabled in all cases. If CONT is used and the TX transfer is not yet completed yet, but the interrupt handler is called because there are characters to be received, TDIE is replaced with FCIE. When the transfer is finally completed, SR_TDF is set but the interrupt handler isn't called again.
--- drivers/spi/spi-fsl-lpspi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/spi/spi-fsl-lpspi.c +2 -2
@@ -3,7 +3,7 @@// Freescale i.MX7ULP LPSPI driver // // Copyright 2016 Freescale Semiconductor, Inc. -// Copyright 2018 NXP Semiconductors +// Copyright 2018, 2023, 2025 NXP #include <linux/clk.h> #include <linux/completion.h>
@@ -780,7 +780,7 @@ static irqreturn_t fsl_lpspi_isr(int irq, void *dev_id)if (temp_SR &SR_MBF ||readl (fsl_lpspi->base +IMX7ULP_FSR ) &FSR_TXCOUNT ) {writel (SR_FCF , fsl_lpspi->base +IMX7ULP_SR ); -fsl_lpspi_intctrl (fsl_lpspi,IER_FCIE ); +fsl_lpspi_intctrl (fsl_lpspi,IER_FCIE | (temp_IER &IER_TDIE ));return IRQ_HANDLED ; }
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 158/175 spi: spi-fsl-lpspi: Set correct chip-select polarity bit
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larisa Grigore <[email protected]>
[ Upstream commit cbe33705864ba2697a2939de715b81538cf32430 ]
The driver currently supports multiple chip-selects, but only sets the polarity for the first one (CS 0). Fix it by setting the PCSPOL bit for the desired chip-select.
--- drivers/spi/spi-fsl-lpspi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/spi/spi-fsl-lpspi.c +5 -2
@@ -5,6 +5,7 @@// Copyright 2016 Freescale Semiconductor, Inc. // Copyright 2018, 2023, 2025 NXP +#include <linux/bitfield.h> #include <linux/clk.h> #include <linux/completion.h> #include <linux/delay.h>
@@ -70,7 +71,7 @@#define DER_TDDE BIT(0)#define CFGR1_PCSCFG BIT(27)#define CFGR1_PINCFG (BIT(24)|BIT(25)) -#define CFGR1_PCSPOL BIT(8) +#define CFGR1_PCSPOL_MASK GENMASK(11, 8)#define CFGR1_NOSTALL BIT(3)#define CFGR1_HOST BIT(0)#define FSR_TXCOUNT (0xFF)
@@ -420,7 +421,9 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi)else temp =CFGR1_PINCFG ;if (fsl_lpspi->config.mode &SPI_CS_HIGH ) - temp |=CFGR1_PCSPOL ; + temp |=FIELD_PREP (CFGR1_PCSPOL_MASK , +BIT (fsl_lpspi->config.chip_select)); +writel (temp, fsl_lpspi->base +IMX7ULP_CFGR1 ); temp =readl (fsl_lpspi->base +IMX7ULP_CR );
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 159/175 spi: spi-fsl-lpspi: Reset FIFO and disable module on transfer abort
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larisa Grigore <[email protected]>
[ Upstream commit e811b088a3641861fc9d2b2b840efc61a0f1907d ]
In DMA mode fsl_lpspi_reset() is always called at the end, even when the transfer is aborted. In PIO mode aborts skip the reset leaving the FIFO filled and the module enabled.
Fix it by always calling fsl_lpspi_reset().
--- drivers/spi/spi-fsl-lpspi.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/spi/spi-fsl-lpspi.c +1 -3
@@ -730,12 +730,10 @@ static int fsl_lpspi_pio_transfer(struct spi_controller *controller,fsl_lpspi_write_tx_fifo (fsl_lpspi); ret =fsl_lpspi_wait_for_completion (controller); -if (ret) -return ret;fsl_lpspi_reset (fsl_lpspi); -return 0 ; +return ret; } static int fsl_lpspi_transfer_one(struct spi_controller *controller,
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 160/175 spi: spi-fsl-lpspi: Clear status register after disabling the module
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larisa Grigore <[email protected]>
[ Upstream commit dedf9c93dece441e9a0a4836458bc93677008ddd ]
Clear the error flags after disabling the module to avoid the case when a flag is set again between flag clear and module disable. And use SR_CLEAR_MASK to replace hardcoded value for improved readability.
Although fsl_lpspi_reset() was only introduced in commit a15dc3d657fa ("spi: lpspi: Fix CLK pin becomes low before one transfer"), the original driver only reset SR in the interrupt handler, making it vulnerable to the same issue. Therefore the fixes commit is set at the introduction of the driver.
--- drivers/spi/spi-fsl-lpspi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/spi/spi-fsl-lpspi.c +5 -4
@@ -83,6 +83,8 @@#define TCR_RXMSK BIT(19)#define TCR_TXMSK BIT(18) +#define SR_CLEAR_MASK GENMASK(13, 8) +struct fsl_lpspi_devtype_data {u8 prescale_max; };
@@ -532,14 +534,13 @@ static int fsl_lpspi_reset(struct fsl_lpspi_data *fsl_lpspi)fsl_lpspi_intctrl (fsl_lpspi,0 ); } -/* W1C for all flags in SR */ - temp =0x3F <<8 ; -writel (temp, fsl_lpspi->base +IMX7ULP_SR ); -/* Clear FIFO and disable module */ temp =CR_RRF |CR_RTF ;writel (temp, fsl_lpspi->base +IMX7ULP_CR ); +/* W1C for all flags in SR */ +writel (SR_CLEAR_MASK , fsl_lpspi->base +IMX7ULP_SR ); +return 0 ; }
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 161/175 drm/bridge: ti-sn65dsi86: fix REFCLK setting
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Walle <[email protected]>
[ Upstream commit bdd5a14e660062114bdebaef9ad52adf04970a89 ]
The bridge has three bootstrap pins which are sampled to determine the frequency of the external reference clock. The driver will also (over)write that setting. But it seems this is racy after the bridge is enabled. It was observed that although the driver write the correct value (by sniffing on the I2C bus), the register has the wrong value. The datasheet states that the GPIO lines have to be stable for at least 5us after asserting the EN signal. Thus, there seems to be some logic which samples the GPIO lines and this logic appears to overwrite the register value which was set by the driver. Waiting 20us after asserting the EN line resolves this issue.
--- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/gpu/drm/bridge/ti-sn65dsi86.c +11 -0
@@ -375,6 +375,17 @@ static int __maybe_unused ti_sn65dsi86_resume(struct device *dev)gpiod_set_value_cansleep (pdata->enable_gpio,1 ); +/* +* After EN is deasserted and an external clock is detected, the bridge +* will sample GPIO3:1 to determine its frequency. The driver will +* overwrite this setting in ti_sn_bridge_set_refclk_freq(). But this is +* racy. Thus we have to wait a couple of us. According to the datasheet +* the GPIO lines has to be stable at least 5 us (td5) but it seems that +* is not enough and the refclk frequency value is still lost or +* overwritten by the bridge itself. Waiting for 20us seems to work. +*/ +usleep_range (20 ,30 ); +/* * If we have a reference clock we can enable communication w/ the * panel (including the aux channel) w/out any need for an input clock
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 162/175 perf bpf-event: Fix use-after-free in synthesis
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit d7b67dd6f9db7bd2c49b415e901849b182ff0735 ]
Calls to perf_env__insert_bpf_prog_info may fail as a sideband thread may already have inserted the bpf_prog_info. Such failures may yield info_linear being freed which then causes use-after-free issues with the internal bpf_prog_info info struct. Make it so that perf_env__insert_bpf_prog_info trigger early non-error paths and fix the use-after-free in perf_event__synthesize_one_bpf_prog. Add proper return error handling to perf_env__add_bpf_info (that calls perf_env__insert_bpf_prog_info) and propagate the return value in its callers.
--- tools/perf/util/bpf-event.c | 39 +++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-)
tools/perf/util/bpf-event.c +27 -12
@@ -290,9 +290,15 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_session *session, info_node->info_linear = info_linear;if (!perf_env__insert_bpf_prog_info (env, info_node)) { -free (info_linear); +/* +* Insert failed, likely because of a duplicate event +* made by the sideband thread. Ignore synthesizing the +* metadata. +*/ free (info_node); + goto out; } +/* info_linear is now owned by info_node and shouldn't be freed below. */ info_linear =NULL ;/*
@@ -451,18 +457,18 @@ int perf_event__synthesize_bpf_events(struct perf_session *session,return err; } -static void perf_env__add_bpf_info (struct perf_env *env,u32 id) +static int perf_env__add_bpf_info (struct perf_env *env,u32 id) {struct bpf_prog_info_node *info_node;struct perf_bpil *info_linear;struct btf *btf =NULL ;u64 arrays;u32 btf_id; -int fd; +int fd, err =0 ; fd =bpf_prog_get_fd_by_id (id);if (fd <0 ) -return ; +return -EINVAL ; arrays =1UL <<PERF_BPIL_JITED_KSYMS ; arrays |=1UL <<PERF_BPIL_JITED_FUNC_LENS ;
@@ -475,6 +481,7 @@ static void perf_env__add_bpf_info(struct perf_env *env, u32 id) info_linear =get_bpf_prog_info_linear (fd, arrays);if (IS_ERR_OR_NULL (info_linear)) {pr_debug ("%s: failed to get BPF program info. aborting\n" , __func__); + err =PTR_ERR (info_linear); goto out; }
@@ -484,38 +491,46 @@ static void perf_env__add_bpf_info(struct perf_env *env, u32 id)if (info_node) { info_node->info_linear = info_linear;if (!perf_env__insert_bpf_prog_info (env, info_node)) { +pr_debug ("%s: duplicate add bpf info request for id %u\n" , + __func__, btf_id);free (info_linear);free (info_node); + goto out; } - }else + }else {free (info_linear); + err = -ENOMEM ; + goto out; + }if (btf_id ==0 ) goto out; btf =btf__load_from_kernel_by_id (btf_id); -if (libbpf_get_error (btf)) { -pr_debug ("%s: failed to get BTF of id %u, aborting\n" , - __func__, btf_id); - goto out; +if (!btf) { + err = -errno; +pr_debug ("%s: failed to get BTF of id %u %d\n" , __func__, btf_id, err); + }else { +perf_env__fetch_btf (env, btf_id, btf); } -perf_env__fetch_btf (env, btf_id, btf); out:btf__free (btf);close (fd); +return err; }static int bpf_event__sb_cb (union perf_event *event,void *data) {struct perf_env *env = data; +int ret =0 ;if (event->header.type !=PERF_RECORD_BPF_EVENT )return -1 ;switch (event->bpf.type) {case PERF_BPF_EVENT_PROG_LOAD : -perf_env__add_bpf_info (env, event->bpf.id); + ret =perf_env__add_bpf_info (env, event->bpf.id);case PERF_BPF_EVENT_PROG_UNLOAD :/*
@@ -529,7 +544,7 @@ static int bpf_event__sb_cb(union perf_event *event, void *data)break ; } -return 0 ; +return ret; }int evlist__add_bpf_sb_event (struct evlist *evlist,struct perf_env *env)
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 163/175 perf bpf-utils: Constify bpil_array_desc
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit 1654a0e4d576d9e43fbb10ccf6a1b307c5c18566 ]
The array's contents is a compile time constant. Constify to make the code more intention revealing and avoid unintended errors.
Stable-dep-of: 01be43f2a0ea ("perf bpf-utils: Harden get_bpf_prog_info_linear")
--- tools/perf/util/bpf-utils.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
tools/perf/util/bpf-utils.c +6 -12
@@ -20,7 +20,7 @@ struct bpil_array_desc {*/ }; -static struct bpil_array_desc bpil_array_desc[] = { +static const struct bpil_array_desc bpil_array_desc[] = { [PERF_BPIL_JITED_INSNS ] = { offsetof(struct bpf_prog_info , jited_prog_insns), offsetof(struct bpf_prog_info , jited_prog_len),
@@ -129,12 +129,10 @@ get_bpf_prog_info_linear(int fd, __u64 arrays)/* step 2: calculate total size of all arrays */ for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) { +const struct bpil_array_desc *desc = &bpil_array_desc[i];bool include_array = (arrays & (1UL << i)) >0 ; -struct bpil_array_desc *desc;__u32 count, size; - desc = bpil_array_desc + i; -/* kernel is too old to support this field */ if (info_len < desc->array_offset + sizeof(__u32) || info_len < desc->count_offset + sizeof(__u32) ||
@@ -163,13 +161,12 @@ get_bpf_prog_info_linear(int fd, __u64 arrays) ptr = info_linear->data;for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) { -struct bpil_array_desc *desc; +const struct bpil_array_desc *desc = &bpil_array_desc[i];__u32 count, size;if ((arrays & (1UL << i)) ==0 )continue ; - desc = bpil_array_desc + i; count =bpf_prog_info_read_offset_u32 (&info, desc->count_offset); size =bpf_prog_info_read_offset_u32 (&info, desc->size_offset); bpf_prog_info_set_offset_u32(&info_linear->info,
@@ -192,13 +189,12 @@ get_bpf_prog_info_linear(int fd, __u64 arrays)/* step 6: verify the data */ for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) { -struct bpil_array_desc *desc; +const struct bpil_array_desc *desc = &bpil_array_desc[i];__u32 v1, v2;if ((arrays & (1UL << i)) ==0 )continue ; - desc = bpil_array_desc + i; v1 =bpf_prog_info_read_offset_u32 (&info, desc->count_offset); v2 =bpf_prog_info_read_offset_u32 (&info_linear->info, desc->count_offset);
@@ -224,13 +220,12 @@ void bpil_addr_to_offs(struct perf_bpil *info_linear)int i;for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) { -struct bpil_array_desc *desc; +const struct bpil_array_desc *desc = &bpil_array_desc[i];__u64 addr, offs;if ((info_linear->arrays & (1UL << i)) ==0 )continue ; - desc = bpil_array_desc + i; addr =bpf_prog_info_read_offset_u64 (&info_linear->info, desc->array_offset); offs = addr -ptr_to_u64 (info_linear->data);
@@ -244,13 +239,12 @@ void bpil_offs_to_addr(struct perf_bpil *info_linear)int i;for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) { -struct bpil_array_desc *desc; +const struct bpil_array_desc *desc = &bpil_array_desc[i];__u64 addr, offs;if ((info_linear->arrays & (1UL << i)) ==0 )continue ; - desc = bpil_array_desc + i; offs =bpf_prog_info_read_offset_u64 (&info_linear->info, desc->array_offset); addr = offs +ptr_to_u64 (info_linear->data);
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 164/175 perf bpf-utils: Harden get_bpf_prog_info_linear
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Rogers <[email protected]>
[ Upstream commit 01be43f2a0eaeed83e94dee054742f37625c86d9 ]
In get_bpf_prog_info_linear two calls to bpf_obj_get_info_by_fd are made, the first to compute memory requirements for a struct perf_bpil and the second to fill it in. Previously the code would warn when the second call didn't match the first. Such races can be common place in things like perf test, whose perf trace tests will frequently load BPF programs. Rather than a debug message, return actual errors for this case. Out of paranoia also validate the read bpf_prog_info array value. Change the type of ptr to avoid mismatched pointer type compiler warnings. Add some additional debug print outs and sanity asserts.
--- tools/perf/util/bpf-utils.c | 43 ++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-)
tools/perf/util/bpf-utils.c +33 -10
@@ -115,7 +115,7 @@ get_bpf_prog_info_linear(int fd, __u64 arrays)__u32 info_len =sizeof (info);__u32 data_len =0 ;int i, err; -void *ptr; +__u8 *ptr;if (arrays >>PERF_BPIL_LAST_ARRAY )return ERR_PTR (-EINVAL );
@@ -126,6 +126,8 @@ get_bpf_prog_info_linear(int fd, __u64 arrays)pr_debug ("can't get prog info: %s" ,strerror (errno));return ERR_PTR (-EFAULT ); } +if (info.type >= __MAX_BPF_PROG_TYPE) +pr_debug ("%s:%d: unexpected program type %u\n" , __func__, __LINE__, info.type);/* step 2: calculate total size of all arrays */ for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) {
@@ -173,6 +175,8 @@ get_bpf_prog_info_linear(int fd, __u64 arrays) desc->count_offset, count);bpf_prog_info_set_offset_u32 (&info_linear->info, desc->size_offset, size); +assert (ptr >= info_linear->data); +assert (ptr < &info_linear->data[data_len]);bpf_prog_info_set_offset_u64 (&info_linear->info, desc->array_offset,ptr_to_u64 (ptr));
@@ -186,26 +190,45 @@ get_bpf_prog_info_linear(int fd, __u64 arrays)free (info_linear);return ERR_PTR (-EFAULT ); } +if (info_linear->info.type >= __MAX_BPF_PROG_TYPE) { +pr_debug ("%s:%d: unexpected program type %u\n" , + __func__, __LINE__, info_linear->info.type); + }/* step 6: verify the data */ + ptr = info_linear->data;for (i =PERF_BPIL_FIRST_ARRAY ; i <PERF_BPIL_LAST_ARRAY ; ++i) {const struct bpil_array_desc *desc = &bpil_array_desc[i]; -__u32 v1, v2; +__u32 count1, count2, size1, size2; +__u64 ptr2;if ((arrays & (1UL << i)) ==0 )continue ; - v1 =bpf_prog_info_read_offset_u32 (&info, desc->count_offset); - v2 =bpf_prog_info_read_offset_u32 (&info_linear->info, + count1 =bpf_prog_info_read_offset_u32 (&info, desc->count_offset); + count2 =bpf_prog_info_read_offset_u32 (&info_linear->info, desc->count_offset); -if (v1 != v2) -pr_warning ("%s: mismatch in element count\n" , __func__); +if (count1 != count2) { +pr_warning ("%s: mismatch in element count %u vs %u\n" , __func__, count1, count2); +free (info_linear); +return ERR_PTR (-ERANGE ); + } - v1 =bpf_prog_info_read_offset_u32 (&info, desc->size_offset); - v2 =bpf_prog_info_read_offset_u32 (&info_linear->info, + size1 =bpf_prog_info_read_offset_u32 (&info, desc->size_offset); + size2 =bpf_prog_info_read_offset_u32 (&info_linear->info, desc->size_offset); -if (v1 != v2) -pr_warning ("%s: mismatch in rec size\n" , __func__); +if (size1 != size2) { +pr_warning ("%s: mismatch in rec size %u vs %u\n" , __func__, size1, size2); +free (info_linear); +return ERR_PTR (-ERANGE ); + } + ptr2 =bpf_prog_info_read_offset_u64 (&info_linear->info, desc->array_offset); +if (ptr_to_u64 (ptr) != ptr2) { +pr_warning ("%s: mismatch in array %p vs %llx\n" , __func__, ptr, ptr2); +free (info_linear); +return ERR_PTR (-ERANGE ); + } + ptr +=roundup (count1 * size1,sizeof (__u64)); }/* step 7: update info_len and data_len */
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 165/175 drm/amd/amdgpu: Fix missing error return on kzalloc failure
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
[ Upstream commit 467e00b30dfe75c4cfc2197ceef1fddca06adc25 ]
Currently the kzalloc failure check just sets reports the failure and sets the variable ret to -ENOMEM, which is not checked later for this specific error. Fix this by just returning -ENOMEM rather than setting ret.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +1 -1
@@ -433,7 +433,7 @@ static int psp_sw_init(void *handle) psp->cmd =kzalloc (sizeof (struct psp_gfx_cmd_resp ),GFP_KERNEL );if (!psp->cmd) {dev_err (adev->dev,"Failed to allocate memory to command buffer!\n" ); - ret = -ENOMEM ; +return -ENOMEM ; } adev->psp.xgmi_context.supports_extended_data =
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 166/175 tools: gpio: remove the include directory on make clean
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: zhang jiao <[email protected]>
[ Upstream commit ed42d80f3bae89592fbb2ffaf8b6b2e720d53f6a ]
Remove the generated include directory when running make clean.
--- tools/gpio/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/gpio/Makefile +1 -1
@@ -77,7 +77,7 @@ $(OUTPUT)gpio-watch: $(GPIO_WATCH_IN) clean: rm -f $(ALL_PROGRAMS) - rm -f $(OUTPUT)include/linux/gpio.h + rm -rf $(OUTPUT)include find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete -o -name '\.*.cmd' -delete install: $(ALL_PROGRAMS)
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 167/175 md: prevent incorrect update of resync/recovery offset
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Nan <[email protected]>
[ Upstream commit 7202082b7b7a256d04ec96131c7f859df0a79f64 ]
In md_do_sync(), when md_sync_action returns ACTION_FROZEN, subsequent call to md_sync_position() will return MaxSector. This causes 'curr_resync' (and later 'recovery_offset') to be set to MaxSector too, which incorrectly signals that recovery/resync has completed, even though disk data has not actually been updated.
To fix this issue, skip updating any offset values when the sync action is FROZEN. The same holds true for IDLE.
--- drivers/md/md.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/md/md.c +5 -0
@@ -8996,6 +8996,11 @@ void md_do_sync(struct md_thread *thread) } action =md_sync_action (mddev); +if (action ==ACTION_FROZEN || action ==ACTION_IDLE ) { +set_bit (MD_RECOVERY_INTR , &mddev->recovery); + goto skip; + } + desc =md_sync_action_name (action); mddev->last_sync_action = action;
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 168/175 ACPI: RISC-V: Fix FFH_CPPC_CSR error handling
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anup Patel <[email protected]>
commit 5b3706597b90a7b6c9ae148edd07a43531dcd49e upstream.
The cppc_ffh_csr_read() and cppc_ffh_csr_write() returns Linux error code in "data->ret.error" so cpc_read_ffh() and cpc_write_ffh() must not use sbi_err_map_linux_errno() for FFH_CPPC_CSR.
--- drivers/acpi/riscv/cppc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/riscv/cppc.c +2 -2
@@ -121,7 +121,7 @@ int cpc_read_ffh(int cpu, struct cpc_reg *val = data.ret.value; -return (data.ret.error) ?sbi_err_map_linux_errno (data.ret.error) :0 ; +return data.ret.error; }return -EINVAL ;
@@ -150,7 +150,7 @@ int cpc_write_ffh(int cpu, struct cpc_resmp_call_function_single (cpu, cppc_ffh_csr_write, &data,1 ); -return (data.ret.error) ?sbi_err_map_linux_errno (data.ret.error) :0 ; +return data.ret.error; }return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 169/175 riscv: Only allow LTO with CMODEL_MEDANY
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
commit 41f9049cff324b7033e6ed1ded7dfff803cf550a upstream.
When building with CONFIG_CMODEL_MEDLOW and CONFIG_LTO_CLANG, there is a series of errors due to some files being unconditionally compiled with '-mcmodel=medany', mismatching with the rest of the kernel built with '-mcmodel=medlow':
ld.lld: error: Function Import: link error: linking module flags 'Code Model': IDs have conflicting values: 'i32 3' from vmlinux.a(init.o at 899908), and 'i32 1' from vmlinux.a(net-traces.o at 1014628)
Only allow LTO to be performed when CONFIG_CMODEL_MEDANY is enabled to ensure there will be no code model mismatch errors. An alternative solution would be disabling LTO for the files with a different code model than the main kernel like some specialized areas of the kernel do but doing that for individual files is not as sustainable than forbidding the combination altogether.
--- arch/riscv/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/Kconfig +1 -1
@@ -61,7 +61,7 @@ config RISCV select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU select ARCH_SUPPORTS_HUGETLBFS if MMU # LLD >= 14: https://github.com/llvm/llvm-project/issues/50505 - select ARCH_SUPPORTS_LTO_CLANG if LLD_VERSION >= 140000 + select ARCH_SUPPORTS_LTO_CLANG if LLD_VERSION >= 140000 && CMODEL_MEDANY select ARCH_SUPPORTS_LTO_CLANG_THIN if LLD_VERSION >= 140000 select ARCH_SUPPORTS_PAGE_TABLE_CHECK if MMU select ARCH_SUPPORTS_PER_VMA_LOCK if MMU
Greg Kroah-Hartman
maintainerPATCH 170/175 riscv: use lw when reading int cpu in new_vmalloc_check
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Radim Krčmář <[email protected]>
commit e108c8a94f3f958c877f6ec7a6052a893ae4aa98 upstream.
REG_L is wrong, because thread_info.cpu is 32-bit, not xlen-bit wide. The struct currently has a hole after cpu, so little endian accesses seemed fine.
--- arch/riscv/kernel/entry.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/kernel/entry.S +1 -1
@@ -46,7 +46,7 @@ * a0 = &new_vmalloc[BIT_WORD(cpu)] * a1 = BIT_MASK(cpu) */ - REG_L a2, TASK_TI_CPU(tp) + lw a2, TASK_TI_CPU(tp) /* * Compute the new_vmalloc element position: * (cpu / 64) * 8 = (cpu >> 6) << 3
Greg Kroah-Hartman
maintainerPATCH 171/175 riscv: use lw when reading int cpu in asm_per_cpu
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Radim Krčmář <[email protected]>
commit f4ea67a722e8c9e1fb8109adebb9fb881ff0793a upstream.
REG_L is wrong, because thread_info.cpu is 32-bit, not xlen-bit wide. The struct currently has a hole after cpu, so little endian accesses seemed fine.
--- arch/riscv/include/asm/asm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/include/asm/asm.h +1 -1
@@ -90,7 +90,7 @@#endif .macro asm_per_cpu dst sym tmp - REG_L \tmp, TASK_TI_CPU_NUM(tp) + lw \tmp, TASK_TI_CPU_NUM(tp) slli \tmp, \tmp, PER_CPU_OFFSET_SHIFT la \dst, __per_cpu_offset add \dst, \dst, \tmp
Greg Kroah-Hartman
maintainerPATCH 172/175 riscv, bpf: use lw when reading int cpu in BPF_MOV64_PERCPU_REG
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Radim Krčmář <[email protected]>
commit ad5348c765914766a98ad26cf7a8c28d51a16bdd upstream.
emit_ld is wrong, because thread_info.cpu is 32-bit, not xlen-bit wide. The struct currently has a hole after cpu, so little endian accesses seemed fine.
--- arch/riscv/net/bpf_jit_comp64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/net/bpf_jit_comp64.c +1 -1
@@ -1150,7 +1150,7 @@ int bpf_jit_emit_insn(const struct bpf_iemit_mv (rd, rs, ctx);#ifdef CONFIG_SMP /* Load current CPU number in T1 */ -emit_ld (RV_REG_T1 , offsetof(struct thread_info , cpu), +emit_lw (RV_REG_T1 , offsetof(struct thread_info , cpu),RV_REG_TP , ctx);/* Load address of __per_cpu_offset array in T2 */ emit_addr (RV_REG_T2 , (u64)&__per_cpu_offset, extra_pass, ctx);
Greg Kroah-Hartman
maintainerPATCH 173/175 riscv, bpf: use lw when reading int cpu in bpf_get_smp_processor_id
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Radim Krčmář <[email protected]>
commit 8a16586fa7b8a01360890d284896b90c217dca44 upstream.
emit_ld is wrong, because thread_info.cpu is 32-bit, not xlen-bit wide. The struct currently has a hole after cpu, so little endian accesses seemed fine.
--- arch/riscv/net/bpf_jit_comp64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/net/bpf_jit_comp64.c +1 -1
@@ -1557,7 +1557,7 @@ int bpf_jit_emit_insn(const struct bpf_i*/ if (insn->src_reg ==0 && insn->imm == BPF_FUNC_get_smp_processor_id) {/* Load current CPU number in R0 */ -emit_ld (bpf_to_rv_reg (BPF_REG_0 , ctx), offsetof(struct thread_info , cpu), +emit_lw (bpf_to_rv_reg (BPF_REG_0 , ctx), offsetof(struct thread_info , cpu),RV_REG_TP , ctx);break ; }
Greg Kroah-Hartman
maintainerPATCH 174/175 md/raid1: fix data lost for writemostly rdev
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yu Kuai <[email protected]>
[ Upstream commit 93dec51e716db88f32d770dc9ab268964fff320b ]
If writemostly is enabled, alloc_behind_master_bio() will allocate a new bio for rdev, with bi_opf set to 0. Later, raid1_write_request() will clone from this bio, hence bi_opf is still 0 for the cloned bio. Submit this cloned bio will end up to be read, causing write data lost.
Fix this problem by inheriting bi_opf from original bio for behind_mast_bio.
--- drivers/md/raid1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/raid1.c +1 -1
@@ -1224,7 +1224,7 @@ static void alloc_behind_master_bio(struct r1bio *r1_bio,int i =0 ;struct bio *behind_bio =NULL ; - behind_bio =bio_alloc_bioset (NULL , vcnt,0 ,GFP_NOIO , + behind_bio =bio_alloc_bioset (NULL , vcnt, bio->bi_opf,GFP_NOIO , &r1_bio->mddev->bio_set);/* discard op, we don't support writezero/writesame yet */
Signature · 1 line
2.51.0
Greg Kroah-Hartman
maintainerPATCH 175/175 dmaengine: mediatek: Fix a flag reuse error in mtk_cqdma_tx_status()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qiu-ji Chen <[email protected]>
[ Upstream commit 8eba2187391e5ab49940cd02d6bd45a5617f4daf ]
Fixed a flag reuse bug in the mtk_cqdma_tx_status() function.
--- drivers/dma/mediatek/mtk-cqdma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/mediatek/mtk-cqdma.c +2 -2
@@ -449,9 +449,9 @@ static enum dma_status mtk_cqdma_tx_status(struct dma_chan *c,return ret;spin_lock_irqsave (&cvc->pc->lock, flags); -spin_lock_irqsave (&cvc->vc.lock, flags); +spin_lock (&cvc->vc.lock); vd =mtk_cqdma_find_active_desc (c, cookie); -spin_unlock_irqrestore (&cvc->vc.lock, flags); +spin_unlock (&cvc->vc.lock);spin_unlock_irqrestore (&cvc->pc->lock, flags);if (vd) {
Signature · 1 line
2.51.0
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.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
# Librecast Test Results
010/010 [ OK ] libmld
120/120 [ OK ] liblibrecast
CPU/kernel: Linux auntie 6.12.46-rc1-gc208f5890488 #63 SMP PREEMPT_DYNAMIC Mon Sep 8 06:42:52 -00 2025 x86_64 AMD Ryzen 9 9950X 16-Core Processor AuthenticAMD GNU/Linux
Quoted 8 lines · On Sun, 07 Sep 2025 21:56:35 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +0000. Anything received after that time might be too late.
Boot-tested under QEMU for Rust x86_64, arm64 and riscv64; built-tested for loongarch64:
Thanks!
Cheers,
Miguel
Am 07.09.2025 um 21:56 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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-2697 v2 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 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.12:
10 builds: 10 pass, 0 fail
28 boots: 28 pass, 0 fail
120 tests: 120 pass, 0 failLinux version: 6.12.46-rc1-gc208f5890488
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra186-p3509-0000+p3636-0001, tegra194-p2972-0000,
tegra194-p3509-0000+p3668-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Builds successfully. Boots and works on qemu and Dell XPS 15 9520 w/ Intel Core i7-12600H
Thanks,
Brett
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Hi Greg,
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +0000. Anything received after that time might be too late.
No problems seen on x86_64 and aarch64 with our testing.
Thanks,
Harshit
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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.
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.46 release. There are 175 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 Tue, 09 Sep 2025 19:55:53 +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/v6.x/stable-review/patch-6.12.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 6.12.46-rc1
* git: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
* git commit: c208f589048822e3898fbeda8f5d25df2d3aa413
* git describe: v6.12.44-272-gc208f5890488
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.12.y/build/v6.12.44-272-gc208f5890488
## Test Regressions (compared to v6.12.44-96-g4459b7afd68d)
## Metric Regressions (compared to v6.12.44-96-g4459b7afd68d)
## Test Fixes (compared to v6.12.44-96-g4459b7afd68d)
## Metric Fixes (compared to v6.12.44-96-g4459b7afd68d)
## Test result summary
total: 332773, pass: 307187, fail: 6893, skip: 18162, xfail: 531
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 139 total, 137 passed, 2 failed
* arm64: 57 total, 56 passed, 1 failed
* i386: 18 total, 18 passed, 0 failed
* mips: 34 total, 33 passed, 1 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 40 total, 40 passed, 0 failed
* riscv: 25 total, 22 passed, 3 failed
* s390: 22 total, 21 passed, 1 failed
* sh: 5 total, 5 passed, 0 failed
* sparc: 4 total, 3 passed, 1 failed
* x86_64: 49 total, 48 passed, 1 failed
## Test suites summary
* boot
* commands
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-efivarfs
* kselftest-exec
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-kcmp
* kselftest-kvm
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-mincore
* kselftest-mm
* kselftest-mqueue
* kselftest-net
* kselftest-net-mptcp
* kselftest-openat2
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-tc-testing
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user_events
* kselftest-vDSO
* kselftest-x86
* kunit
* kvm-unit-tests
* lava
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-build-clang
* log-parser-build-gcc
* log-parser-test
* ltp-capability
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-hugetlb
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* modules
* perf
* rcutorture
* rt-tests-cyclicdeadline
* rt-tests-pi-stress
* rt-tests-pmqtest
* rt-tests-rt-migrate-test
* rt-tests-signaltest
--
Linaro LKFT
https://lkft.linaro.org
The kernel, bpf tool, perf tool, and kselftest builds fine for v6.12.46-rc1 on x86 and arm64 Azure VM.
Thanks,
Hardik