6.9.9-rc1 review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 148/197 Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit 30139c702048f1097342a31302cbd3d478f50c63 upstream.
Patch series "mm: Avoid possible overflows in dirty throttling".
Dirty throttling logic assumes dirty limits in page units fit into 32-bits. This patch series makes sure this is true (see patch 2/2 for more details).
This patch (of 2):
This reverts commit 9319b647902cbd5cc884ac08a8a6d54ce111fc78.
The commit is broken in several ways. Firstly, the removed (u64) cast from the multiplication will introduce a multiplication overflow on 32-bit archs if wb_thresh * bg_thresh >= 1<<32 (which is actually common - the default settings with 4GB of RAM will trigger this). Secondly, the div64_u64() is unnecessarily expensive on 32-bit archs. We have div64_ul() in case we want to be safe & cheap. Thirdly, if dirty thresholds are larger than 1<<32 pages, then dirty balancing is going to blow up in many other spectacular ways anyway so trying to fix one possible overflow is just moot.
--- mm/page-writeback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/page-writeback.c +1 -1
@@ -1660,7 +1660,7 @@ static inline void wb_dirty_limits(struc*/ dtc->wb_thresh =__wb_calc_thresh (dtc); dtc->wb_bg_thresh = dtc->thresh ? -div64_u64 (dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) :0 ; +div_u64 ((u64 )dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) :0 ;/* * In order to avoid the stacked BDI deadlock we need
Greg Kroah-Hartman
maintainerPATCH 149/197 drm/xe: fix error handling in xe_migrate_update_pgtables
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Auld <[email protected]>
commit fc932f51926698488f874ddf7d8f18483ca10271 upstream.
Don't call drm_suballoc_free with sa_bo pointing to PTR_ERR.
References: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2120
--- drivers/gpu/drm/xe/xe_migrate.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/xe/xe_migrate.c +4 -4
@@ -1336,7 +1336,7 @@ xe_migrate_update_pgtables(struct xe_mig GFP_KERNEL, true, 0);if (IS_ERR (sa_bo)) { err =PTR_ERR (sa_bo); - goto err; + goto err_bb; } ppgtt_ofs = NUM_KERNEL_PDE +
@@ -1387,7 +1387,7 @@ xe_migrate_update_pgtables(struct xe_mig update_idx);if (IS_ERR (job)) { err =PTR_ERR (job); - goto err_bb; + goto err_sa; }/* Wait on BO move */
@@ -1436,12 +1436,12 @@ xe_migrate_update_pgtables(struct xe_mig err_job:xe_sched_job_put (job); +err_sa: +drm_suballoc_free (sa_bo,NULL ); err_bb:if (!q)mutex_unlock (&m->job_mutex);xe_bb_free (bb,NULL ); -err: -drm_suballoc_free (sa_bo,NULL );return ERR_PTR (err); }
Greg Kroah-Hartman
maintainerPATCH 150/197 drm/ttm: Always take the bo delayed cleanup path for imported bos
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Hellström <[email protected]>
commit d99fbd9aab624fc030934e21655389ab1765dc94 upstream.
Bos can be put with multiple unrelated dma-resv locks held. But imported bos attempt to grab the bo dma-resv during dma-buf detach that typically happens during cleanup. That leads to lockde splats similar to the below and a potential ABBA deadlock.
Fix this by always taking the delayed workqueue cleanup path for imported bos.
Requesting stable fixes from when the Xe driver was introduced, since its usage of drm_exec and wide vm dma_resvs appear to be the first reliable trigger of this.
[22982.116427] ============================================
[22982.116428] WARNING: possible recursive locking detected
[22982.116429] 6.10.0-rc2+ #10 Tainted: G U W
[22982.116430] --------------------------------------------
[22982.116430] glxgears:sh0/5785 is trying to acquire lock:
[22982.116431] ffff8c2bafa539a8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: dma_buf_detach+0x3b/0xf0
[22982.116438]
but task is already holding lock:
[22982.116438] ffff8c2d9aba6da8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: drm_exec_lock_obj+0x49/0x2b0 [drm_exec]
[22982.116442]
other info that might help us debug this:
[22982.116442] Possible unsafe locking scenario:[22982.116443] CPU0
[22982.116444] ----
[22982.116444] lock(reservation_ww_class_mutex);
[22982.116445] lock(reservation_ww_class_mutex);
[22982.116447]
*** DEADLOCK ***[22982.116447] May be due to missing lock nesting notation
[22982.116448] 5 locks held by glxgears:sh0/5785:
[22982.116449] #0: ffff8c2d9aba58c8 (&xef->vm.lock){+.+.}-{3:3}, at: xe_file_close+0xde/0x1c0 [xe]
[22982.116507] #1: ffff8c2e28cc8480 (&vm->lock){++++}-{3:3}, at: xe_vm_close_and_put+0x161/0x9b0 [xe]
[22982.116578] #2: ffff8c2e31982970 (&val->lock){.+.+}-{3:3}, at: xe_validation_ctx_init+0x6d/0x70 [xe]
[22982.116647] #3: ffffacdc469478a8 (reservation_ww_class_acquire){+.+.}-{0:0}, at: xe_vma_destroy_unlocked+0x7f/0xe0 [xe]
[22982.116716] #4: ffff8c2d9aba6da8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: drm_exec_lock_obj+0x49/0x2b0 [drm_exec]
[22982.116719]
stack backtrace:
[22982.116720] CPU: 8 PID: 5785 Comm: glxgears:sh0 Tainted: G U W 6.10.0-rc2+ #10
[22982.116721] Hardware name: ASUS System Product Name/PRIME B560M-A AC, BIOS 2001 02/01/2023
[22982.116723] Call Trace:
[22982.116724] <TASK>
[22982.116725] dump_stack_lvl+0x77/0xb0
[22982.116727] __lock_acquire+0x1232/0x2160
[22982.116730] lock_acquire+0xcb/0x2d0
[22982.116732] ? dma_buf_detach+0x3b/0xf0
[22982.116734] ? __lock_acquire+0x417/0x2160
[22982.116736] __ww_mutex_lock.constprop.0+0xd0/0x13b0
[22982.116738] ? dma_buf_detach+0x3b/0xf0
[22982.116741] ? dma_buf_detach+0x3b/0xf0
[22982.116743] ? ww_mutex_lock+0x2b/0x90
[22982.116745] ww_mutex_lock+0x2b/0x90
[22982.116747] dma_buf_detach+0x3b/0xf0
[22982.116749] drm_prime_gem_destroy+0x2f/0x40 [drm]
[22982.116775] xe_ttm_bo_destroy+0x32/0x220 [xe]
[22982.116818] ? __mutex_unlock_slowpath+0x3a/0x290
[22982.116821] drm_exec_unlock_all+0xa1/0xd0 [drm_exec]
[22982.116823] drm_exec_fini+0x12/0xb0 [drm_exec]
[22982.116824] xe_validation_ctx_fini+0x15/0x40 [xe]
[22982.116892] xe_vma_destroy_unlocked+0xb1/0xe0 [xe]
[22982.116959] xe_vm_close_and_put+0x41a/0x9b0 [xe]
[22982.117025] ? xa_find+0xe3/0x1e0
[22982.117028] xe_file_close+0x10a/0x1c0 [xe]
[22982.117074] drm_file_free+0x22a/0x280 [drm]
[22982.117099] drm_release_noglobal+0x22/0x70 [drm]
[22982.117119] __fput+0xf1/0x2d0
[22982.117122] task_work_run+0x59/0x90
[22982.117125] do_exit+0x330/0xb40
[22982.117127] do_group_exit+0x36/0xa0
[22982.117129] get_signal+0xbd2/0xbe0
[22982.117131] arch_do_signal_or_restart+0x3e/0x240
[22982.117134] syscall_exit_to_user_mode+0x1e7/0x290
[22982.117137] do_syscall_64+0xa1/0x180
[22982.117139] ? lock_acquire+0xcb/0x2d0
[22982.117140] ? __set_task_comm+0x28/0x1e0
[22982.117141] ? find_held_lock+0x2b/0x80
[22982.117144] ? __set_task_comm+0xe1/0x1e0
[22982.117145] ? lock_release+0xca/0x290
[22982.117147] ? __do_sys_prctl+0x245/0xab0
[22982.117149] ? lockdep_hardirqs_on_prepare+0xde/0x190
[22982.117150] ? syscall_exit_to_user_mode+0xb0/0x290
[22982.117152] ? do_syscall_64+0xa1/0x180
[22982.117154] ? __lock_acquire+0x417/0x2160
[22982.117155] ? reacquire_held_locks+0xd1/0x1f0
[22982.117156] ? do_user_addr_fault+0x30c/0x790
[22982.117158] ? lock_acquire+0xcb/0x2d0
[22982.117160] ? find_held_lock+0x2b/0x80
[22982.117162] ? do_user_addr_fault+0x357/0x790
[22982.117163] ? lock_release+0xca/0x290
[22982.117164] ? do_user_addr_fault+0x361/0x790
[22982.117166] ? trace_hardirqs_off+0x4b/0xc0
[22982.117168] ? clear_bhb_loop+0x45/0xa0
[22982.117170] ? clear_bhb_loop+0x45/0xa0
[22982.117172] ? clear_bhb_loop+0x45/0xa0
[22982.117174] entry_SYSCALL_64_after_hwframe+0x76/0x7e
[22982.117176] RIP: 0033:0x7f943d267169
[22982.117192] Code: Unable to access opcode bytes at 0x7f943d26713f.
[22982.117193] RSP: 002b:00007f9430bffc80 EFLAGS: 00000246 ORIG_RAX: 00000000000000ca
[22982.117195] RAX: fffffffffffffe00 RBX: 0000000000000000 RCX: 00007f943d267169
[22982.117196] RDX: 0000000000000000 RSI: 0000000000000189 RDI: 00005622f89579d0
[22982.117197] RBP: 00007f9430bffcb0 R08: 0000000000000000 R09: 00000000ffffffff
[22982.117198] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[22982.117199] R13: 0000000000000000 R14: 0000000000000000 R15: 00005622f89579d0
[22982.117202] </TASK>--- drivers/gpu/drm/ttm/ttm_bo.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/ttm/ttm_bo.c +1 -0
@@ -346,6 +346,7 @@ static void ttm_bo_release(struct kref *kref)if (!dma_resv_test_signaled (bo->base.resv,DMA_RESV_USAGE_BOOKKEEP ) || (want_init_on_free () && (bo->ttm !=NULL )) || + bo->type == ttm_bo_type_sg || !dma_resv_trylock (bo->base.resv)) {/* The BO is not idle, resurrect it for delayed destroy */ ttm_bo_flush_all_fences (bo);
Signature · 1 line
2.45.2
Greg Kroah-Hartman
maintainerPATCH 151/197 drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Ke <[email protected]>
commit 80bec6825b19d95ccdfd3393cf8ec15ff2a749b4 upstream.
In nouveau_connector_get_modes(), the return value of drm_mode_duplicate() is assigned to mode, which will lead to a possible NULL pointer dereference on failure of drm_mode_duplicate(). Add a check to avoid npd.
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/gpu/drm/nouveau/nouveau_connector.c +3 -0
@@ -1001,6 +1001,9 @@ nouveau_connector_get_modes(struct drm_cstruct drm_display_mode *mode; mode =drm_mode_duplicate (dev, nv_connector->native_mode); +if (!mode) +return 0 ; +drm_mode_probed_add (connector, mode); ret =1 ; }
Greg Kroah-Hartman
maintainerPATCH 152/197 drm/amdgpu/atomfirmware: silence UBSAN warning
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit d0417264437a8fa05f894cabba5a26715b32d78e upstream.
This is a variable sized array.
--- drivers/gpu/drm/amd/include/atomfirmware.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/include/atomfirmware.h +1 -1
@@ -734,7 +734,7 @@ struct atom_gpio_pin_lut_v2_1 {struct atom_common_table_header table_header;/*the real number of this included in the structure is calcualted by using the (whole structure size - the header size)/size of atom_gpio_pin_lut */ -struct atom_gpio_pin_assignment gpio_pin[8 ]; +struct atom_gpio_pin_assignment gpio_pin[]; };
Greg Kroah-Hartman
maintainerPATCH 153/197 drm: panel-orientation-quirks: Add quirk for Valve Galileo
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Schoenick <[email protected]>
commit 26746ed40bb0e4ebe2b2bd61c04eaaa54e263c14 upstream.
Valve's Steam Deck Galileo revision has a 800x1280 OLED panel
--- drivers/gpu/drm/drm_panel_orientation_quirks.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/gpu/drm/drm_panel_orientation_quirks.c +7 -0
@@ -421,6 +421,13 @@ static const struct dmi_system_id orient DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"), }, .driver_data = (void *)&lcd800x1280_rightside_up, + }, { /* Valve Steam Deck */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Valve" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"Galileo" ), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"), + }, + .driver_data = (void *)&lcd800x1280_rightside_up, }, { /* VIOS LTH17 */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VIOS"),
Greg Kroah-Hartman
maintainerPATCH 154/197 clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Md Sadre Alam <[email protected]>
commit 72ceafb587a56e26c905472418c7dc2033c294d3 upstream.
The crypto_ahb and crypto_axi clks are hardware voteable. This means that the halt bit isn't reliable because some other voter in the system, e.g. TrustZone, could be keeping the clk enabled when the kernel turns it off from clk_disable(). Make these clks use voting mode by changing the halt check to BRANCH_HALT_VOTED and toggle the voting bit in the voting register instead of directly controlling the branch by writing to the branch register. This fixes stuck clk warnings seen on ipq9574 and saves power by actually turning the clk off.
Also changes the CRYPTO_AHB_CLK_ENA & CRYPTO_AXI_CLK_ENA offset to 0xb004 from 0x16014.
--- drivers/clk/qcom/gcc-ipq9574.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/clk/qcom/gcc-ipq9574.c +6 -4
@@ -2140,9 +2140,10 @@ static struct clk_rcg2 pcnoc_bfdcd_clk_sstatic struct clk_branch gcc_crypto_axi_clk = { .halt_reg =0x16010 , + .halt_check =BRANCH_HALT_VOTED , .clkr = { - .enable_reg =0x16010 , - .enable_mask =BIT (0 ), + .enable_reg =0xb004 , + .enable_mask =BIT (15 ), .hw.init = &(const struct clk_init_data ) { .name ="gcc_crypto_axi_clk" , .parent_hws = (const struct clk_hw *[]) {
@@ -2156,9 +2157,10 @@ static struct clk_branch gcc_crypto_axi_static struct clk_branch gcc_crypto_ahb_clk = { .halt_reg =0x16014 , + .halt_check =BRANCH_HALT_VOTED , .clkr = { - .enable_reg =0x16014 , - .enable_mask =BIT (0 ), + .enable_reg =0xb004 , + .enable_mask =BIT (16 ), .hw.init = &(const struct clk_init_data ) { .name ="gcc_crypto_ahb_clk" , .parent_hws = (const struct clk_hw *[]) {
Greg Kroah-Hartman
maintainerPATCH 155/197 clk: sunxi-ng: common: Dont call hw_to_ccu_common on hw without common
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Frank Oltmanns <[email protected]>
commit ea977d742507e534d9fe4f4d74256f6b7f589338 upstream.
In order to set the rate range of a hw sunxi_ccu_probe calls hw_to_ccu_common() assuming all entries in desc->ccu_clks are contained in a ccu_common struct. This assumption is incorrect and, in consequence, causes invalid pointer de-references.
Remove the faulty call. Instead, add one more loop that iterates over the ccu_clks and sets the rate range, if required.
--- drivers/clk/sunxi-ng/ccu_common.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/clk/sunxi-ng/ccu_common.c +12 -6
@@ -132,7 +132,6 @@ static int sunxi_ccu_probe(struct sunxi_for (i =0 ; i < desc->hw_clks->num ; i++) {struct clk_hw *hw = desc->hw_clks->hws[i]; -struct ccu_common *common =hw_to_ccu_common (hw);const char *name;if (!hw)
@@ -147,14 +146,21 @@ static int sunxi_ccu_probe(struct sunxi_pr_err ("Couldn't register clock %d - %s\n" , i, name); goto err_clk_unreg; } + } + +for (i =0 ; i < desc->num_ccu_clks; i++) { +struct ccu_common *cclk = desc->ccu_clks[i]; + +if (!cclk) +continue ; -if (common->max_rate) -clk_hw_set_rate_range (hw, common->min_rate, - common->max_rate); +if (cclk->max_rate) +clk_hw_set_rate_range (&cclk->hw, cclk->min_rate, + cclk->max_rate);else -WARN (common->min_rate, +WARN (cclk->min_rate,"No max_rate, ignoring min_rate of clock %d - %s\n" , - i, name); + i,clk_hw_get_name (&cclk->hw)); } ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
Greg Kroah-Hartman
maintainerPATCH 156/197 powerpc/pseries: Fix scv instruction crash with kexec
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Piggin <[email protected]>
commit 21a741eb75f80397e5f7d3739e24d7d75e619011 upstream.
kexec on pseries disables AIL (reloc_on_exc), required for scv instruction support, before other CPUs have been shut down. This means they can execute scv instructions after AIL is disabled, which causes an interrupt at an unexpected entry location that crashes the kernel.
Change the kexec sequence to disable AIL after other CPUs have been brought down.
As a refresher, the real-mode scv interrupt vector is 0x17000, and the fixed-location head code probably couldn't easily deal with implementing such high addresses so it was just decided not to support that interrupt at all.
--- arch/powerpc/kexec/core_64.c | 11 +++++++++++ arch/powerpc/platforms/pseries/kexec.c | 8 -------- arch/powerpc/platforms/pseries/pseries.h | 1 - arch/powerpc/platforms/pseries/setup.c | 1 - 4 files changed, 11 insertions(+), 10 deletions(-)
arch/powerpc/kexec/core_64.c +11 -0
@@ -26,6 +26,7 @@#include <asm/paca.h> #include <asm/mmu.h> #include <asm/sections.h> /* _end */ +#include <asm/setup.h> #include <asm/smp.h> #include <asm/hw_breakpoint.h> #include <asm/svm.h>
@@ -315,6 +316,16 @@ void default_machine_kexec(struct kimageif (!kdump_in_progress ())kexec_prepare_cpus (); +#ifdef CONFIG_PPC_PSERIES +/* +* This must be done after other CPUs have shut down, otherwise they +* could execute the 'scv' instruction, which is not supported with +* reloc disabled (see configure_exceptions()). +*/ +if (firmware_has_feature (FW_FEATURE_SET_MODE )) +pseries_disable_reloc_on_exc (); +#endif +printk ("kexec: Starting switchover sequence.\n" );/* switch to a staticly allocated stack. Based on irq stack code.
arch/powerpc/platforms/pseries/kexec.c +0 -8
@@ -61,11 +61,3 @@ void pseries_kexec_cpu_down(int crash_sh }else xics_kexec_teardown_cpu (secondary); } - -void pseries_machine_kexec (struct kimage *image) -{ -if (firmware_has_feature (FW_FEATURE_SET_MODE )) -pseries_disable_reloc_on_exc (); - -default_machine_kexec (image); -}
arch/powerpc/platforms/pseries/pseries.h +0 -1
@@ -38,7 +38,6 @@ static inline void smp_init_pseries(void#endif extern void pseries_kexec_cpu_down (int crash_shutdown,int secondary); -void pseries_machine_kexec (struct kimage *image);extern void pSeries_final_fixup (void );
arch/powerpc/platforms/pseries/setup.c +0 -1
@@ -1159,7 +1159,6 @@ define_machine(pseries) { .machine_check_exception = pSeries_machine_check_exception, .machine_check_log_err = pSeries_machine_check_log_err,#ifdef CONFIG_KEXEC_CORE - .machine_kexec = pseries_machine_kexec, .kexec_cpu_down = pseries_kexec_cpu_down,#endif #ifdef CONFIG_MEMORY_HOTPLUG
Greg Kroah-Hartman
maintainerPATCH 157/197 powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinglin Wen <[email protected]>
commit 13fc6c175924eaa953cf597ce28ffa4edc4554a6 upstream.
According to the code logic, when the kernel is loaded at address 0, no copying operation should be performed, but it is currently being done.
This patch fixes the issue where the kernel code was incorrectly duplicated to address 0 when booting from address 0.
--- arch/powerpc/kernel/head_64.S | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/powerpc/kernel/head_64.S +3 -2
@@ -647,8 +647,9 @@ __after_prom_start: * Note: This process overwrites the OF exception vectors. */ LOAD_REG_IMMEDIATE(r3, PAGE_OFFSET) - mr. r4,r26 /* In some cases the loader may */ - beq 9f /* have already put us at zero */ + mr r4,r26 /* Load the virtual source address into r4 */ + cmpld r3,r4 /* Check if source == dest */ + beq 9f /* If so skip the copy */ li r6,0x100 /* Start offset, the first 0x100 */ /* bytes were copied earlier. */
Greg Kroah-Hartman
maintainerPATCH 158/197 firmware: sysfb: Fix reference count of sysfb parent device
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Zimmermann <[email protected]>
commit 3285d8f0a2ede604c368155c9c0921e16d41f70a upstream.
Retrieving the system framebuffer's parent device in sysfb_init() increments the parent device's reference count. Hence release the reference before leaving the init function.
Adding the sysfb platform device acquires and additional reference for the parent. This keeps the parent device around while the system framebuffer is in use.
--- drivers/firmware/sysfb.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/firmware/sysfb.c +8 -4
@@ -101,8 +101,10 @@ static __init struct device *sysfb_parenif (IS_ERR (pdev)) {return ERR_CAST (pdev); }else if (pdev) { -if (!sysfb_pci_dev_is_enabled (pdev)) +if (!sysfb_pci_dev_is_enabled (pdev)) { +pci_dev_put (pdev);return ERR_PTR (-ENODEV ); + }return &pdev->dev; }
@@ -137,7 +139,7 @@ static __init int sysfb_init(void)if (compatible) { pd =sysfb_create_simplefb (si, &mode, parent);if (!IS_ERR (pd)) - goto unlock_mutex; + goto put_device; }/* if the FB is incompatible, create a legacy framebuffer device */
@@ -155,7 +157,7 @@ static __init int sysfb_init(void) pd =platform_device_alloc (name,0 );if (!pd) { ret = -ENOMEM ; - goto unlock_mutex; + goto put_device; } pd->dev.parent = parent;
@@ -170,9 +172,11 @@ static __init int sysfb_init(void)if (ret) goto err; - goto unlock_mutex; + goto put_device; err:platform_device_put (pd); +put_device: +put_device (parent); unlock_mutex:mutex_unlock (&disable_lock);return ret;
Greg Kroah-Hartman
maintainerPATCH 159/197 filelock: Remove locks reliably when fcntl/close race is detected
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jann Horn <[email protected]>
commit 3cad1bc010416c6dd780643476bc59ed742436b9 upstream.
When fcntl_setlk() races with close(), it removes the created lock with do_lock_file_wait().
However, LSMs can allow the first do_lock_file_wait() that created the lock while denying the second do_lock_file_wait() that tries to remove the lock. In theory (but AFAIK not in practice), posix_lock_file() could also fail to remove a lock due to GFP_KERNEL allocation failure (when splitting a range in the middle).
After the bug has been triggered, use-after-free reads will occur in lock_get_status() when userspace reads /proc/locks. This can likely be used to read arbitrary kernel memory, but can't corrupt kernel memory. This only affects systems with SELinux / Smack / AppArmor / BPF-LSM in enforcing mode and only works from some security contexts.
Fix it by calling locks_remove_posix() instead, which is designed to reliably get rid of POSIX locks associated with the given file and files_struct and is also used by filp_flush().
--- fs/locks.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
fs/locks.c +4 -5
@@ -2448,8 +2448,9 @@ int fcntl_setlk(unsigned int fd, struct error =do_lock_file_wait (filp, cmd, file_lock);/* -* Attempt to detect a close/fcntl race and recover by releasing the -* lock that was just acquired. There is no need to do that when we're +* Detect close/fcntl races and recover by zapping all POSIX locks +* associated with this file and our files_struct, just like on +* filp_flush(). There is no need to do that when we're * unlocking though, or for OFD locks. */ if (!error && file_lock->c.flc_type != F_UNLCK &&
@@ -2464,9 +2465,7 @@ int fcntl_setlk(unsigned int fd, struct f =files_lookup_fd_locked (files, fd);spin_unlock (&files->file_lock);if (f != filp) { - file_lock->c.flc_type =F_UNLCK ; - error =do_lock_file_wait (filp, cmd, file_lock); -WARN_ON_ONCE (error); +locks_remove_posix (filp, files); error = -EBADF ; } }
Greg Kroah-Hartman
maintainerPATCH 160/197 mtd: rawnand: Ensure ECC configuration is propagated to upper layers
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <[email protected]>
commit 3a1b777eb9fb75d09c45ae5dd1d007eddcbebf1f upstream.
Until recently the "upper layer" was MTD. But following incremental reworks to bring spi-nand support and more recently generic ECC support, there is now an intermediate "generic NAND" layer that also needs to get access to some values. When using "converted" ECC engines, like the software ones, these values are already propagated correctly. But otherwise when using good old raw NAND controller drivers, we need to manually set these values ourselves at the end of the "scan" operation, once these values have been negotiated.
Without this propagation, later (generic) checks like the one warning users that the ECC strength is not high enough might simply no longer work.
--- drivers/mtd/nand/raw/nand_base.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/mtd/nand/raw/nand_base.c +8 -1
@@ -6301,6 +6301,7 @@ static const struct nand_ops rawnand_opsstatic int nand_scan_tail (struct nand_chip *chip) {struct mtd_info *mtd =nand_to_mtd (chip); +struct nand_device *base = &chip->base;struct nand_ecc_ctrl *ecc = &chip->ecc;int ret, i;
@@ -6445,9 +6446,13 @@ static int nand_scan_tail(struct nand_chif (!ecc->write_oob_raw) ecc->write_oob_raw = ecc->write_oob; -/* propagate ecc info to mtd_info */ +/* Propagate ECC info to the generic NAND and MTD layers */ mtd->ecc_strength = ecc->strength; +if (!base->ecc.ctx.conf.strength) + base->ecc.ctx.conf.strength = ecc->strength; mtd->ecc_step_size = ecc->size; +if (!base->ecc.ctx.conf.step_size) + base->ecc.ctx.conf.step_size = ecc->size;/* * Set the number of read / write steps for one page depending on ECC
@@ -6455,6 +6460,8 @@ static int nand_scan_tail(struct nand_ch*/ if (!ecc->steps) ecc->steps = mtd->writesize / ecc->size; +if (!base->ecc.ctx.nsteps) + base->ecc.ctx.nsteps = ecc->steps;if (ecc->steps * ecc->size != mtd->writesize) {WARN (1 ,"Invalid ECC parameters\n" ); ret = -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 161/197 mtd: rawnand: Fix the nand_read_data_op() early check
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <[email protected]>
commit 5da39530d19946f6241de84d1db69da2f5c61da7 upstream.
The nand_read_data_op() operation, which only consists in DATA_IN cycles, is sadly not supported by all controllers despite being very basic. The core, for some time, supposed all drivers would support it. An improvement to this situation for supporting more constrained controller added a check to verify if the operation was supported before attempting it by running the function with the check_only boolean set first, and then possibly falling back to another (possibly slightly less optimized) alternative.
An even newer addition moved that check very early and probe time, in order to perform the check only once. The content of the operation was not so important, as long as the controller driver would tell whether such operation on the NAND bus would be possible or not. In practice, no buffer was provided (no fake buffer or whatever) as it is anyway not relevant for the "check_only" condition. Unfortunately, early in the function, there is an if statement verifying that the input parameters are right for normal use, making the early check always unsuccessful.
--- drivers/mtd/nand/raw/nand_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mtd/nand/raw/nand_base.c +1 -1
@@ -2173,7 +2173,7 @@ EXPORT_SYMBOL_GPL(nand_reset_op);int nand_read_data_op (struct nand_chip *chip,void *buf,unsigned int len,bool force_8bit,bool check_only) { -if (!len || !buf) +if (!len || (!check_only && !buf))return -EINVAL ;if (nand_has_exec_op (chip)) {
Greg Kroah-Hartman
maintainerPATCH 162/197 mtd: rawnand: Bypass a couple of sanity checks during NAND identification
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <[email protected]>
commit 8754d9835683e8fab9a8305acdb38a3aeb9d20bd upstream.
Early during NAND identification, mtd_info fields have not yet been initialized (namely, writesize and oobsize) and thus cannot be used for sanity checks yet. Of course if there is a misuse of nand_change_read_column_op() so early we won't be warned, but there is anyway no actual check to perform at this stage as we do not yet know the NAND geometry.
So, if the fields are empty, especially mtd->writesize which is *always* set quite rapidly after identification, let's skip the sanity checks.
nand_change_read_column_op() is subject to be used early for ONFI/JEDEC identification in the very unlikely case of:
- bitflips appearing in the parameter page,
- the controller driver not supporting simple DATA_IN cycles.
As nand_change_read_column_op() uses nand_fill_column_cycles() the logic explaind above also applies in this secondary helper.
--- drivers/mtd/nand/raw/nand_base.c | 57 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 25 deletions(-)
drivers/mtd/nand/raw/nand_base.c +32 -25
@@ -1093,28 +1093,32 @@ static int nand_fill_column_cycles(struc unsigned int offset_in_page) {struct mtd_info *mtd =nand_to_mtd (chip); +bool ident_stage = !mtd->writesize; -/* Make sure the offset is less than the actual page size. */ -if (offset_in_page > mtd->writesize + mtd->oobsize) -return -EINVAL ; - -/* -* On small page NANDs, there's a dedicated command to access the OOB -* area, and the column address is relative to the start of the OOB -* area, not the start of the page. Asjust the address accordingly. -*/ -if (mtd->writesize <=512 && offset_in_page >= mtd->writesize) - offset_in_page -= mtd->writesize; - -/* -* The offset in page is expressed in bytes, if the NAND bus is 16-bit -* wide, then it must be divided by 2. -*/ -if (chip->options &NAND_BUSWIDTH_16 ) { -if (WARN_ON (offset_in_page %2 )) +/* Bypass all checks during NAND identification */ +if (likely (!ident_stage)) { +/* Make sure the offset is less than the actual page size. */ +if (offset_in_page > mtd->writesize + mtd->oobsize)return -EINVAL ; - offset_in_page /=2 ; +/* +* On small page NANDs, there's a dedicated command to access the OOB +* area, and the column address is relative to the start of the OOB +* area, not the start of the page. Asjust the address accordingly. +*/ +if (mtd->writesize <=512 && offset_in_page >= mtd->writesize) + offset_in_page -= mtd->writesize; + +/* +* The offset in page is expressed in bytes, if the NAND bus is 16-bit +* wide, then it must be divided by 2. +*/ +if (chip->options &NAND_BUSWIDTH_16 ) { +if (WARN_ON (offset_in_page %2 )) +return -EINVAL ; + + offset_in_page /=2 ; + } } addrs[0 ] = offset_in_page;
@@ -1123,7 +1127,7 @@ static int nand_fill_column_cycles(struc* Small page NANDs use 1 cycle for the columns, while large page NANDs * need 2 */ -if (mtd->writesize <=512 ) +if (!ident_stage && mtd->writesize <=512 )return 1 ; addrs[1 ] = offset_in_page >>8 ;
@@ -1436,16 +1440,19 @@ int nand_change_read_column_op(struct na unsigned int len, bool force_8bit) {struct mtd_info *mtd =nand_to_mtd (chip); +bool ident_stage = !mtd->writesize;if (len && !buf)return -EINVAL ; -if (offset_in_page + len > mtd->writesize + mtd->oobsize) -return -EINVAL ; +if (!ident_stage) { +if (offset_in_page + len > mtd->writesize + mtd->oobsize) +return -EINVAL ; -/* Small page NANDs do not support column change. */ -if (mtd->writesize <=512 ) -return -ENOTSUPP ; +/* Small page NANDs do not support column change. */ +if (mtd->writesize <=512 ) +return -ENOTSUPP ; + }if (nand_has_exec_op (chip)) { const struct nand_interface_config *conf =
Greg Kroah-Hartman
maintainerPATCH 163/197 mtd: rawnand: rockchip: ensure NVDDR timings are rejected
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Val Packett <[email protected]>
commit b27d8946b5edd9827ee3c2f9ea1dd30022fb1ebe upstream.
.setup_interface first gets called with a "target" value of NAND_DATA_IFACE_CHECK_ONLY, in which case an error is expected if the controller driver does not support the timing mode (NVDDR).
--- drivers/mtd/nand/raw/rockchip-nand-controller.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/mtd/nand/raw/rockchip-nand-controller.c +3 -3
@@ -420,13 +420,13 @@ static int rk_nfc_setup_interface(structu32 rate, tc2rw, trwpw, trw2c;u32 temp; -if (target <0 ) -return 0 ; - timings =nand_get_sdr_timings (conf);if (IS_ERR (timings))return -EOPNOTSUPP ; +if (target <0 ) +return 0 ; +if (IS_ERR (nfc->nfc_clk)) rate =clk_get_rate (nfc->ahb_clk);else
Greg Kroah-Hartman
maintainerPATCH 164/197 fs: dont misleadingly warn during thaw operations
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <[email protected]>
commit 2ae4db5647d807efb6a87c09efaa6d1db9c905d7 upstream.
The block device may have been frozen before it was claimed by a filesystem. Concurrently another process might try to mount that frozen block device and has temporarily claimed the block device for that purpose causing a concurrent fs_bdev_thaw() to end up here. The mounter is already about to abort mounting because they still saw an elevanted bdev->bd_fsfreeze_count so get_bdev_super() will return NULL in that case.
For example, P1 calls dm_suspend() which calls into bdev_freeze() before the block device has been claimed by the filesystem. This brings bdev->bd_fsfreeze_count to 1 and no call into fs_bdev_freeze() is required.
Now P2 tries to mount that frozen block device. It claims it and checks bdev->bd_fsfreeze_count. As it's elevated it aborts mounting.
In the meantime P3 called dm_resume(). P3 sees that the block device is already claimed by a filesystem and calls into fs_bdev_thaw().
P3 takes a passive reference and realizes that the filesystem isn't ready yet. P3 puts itself to sleep to wait for the filesystem to become ready.
P2 now puts the last active reference to the filesystem and marks it as dying. P3 gets woken, sees that the filesystem is dying and get_bdev_super() fails.
--- fs/super.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
fs/super.c +10 -1
@@ -1501,8 +1501,17 @@ static int fs_bdev_thaw(struct block_devlockdep_assert_held (&bdev->bd_fsfreeze_mutex); +/* +* The block device may have been frozen before it was claimed by a +* filesystem. Concurrently another process might try to mount that +* frozen block device and has temporarily claimed the block device for +* that purpose causing a concurrent fs_bdev_thaw() to end up here. The +* mounter is already about to abort mounting because they still saw an +* elevanted bdev->bd_fsfreeze_count so get_bdev_super() will return +* NULL in that case. +*/ sb =get_bdev_super (bdev); -if (WARN_ON_ONCE (!sb)) +if (!sb)return -EINVAL ;if (sb->s_op->thaw_super)
Greg Kroah-Hartman
maintainerPATCH 165/197 net: stmmac: dwmac-qcom-ethqos: fix error array size
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yijie Yang <[email protected]>
commit b698ab56837bc9e666b7e7e12e9c28fe1d6a763c upstream.
Correct member @num_por with size of right array @emac_v4_0_0_por for struct ethqos_emac_driver_data @emac_v4_0_0_data.
--- drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +1 -1
@@ -272,7 +272,7 @@ static const struct ethqos_emac_por emacstatic const struct ethqos_emac_driver_data emac_v4_0_0_data = { .por = emac_v4_0_0_por, - .num_por =ARRAY_SIZE (emac_v3_0_0_por), + .num_por =ARRAY_SIZE (emac_v4_0_0_por), .rgmii_config_loopback_en = false, .has_emac_ge_3 = true, .link_clk_name ="phyaux" ,
Greg Kroah-Hartman
maintainerPATCH 166/197 bnx2x: Fix multiple UBSAN array-index-out-of-bounds
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ghadi Elie Rahme <[email protected]>
commit 134061163ee5ca4759de5c24ca3bd71608891ba7 upstream.
Fix UBSAN warnings that occur when using a system with 32 physical cpu cores or more, or when the user defines a number of Ethernet queues greater than or equal to FP_SB_MAX_E1x using the num_queues module parameter.
Currently there is a read/write out of bounds that occurs on the array "struct stats_query_entry query" present inside the "bnx2x_fw_stats_req" struct in "drivers/net/ethernet/broadcom/bnx2x/bnx2x.h". Looking at the definition of the "struct stats_query_entry query" array:
struct stats_query_entry query[FP_SB_MAX_E1x+
BNX2X_FIRST_QUEUE_QUERY_IDX];
FP_SB_MAX_E1x is defined as the maximum number of fast path interrupts and has a value of 16, while BNX2X_FIRST_QUEUE_QUERY_IDX has a value of 3 meaning the array has a total size of 19.
Since accesses to "struct stats_query_entry query" are offset-ted by BNX2X_FIRST_QUEUE_QUERY_IDX, that means that the total number of Ethernet queues should not exceed FP_SB_MAX_E1x (16). However one of these queues is reserved for FCOE and thus the number of Ethernet queues should be set to [FP_SB_MAX_E1x -1] (15) if FCOE is enabled or [FP_SB_MAX_E1x] (16) if it is not.
This is also described in a comment in the source code in drivers/net/ethernet/broadcom/bnx2x/bnx2x.h just above the Macro definition of FP_SB_MAX_E1x. Below is the part of this explanation that it important for this patch
/*
* The total number of L2 queues, MSIX vectors and HW contexts (CIDs) is
* control by the number of fast-path status blocks supported by the
* device (HW/FW). Each fast-path status block (FP-SB) aka non-default
* status block represents an independent interrupts context that can
* serve a regular L2 networking queue. However special L2 queues such
* as the FCoE queue do not require a FP-SB and other components like
* the CNIC may consume FP-SB reducing the number of possible L2 queues *
* If the maximum number of FP-SB available is X then:
* a. If CNIC is supported it consumes 1 FP-SB thus the max number of
* regular L2 queues is Y=X-1
* b. In MF mode the actual number of L2 queues is Y= (X-1/MF_factor)
* c. If the FCoE L2 queue is supported the actual number of L2 queues
* is Y+1
* d. The number of irqs (MSIX vectors) is either Y+1 (one extra for
* slow-path interrupts) or Y+2 if CNIC is supported (one additional
* FP interrupt context for the CNIC).
* e. The number of HW context (CID count) is always X or X+1 if FCoE
* L2 queue is supported. The cid for the FCoE L2 queue is always X.
*/
However this driver also supports NICs that use the E2 controller which can handle more queues due to having more FP-SB represented by FP_SB_MAX_E2. Looking at the commits when the E2 support was added, it was originally using the E1x parameters: commit f2e0899f0f27 ("bnx2x: Add 57712 support"). Back then FP_SB_MAX_E2 was set to 16 the same as E1x. However the driver was later updated to take full advantage of the E2 instead of having it be limited to the capabilities of the E1x. But as far as we can tell, the array "stats_query_entry query" was still limited to using the FP-SB available to the E1x cards as part of an oversignt when the driver was updated to take full advantage of the E2, and now with the driver being aware of the greater queue size supported by E2 NICs, it causes the UBSAN warnings seen in the stack traces below.
This patch increases the size of the "stats_query_entry query" array by replacing FP_SB_MAX_E1x with FP_SB_MAX_E2 to be large enough to handle both types of NICs.
Stack traces:
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1529:11
index 20 is out of range for type 'stats_query_entry [19]'
CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_prep_fw_stats_req+0x2e1/0x310 [bnx2x]
bnx2x_stats_init+0x156/0x320 [bnx2x]
bnx2x_post_irq_nic_init+0x81/0x1a0 [bnx2x]
bnx2x_nic_load+0x8e8/0x19e0 [bnx2x]
bnx2x_open+0x16b/0x290 [bnx2x]
__dev_open+0x10e/0x1d0
RIP: 0033:0x736223927a0a
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca
64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
RSP: 002b:00007ffc0bb2ada8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
RAX: ffffffffffffffda RBX: 0000583df50f9c78 RCX: 0000736223927a0a
RDX: 0000000000000020 RSI: 0000583df50ee510 RDI: 0000000000000003
RBP: 0000583df50d4940 R08: 00007ffc0bb2adb0 R09: 0000000000000080
R10: 0000000000000000 R11: 0000000000000246 R12: 0000583df5103ae0
R13: 000000000000035a R14: 0000583df50f9c30 R15: 0000583ddddddf00
</TASK>
---[ end trace ]---
------------[ cut here ]------------
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1546:11
index 28 is out of range for type 'stats_query_entry [19]'
CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_prep_fw_stats_req+0x2fd/0x310 [bnx2x]
bnx2x_stats_init+0x156/0x320 [bnx2x]
bnx2x_post_irq_nic_init+0x81/0x1a0 [bnx2x]
bnx2x_nic_load+0x8e8/0x19e0 [bnx2x]
bnx2x_open+0x16b/0x290 [bnx2x]
__dev_open+0x10e/0x1d0
RIP: 0033:0x736223927a0a
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca
64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
RSP: 002b:00007ffc0bb2ada8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
RAX: ffffffffffffffda RBX: 0000583df50f9c78 RCX: 0000736223927a0a
RDX: 0000000000000020 RSI: 0000583df50ee510 RDI: 0000000000000003
RBP: 0000583df50d4940 R08: 00007ffc0bb2adb0 R09: 0000000000000080
R10: 0000000000000000 R11: 0000000000000246 R12: 0000583df5103ae0
R13: 000000000000035a R14: 0000583df50f9c30 R15: 0000583ddddddf00
</TASK>
---[ end trace ]---
------------[ cut here ]------------
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c:1895:8
index 29 is out of range for type 'stats_query_entry [19]'
CPU: 13 PID: 163 Comm: kworker/u96:1 Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Workqueue: bnx2x bnx2x_sp_task [bnx2x]
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_iov_adjust_stats_req+0x3c4/0x3d0 [bnx2x]
bnx2x_storm_stats_post.part.0+0x4a/0x330 [bnx2x]
? bnx2x_hw_stats_post+0x231/0x250 [bnx2x]
bnx2x_stats_start+0x44/0x70 [bnx2x]
bnx2x_stats_handle+0x149/0x350 [bnx2x]
bnx2x_attn_int_asserted+0x998/0x9b0 [bnx2x]
bnx2x_sp_task+0x491/0x5c0 [bnx2x]
process_one_work+0x18d/0x3f0
</TASK>
---[ end trace ]------ drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +1 -1
@@ -1262,7 +1262,7 @@ enum {struct bnx2x_fw_stats_req {struct stats_query_header hdr; -struct stats_query_entry query[FP_SB_MAX_E1x+ +struct stats_query_entry query[FP_SB_MAX_E2 +BNX2X_FIRST_QUEUE_QUERY_IDX ]; };
Greg Kroah-Hartman
maintainerPATCH 167/197 s390/dasd: Fix invalid dereferencing of indirect CCW data pointer
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Haberland <[email protected]>
commit b3a58f3b90f564f42a5c35778d8c5107b2c2150b upstream.
Fix invalid dereferencing of indirect CCW data pointer in dasd_eckd_dump_sense() that leads to a kernel panic in error cases.
When using indirect addressing for DASD CCWs (IDAW) the CCW CDA pointer does not contain the data address itself but a pointer to the IDAL. This needs to be translated from physical to virtual as well before using it.
This dereferencing is also used for dasd_page_cache and also fixed although it is very unlikely that this code path ever gets used.
--- drivers/s390/block/dasd_eckd.c | 4 ++-- drivers/s390/block/dasd_fba.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/s390/block/dasd_eckd.c +2 -2
@@ -4906,7 +4906,7 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req) ccw++;if (dst) {if (ccw->flags &CCW_FLAG_IDA ) - cda = *((char **)dma32_to_virt (ccw->cda)); + cda =dma64_to_virt (*((dma64_t *)dma32_to_virt (ccw->cda)));else cda =dma32_to_virt (ccw->cda);if (dst != cda) {
@@ -5525,7 +5525,7 @@ dasd_eckd_dump_ccw_range(struct dasd_device *device, struct ccw1 *from,/* get pointer to data (consider IDALs) */ if (from->flags &CCW_FLAG_IDA ) - datap = (char *)*((addr_t *)dma32_to_virt (from->cda)); + datap =dma64_to_virt (*((dma64_t *)dma32_to_virt (from->cda)));else datap =dma32_to_virt (from->cda);
drivers/s390/block/dasd_fba.c +1 -1
@@ -585,7 +585,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req) ccw++;if (dst) {if (ccw->flags &CCW_FLAG_IDA ) - cda = *((char **)dma32_to_virt (ccw->cda)); + cda =dma64_to_virt (*((dma64_t *)dma32_to_virt (ccw->cda)));else cda =dma32_to_virt (ccw->cda);if (dst != cda) {
Signature · 1 line
2.45.2
Greg Kroah-Hartman
maintainerPATCH 168/197 selftests/harness: Fix tests timeout and race condition
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mickaël Salaün <[email protected]>
commit 130e42806773013e9cf32d211922c935ae2df86c upstream.
We cannot use CLONE_VFORK because we also need to wait for the timeout signal.
Restore tests timeout by using the original fork() call in __run_test() but also in __TEST_F_IMPL(). Also fix a race condition when waiting for the test child process.
Because test metadata are shared between test processes, only the parent process must set the test PID (child). Otherwise, t->pid may be set to zero, leading to inconsistent error cases:
# RUN layout1.rule_on_mountpoint ...
# rule_on_mountpoint: Test ended in some other way [127]
# OK layout1.rule_on_mountpoint
ok 20 layout1.rule_on_mountpoint
As safeguards, initialize the "status" variable with a valid exit code, and handle unknown test exits as errors.
The use of fork() introduces a new race condition in landlock/fs_test.c which seems to be specific to hostfs bind mounts, but I haven't found the root cause and it's difficult to trigger. I'll try to fix it with another patch.
--- tools/testing/selftests/kselftest_harness.h | 43 +++++++++++++++------------- 1 file changed, 24 insertions(+), 19 deletions(-)
tools/testing/selftests/kselftest_harness.h +24 -19
@@ -66,8 +66,6 @@#include <sys/wait.h> #include <unistd.h> #include <setjmp.h> -#include <syscall.h> -#include <linux/sched.h> #include "kselftest.h"
@@ -82,17 +80,6 @@# define TH_LOG_ENABLED 1#endif -/* Wait for the child process to end but without sharing memory mapping. */ -static inline pid_t clone3_vfork (void ) -{ -struct clone_args args = { - .flags =CLONE_VFORK , - .exit_signal =SIGCHLD , - }; - -return syscall (__NR_clone3, &args,sizeof (args)); -} -/** * TH_LOG() *
@@ -437,7 +424,7 @@ static inline pid_t clone3_vfork(void) } \if (setjmp (_metadata->env) ==0 ) { \/* _metadata and potentially self are shared with all forks. */ \ - child =clone3_vfork (); \ + child =fork (); \if (child ==0 ) { \ fixture_name##_setup(_metadata, self, variant->data); \/* Let setup failure terminate early. */ \
@@ -1016,7 +1003,14 @@ void __wait_for_test(struct __test_metad .sa_flags = SA_SIGINFO, };struct sigaction saved_action; -int status; +/* +* Sets status so that WIFEXITED(status) returns true and +* WEXITSTATUS(status) returns KSFT_FAIL. This safe default value +* should never be evaluated because of the waitpid(2) check and +* SIGALRM handling. +*/ +int status =KSFT_FAIL <<8 ; +int child;if (sigaction (SIGALRM , &action, &saved_action)) { t->exit_code =KSFT_FAIL ;
@@ -1028,7 +1022,15 @@ void __wait_for_test(struct __test_metad __active_test = t; t->timed_out = false;alarm (t->timeout); -waitpid (t->pid, &status,0 ); + child =waitpid (t->pid, &status,0 ); +if (child ==-1 && errno !=EINTR ) { + t->exit_code =KSFT_FAIL ; +fprintf (TH_LOG_STREAM , +"# %s: Failed to wait for PID %d (errno: %d)\n" , + t->name, t->pid, errno); +return ; + } +alarm (0 );if (sigaction (SIGALRM , &saved_action,NULL )) { t->exit_code =KSFT_FAIL ;
@@ -1083,6 +1085,7 @@ void __wait_for_test(struct __test_metad WTERMSIG(status)); } }else { + t->exit_code =KSFT_FAIL ; fprintf(TH_LOG_STREAM, "# %s: Test ended in some other way [%u]\n", t->name,
@@ -1218,6 +1221,7 @@ void __run_test(struct __fixture_metadatstruct __test_xfail *xfail;char test_name[1024 ];const char *diagnostic; +int child;/* reset test struct */ t->exit_code =KSFT_PASS ;
@@ -1236,15 +1240,16 @@ void __run_test(struct __fixture_metadatfflush (stdout);fflush (stderr); - t->pid =clone3_vfork (); -if (t->pid <0 ) { + child =fork (); +if (child <0 ) {ksft_print_msg ("ERROR SPAWNING TEST CHILD\n" ); t->exit_code =KSFT_FAIL ; - }else if (t->pid ==0 ) { + }else if (child ==0 ) {setpgrp (); t->fn (t, variant);_exit (t->exit_code); }else { + t->pid = child;__wait_for_test (t); } ksft_print_msg(" %4s %s\n",
Greg Kroah-Hartman
maintainerPATCH 169/197 arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dragan Simic <[email protected]>
commit d201c92bff90f3d3d0b079fc955378c15c0483cc upstream.
Correct the specified regulator-min-microvolt value for the buck DCDC_REG2 regulator, which is part of the Rockchip RK809 PMIC, in the Pine64 Quartz64 Model B board dts. According to the RK809 datasheet, version 1.01, this regulator is capable of producing voltages as low as 0.5 V on its output, instead of going down to 0.9 V only, which is additionally confirmed by the regulator-min-microvolt values found in the board dts files for the other supported boards that use the same RK809 PMIC.
This allows the DVFS to clock the GPU on the Quartz64 Model B below 700 MHz, all the way down to 200 MHz, which saves some power and reduces the amount of generated heat a bit, improving the thermal headroom and possibly improving the bursty CPU and GPU performance on this board.
This also eliminates the following warnings in the kernel log:
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (200000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (300000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (400000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (600000000)
--- arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts +1 -1
@@ -289,7 +289,7 @@ regulator-name = "vdd_gpu"; regulator-always-on; regulator-boot-on; - regulator-min-microvolt = <900000>; + regulator-min-microvolt = <500000>; regulator-max-microvolt = <1350000>; regulator-ramp-delay = <6001>;
Greg Kroah-Hartman
maintainerPATCH 170/197 clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luca Weiss <[email protected]>
[ Upstream commit 3414f41a13eb41db15c558fbc695466203dca4fa ]
Both gpll6 and gpll7 are parented to CXO at 19.2 MHz and not to GPLL0 which runs at 600 MHz. Also gpll6_out_even should have the parent gpll6 and not gpll0.
Adjust the parents of these clocks to make Linux report the correct rate and not absurd numbers like gpll7 at ~25 GHz or gpll6 at 24 GHz.
Corrected rates are the following:
gpll7 807999902 Hz
gpll6 768000000 Hz
gpll6_out_even 384000000 Hz
gpll0 600000000 Hz
gpll0_out_odd 200000000 Hz
gpll0_out_even 300000000 HzAnd because gpll6 is the parent of gcc_sdcc2_apps_clk_src (at 202 MHz) that clock also reports the correct rate now and avoids this warning:
[ 5.984062] mmc0: Card appears overclocked; req 202000000 Hz, actual 6312499237 Hz
--- drivers/clk/qcom/gcc-sm6350.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/clk/qcom/gcc-sm6350.c +5 -5
@@ -100,8 +100,8 @@ static struct clk_alpha_pll gpll6 = { .enable_mask = BIT(6), .hw.init = &(struct clk_init_data ){ .name ="gpll6" , - .parent_hws = (const struct clk_hw *[]){ - &gpll0.clkr.hw, + .parent_data = &(const struct clk_parent_data ){ + .fw_name ="bi_tcxo" , }, .num_parents =1 , .ops = &clk_alpha_pll_fixed_fabia_ops,
@@ -124,7 +124,7 @@ static struct clk_alpha_pll_postdiv gpll6_out_even = { .clkr.hw.init = &(struct clk_init_data){ .name ="gpll6_out_even" , .parent_hws = (const struct clk_hw *[]){ - &gpll0.clkr.hw, + &gpll6.clkr.hw, }, .num_parents =1 , .ops = &clk_alpha_pll_postdiv_fabia_ops,
@@ -139,8 +139,8 @@ static struct clk_alpha_pll gpll7 = { .enable_mask = BIT(7), .hw.init = &(struct clk_init_data ){ .name ="gpll7" , - .parent_hws = (const struct clk_hw *[]){ - &gpll0.clkr.hw, + .parent_data = &(const struct clk_parent_data ){ + .fw_name ="bi_tcxo" , }, .num_parents =1 , .ops = &clk_alpha_pll_fixed_fabia_ops,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 171/197 clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabor Juhos <[email protected]>
[ Upstream commit 5a33a64524e6381c399e5e42571d9363ffc0bed4 ]
The clk_alpha_pll_stromer_plus_set_rate() function does not sets the ALPHA_EN bit in the USER_CTL register, so setting rates which requires using alpha mode works only if the bit gets set already prior calling the function.
Extend the function to set the ALPHA_EN bit in order to allow using fractional rates regardless whether the bit gets set previously or not.
--- drivers/clk/qcom/clk-alpha-pll.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/clk/qcom/clk-alpha-pll.c +3 -0
@@ -2555,6 +2555,9 @@ static int clk_alpha_pll_stromer_plus_set_rate(struct clk_hw *hw,regmap_write (pll->clkr.regmap,PLL_ALPHA_VAL_U (pll), a >>ALPHA_BITWIDTH ); +regmap_update_bits (pll->clkr.regmap,PLL_USER_CTL (pll), +PLL_ALPHA_EN ,PLL_ALPHA_EN ); +regmap_write (pll->clkr.regmap,PLL_MODE (pll),PLL_BYPASSNL );/* Wait five micro seconds or more */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 172/197 clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pin-yen Lin <[email protected]>
[ Upstream commit 878e845d8db04df9ff3bbbaac09d335b24153704 ]
Commit 2f7b1d8b5505 ("clk: mediatek: Do a runtime PM get on controllers during probe") enabled runtime PM for all mediatek clock controllers, but this introduced an issue on the resume path.
If a device resumes earlier than the clock controller and calls clk_prepare() when runtime PM is enabled on the controller, it will end up calling clk_pm_runtime_get(). But the subsequent pm_runtime_resume_and_get() call will fail because the runtime PM is temporarily disabled during suspend.
To workaround this, introduce a need_runtime_pm flag and only enable it on mt8183-mfgcfg, which is the driver that observed deadlock previously. Hopefully mt8183-cfgcfg won't run into the issue at the resume stage because the GPU should have stopped rendering before the system calls suspend.
--- drivers/clk/mediatek/clk-mt8183-mfgcfg.c | 1 + drivers/clk/mediatek/clk-mtk.c | 24 ++++++++++++++---------- drivers/clk/mediatek/clk-mtk.h | 2 ++ 3 files changed, 17 insertions(+), 10 deletions(-)
drivers/clk/mediatek/clk-mt8183-mfgcfg.c +1 -0
@@ -29,6 +29,7 @@ static const struct mtk_gate mfg_clks[] = {static const struct mtk_clk_desc mfg_desc = { .clks = mfg_clks, .num_clks =ARRAY_SIZE (mfg_clks), + .need_runtime_pm = true, };static const struct of_device_id of_match_clk_mt8183_mfg[] = {
drivers/clk/mediatek/clk-mtk.c +14 -10
@@ -496,14 +496,16 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, } -devm_pm_runtime_enable (&pdev->dev); -/* -* Do a pm_runtime_resume_and_get() to workaround a possible -* deadlock between clk_register() and the genpd framework. -*/ - r =pm_runtime_resume_and_get (&pdev->dev); -if (r) -return r; +if (mcd->need_runtime_pm) { +devm_pm_runtime_enable (&pdev->dev); +/* +* Do a pm_runtime_resume_and_get() to workaround a possible +* deadlock between clk_register() and the genpd framework. +*/ + r =pm_runtime_resume_and_get (&pdev->dev); +if (r) +return r; + }/* Calculate how many clk_hw_onecell_data entries to allocate */ num_clks = mcd->num_clks + mcd->num_composite_clks;
@@ -585,7 +587,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, goto unregister_clks; } -pm_runtime_put (&pdev->dev); +if (mcd->need_runtime_pm) +pm_runtime_put (&pdev->dev);return r;
@@ -618,7 +621,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,if (mcd->shared_io && base)iounmap (base); -pm_runtime_put (&pdev->dev); +if (mcd->need_runtime_pm) +pm_runtime_put (&pdev->dev);return r; }
drivers/clk/mediatek/clk-mtk.h +2 -0
@@ -237,6 +237,8 @@ struct mtk_clk_desc {int (*clk_notifier_func)(struct device *dev,struct clk *clk);unsigned int mfg_clk_idx; + +bool need_runtime_pm; };int mtk_clk_pdev_probe (struct platform_device *pdev);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 173/197 i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Piotr Wojtaszczyk <[email protected]>
[ Upstream commit f63b94be6942ba82c55343e196bd09b53227618e ]
When del_timer_sync() is called in an interrupt context it throws a warning because of potential deadlock. The timer is used only to exit from wait_for_completion() after a timeout so replacing the call with wait_for_completion_timeout() allows to remove the problematic timer and its related functions altogether.
--- drivers/i2c/busses/i2c-pnx.c | 48 ++++++++---------------------------- 1 file changed, 10 insertions(+), 38 deletions(-)
drivers/i2c/busses/i2c-pnx.c +10 -38
@@ -15,7 +15,6 @@#include <linux/ioport.h> #include <linux/delay.h> #include <linux/i2c.h> -#include <linux/timer.h> #include <linux/completion.h> #include <linux/platform_device.h> #include <linux/io.h>
@@ -32,7 +31,6 @@ struct i2c_pnx_mif {int ret;/* Return value */ int mode;/* Interface mode */ struct completion complete;/* I/O completion */ -struct timer_list timer;/* Timeout */ u8 * buf;/* Data buffer */ int len;/* Length of data buffer */ int order;/* RX Bytes to order via TX */
@@ -117,24 +115,6 @@ static inline int wait_reset(struct i2c_pnx_algo_data *data)return (timeout <=0 ); } -static inline void i2c_pnx_arm_timer (struct i2c_pnx_algo_data *alg_data) -{ -struct timer_list *timer = &alg_data->mif.timer; -unsigned long expires =msecs_to_jiffies (alg_data->timeout); - -if (expires <=1 ) - expires =2 ; - -del_timer_sync (timer); - -dev_dbg (&alg_data->adapter.dev,"Timer armed at %lu plus %lu jiffies.\n" , - jiffies, expires); - - timer->expires = jiffies + expires; - -add_timer (timer); -} -/** * i2c_pnx_start - start a device * @slave_addr: slave address
@@ -259,8 +239,6 @@ static int i2c_pnx_master_xmit(struct i2c_pnx_algo_data *alg_data) ~(mcntrl_afie | mcntrl_naie | mcntrl_drmie), I2C_REG_CTL(alg_data)); -del_timer_sync (&alg_data->mif.timer); -dev_dbg (&alg_data->adapter.dev,"%s(): Waking up xfer routine.\n" , __func__);
@@ -276,8 +254,6 @@ static int i2c_pnx_master_xmit(struct i2c_pnx_algo_data *alg_data) ~(mcntrl_afie | mcntrl_naie | mcntrl_drmie), I2C_REG_CTL(alg_data)); -/* Stop timer. */ -del_timer_sync (&alg_data->mif.timer);dev_dbg (&alg_data->adapter.dev,"%s(): Waking up xfer routine after zero-xfer.\n" , __func__);
@@ -364,8 +340,6 @@ static int i2c_pnx_master_rcv(struct i2c_pnx_algo_data *alg_data) mcntrl_drmie | mcntrl_daie);iowrite32 (ctl,I2C_REG_CTL (alg_data)); -/* Kill timer. */ -del_timer_sync (&alg_data->mif.timer);complete (&alg_data->mif.complete); } }
@@ -400,8 +374,6 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id) mcntrl_drmie);iowrite32 (ctl,I2C_REG_CTL (alg_data)); -/* Stop timer, to prevent timeout. */ -del_timer_sync (&alg_data->mif.timer);complete (&alg_data->mif.complete); }else if (stat & mstatus_nai) {/* Slave did not acknowledge, generate a STOP */
@@ -419,8 +391,6 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)/* Our return value. */ alg_data->mif.ret = -EIO ; -/* Stop timer, to prevent timeout. */ -del_timer_sync (&alg_data->mif.timer);complete (&alg_data->mif.complete); }else {/*
@@ -453,9 +423,8 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static void i2c_pnx_timeout (struct timer_list *t) +static void i2c_pnx_timeout (struct i2c_pnx_algo_data *alg_data) { -struct i2c_pnx_algo_data *alg_data =from_timer (alg_data, t, mif.timer);u32 ctl; dev_err(&alg_data->adapter.dev,
@@ -472,7 +441,6 @@ static void i2c_pnx_timeout(struct timer_list *t)iowrite32 (ctl,I2C_REG_CTL (alg_data));wait_reset (alg_data); alg_data->mif.ret = -EIO ; -complete (&alg_data->mif.complete); }static inline void bus_reset_if_active (struct i2c_pnx_algo_data *alg_data)
@@ -514,6 +482,7 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)struct i2c_msg *pmsg;int rc =0 , completed =0 , i;struct i2c_pnx_algo_data *alg_data = adap->algo_data; +unsigned long time_left;u32 stat; dev_dbg(&alg_data->adapter.dev,
@@ -548,7 +517,6 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)dev_dbg (&alg_data->adapter.dev,"%s(): mode %d, %d bytes\n" , __func__, alg_data->mif.mode, alg_data->mif.len); -i2c_pnx_arm_timer (alg_data);/* initialize the completion var */ init_completion (&alg_data->mif.complete);
@@ -564,7 +532,10 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)break ;/* Wait for completion */ -wait_for_completion (&alg_data->mif.complete); + time_left =wait_for_completion_timeout (&alg_data->mif.complete, + alg_data->timeout); +if (time_left ==0 ) +i2c_pnx_timeout (alg_data);if (!(rc = alg_data->mif.ret)) completed++;
@@ -653,7 +624,10 @@ static int i2c_pnx_probe(struct platform_device *pdev) alg_data->adapter.algo_data = alg_data; alg_data->adapter.nr = pdev->id; - alg_data->timeout =I2C_PNX_TIMEOUT_DEFAULT ; + alg_data->timeout =msecs_to_jiffies (I2C_PNX_TIMEOUT_DEFAULT ); +if (alg_data->timeout <=1 ) + alg_data->timeout =2 ; +#ifdef CONFIG_OF alg_data->adapter.dev.of_node =of_node_get (pdev->dev.of_node);if (pdev->dev.of_node) {
@@ -673,8 +647,6 @@ static int i2c_pnx_probe(struct platform_device *pdev)if (IS_ERR (alg_data->clk))return PTR_ERR (alg_data->clk); -timer_setup (&alg_data->mif.timer, i2c_pnx_timeout,0 ); -snprintf (alg_data->adapter.name,sizeof (alg_data->adapter.name),"%s" , pdev->name);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 174/197 fs/ntfs3: Mark volume as dirty if xattr is broken
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Komarov <[email protected]>
[ Upstream commit 24f6f5020b0b2c89c2cba5ec224547be95f753ee ]
Mark a volume as corrupted if the name length exceeds the space occupied by ea.
--- fs/ntfs3/xattr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
fs/ntfs3/xattr.c +4 -1
@@ -219,8 +219,11 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer,if (!ea->name_len)break ; -if (ea->name_len > ea_size) +if (ea->name_len > ea_size) { +ntfs_set_state (ni->mi.sbi,NTFS_DIRTY_ERROR ); + err = -EINVAL ;/* corrupted fs */ break ; + }if (buffer) {/* Check if we can use field ea->name */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 175/197 drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lang Yu <[email protected]>
[ Upstream commit eb853413d02c8d9b27942429b261a9eef228f005 ]
Small APUs(i.e., consumer, embedded products) usually have a small carveout device memory which can't satisfy most compute workloads memory allocation requirements.
We can't even run a Basic MNIST Example with a default 512MB carveout.
https://github.com/pytorch/examples/tree/main/mnist. Error Log:
"torch.cuda.OutOfMemoryError: HIP out of memory. Tried to allocate 84.00 MiB. GPU 0 has a total capacity of 512.00 MiB of which 0 bytes is free. Of the allocated memory 103.83 MiB is allocated by PyTorch, and 22.17 MiB is reserved by PyTorch but unallocated"
Though we can change BIOS settings to enlarge carveout size, which is inflexible and may bring complaint. On the other hand, the memory resource can't be effectively used between host and device.
The solution is MI300A approach, i.e., let VRAM allocations go to GTT. Then device and host can flexibly and effectively share memory resource.
v2: Report local_mem_size_private as 0. (Felix)
--- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +++++ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 20 ++++++++++--------- drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 2 +- drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 6 ++++-- drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 3 ++- 5 files changed, 23 insertions(+), 13 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +5 -0
@@ -455,6 +455,9 @@ void amdgpu_amdkfd_get_local_mem_info(struct amdgpu_device *adev,else mem_info->local_mem_size_private =KFD_XCP_MEMORY_SIZE (adev, xcp->id); + }else if (adev->flags &AMD_IS_APU ) { + mem_info->local_mem_size_public = (ttm_tt_pages_limit () <<PAGE_SHIFT ); + mem_info->local_mem_size_private =0 ; }else { mem_info->local_mem_size_public = adev->gmc.visible_vram_size; mem_info->local_mem_size_private = adev->gmc.real_vram_size -
@@ -809,6 +812,8 @@ u64 amdgpu_amdkfd_xcp_memory_size(struct amdgpu_device *adev, int xcp_id) }do_div (tmp, adev->xcp_mgr->num_xcp_per_mem_partition);return ALIGN_DOWN (tmp,PAGE_SIZE ); + }else if (adev->flags &AMD_IS_APU ) { +return (ttm_tt_pages_limit () <<PAGE_SHIFT ); }else {return adev->gmc.real_vram_size; }
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +11 -9
@@ -196,7 +196,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,return -EINVAL ; vram_size =KFD_XCP_MEMORY_SIZE (adev, xcp_id); -if (adev->gmc.is_app_apu) { +if (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) { system_mem_needed = size; ttm_mem_needed = size; }
@@ -232,7 +232,8 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev, "adev reference can't be null when vram is used");if (adev && xcp_id >=0 ) { adev->kfd.vram_used[xcp_id] += vram_needed; - adev->kfd.vram_used_aligned[xcp_id] += adev->gmc.is_app_apu ? + adev->kfd.vram_used_aligned[xcp_id] += + (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) ? vram_needed :ALIGN (vram_needed,VRAM_AVAILABLITY_ALIGN ); }
@@ -260,7 +261,7 @@ void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,if (adev) { adev->kfd.vram_used[xcp_id] -= size; -if (adev->gmc.is_app_apu) { +if (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) { adev->kfd.vram_used_aligned[xcp_id] -= size; kfd_mem_limit.system_mem_used -= size; kfd_mem_limit.ttm_mem_used -= size;
@@ -889,7 +890,7 @@ static int kfd_mem_attach(struct amdgpu_device *adev, struct kgd_mem *mem,* if peer device has large BAR. In contrast, access over xGMI is * allowed for both small and large BAR configurations of peer device */ -if ((adev != bo_adev && !adev->gmc.is_app_apu) && +if ((adev != bo_adev && !(adev->gmc.is_app_apu || adev->flags &AMD_IS_APU )) && ((mem->domain ==AMDGPU_GEM_DOMAIN_VRAM ) || (mem->alloc_flags &KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL ) || (mem->alloc_flags &KFD_IOC_ALLOC_MEM_FLAGS_MMIO_REMAP ))) {
@@ -1657,7 +1658,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev, -atomic64_read (&adev->vram_pin_size) - reserved_for_pt; -if (adev->gmc.is_app_apu) { +if (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) { system_mem_available = no_system_mem_limit ? kfd_mem_limit.max_system_mem_limit : kfd_mem_limit.max_system_mem_limit -
@@ -1705,7 +1706,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(if (flags &KFD_IOC_ALLOC_MEM_FLAGS_VRAM ) { domain = alloc_domain =AMDGPU_GEM_DOMAIN_VRAM ; -if (adev->gmc.is_app_apu) { +if (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) { domain =AMDGPU_GEM_DOMAIN_GTT ; alloc_domain =AMDGPU_GEM_DOMAIN_GTT ; alloc_flags =0 ;
@@ -1952,7 +1953,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(if (size) {if (!is_imported && (mem->bo->preferred_domains ==AMDGPU_GEM_DOMAIN_VRAM || - (adev->gmc.is_app_apu && + ((adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) && mem->bo->preferred_domains ==AMDGPU_GEM_DOMAIN_GTT ))) *size = bo_size;else
@@ -2374,8 +2375,9 @@ static int import_obj_create(struct amdgpu_device *adev, (*mem)->dmabuf = dma_buf; (*mem)->bo = bo; (*mem)->va = va; - (*mem)->domain = (bo->preferred_domains &AMDGPU_GEM_DOMAIN_VRAM ) && !adev->gmc.is_app_apu ? -AMDGPU_GEM_DOMAIN_VRAM :AMDGPU_GEM_DOMAIN_GTT ; + (*mem)->domain = (bo->preferred_domains &AMDGPU_GEM_DOMAIN_VRAM ) && + !(adev->gmc.is_app_apu || adev->flags &AMD_IS_APU ) ? +AMDGPU_GEM_DOMAIN_VRAM :AMDGPU_GEM_DOMAIN_GTT ; (*mem)->mapped_to_gpu_memory =0 ; (*mem)->process_info = avm->process_info;
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c +1 -1
@@ -1023,7 +1023,7 @@ int kgd2kfd_init_zone_device(struct amdgpu_device *adev)if (amdgpu_ip_version (adev,GC_HWIP ,0 ) <IP_VERSION (9 ,0 ,1 ))return -EINVAL ; -if (adev->gmc.is_app_apu) +if (adev->gmc.is_app_apu || adev->flags &AMD_IS_APU )return 0 ; pgmap = &kfddev->pgmap;
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +4 -2
@@ -2619,7 +2619,8 @@ svm_range_best_restore_location(struct svm_range *prange,return -1 ; } -if (node->adev->gmc.is_app_apu) +if (node->adev->gmc.is_app_apu || + node->adev->flags &AMD_IS_APU )return 0 ; if (prange->preferred_loc == gpuid ||
@@ -3337,7 +3338,8 @@ svm_range_best_prefetch_location(struct svm_range *prange) goto out; } -if (bo_node->adev->gmc.is_app_apu) { +if (bo_node->adev->gmc.is_app_apu || + bo_node->adev->flags &AMD_IS_APU ) { best_loc =0 ; goto out; }
drivers/gpu/drm/amd/amdkfd/kfd_svm.h +2 -1
@@ -201,7 +201,8 @@ void svm_range_list_lock_and_flush_work(struct svm_range_list *svms, struct mm_s* is initialized to not 0 when page migration register device memory. */ #define KFD_IS_SVM_API_SUPPORTED (adev) ((adev)->kfd.pgmap.type != 0 ||\ - (adev)->gmc.is_app_apu) + (adev)->gmc.is_app_apu ||\ + ((adev)->flags & AMD_IS_APU))void svm_range_bo_unref_async (struct svm_range_bo *svm_bo);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 176/197 ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jian-Hong Pan <[email protected]>
[ Upstream commit 45e37f9ce28d248470bab4376df2687a215d1b22 ]
JP-IK LEAP W502 laptop's headset mic is not enabled until ALC897_FIXUP_HEADSET_MIC_PIN3 quirk is applied.
Here is the original pin node values:
0x11 0x400000000x12 0xb7a601300x14 0x901701100x15 0x411111f00x16 0x411111f00x17 0x411111f00x18 0x411111f00x19 0x411111f00x1a 0x411111f00x1b 0x032110200x1c 0x411111f00x1d 0x4026892d0x1e 0x411111f00x1f 0x411111f0
--- sound/pci/hda/patch_realtek.c | 9 +++++++++ 1 file changed, 9 insertions(+)
sound/pci/hda/patch_realtek.c +9 -0
@@ -12029,6 +12029,7 @@ enum {ALC897_FIXUP_LENOVO_HEADSET_MODE ,ALC897_FIXUP_HEADSET_MIC_PIN2 ,ALC897_FIXUP_UNIS_H3C_X500S , + ALC897_FIXUP_HEADSET_MIC_PIN3, }; static const struct hda_fixup alc662_fixups[] = {
@@ -12475,10 +12476,18 @@ static const struct hda_fixup alc662_fixups[] = { {} }, }, + [ALC897_FIXUP_HEADSET_MIC_PIN3 ] = { + .type =HDA_FIXUP_PINS , + .v.pins = (const struct hda_pintbl []) { + {0x19 ,0x03a11050 },/* use as headset mic */ + { } + }, + }, };static const struct snd_pci_quirk alc662_fixup_tbl[] = {SND_PCI_QUIRK (0x1019 ,0x9087 ,"ECS" ,ALC662_FIXUP_ASUS_MODE2 ), +SND_PCI_QUIRK (0x1019 ,0x9859 ,"JP-IK LEAP W502" ,ALC897_FIXUP_HEADSET_MIC_PIN3 ),SND_PCI_QUIRK (0x1025 ,0x022f ,"Acer Aspire One" ,ALC662_FIXUP_INV_DMIC ),SND_PCI_QUIRK (0x1025 ,0x0241 ,"Packard Bell DOTS" ,ALC662_FIXUP_INV_DMIC ),SND_PCI_QUIRK (0x1025 ,0x0308 ,"Acer Aspire 8942G" ,ALC662_FIXUP_ASPIRE ),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 177/197 vhost-scsi: Handle vhost_vq_work_queue failures for events
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Christie <[email protected]>
[ Upstream commit b1b2ce58ed23c5d56e0ab299a5271ac01f95b75c ]
Currently, we can try to queue an event's work before the vhost_task is created. When this happens we just drop it in vhost_scsi_do_plug before even calling vhost_vq_work_queue. During a device shutdown we do the same thing after vhost_scsi_clear_endpoint has cleared the backends.
In the next patches we will be able to kill the vhost_task before we have cleared the endpoint. In that case, vhost_vq_work_queue can fail and we will leak the event's memory. This has handle the failure by just freeing the event. This is safe to do, because vhost_vq_work_queue will only return failure for us when the vhost_task is killed and so userspace will not be able to handle events if we sent them.
Message-Id: <[email protected]>
--- drivers/vhost/scsi.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/vhost/scsi.c +12 -5
@@ -497,10 +497,8 @@ vhost_scsi_do_evt_work(struct vhost_scsi *vs, struct vhost_scsi_evt *evt)vq_err (vq,"Faulted on vhost_scsi_send_event\n" ); } -static void vhost_scsi_evt_work (struct vhost_work *work) +static void vhost_scsi_complete_events (struct vhost_scsi *vs,bool drop) { - struct vhost_scsi *vs = container_of(work, struct vhost_scsi, - vs_event_work);struct vhost_virtqueue *vq = &vs->vqs[VHOST_SCSI_VQ_EVT ].vq;struct vhost_scsi_evt *evt, *t;struct llist_node *llnode;
@@ -508,12 +506,20 @@ static void vhost_scsi_evt_work(struct vhost_work *work)mutex_lock (&vq->mutex); llnode =llist_del_all (&vs->vs_event_list);llist_for_each_entry_safe (evt, t, llnode, list) { -vhost_scsi_do_evt_work (vs, evt); +if (!drop) +vhost_scsi_do_evt_work (vs, evt);vhost_scsi_free_evt (vs, evt); }mutex_unlock (&vq->mutex); } +static void vhost_scsi_evt_work (struct vhost_work *work) +{ + struct vhost_scsi *vs = container_of(work, struct vhost_scsi, + vs_event_work); +vhost_scsi_complete_events (vs, false); +} +static int vhost_scsi_copy_sgl_to_iov (struct vhost_scsi_cmd *cmd) {struct iov_iter *iter = &cmd->saved_iter;
@@ -1509,7 +1515,8 @@ vhost_scsi_send_evt(struct vhost_scsi *vs, struct vhost_virtqueue *vq, }llist_add (&evt->list, &vs->vs_event_list); -vhost_vq_work_queue (vq, &vs->vs_event_work); +if (!vhost_vq_work_queue (vq, &vs->vs_event_work)) +vhost_scsi_complete_events (vs, true); }static void vhost_scsi_evt_handle_kick (struct vhost_work *work)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 178/197 nvme-multipath: find NUMA path only for online numa-node
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilay Shroff <[email protected]>
[ Upstream commit d3a043733f25d743f3aa617c7f82dbcb5ee2211a ]
In current native multipath design when a shared namespace is created, we loop through each possible numa-node, calculate the NUMA distance of that node from each nvme controller and then cache the optimal IO path for future reference while sending IO. The issue with this design is that we may refer to the NUMA distance table for an offline node which may not be populated at the time and so we may inadvertently end up finding and caching a non-optimal path for IO. Then latter when the corresponding numa-node becomes online and hence the NUMA distance table entry for that node is created, ideally we should re-calculate the multipath node distance for the newly added node however that doesn't happen unless we rescan/reset the controller. So essentially, we may keep using non-optimal IO path for a node which is made online after namespace is created.
This patch helps fix this issue ensuring that when a shared namespace is created, we calculate the multipath node distance for each online numa-node instead of each possible numa-node. Then latter when a node becomes online and we receive any IO on that newly added node, we would calculate the multipath node distance for newly added node but this time NUMA distance table would have been already populated for newly added node. Hence we would be able to correctly calculate the multipath node distance and choose the optimal path for the IO.
--- drivers/nvme/host/multipath.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/nvme/host/multipath.c +1 -1
@@ -596,7 +596,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)int node, srcu_idx; srcu_idx =srcu_read_lock (&head->srcu); -for_each_node (node) +for_each_online_node (node)__nvme_find_path (head, node);srcu_read_unlock (&head->srcu, srcu_idx); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 179/197 dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fedor Pchelkin <[email protected]>
[ Upstream commit f7c9ccaadffd13066353332c13d7e9bf73b8f92d ]
If do_map_benchmark() has failed, there is nothing useful to copy back to userspace.
--- kernel/dma/map_benchmark.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/dma/map_benchmark.c +3 -0
@@ -256,6 +256,9 @@ static long map_benchmark_ioctl(struct file *file, unsigned int cmd,* dma_mask changed by benchmark */ dma_set_mask (map->dev, old_dma_mask); + +if (ret) +return ret;break ;default :return -EINVAL ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 180/197 drm/amdgpu: correct hbm field in boot status
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hawking Zhang <[email protected]>
[ Upstream commit ec58991054e899c9d86f7e3c8a96cb602d4b5938 ]
hbm filed takes bit 13 and bit 14 in boot status.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h +1 -1
@@ -43,7 +43,7 @@ struct amdgpu_iv_entry;#define AMDGPU_RAS_GPU_ERR_HBM_BIST_TEST (x) AMDGPU_GET_REG_FIELD(x, 7, 7)#define AMDGPU_RAS_GPU_ERR_SOCKET_ID (x) AMDGPU_GET_REG_FIELD(x, 10, 8)#define AMDGPU_RAS_GPU_ERR_AID_ID (x) AMDGPU_GET_REG_FIELD(x, 12, 11) -#define AMDGPU_RAS_GPU_ERR_HBM_ID (x) AMDGPU_GET_REG_FIELD(x, 13, 13) +#define AMDGPU_RAS_GPU_ERR_HBM_ID (x) AMDGPU_GET_REG_FIELD(x, 14, 13)#define AMDGPU_RAS_GPU_ERR_BOOT_STATUS (x) AMDGPU_GET_REG_FIELD(x, 31, 31)#define AMDGPU_RAS_BOOT_STATUS_POLLING_LIMIT 1000
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 181/197 connector: Fix invalid conversion in cn_proc.h
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Jan <[email protected]>
[ Upstream commit 06e785aeb9ea8a43d0a3967c1ba6e69d758e82d4 ]
The implicit conversion from unsigned int to enumproc_cn_event is invalid, so explicitly cast it
for compilation in a C++ compiler./usr/include/linux/cn_proc.h: In function 'proc_cn_event valid_event(proc_cn_event)':/usr/include/linux/cn_proc.h:72:17: error: invalid conversion from 'unsigned int' to 'proc_cn_event' [-fpermissive]
72 | ev_type &= PROC_EVENT_ALL;
| ^
| |
| unsigned int--- include/uapi/linux/cn_proc.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
include/uapi/linux/cn_proc.h +1 -2
@@ -69,8 +69,7 @@ struct proc_input {static inline enum proc_cn_event valid_event (enum proc_cn_event ev_type) { - ev_type &=PROC_EVENT_ALL ; -return ev_type; +return (enum proc_cn_event )(ev_type &PROC_EVENT_ALL ); }/*
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 182/197 swap: yield device immediately
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <[email protected]>
[ Upstream commit 712182b67e831912f90259102ae334089e7bccd1 ]
Otherwise we can cause spurious EBUSY issues when trying to mount the rootfs later on.
--- kernel/power/swap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/power/swap.c +1 -1
@@ -1600,7 +1600,7 @@ int swsusp_check(bool exclusive) put:if (error) -fput (hib_resume_bdev_file); +bdev_fput (hib_resume_bdev_file);else pr_debug ("Image signature found, resuming\n" ); }else {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 183/197 nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kundan Kumar <[email protected]>
[ Upstream commit 1bd293fcf3af84674e82ed022c049491f3768840 ]
bio_vec start offset may be relatively large particularly when large folio gets added to the bio. A bigger offset will result in avoiding the single-segment mapping optimization and end up using expensive mempool_alloc further.
Rather than using absolute value, adjust bv_offset by NVME_CTRL_PAGE_SIZE while checking if segment can be fitted into one/two PRP entries.
--- drivers/nvme/host/pci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/nvme/host/pci.c +2 -1
@@ -778,7 +778,8 @@ static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,struct bio_vec bv =req_bvec (req);if (!is_pci_p2pdma_page (bv.bv_page)) { -if (bv.bv_offset + bv.bv_len <=NVME_CTRL_PAGE_SIZE *2 ) +if ((bv.bv_offset & (NVME_CTRL_PAGE_SIZE -1 )) + + bv.bv_len <=NVME_CTRL_PAGE_SIZE *2 )return nvme_setup_prp_simple (dev, req, &cmnd->rw, &bv);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 184/197 libbpf: detect broken PID filtering logic for multi-uprobe
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrii Nakryiko <[email protected]>
[ Upstream commit 04d939a2ab229a3821f04fc81f7c027842f501f1 ]
Libbpf is automatically (and transparently to user) detecting multi-uprobe support in the kernel, and, if supported, uses multi-uprobes to improve USDT attachment speed.
USDTs can be attached system-wide or for the specific process by PID. In the latter case, we rely on correct kernel logic of not triggering USDT for unrelated processes.
As such, on older kernels that do support multi-uprobes, but still have broken PID filtering logic, we need to fall back to singular uprobes.
Unfortunately, whether user is using PID filtering or not is known at the attachment time, which happens after relevant BPF programs were loaded into the kernel. Also unfortunately, we need to make a call whether to use multi-uprobes or singular uprobe for SEC("usdt") programs during BPF object load time, at which point we have no information about possible PID filtering.
The distinction between single and multi-uprobes is small, but important for the kernel. Multi-uprobes get BPF_TRACE_UPROBE_MULTI attach type, and kernel internally substitiute different implementation of some of BPF helpers (e.g., bpf_get_attach_cookie()) depending on whether uprobe is multi or singular. So, multi-uprobes and singular uprobes cannot be intermixed.
All the above implies that we have to make an early and conservative call about the use of multi-uprobes. And so this patch modifies libbpf's existing feature detector for multi-uprobe support to also check correct PID filtering. If PID filtering is not yet fixed, we fall back to singular uprobes for USDTs.
This extension to feature detection is simple thanks to kernel's -EINVAL addition for pid < 0.
--- tools/lib/bpf/features.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
tools/lib/bpf/features.c +30 -1
@@ -392,11 +392,40 @@ static int probe_uprobe_multi_link(int token_fd) link_fd =bpf_link_create (prog_fd,-1 ,BPF_TRACE_UPROBE_MULTI , &link_opts); err = -errno;/* close() can clobber errno */ +if (link_fd >=0 || err != -EBADF ) { +close (link_fd); +close (prog_fd); +return 0 ; + } + +/* Initial multi-uprobe support in kernel didn't handle PID filtering +* correctly (it was doing thread filtering, not process filtering). +* So now we'll detect if PID filtering logic was fixed, and, if not, +* we'll pretend multi-uprobes are not supported, if not. +* Multi-uprobes are used in USDT attachment logic, and we need to be +* conservative here, because multi-uprobe selection happens early at +* load time, while the use of PID filtering is known late at +* attachment time, at which point it's too late to undo multi-uprobe +* selection. +* +* Creating uprobe with pid == -1 for (invalid) '/' binary will fail +* early with -EINVAL on kernels with fixed PID filtering logic; +* otherwise -ESRCH would be returned if passed correct binary path +* (but we'll just get -BADF, of course). +*/ + link_opts.uprobe_multi.pid =-1 ;/* invalid PID */ + link_opts.uprobe_multi.path ="/" ;/* invalid path */ + link_opts.uprobe_multi.offsets = &offset; + link_opts.uprobe_multi.cnt =1 ; + + link_fd =bpf_link_create (prog_fd,-1 ,BPF_TRACE_UPROBE_MULTI , &link_opts); + err = -errno;/* close() can clobber errno */ +if (link_fd >=0 )close (link_fd);close (prog_fd); -return link_fd <0 && err == -EBADF ; +return link_fd <0 && err == -EINVAL ; }static int probe_kern_bpf_cookie (int token_fd)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 185/197 regmap-i2c: Subtract reg size from max_write
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jim Wylder <[email protected]>
[ Upstream commit 611b7eb19d0a305d4de00280e4a71a1b15c507fc ]
Currently, when an adapter defines a max_write_len quirk, the data will be chunked into data sizes equal to the max_write_len quirk value. But the payload will be increased by the size of the register address before transmission. The resulting value always ends up larger than the limit set by the quirk.
Avoid this error by setting regmap's max_write to the quirk's max_write_len minus the number of bytes for the register and padding. This allows the chunking to work correctly for this limited case without impacting other use-cases.
--- drivers/base/regmap/regmap-i2c.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/base/regmap/regmap-i2c.c +2 -1
@@ -350,7 +350,8 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,if (quirks->max_write_len && (bus->max_raw_write ==0 || bus->max_raw_write > quirks->max_write_len)) - max_write = quirks->max_write_len; + max_write = quirks->max_write_len - + (config->reg_bits + config->pad_bits) /BITS_PER_BYTE ;if (max_read || max_write) { ret_bus =kmemdup (bus,sizeof (*bus),GFP_KERNEL );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 186/197 platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: hmtheboy154 <[email protected]>
[ Upstream commit 7c8639aa41343fd7b3dbe09baf6b0791fcc407a1 ]
This is a tablet created by GlobalSpace Technologies Limited which uses an Intel Atom x5-Z8300, 4GB of RAM & 64GB of storage.
--- drivers/platform/x86/touchscreen_dmi.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
drivers/platform/x86/touchscreen_dmi.c +25 -0
@@ -897,6 +897,22 @@ static const struct ts_dmi_data schneider_sct101ctm_data = { .properties = schneider_sct101ctm_props, }; +static const struct property_entry globalspace_solt_ivw116_props[] = { +PROPERTY_ENTRY_U32 ("touchscreen-min-x" ,7 ), +PROPERTY_ENTRY_U32 ("touchscreen-min-y" ,22 ), +PROPERTY_ENTRY_U32 ("touchscreen-size-x" ,1723 ), +PROPERTY_ENTRY_U32 ("touchscreen-size-y" ,1077 ), +PROPERTY_ENTRY_STRING ("firmware-name" ,"gsl1680-globalspace-solt-ivw116.fw" ), +PROPERTY_ENTRY_U32 ("silead,max-fingers" ,10 ), +PROPERTY_ENTRY_BOOL ("silead,home-button" ), + { } +}; + +static const struct ts_dmi_data globalspace_solt_ivw116_data = { + .acpi_name ="MSSL1680:00" , + .properties = globalspace_solt_ivw116_props, +}; +static const struct property_entry techbite_arc_11_6_props[] = {PROPERTY_ENTRY_U32 ("touchscreen-min-x" ,5 ),PROPERTY_ENTRY_U32 ("touchscreen-min-y" ,7 ),
@@ -1624,6 +1640,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "SCT101CTM"), }, }, + { +/* GlobalSpace SoLT IVW 11.6" */ + .driver_data = (void *)&globalspace_solt_ivw116_data, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Globalspace Tech Pvt Ltd" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"SolTIVW" ), + DMI_MATCH(DMI_PRODUCT_SKU, "PN20170413488"), + }, + }, {/* Techbite Arc 11.6 */ .driver_data = (void *)&techbite_arc_11_6_data,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 187/197 platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: hmtheboy154 <[email protected]>
[ Upstream commit 3050052613790e75b5e4a8536930426b0a8b0774 ]
The "EZpad 6s Pro" uses the same touchscreen as the "EZpad 6 Pro B", unlike the "Ezpad 6 Pro" which has its own touchscreen.
--- drivers/platform/x86/touchscreen_dmi.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/platform/x86/touchscreen_dmi.c +11 -0
@@ -1401,6 +1401,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = { DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"), }, }, + { +/* Jumper EZpad 6s Pro */ + .driver_data = (void *)&jumper_ezpad_6_pro_b_data, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Jumper" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Ezpad" ), +/* Above matches are too generic, add bios match */ +DMI_MATCH (DMI_BIOS_VERSION ,"E.WSA116_8.E1.042.bin" ), + DMI_MATCH(DMI_BIOS_DATE, "01/08/2020"), + }, + }, {/* Jumper EZpad 6 m4 */ .driver_data = (void *)&jumper_ezpad_6_m4_data,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 188/197 block: check for max_hw_sectors underflow
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Reinecke <[email protected]>
[ Upstream commit e993db2d6e5207f1ae061c2ac554ab1f714c741d ]
The logical block size need to be smaller than the max_hw_sector setting, otherwise we can't even transfer a single LBA.
--- block/blk-settings.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
block/blk-settings.c +6 -2
@@ -104,6 +104,7 @@ static int blk_validate_zoned_limits(struct queue_limits *lim)static int blk_validate_limits (struct queue_limits *lim) {unsigned int max_hw_sectors; +unsigned int logical_block_sectors;/* * Unless otherwise specified, default to 512 byte logical blocks and a
@@ -134,8 +135,11 @@ static int blk_validate_limits(struct queue_limits *lim) lim->max_hw_sectors =BLK_SAFE_MAX_SECTORS ;if (WARN_ON_ONCE (lim->max_hw_sectors <PAGE_SECTORS ))return -EINVAL ; + logical_block_sectors = lim->logical_block_size >>SECTOR_SHIFT ; +if (WARN_ON_ONCE (logical_block_sectors > lim->max_hw_sectors)) +return -EINVAL ; lim->max_hw_sectors =round_down (lim->max_hw_sectors, - lim->logical_block_size >>SECTOR_SHIFT ); + logical_block_sectors);/* * The actual max_sectors value is a complex beast and also takes the
@@ -153,7 +157,7 @@ static int blk_validate_limits(struct queue_limits *lim) lim->max_sectors =min (max_hw_sectors,BLK_DEF_MAX_SECTORS_CAP ); } lim->max_sectors =round_down (lim->max_sectors, - lim->logical_block_size >>SECTOR_SHIFT ); + logical_block_sectors);/* * Random default for the maximum number of segments. Driver should not
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 189/197 nvmet: fix a possible leak when destroy a ctrl during qp establishment
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sagi Grimberg <[email protected]>
[ Upstream commit c758b77d4a0a0ed3a1292b3fd7a2aeccd1a169a4 ]
In nvmet_sq_destroy we capture sq->ctrl early and if it is non-NULL we know that a ctrl was allocated (in the admin connect request handler) and we need to release pending AERs, clear ctrl->sqs and sq->ctrl (for nvme-loop primarily), and drop the final reference on the ctrl.
However, a small window is possible where nvmet_sq_destroy starts (as a result of the client giving up and disconnecting) concurrently with the nvme admin connect cmd (which may be in an early stage). But *before* kill_and_confirm of sq->ref (i.e. the admin connect managed to get an sq live reference). In this case, sq->ctrl was allocated however after it was captured in a local variable in nvmet_sq_destroy.
This prevented the final reference drop on the ctrl.
Solve this by re-capturing the sq->ctrl after all inflight request has completed, where for sure sq->ctrl reference is final, and move forward based on that.
This issue was observed in an environment with many hosts connecting multiple ctrls simoutanuosly, creating a delay in allocating a ctrl leading up to this race window.
--- drivers/nvme/target/core.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/nvme/target/core.c +9 -0
@@ -818,6 +818,15 @@ void nvmet_sq_destroy(struct nvmet_sq *sq)percpu_ref_exit (&sq->ref);nvmet_auth_sq_free (sq); +/* +* we must reference the ctrl again after waiting for inflight IO +* to complete. Because admin connect may have sneaked in after we +* store sq->ctrl locally, but before we killed the percpu_ref. the +* admin connect allocates and assigns sq->ctrl, which now needs a +* final ref put, as this ctrl is going away. +*/ + ctrl = sq->ctrl; +if (ctrl) {/* * The teardown flow may take some time, and the host may not
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 190/197 kbuild: fix short log for AS in link-vmlinux.sh
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
[ Upstream commit 3430f65d6130ccbc86f0ff45642eeb9e2032a600 ]
In convention, short logs print the output file, not the input file.
Let's change the suffix for 'AS' since it assembles *.S into *.o.
[Before]
LD .tmp_vmlinux.kallsyms1 NM .tmp_vmlinux.kallsyms1.syms KSYMS .tmp_vmlinux.kallsyms1.S AS .tmp_vmlinux.kallsyms1.S LD .tmp_vmlinux.kallsyms2 NM .tmp_vmlinux.kallsyms2.syms KSYMS .tmp_vmlinux.kallsyms2.S AS .tmp_vmlinux.kallsyms2.S LD vmlinux
[After]
LD .tmp_vmlinux.kallsyms1 NM .tmp_vmlinux.kallsyms1.syms KSYMS .tmp_vmlinux.kallsyms1.S AS .tmp_vmlinux.kallsyms1.o LD .tmp_vmlinux.kallsyms2 NM .tmp_vmlinux.kallsyms2.syms KSYMS .tmp_vmlinux.kallsyms2.S AS .tmp_vmlinux.kallsyms2.o LD vmlinux
--- scripts/link-vmlinux.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/link-vmlinux.sh +1 -1
@@ -182,7 +182,7 @@ kallsyms_step() mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms ${kallsymso_prev} kallsyms ${kallsyms_vmlinux}.syms ${kallsyms_S} - info AS ${kallsyms_S} + info AS ${kallsymso} ${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \ ${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ -c -o ${kallsymso} ${kallsyms_S}
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 191/197 nfc/nci: Add the inconsistency check between the input data length and count
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Edward Adam Davis <[email protected]>
[ Upstream commit 068648aab72c9ba7b0597354ef4d81ffaac7b979 ]
write$nci(r0, &(0x7f0000000740)=ANY=[@ANYBLOB="610501"], 0xf)
Syzbot constructed a write() call with a data length of 3 bytes but a count value of 15, which passed too little data to meet the basic requirements of the function nci_rf_intf_activated_ntf_packet().
Therefore, increasing the comparison between data length and count value to avoid problems caused by inconsistent data length and count.
--- drivers/nfc/virtual_ncidev.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/nfc/virtual_ncidev.c +4 -0
@@ -125,6 +125,10 @@ static ssize_t virtual_ncidev_write(struct file *file,kfree_skb (skb);return -EFAULT ; } +if (strnlen (skb->data, count) != count) { +kfree_skb (skb); +return -EINVAL ; + }nci_recv_frame (vdev->ndev, skb);return count;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 192/197 spi: cadence: Ensure data lines set to low during dummy-cycle period
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Witold Sadowski <[email protected]>
[ Upstream commit 4a69c1264ff41bc5bf7c03101ada0454fbf08868 ]
During dummy-cycles xSPI will switch GPIO into Hi-Z mode. In that dummy period voltage on data lines will slowly drop, what can cause unintentional modebyte transmission. Value send to SPI memory chip will depend on last address, and clock frequency.
To prevent unforeseen consequences of that behaviour, force send single modebyte(0x00).
Modebyte will be send only if number of dummy-cycles is not equal to 0. Code must also reduce dummycycle byte count by one - as one byte is send as modebyte.
--- drivers/spi/spi-cadence-xspi.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
drivers/spi/spi-cadence-xspi.c +15 -5
@@ -145,6 +145,9 @@#define CDNS_XSPI_STIG_DONE_FLAG BIT(0)#define CDNS_XSPI_TRD_STATUS 0x0104 +#define MODE_NO_OF_BYTES GENMASK(25, 24) +#define MODEBYTES_COUNT 1 +/* Helper macros for filling command registers */ #define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1 (op, data_phase) ( \ FIELD_PREP(CDNS_XSPI_CMD_INSTR_TYPE, (data_phase) ? \
@@ -157,9 +160,10 @@ FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR3, ((op)->addr.val >> 24) & 0xFF) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR4, ((op)->addr.val >> 32) & 0xFF)) -#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3 (op) ( \ +#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3 (op, modebytes) ( \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_ADDR5, ((op)->addr.val >> 40) & 0xFF) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_CMD, (op)->cmd.opcode) | \ + FIELD_PREP(MODE_NO_OF_BYTES, modebytes) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_NUM_ADDR_BYTES, (op)->addr.nbytes))#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4 (op, chipsel) ( \
@@ -173,12 +177,12 @@#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_2 (op) \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R2_DCNT_L, (op)->data.nbytes & 0xFFFF) -#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3 (op) ( \ +#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3 (op, dummybytes) ( \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_DCNT_H, \ ((op)->data.nbytes >> 16) & 0xffff) | \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_NUM_OF_DUMMY, \ (op)->dummy.buswidth != 0 ? \ - (((op)->dummy.nbytes * 8) / (op)->dummy.buswidth) : \ + (((dummybytes) * 8) / (op)->dummy.buswidth) : \ 0))#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_4 (op, chipsel) ( \
@@ -351,6 +355,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,u32 cmd_regs[6 ];u32 cmd_status;int ret; +int dummybytes = op->dummy.nbytes; ret =cdns_xspi_wait_for_controller_idle (cdns_xspi);if (ret <0 )
@@ -365,7 +370,12 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,memset (cmd_regs,0 ,sizeof (cmd_regs)); cmd_regs[1 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1 (op, data_phase); cmd_regs[2 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_2 (op); - cmd_regs[3 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3 (op); +if (dummybytes !=0 ) { + cmd_regs[3 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3 (op,1 ); + dummybytes--; + }else { + cmd_regs[3 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3 (op,0 ); + } cmd_regs[4 ] =CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4 (op, cdns_xspi->cur_cs);
@@ -375,7 +385,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi, cmd_regs[0 ] =CDNS_XSPI_STIG_DONE_FLAG ; cmd_regs[1 ] =CDNS_XSPI_CMD_FLD_DSEQ_CMD_1 (op); cmd_regs[2 ] =CDNS_XSPI_CMD_FLD_DSEQ_CMD_2 (op); - cmd_regs[3 ] =CDNS_XSPI_CMD_FLD_DSEQ_CMD_3 (op); + cmd_regs[3 ] =CDNS_XSPI_CMD_FLD_DSEQ_CMD_3 (op, dummybytes); cmd_regs[4 ] =CDNS_XSPI_CMD_FLD_DSEQ_CMD_4 (op, cdns_xspi->cur_cs);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 193/197 ALSA: ump: Set default protocol when not given explicitly
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
[ Upstream commit bc42ca002d5d211f9c57334b9b4c25ddb0b4ec35 ]
When an inquiry of the current protocol via UMP Stream Configuration message fails by some reason, we may leave the current protocol undefined, which may lead to unexpected behavior. Better to assume a valid protocol found in the protocol capability bits instead.
For a device that doesn't support the UMP v1.2 feature, it won't reach to this code path, and USB MIDI GTB descriptor would be used for determining the protocol, instead.
--- sound/core/ump.c | 8 ++++++++ 1 file changed, 8 insertions(+)
sound/core/ump.c +8 -0
@@ -967,6 +967,14 @@ int snd_ump_parse_endpoint(struct snd_ump_endpoint *ump)if (err <0 )ump_dbg (ump,"Unable to get UMP EP stream config\n" ); +/* If no protocol is set by some reason, assume the valid one */ +if (!(ump->info.protocol &SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK )) { +if (ump->info.protocol_caps &SNDRV_UMP_EP_INFO_PROTO_MIDI2 ) + ump->info.protocol |=SNDRV_UMP_EP_INFO_PROTO_MIDI2 ; +else if (ump->info.protocol_caps &SNDRV_UMP_EP_INFO_PROTO_MIDI1 ) + ump->info.protocol |=SNDRV_UMP_EP_INFO_PROTO_MIDI1 ; + } +/* Query and create blocks from Function Blocks */ for (blk =0 ; blk < ump->info.num_blocks; blk++) { err =create_block_from_fb_info (ump, blk);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 194/197 drm/amdgpu: silence UBSAN warning
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
[ Upstream commit 05d9e24ddb15160164ba6e917a88c00907dc2434 ]
Convert a variable sized array from [1] to [].
--- drivers/gpu/drm/amd/include/atomfirmware.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/include/atomfirmware.h +1 -1
@@ -3583,7 +3583,7 @@ struct atom_gpio_voltage_object_v4uint8_t phase_delay_us;// phase delay in unit of micro second uint8_t reserved;uint32_t gpio_mask_val;// GPIO Mask value -struct atom_voltage_gpio_map_lut voltage_gpio_lut[1 ]; + struct atom_voltage_gpio_map_lut voltage_gpio_lut[] __counted_by(gpio_entry_num); };struct atom_svid2_voltage_object_v4
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 195/197 hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Armin Wolf <[email protected]>
[ Upstream commit fa0bc8f297b29126b5ae983406e9bc76d48a9a8e ]
A user reported that he needs to disable BIOS fan control on his Dell G15 5511 in order to be able to control the fans.
--- drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/hwmon/dell-smm-hwmon.c +8 -0
@@ -1530,6 +1530,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = { }, .driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3], }, + { + .ident = "Dell G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3], + }, { } };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 196/197 null_blk: Do not allow runt zone with zone capacity smaller then zone size
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <[email protected]>
[ Upstream commit b164316808ec5de391c3e7b0148ec937d32d280d ]
A zoned device with a smaller last zone together with a zone capacity smaller than the zone size does make any sense as that does not correspond to any possible setup for a real device:
1) For ZNS and zoned UFS devices, all zones are always the same size.
2) For SMR HDDs, all zones always have the same capacity. In other words, if we have a smaller last runt zone, then this zone capacity should always be equal to the zone size.
Add a check in null_init_zoned_dev() to prevent a configuration to have both a smaller zone size and a zone capacity smaller than the zone size.
--- drivers/block/null_blk/zoned.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/block/null_blk/zoned.c +11 -0
@@ -84,6 +84,17 @@ int null_init_zoned_dev(struct nullb_device *dev,return -EINVAL ; } +/* +* If a smaller zone capacity was requested, do not allow a smaller last +* zone at the same time as such zone configuration does not correspond +* to any real zoned device. +*/ +if (dev->zone_capacity != dev->zone_size && + dev->size & (dev->zone_size -1 )) { +pr_err ("A smaller last zone is not allowed with zone capacity smaller than zone size.\n" ); +return -EINVAL ; + } + zone_capacity_sects =mb_to_sects (dev->zone_capacity); dev_capacity_sects =mb_to_sects (dev->size); dev->zone_size_sects =mb_to_sects (dev->zone_size);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 197/197 libbpf: dont close(-1) in multi-uprobe feature detector
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrii Nakryiko <[email protected]>
commit 7d0b3953f6d832daec10a0d76e2d4db405768a8b upstream.
Guard close(link_fd) with extra link_fd >= 0 check to prevent close(-1).
Detected by Coverity static analysis.
--- tools/lib/bpf/features.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/lib/bpf/features.c +2 -1
@@ -393,7 +393,8 @@ static int probe_uprobe_multi_link(int t err = -errno;/* close() can clobber errno */ if (link_fd >=0 || err != -EBADF ) { -close (link_fd); +if (link_fd >=0 ) +close (link_fd);close (prog_fd);return 0 ; }
Hello,
Quoted 5 lines · On Tue, 9 Jul 2024 13:07:34 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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 8 lines
Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] 6ced42af8b2d ("Linux 6.9.9-rc1")
Thanks,
SJ
[...]
---
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: debugfs_target_ids_read_before_terminate_race.sh ok 9 selftests: damon: debugfs_target_ids_pid_leak.sh
ok 10 selftests: damon: sysfs.sh
ok 11 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 12 selftests: damon: sysfs_update_schemes_tried_regions_hang.py ok 13 selftests: damon: sysfs_update_schemes_tried_regions_wss_estimation.py ok 14 selftests: damon: damos_quota.py
ok 15 selftests: damon: damos_apply_interval.py
ok 16 selftests: damon: reclaim.sh
ok 17 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh
ok 12 selftests: damon-tests: build_m68k.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +0000. Anything received after that time might be too late.
Hi Greg
6.9.9-rc1 compiles, boots and runs here on x86_64
(AMD Ryzen 5 PRO 4650G, Slackware64-15.0)
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.9.y
6.6 passes our testing, too:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.6.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +0000. Anything received after that time might be too late.
No regressions found on WSL (x86 and arm64).
Built, booted, and reviewed dmesg.
Thank you. :)
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Am 09.07.2024 um 13:07 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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.
Successfully compiled and installed the kernel on my computer (Acer Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
The following kernel panic was noticed while running kunit tests.
First seen on
git commit id: 2471237b27c681c22e5f2b7175584aa7d5c89bfc
date: on July 9th 2024.
GOOD: v6.9.7-223-g03247eed042d
BAD: v6.9.8-198-g2471237b27c6
Always reproduce: yes.
* qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
- gcc-13-defconfig-kunit
- clang-18-defconfig-kunit
- clang-nightly-defconfig-kunit
- gcc-8-defconfig-kunit
Crash log [1]:
---------
<4>[ 63.601683] kernel_init_freeable (init/main.c:1559)
<4>[ 63.602335] kernel_init (init/main.c:1446)
<4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861)
<3>[ 63.603703]
<3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8
<3>[ 63.604057] which belongs to the cache inode_cache of size 616
<3>[ 63.605281] The buggy address is located 80 bytes to the right of
<3>[ 63.605281] allocated 616-byte region [fff00000c07582e8,
fff00000c0758550)
<3>[ 63.606592]
<3>[ 63.607294] The buggy address belongs to the physical page:
<4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000
index:0x0 pfn:0x100758
<4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0
<4>[ 63.609593] flags:
0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff)
<4>[ 63.610449] page_type: 0xffffffff()
<4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0
dead000000000122 0000000000000000
<4>[ 63.612810] raw: 0000000000000000 0000000080160016
00000001ffffffff 0000000000000000
<4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0
dead000000000122 0000000000000000
<4>[ 63.614525] head: 0000000000000000 0000000080160016
00000001ffffffff 0000000000000000
<4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601
ffffc1ffc301d648 00000000ffffffff
<4>[ 63.616583] head: 0000000400000000 0000000000000000
00000000ffffffff 0000000000000000
<4>[ 63.617391] page dumped because: kasan: bad access detected
<3>[ 63.618034]
<3>[ 63.618354] Memory state around the buggy address:
<3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc
fc fc fc fc fc
<3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00
00 00 00 00 00
<3>[ 63.621664] ^
<3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.624138]
==================================================================
<6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3
blocks_per_group=8192 group_count=4 desc_size=64
<6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3
blocks_per_group=8192 group_count=4 desc_size=64
<1>[ 63.674531] Unable to handle kernel NULL pointer dereference at
virtual address 0000000000000008
<1>[ 63.675691] Mem abort info:
<1>[ 63.676527] ESR = 0x000000009600006b
<1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits
<1>[ 63.678274] SET = 0, FnV = 0
<1>[ 63.678906] EA = 0, S1PTW = 0
<1>[ 63.679880] FSC = 0x2b: level -1 translation fault
<1>[ 63.680879] Data abort info:
<1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000
<1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0
<1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
<1>[ 63.684732] [0000000000000008] user address but active_mm is swapper
<0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP
<4>[ 63.688843] Modules linked in:
<4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B
N 6.9.9-rc1 #1
<4>[ 63.690522] Hardware name: linux,dummy-virt (DT)
<4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT
-SSBS BTYPE=--)
<4>[ 63.692423] pc : _raw_spin_lock_irq(arch/arm64/include/asm/atomic_lse.h:271 arch/arm64/include/asm/cmpxchg.h:120 arch/arm64/include/asm/cmpxchg.h:169 include/linux/atomic/atomic-arch-fallback.h:2055 include/linux/atomic/atomic-arch-fallback.h:2173 include/linux/atomic/atomic-instrumented.h:1302 include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187 include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
<4>[ 63.693097] lr : _raw_spin_lock_irq
(include/linux/atomic/atomic-arch-fallback.h:2172 (discriminator 1) include/linux/atomic/atomic-instrumented.h:1302 (discriminator 1) include/asm-generic/qspinlock.h:111 (discriminator 1) include/linux/spinlock.h:187 (discriminator 1) include/linux/spinlock_api_smp.h:120 (discriminator 1) kernel/locking/spinlock.c:170 (discriminator 1))
<4>[ 63.693714] sp : ffff800080087620 <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27: ffff800080087a20 <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24: fff00000c99f0028 <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21: ffff800080087640 <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18: 000000004b9fd0a9 <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15: ffffaa8e3330c4c4 <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12: ffff700010010ec9 <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 : dfff800000000000 <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 : ffff700010010ec8 <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 : ffffaa8e3585c520 <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 : 0000000000000000 <4>[ 63.706625] Call trace: <4>[ 63.707408] _raw_spin_lock_irq
(arch/arm64/include/asm/atomic_lse.h:271 arch/arm64/include/asm/cmpxchg.h:120 arch/arm64/include/asm/cmpxchg.h:169 include/linux/atomic/atomic-arch-fallback.h:2055 include/linux/atomic/atomic-arch-fallback.h:2173 include/linux/atomic/atomic-instrumented.h:1302 include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187 include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
<4>[ 63.708130] wait_for_completion_timeout (kernel/sched/completion.c:84 kernel/sched/completion.c:116 kernel/sched/completion.c:127 kernel/sched/completion.c:167) <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85) <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544) <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649) <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732 (discriminator 1)) <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276 lib/kunit/executor.c:392) <4>[ 63.713317] kernel_init_freeable (init/main.c:1559) <4>[ 63.713971] kernel_init (init/main.c:1446) <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861) <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)
All code
========
0: 93407c02 sxtw x2, w0
4: d503201f nop
8: 2a0003e1 mov w1, w0
c: 52800022 mov w2, #0x1 // #1
10:* 88e17e62 casa w1, w2, [x19] <-- trapping instruction
Code starting with the faulting instruction
===========================================
0: 88e17e62 casa w1, w2, [x19]
<4>[ 63.717705] ---[ end trace 0000000000000000 ]--- <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1 <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b <2>[ 63.724608] SMP: stopping secondary CPUs <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000 <0>[ 63.726534] PHYS_OFFSET: 0x40000000 <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f <0>[ 63.729291] Memory Limit: none <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted to
kill init! exitcode=0x0000000b ]---
Steps to reproduce on qemu-arm64 link provided [2].
Build artifacts arm64 link provided [3].
The Kconfig is built with defconfig+Kunit and the config link provided [4]. This occurred on following Toolchain builds gcc-13, clang-18, clang-nightly and gcc-8.
Reproducible always on following devices and emulators,
* rk3399-rock-pi-4b
* qemu-arm64
* qemu-x86_64
I am bisecting this reported issue.
Please let me know if you need more information.
Links:
[1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
[2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
[3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
[4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
--
Linaro LKFT
https://lkft.linaro.org
Quoted 204 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
The following kernel panic was noticed while running kunit tests.First seen on
git commit id:2471237b27c681c22e5f2b7175584aa7d5c89bfc
date: on July 9th 2024.GOOD: v6.9.7-223-g03247eed042d
BAD: v6.9.8-198-g2471237b27c6Always reproduce: yes.
* qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
- gcc-13-defconfig-kunit
- clang-18-defconfig-kunit
- clang-nightly-defconfig-kunit
- gcc-8-defconfig-kunitCrash log [1]:
---------<4>[ 63.601683] kernel_init_freeable (init/main.c:1559) <4>[ 63.602335] kernel_init (init/main.c:1446) <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861) <3>[ 63.603703] <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8 <3>[ 63.604057] which belongs to the cache inode_cache of size 616 <3>[ 63.605281] The buggy address is located 80 bytes to the right of <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8, fff00000c0758550) <3>[ 63.606592] <3>[ 63.607294] The buggy address belongs to the physical page: <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x100758 <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0 <4>[ 63.609593] flags: 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff) <4>[ 63.610449] page_type: 0xffffffff() <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.612810] raw: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.614525] head: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601 ffffc1ffc301d648 00000000ffffffff <4>[ 63.616583] head: 0000000400000000 0000000000000000 00000000ffffffff 0000000000000000 <4>[ 63.617391] page dumped because: kasan: bad access detected <3>[ 63.618034] <3>[ 63.618354] Memory state around the buggy address: <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc fc <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00 00 00 00 00 00 <3>[ 63.621664] ^ <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.624138] ================================================================== <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 <1>[ 63.675691] Mem abort info: <1>[ 63.676527] ESR = 0x000000009600006b <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits <1>[ 63.678274] SET = 0, FnV = 0 <1>[ 63.678906] EA = 0, S1PTW = 0 <1>[ 63.679880] FSC = 0x2b: level -1 translation fault <1>[ 63.680879] Data abort info: <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000 <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0 <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP <4>[ 63.688843] Modules linked in: <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B N 6.9.9-rc1 #1 <4>[ 63.690522] Hardware name: linux,dummy-virt (DT) <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT -SSBS BTYPE=--) <4>[ 63.692423] pc : _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.693097] lr : _raw_spin_lock_irq(
include/linux/atomic/atomic-arch-fallback.h:2172(discriminator 1)include/linux/atomic/atomic-instrumented.h:1302(discriminator 1)include/asm-generic/qspinlock.h:111(discriminator 1)include/linux/spinlock.h:187(discriminator 1)include/linux/spinlock_api_smp.h:120(discriminator 1)kernel/locking/spinlock.c:170(discriminator 1))<4>[ 63.693714] sp : ffff800080087620 <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27: ffff800080087a20 <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24: fff00000c99f0028 <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21: ffff800080087640 <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18: 000000004b9fd0a9 <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15: ffffaa8e3330c4c4 <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12: ffff700010010ec9 <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 : dfff800000000000 <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 : ffff700010010ec8 <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 : ffffaa8e3585c520 <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 : 0000000000000000 <4>[ 63.706625] Call trace: <4>[ 63.707408] _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.708130] wait_for_completion_timeout (kernel/sched/completion.c:84 kernel/sched/completion.c:116 kernel/sched/completion.c:127 kernel/sched/completion.c:167) <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85) <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544) <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649) <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732 (discriminator 1)) <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276 lib/kunit/executor.c:392) <4>[ 63.713317] kernel_init_freeable (init/main.c:1559) <4>[ 63.713971] kernel_init (init/main.c:1446) <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861) <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)All code
========
0:93407c02sxtw x2, w0
4:d503201fnop
8:2a0003e1mov w1, w0
c: 52800022 mov w2, #0x1 // #1
10:*88e17e62casa w1, w2, [x19] <-- trapping instructionCode starting with the faulting instruction
===========================================
0:88e17e62casa w1, w2, [x19]<4>[ 63.717705] ---[ end trace 0000000000000000 ]--- <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1 <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b <2>[ 63.724608] SMP: stopping secondary CPUs <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000 <0>[ 63.726534] PHYS_OFFSET: 0x40000000 <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f <0>[ 63.729291] Memory Limit: none <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted tokill init! exitcode=0x0000000b ]---
Steps to reproduce on qemu-arm64 link provided [2].
Build artifacts arm64 link provided [3].
TheKconfigis built with defconfig+Kunit and the config link provided [4]. This occurred on following Toolchain builds gcc-13, clang-18, clang-nightly and gcc-8.
Quoted 6 lines
Reproducible always on following devices and emulators,
* rk3399-rock-pi-4b
* qemu-arm64
* qemu-x86_64I am bisecting this reported issue.
Anders, bisected this issue and found this as the first bad commit and after reverting this patch the boot pass and kernel panic were not found.
# first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d]
kunit: Handle test faults
[ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]Quoted 7 lines
Please let me know if you need more information.
Links:
[1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
[2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
[3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
[4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
Bisection log:
------
$ git bisect log # bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1 # good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8 git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8' # bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f # good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff # bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe sensitive data on failure git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7 # good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix out-of-bounds fsid access git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254 # bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5 # bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#" git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96 # bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d # good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6 # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
- Naresh
Greg Kroah-Hartman
maintainerQuoted 250 lines · Naresh Kamboju
Quoted 204 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
The following kernel panic was noticed while running kunit tests.First seen on
git commit id:2471237b27c681c22e5f2b7175584aa7d5c89bfc
date: on July 9th 2024.GOOD: v6.9.7-223-g03247eed042d
BAD: v6.9.8-198-g2471237b27c6Always reproduce: yes.
* qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
- gcc-13-defconfig-kunit
- clang-18-defconfig-kunit
- clang-nightly-defconfig-kunit
- gcc-8-defconfig-kunitCrash log [1]:
---------<4>[ 63.601683] kernel_init_freeable (init/main.c:1559) <4>[ 63.602335] kernel_init (init/main.c:1446) <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861) <3>[ 63.603703] <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8 <3>[ 63.604057] which belongs to the cache inode_cache of size 616 <3>[ 63.605281] The buggy address is located 80 bytes to the right of <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8, fff00000c0758550) <3>[ 63.606592] <3>[ 63.607294] The buggy address belongs to the physical page: <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x100758 <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0 <4>[ 63.609593] flags: 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff) <4>[ 63.610449] page_type: 0xffffffff() <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.612810] raw: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.614525] head: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601 ffffc1ffc301d648 00000000ffffffff <4>[ 63.616583] head: 0000000400000000 0000000000000000 00000000ffffffff 0000000000000000 <4>[ 63.617391] page dumped because: kasan: bad access detected <3>[ 63.618034] <3>[ 63.618354] Memory state around the buggy address: <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc fc <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00 00 00 00 00 00 <3>[ 63.621664] ^ <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.624138] ================================================================== <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 <1>[ 63.675691] Mem abort info: <1>[ 63.676527] ESR = 0x000000009600006b <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits <1>[ 63.678274] SET = 0, FnV = 0 <1>[ 63.678906] EA = 0, S1PTW = 0 <1>[ 63.679880] FSC = 0x2b: level -1 translation fault <1>[ 63.680879] Data abort info: <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000 <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0 <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP <4>[ 63.688843] Modules linked in: <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B N 6.9.9-rc1 #1 <4>[ 63.690522] Hardware name: linux,dummy-virt (DT) <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT -SSBS BTYPE=--) <4>[ 63.692423] pc : _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.693097] lr : _raw_spin_lock_irq(
include/linux/atomic/atomic-arch-fallback.h:2172(discriminator 1)include/linux/atomic/atomic-instrumented.h:1302(discriminator 1)include/asm-generic/qspinlock.h:111(discriminator 1)include/linux/spinlock.h:187(discriminator 1)include/linux/spinlock_api_smp.h:120(discriminator 1)kernel/locking/spinlock.c:170(discriminator 1))<4>[ 63.693714] sp : ffff800080087620 <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27: ffff800080087a20 <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24: fff00000c99f0028 <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21: ffff800080087640 <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18: 000000004b9fd0a9 <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15: ffffaa8e3330c4c4 <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12: ffff700010010ec9 <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 : dfff800000000000 <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 : ffff700010010ec8 <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 : ffffaa8e3585c520 <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 : 0000000000000000 <4>[ 63.706625] Call trace: <4>[ 63.707408] _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.708130] wait_for_completion_timeout (kernel/sched/completion.c:84 kernel/sched/completion.c:116 kernel/sched/completion.c:127 kernel/sched/completion.c:167) <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85) <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544) <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649) <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732 (discriminator 1)) <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276 lib/kunit/executor.c:392) <4>[ 63.713317] kernel_init_freeable (init/main.c:1559) <4>[ 63.713971] kernel_init (init/main.c:1446) <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861) <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)All code
========
0:93407c02sxtw x2, w0
4:d503201fnop
8:2a0003e1mov w1, w0
c: 52800022 mov w2, #0x1 // #1
10:*88e17e62casa w1, w2, [x19] <-- trapping instructionCode starting with the faulting instruction
===========================================
0:88e17e62casa w1, w2, [x19]<4>[ 63.717705] ---[ end trace 0000000000000000 ]--- <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1 <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b <2>[ 63.724608] SMP: stopping secondary CPUs <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000 <0>[ 63.726534] PHYS_OFFSET: 0x40000000 <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f <0>[ 63.729291] Memory Limit: none <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted tokill init! exitcode=0x0000000b ]---
Steps to reproduce on qemu-arm64 link provided [2].
Build artifacts arm64 link provided [3].
TheKconfigis built with defconfig+Kunit and the config link provided [4]. This occurred on following Toolchain builds gcc-13, clang-18, clang-nightly and gcc-8.Quoted 6 lines
Reproducible always on following devices and emulators,
* rk3399-rock-pi-4b
* qemu-arm64
* qemu-x86_64I am bisecting this reported issue.
Anders, bisected this issue and found this as the first bad commit and after reverting this patch the boot pass and kernel panic were not found.
# first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults [ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]Quoted 7 lines
Please let me know if you need more information.
Links:
[1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
[2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
[3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
[4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/configBisection log:
------$ git bisect log # bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1 # good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8 git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8' # bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f # good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff # bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe sensitive data on failure git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7 # good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix out-of-bounds fsid access git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254 # bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5 # bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: Check
Quoted 8 lines
cpu id in commands "c#", "dp#" and "dx#" git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96 # bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d # good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6 # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
So the code to do testing is the thing that is crashing {sigh}
I'll go drop this from all stable branches, but odds are this is also happening in Linus's tree so you might want to report it to the people who submitted it there as well. The thread is here:
https://lore.kernel.org/r/[email protected]
thanks for the bisection!
greg k-h
Quoted 261 lines · Greg Kroah-Hartman
Quoted 250 lines · Naresh Kamboju
Quoted 204 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
The following kernel panic was noticed while running kunit tests.First seen on
git commit id:2471237b27c681c22e5f2b7175584aa7d5c89bfc
date: on July 9th 2024.GOOD: v6.9.7-223-g03247eed042d
BAD: v6.9.8-198-g2471237b27c6Always reproduce: yes.
* qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
- gcc-13-defconfig-kunit
- clang-18-defconfig-kunit
- clang-nightly-defconfig-kunit
- gcc-8-defconfig-kunitCrash log [1]:
---------<4>[ 63.601683] kernel_init_freeable (init/main.c:1559) <4>[ 63.602335] kernel_init (init/main.c:1446) <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861) <3>[ 63.603703] <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8 <3>[ 63.604057] which belongs to the cache inode_cache of size 616 <3>[ 63.605281] The buggy address is located 80 bytes to the right of <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8, fff00000c0758550) <3>[ 63.606592] <3>[ 63.607294] The buggy address belongs to the physical page: <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x100758 <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0 <4>[ 63.609593] flags: 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff) <4>[ 63.610449] page_type: 0xffffffff() <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.612810] raw: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0 dead000000000122 0000000000000000 <4>[ 63.614525] head: 0000000000000000 0000000080160016 00000001ffffffff 0000000000000000 <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601 ffffc1ffc301d648 00000000ffffffff <4>[ 63.616583] head: 0000000400000000 0000000000000000 00000000ffffffff 0000000000000000 <4>[ 63.617391] page dumped because: kasan: bad access detected <3>[ 63.618034] <3>[ 63.618354] Memory state around the buggy address: <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc fc <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00 00 00 00 00 00 <3>[ 63.621664] ^ <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <3>[ 63.624138] ================================================================== <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3 blocks_per_group=8192 group_count=4 desc_size=64 <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 <1>[ 63.675691] Mem abort info: <1>[ 63.676527] ESR = 0x000000009600006b <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits <1>[ 63.678274] SET = 0, FnV = 0 <1>[ 63.678906] EA = 0, S1PTW = 0 <1>[ 63.679880] FSC = 0x2b: level -1 translation fault <1>[ 63.680879] Data abort info: <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000 <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0 <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP <4>[ 63.688843] Modules linked in: <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B N 6.9.9-rc1 #1 <4>[ 63.690522] Hardware name: linux,dummy-virt (DT) <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT -SSBS BTYPE=--) <4>[ 63.692423] pc : _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.693097] lr : _raw_spin_lock_irq(
include/linux/atomic/atomic-arch-fallback.h:2172(discriminator 1)include/linux/atomic/atomic-instrumented.h:1302(discriminator 1)include/asm-generic/qspinlock.h:111(discriminator 1)include/linux/spinlock.h:187(discriminator 1)include/linux/spinlock_api_smp.h:120(discriminator 1)kernel/locking/spinlock.c:170(discriminator 1))<4>[ 63.693714] sp : ffff800080087620 <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27: ffff800080087a20 <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24: fff00000c99f0028 <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21: ffff800080087640 <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18: 000000004b9fd0a9 <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15: ffffaa8e3330c4c4 <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12: ffff700010010ec9 <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 : dfff800000000000 <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 : ffff700010010ec8 <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 : ffffaa8e3585c520 <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 : 0000000000000000 <4>[ 63.706625] Call trace: <4>[ 63.707408] _raw_spin_lock_irq(
arch/arm64/include/asm/atomic_lse.h:271arch/arm64/include/asm/cmpxchg.h:120arch/arm64/include/asm/cmpxchg.h:169include/linux/atomic/atomic-arch-fallback.h:2055include/linux/atomic/atomic-arch-fallback.h:2173include/linux/atomic/atomic-instrumented.h:1302include/asm-generic/qspinlock.h:111include/linux/spinlock.h:187include/linux/spinlock_api_smp.h:120kernel/locking/spinlock.c:170)<4>[ 63.708130] wait_for_completion_timeout (kernel/sched/completion.c:84 kernel/sched/completion.c:116 kernel/sched/completion.c:127 kernel/sched/completion.c:167) <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85) <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544) <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649) <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732 (discriminator 1)) <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276 lib/kunit/executor.c:392) <4>[ 63.713317] kernel_init_freeable (init/main.c:1559) <4>[ 63.713971] kernel_init (init/main.c:1446) <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861) <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)All code
========
0:93407c02sxtw x2, w0
4:d503201fnop
8:2a0003e1mov w1, w0
c: 52800022 mov w2, #0x1 // #1
10:*88e17e62casa w1, w2, [x19] <-- trapping instructionCode starting with the faulting instruction
===========================================
0:88e17e62casa w1, w2, [x19]<4>[ 63.717705] ---[ end trace 0000000000000000 ]--- <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1 <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b <2>[ 63.724608] SMP: stopping secondary CPUs <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000 <0>[ 63.726534] PHYS_OFFSET: 0x40000000 <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f <0>[ 63.729291] Memory Limit: none <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted tokill init! exitcode=0x0000000b ]---
Steps to reproduce on qemu-arm64 link provided [2].
Build artifacts arm64 link provided [3].
TheKconfigis built with defconfig+Kunit and the config link provided [4]. This occurred on following Toolchain builds gcc-13, clang-18, clang-nightly and gcc-8.Quoted 6 lines
Reproducible always on following devices and emulators,
* rk3399-rock-pi-4b
* qemu-arm64
* qemu-x86_64I am bisecting this reported issue.
Anders, bisected this issue and found this as the first bad commit and after reverting this patch the boot pass and kernel panic were not found.
# first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults [ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]Quoted 7 lines
Please let me know if you need more information.
Links:
[1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
[2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
[3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
[4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/configBisection log:
------$ git bisect log # bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1 # good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8 git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8' # bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f # good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff # bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe sensitive data on failure git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7 # good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix out-of-bounds fsid access git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254 # bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5 # bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: CheckQuoted 8 lines
cpu id in commands "c#", "dp#" and "dx#" git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96 # bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d # good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6 # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
Quoted 6 lines
So the code to do testing is the thing that is crashing {sigh}
I'll go drop this from all stable branches, but odds are this is also happening in Linus's tree so you might want to report it to the people who submitted it there as well. The thread is here:
https://lore.kernel.org/r/[email protected]
I have double checked and confirmed that the kunit test works on Linus's tree.
Quoted 2 lines
thanks for the bisection!
Always Happy to Test :)
Quoted 2 lines
greg k-h
- Naresh
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.9:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
111 tests: 111 pass, 0 failLinux version: 6.9.9-rc1-g6ced42af8b2d
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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.
Tested on a ThinkPad E14 Gen 3 with a AMD Ryzen 5 5500U CPU
[2024-07-09 13:07] Greg Kroah-Hartman:
Quoted 9 lines
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Hi, 6.9.9-rc1 compiled and is running fine on various x86_64 bare metal and virtual machines of mine (Haswell, Skylake, Kaby Lake, Coffee Lake).
Regard
Pascal
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.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.9.9 release. There are 197 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.
I'm seeing the RTC date_read_loop test start triggering timeouts on the i.MX8MP EVK with this:
# # RUN rtc.date_read_loop ...
# # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read). # # date_read_loop: Test terminated by timeout
The test was fine with v6.10-rc3 (the first tag it worked at all for v6.10 but that's another story...), but is broken in -next:
# # RUN rtc.date_read_loop ...
# # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read). # # rtctest.c:122:date_read_loop:Performed 2954 RTC time reads.
# # OK rtc.date_read_loop
Bisection points to "selftests/harness: Fix tests timeout and race condition" but this looks like a test bug, the timeout for tests is 30s and the test tries to run for 30s which obviously doesn't add up. Previously the test would pass because the bug the patch is fixing is that timeout had no effect. I'm also running the test on other platforms without it triggering new timeouts, it's just this one specific platform that triggered which is a bit worrying.
I'll send a patch for the test.
Quoted 13 lines · Mark Brown
# # RUN rtc.date_read_loop ...
# # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read). # # rtctest.c:122:date_read_loop:Performed 2954 RTC time reads.
# # OK rtc.date_read_loopBisection points to "selftests/harness: Fix tests timeout and race condition" but this looks like a test bug, the timeout for tests is 30s and the test tries to run for 30s which obviously doesn't add up. Previously the test would pass because the bug the patch is fixing is that timeout had no effect. I'm also running the test on other platforms without it triggering new timeouts, it's just this one specific platform that triggered which is a bit worrying.
Quoted 1 line
I'll send a patch for the test.
Sorry, spoke too soon on that - the test is explicitly overriding the timeout to be longer so there's something else going on here.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.9 release. There are 197 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, 11 Jul 2024 11:06:25 +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.9.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.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