From: Sasha Levin Date: Tue, 3 Oct 2023 00:58:35 +0000 (-0400) Subject: Fixes for 5.10 X-Git-Tag: v6.5.6~60 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cefd28095282bbc9182e4eb2ed2b0bb8b0b3e704;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch b/queue-5.10/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch new file mode 100644 index 00000000000..85d0b7ad1f7 --- /dev/null +++ b/queue-5.10/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch @@ -0,0 +1,123 @@ +From e8ce7cec1f5f7161da554e3a6c07f4fcbedb011c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Sep 2023 00:19:16 +0200 +Subject: ata: libata-eh: do not clear ATA_PFLAG_EH_PENDING in ata_eh_reset() + +From: Niklas Cassel + +[ Upstream commit 80cc944eca4f0baa9c381d0706f3160e491437f2 ] + +ata_scsi_port_error_handler() starts off by clearing ATA_PFLAG_EH_PENDING, +before calling ap->ops->error_handler() (without holding the ap->lock). + +If an error IRQ is received while ap->ops->error_handler() is running, +the irq handler will set ATA_PFLAG_EH_PENDING. + +Once ap->ops->error_handler() returns, ata_scsi_port_error_handler() +checks if ATA_PFLAG_EH_PENDING is set, and if it is, another iteration +of ATA EH is performed. + +The problem is that ATA_PFLAG_EH_PENDING is not only cleared by +ata_scsi_port_error_handler(), it is also cleared by ata_eh_reset(). + +ata_eh_reset() is called by ap->ops->error_handler(). This additional +clearing done by ata_eh_reset() breaks the whole retry logic in +ata_scsi_port_error_handler(). Thus, if an error IRQ is received while +ap->ops->error_handler() is running, the port will currently remain +frozen and will never get re-enabled. + +The additional clearing in ata_eh_reset() was introduced in commit +1e641060c4b5 ("libata: clear eh_info on reset completion"). + +Looking at the original error report: +https://marc.info/?l=linux-ide&m=124765325828495&w=2 + +We can see the following happening: +[ 1.074659] ata3: XXX port freeze +[ 1.074700] ata3: XXX hardresetting link, stopping engine +[ 1.074746] ata3: XXX flipping SControl + +[ 1.411471] ata3: XXX irq_stat=400040 CONN|PHY +[ 1.411475] ata3: XXX port freeze + +[ 1.420049] ata3: XXX starting engine +[ 1.420096] ata3: XXX rc=0, class=1 +[ 1.420142] ata3: XXX clearing IRQs for thawing +[ 1.420188] ata3: XXX port thawed +[ 1.420234] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + +We are not supposed to be able to receive an error IRQ while the port is +frozen (PxIE is set to 0, i.e. all IRQs for the port are disabled). + +AHCI 1.3.1 section 10.7.1.1 First Tier (IS Register) states: +"Each bit location can be thought of as reporting a '1' if the virtual +"interrupt line" for that port is indicating it wishes to generate an +interrupt. That is, if a port has one or more interrupt status bit set, +and the enables for those status bits are set, then this bit shall be set." + +Additionally, AHCI state P:ComInit clearly shows that the state machine +will only jump to P:ComInitSetIS (which sets IS.IPS(x) to '1'), if PxIE.PCE +is set to '1'. In our case, PxIE is set to 0, so IS.IPS(x) won't get set. + +So IS.IPS(x) only gets set if PxIS and PxIE is set. + +AHCI 1.3.1 section 10.7.1.1 First Tier (IS Register) also states: +"The bits in this register are read/write clear. It is set by the level of +the virtual interrupt line being a set, and cleared by a write of '1' from +the software." + +So if IS.IPS(x) is set, you need to explicitly clear it by writing a 1 to +IS.IPS(x) for that port. + +Since PxIE is cleared, the only way to get an interrupt while the port is +frozen, is if IS.IPS(x) is set, and the only way IS.IPS(x) can be set when +the port is frozen, is if it was set before the port was frozen. + +However, since commit 737dd811a3db ("ata: libahci: clear pending interrupt +status"), we clear both PxIS and IS.IPS(x) after freezing the port, but +before the COMRESET, so the problem that commit 1e641060c4b5 ("libata: +clear eh_info on reset completion") fixed can no longer happen. + +Thus, revert commit 1e641060c4b5 ("libata: clear eh_info on reset +completion"), so that the retry logic in ata_scsi_port_error_handler() +works once again. (The retry logic is still needed, since we can still +get an error IRQ _after_ the port has been thawed, but before +ata_scsi_port_error_handler() takes the ap->lock in order to check +if ATA_PFLAG_EH_PENDING is set.) + +Signed-off-by: Niklas Cassel +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/libata-eh.c | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c +index 973f4d34d7cda..5fb3eda0a280b 100644 +--- a/drivers/ata/libata-eh.c ++++ b/drivers/ata/libata-eh.c +@@ -2703,18 +2703,11 @@ int ata_eh_reset(struct ata_link *link, int classify, + postreset(slave, classes); + } + +- /* +- * Some controllers can't be frozen very well and may set spurious +- * error conditions during reset. Clear accumulated error +- * information and re-thaw the port if frozen. As reset is the +- * final recovery action and we cross check link onlineness against +- * device classification later, no hotplug event is lost by this. +- */ ++ /* clear cached SError */ + spin_lock_irqsave(link->ap->lock, flags); +- memset(&link->eh_info, 0, sizeof(link->eh_info)); ++ link->eh_info.serror = 0; + if (slave) +- memset(&slave->eh_info, 0, sizeof(link->eh_info)); +- ap->pflags &= ~ATA_PFLAG_EH_PENDING; ++ slave->eh_info.serror = 0; + spin_unlock_irqrestore(link->ap->lock, flags); + + if (ap->pflags & ATA_PFLAG_FROZEN) +-- +2.40.1 + diff --git a/queue-5.10/bpf-clarify-error-expectations-from-bpf_clone_redire.patch b/queue-5.10/bpf-clarify-error-expectations-from-bpf_clone_redire.patch new file mode 100644 index 00000000000..640f0e310cc --- /dev/null +++ b/queue-5.10/bpf-clarify-error-expectations-from-bpf_clone_redire.patch @@ -0,0 +1,63 @@ +From 3d8c1e02765260c76e628a00dfe799baada0c42e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 11 Sep 2023 12:47:30 -0700 +Subject: bpf: Clarify error expectations from bpf_clone_redirect + +From: Stanislav Fomichev + +[ Upstream commit 7cb779a6867fea00b4209bcf6de2f178a743247d ] + +Commit 151e887d8ff9 ("veth: Fixing transmit return status for dropped +packets") exposed the fact that bpf_clone_redirect is capable of +returning raw NET_XMIT_XXX return codes. + +This is in the conflict with its UAPI doc which says the following: +"0 on success, or a negative error in case of failure." + +Update the UAPI to reflect the fact that bpf_clone_redirect can +return positive error numbers, but don't explicitly define +their meaning. + +Reported-by: Daniel Borkmann +Signed-off-by: Stanislav Fomichev +Signed-off-by: Daniel Borkmann +Link: https://lore.kernel.org/bpf/20230911194731.286342-1-sdf@google.com +Signed-off-by: Sasha Levin +--- + include/uapi/linux/bpf.h | 4 +++- + tools/include/uapi/linux/bpf.h | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h +index 2a234023821e3..36ddfb98b70ea 100644 +--- a/include/uapi/linux/bpf.h ++++ b/include/uapi/linux/bpf.h +@@ -976,7 +976,9 @@ union bpf_attr { + * performed again, if the helper is used in combination with + * direct packet access. + * Return +- * 0 on success, or a negative error in case of failure. ++ * 0 on success, or a negative error in case of failure. Positive ++ * error indicates a potential drop or congestion in the target ++ * device. The particular positive error codes are not defined. + * + * u64 bpf_get_current_pid_tgid(void) + * Return +diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h +index 7943e748916d4..fd1a4d843e6f0 100644 +--- a/tools/include/uapi/linux/bpf.h ++++ b/tools/include/uapi/linux/bpf.h +@@ -976,7 +976,9 @@ union bpf_attr { + * performed again, if the helper is used in combination with + * direct packet access. + * Return +- * 0 on success, or a negative error in case of failure. ++ * 0 on success, or a negative error in case of failure. Positive ++ * error indicates a potential drop or congestion in the target ++ * device. The particular positive error codes are not defined. + * + * u64 bpf_get_current_pid_tgid(void) + * Return +-- +2.40.1 + diff --git a/queue-5.10/dma-debug-don-t-call-__dma_entry_alloc_check_leak-un.patch b/queue-5.10/dma-debug-don-t-call-__dma_entry_alloc_check_leak-un.patch new file mode 100644 index 00000000000..efc2865fe9a --- /dev/null +++ b/queue-5.10/dma-debug-don-t-call-__dma_entry_alloc_check_leak-un.patch @@ -0,0 +1,211 @@ +From 8c112c813da148846702132619d56b57129bbdb9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 16 Aug 2023 11:32:21 +0900 +Subject: dma-debug: don't call __dma_entry_alloc_check_leak() under + free_entries_lock + +From: Sergey Senozhatsky + +[ Upstream commit fb5a4315591dae307a65fc246ca80b5159d296e1 ] + +__dma_entry_alloc_check_leak() calls into printk -> serial console +output (qcom geni) and grabs port->lock under free_entries_lock +spin lock, which is a reverse locking dependency chain as qcom_geni +IRQ handler can call into dma-debug code and grab free_entries_lock +under port->lock. + +Move __dma_entry_alloc_check_leak() call out of free_entries_lock +scope so that we don't acquire serial console's port->lock under it. + +Trimmed-down lockdep splat: + + The existing dependency chain (in reverse order) is: + + -> #2 (free_entries_lock){-.-.}-{2:2}: + _raw_spin_lock_irqsave+0x60/0x80 + dma_entry_alloc+0x38/0x110 + debug_dma_map_page+0x60/0xf8 + dma_map_page_attrs+0x1e0/0x230 + dma_map_single_attrs.constprop.0+0x6c/0xc8 + geni_se_rx_dma_prep+0x40/0xcc + qcom_geni_serial_isr+0x310/0x510 + __handle_irq_event_percpu+0x110/0x244 + handle_irq_event_percpu+0x20/0x54 + handle_irq_event+0x50/0x88 + handle_fasteoi_irq+0xa4/0xcc + handle_irq_desc+0x28/0x40 + generic_handle_domain_irq+0x24/0x30 + gic_handle_irq+0xc4/0x148 + do_interrupt_handler+0xa4/0xb0 + el1_interrupt+0x34/0x64 + el1h_64_irq_handler+0x18/0x24 + el1h_64_irq+0x64/0x68 + arch_local_irq_enable+0x4/0x8 + ____do_softirq+0x18/0x24 + ... + + -> #1 (&port_lock_key){-.-.}-{2:2}: + _raw_spin_lock_irqsave+0x60/0x80 + qcom_geni_serial_console_write+0x184/0x1dc + console_flush_all+0x344/0x454 + console_unlock+0x94/0xf0 + vprintk_emit+0x238/0x24c + vprintk_default+0x3c/0x48 + vprintk+0xb4/0xbc + _printk+0x68/0x90 + register_console+0x230/0x38c + uart_add_one_port+0x338/0x494 + qcom_geni_serial_probe+0x390/0x424 + platform_probe+0x70/0xc0 + really_probe+0x148/0x280 + __driver_probe_device+0xfc/0x114 + driver_probe_device+0x44/0x100 + __device_attach_driver+0x64/0xdc + bus_for_each_drv+0xb0/0xd8 + __device_attach+0xe4/0x140 + device_initial_probe+0x1c/0x28 + bus_probe_device+0x44/0xb0 + device_add+0x538/0x668 + of_device_add+0x44/0x50 + of_platform_device_create_pdata+0x94/0xc8 + of_platform_bus_create+0x270/0x304 + of_platform_populate+0xac/0xc4 + devm_of_platform_populate+0x60/0xac + geni_se_probe+0x154/0x160 + platform_probe+0x70/0xc0 + ... + + -> #0 (console_owner){-...}-{0:0}: + __lock_acquire+0xdf8/0x109c + lock_acquire+0x234/0x284 + console_flush_all+0x330/0x454 + console_unlock+0x94/0xf0 + vprintk_emit+0x238/0x24c + vprintk_default+0x3c/0x48 + vprintk+0xb4/0xbc + _printk+0x68/0x90 + dma_entry_alloc+0xb4/0x110 + debug_dma_map_sg+0xdc/0x2f8 + __dma_map_sg_attrs+0xac/0xe4 + dma_map_sgtable+0x30/0x4c + get_pages+0x1d4/0x1e4 [msm] + msm_gem_pin_pages_locked+0x38/0xac [msm] + msm_gem_pin_vma_locked+0x58/0x88 [msm] + msm_ioctl_gem_submit+0xde4/0x13ac [msm] + drm_ioctl_kernel+0xe0/0x15c + drm_ioctl+0x2e8/0x3f4 + vfs_ioctl+0x30/0x50 + ... + + Chain exists of: + console_owner --> &port_lock_key --> free_entries_lock + + Possible unsafe locking scenario: + + CPU0 CPU1 + ---- ---- + lock(free_entries_lock); + lock(&port_lock_key); + lock(free_entries_lock); + lock(console_owner); + + *** DEADLOCK *** + + Call trace: + dump_backtrace+0xb4/0xf0 + show_stack+0x20/0x30 + dump_stack_lvl+0x60/0x84 + dump_stack+0x18/0x24 + print_circular_bug+0x1cc/0x234 + check_noncircular+0x78/0xac + __lock_acquire+0xdf8/0x109c + lock_acquire+0x234/0x284 + console_flush_all+0x330/0x454 + console_unlock+0x94/0xf0 + vprintk_emit+0x238/0x24c + vprintk_default+0x3c/0x48 + vprintk+0xb4/0xbc + _printk+0x68/0x90 + dma_entry_alloc+0xb4/0x110 + debug_dma_map_sg+0xdc/0x2f8 + __dma_map_sg_attrs+0xac/0xe4 + dma_map_sgtable+0x30/0x4c + get_pages+0x1d4/0x1e4 [msm] + msm_gem_pin_pages_locked+0x38/0xac [msm] + msm_gem_pin_vma_locked+0x58/0x88 [msm] + msm_ioctl_gem_submit+0xde4/0x13ac [msm] + drm_ioctl_kernel+0xe0/0x15c + drm_ioctl+0x2e8/0x3f4 + vfs_ioctl+0x30/0x50 + ... + +Reported-by: Rob Clark +Signed-off-by: Sergey Senozhatsky +Acked-by: Robin Murphy +Signed-off-by: Christoph Hellwig +Signed-off-by: Sasha Levin +--- + kernel/dma/debug.c | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c +index ae9fc1ee6d206..0263983089097 100644 +--- a/kernel/dma/debug.c ++++ b/kernel/dma/debug.c +@@ -606,15 +606,19 @@ static struct dma_debug_entry *__dma_entry_alloc(void) + return entry; + } + +-static void __dma_entry_alloc_check_leak(void) ++/* ++ * This should be called outside of free_entries_lock scope to avoid potential ++ * deadlocks with serial consoles that use DMA. ++ */ ++static void __dma_entry_alloc_check_leak(u32 nr_entries) + { +- u32 tmp = nr_total_entries % nr_prealloc_entries; ++ u32 tmp = nr_entries % nr_prealloc_entries; + + /* Shout each time we tick over some multiple of the initial pool */ + if (tmp < DMA_DEBUG_DYNAMIC_ENTRIES) { + pr_info("dma_debug_entry pool grown to %u (%u00%%)\n", +- nr_total_entries, +- (nr_total_entries / nr_prealloc_entries)); ++ nr_entries, ++ (nr_entries / nr_prealloc_entries)); + } + } + +@@ -625,8 +629,10 @@ static void __dma_entry_alloc_check_leak(void) + */ + static struct dma_debug_entry *dma_entry_alloc(void) + { ++ bool alloc_check_leak = false; + struct dma_debug_entry *entry; + unsigned long flags; ++ u32 nr_entries; + + spin_lock_irqsave(&free_entries_lock, flags); + if (num_free_entries == 0) { +@@ -636,13 +642,17 @@ static struct dma_debug_entry *dma_entry_alloc(void) + pr_err("debugging out of memory - disabling\n"); + return NULL; + } +- __dma_entry_alloc_check_leak(); ++ alloc_check_leak = true; ++ nr_entries = nr_total_entries; + } + + entry = __dma_entry_alloc(); + + spin_unlock_irqrestore(&free_entries_lock, flags); + ++ if (alloc_check_leak) ++ __dma_entry_alloc_check_leak(nr_entries); ++ + #ifdef CONFIG_STACKTRACE + entry->stack_len = stack_trace_save(entry->stack_entries, + ARRAY_SIZE(entry->stack_entries), +-- +2.40.1 + diff --git a/queue-5.10/fbdev-sh7760fb-depend-on-fb-y.patch b/queue-5.10/fbdev-sh7760fb-depend-on-fb-y.patch new file mode 100644 index 00000000000..6bef59fc70a --- /dev/null +++ b/queue-5.10/fbdev-sh7760fb-depend-on-fb-y.patch @@ -0,0 +1,60 @@ +From a20ae08bb039d1577820b77248fd5778fa9271f5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 18 Sep 2023 11:03:49 +0200 +Subject: fbdev/sh7760fb: Depend on FB=y + +From: Thomas Zimmermann + +[ Upstream commit f75f71b2c418a27a7c05139bb27a0c83adf88d19 ] + +Fix linker error if FB=m about missing fb_io_read and fb_io_write. The +linker's error message suggests that this config setting has already +been broken for other symbols. + + All errors (new ones prefixed by >>): + + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o: in function `sh7760fb_probe': + sh7760fb.c:(.text+0x374): undefined reference to `framebuffer_alloc' + sh4-linux-ld: sh7760fb.c:(.text+0x394): undefined reference to `fb_videomode_to_var' + sh4-linux-ld: sh7760fb.c:(.text+0x39c): undefined reference to `fb_alloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x3a4): undefined reference to `register_framebuffer' + sh4-linux-ld: sh7760fb.c:(.text+0x3ac): undefined reference to `fb_dealloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x434): undefined reference to `framebuffer_release' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o: in function `sh7760fb_remove': + sh7760fb.c:(.text+0x800): undefined reference to `unregister_framebuffer' + sh4-linux-ld: sh7760fb.c:(.text+0x804): undefined reference to `fb_dealloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x814): undefined reference to `framebuffer_release' + >> sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0xc): undefined reference to `fb_io_read' + >> sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x10): undefined reference to `fb_io_write' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x2c): undefined reference to `cfb_fillrect' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x30): undefined reference to `cfb_copyarea' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x34): undefined reference to `cfb_imageblit' + +Suggested-by: Randy Dunlap +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202309130632.LS04CPWu-lkp@intel.com/ +Signed-off-by: Thomas Zimmermann +Reviewed-by: Javier Martinez Canillas +Acked-by: John Paul Adrian Glaubitz +Link: https://patchwork.freedesktop.org/patch/msgid/20230918090400.13264-1-tzimmermann@suse.de +Signed-off-by: Sasha Levin +--- + drivers/video/fbdev/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig +index 3ac78db17e466..dd59584630979 100644 +--- a/drivers/video/fbdev/Kconfig ++++ b/drivers/video/fbdev/Kconfig +@@ -2014,7 +2014,7 @@ config FB_COBALT + + config FB_SH7760 + bool "SH7760/SH7763/SH7720/SH7721 LCDC support" +- depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ ++ depends on FB=y && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ + || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA +-- +2.40.1 + diff --git a/queue-5.10/media-vb2-frame_vector.c-replace-warn_once-with-a-co.patch b/queue-5.10/media-vb2-frame_vector.c-replace-warn_once-with-a-co.patch new file mode 100644 index 00000000000..cb999def2dd --- /dev/null +++ b/queue-5.10/media-vb2-frame_vector.c-replace-warn_once-with-a-co.patch @@ -0,0 +1,51 @@ +From 6cc933c2b98978a3fd9b27b6dee0f7738a855a94 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 17 Aug 2023 12:41:32 +0200 +Subject: media: vb2: frame_vector.c: replace WARN_ONCE with a comment + +From: Hans Verkuil + +[ Upstream commit 735de5caf79e06cc9fb96b1b4f4974674ae3e917 ] + +The WARN_ONCE was issued also in cases that had nothing to do with VM_IO +(e.g. if the start address was just a random value and uaccess fails with +-EFAULT). + +There are no reports of WARN_ONCE being issued for actual VM_IO cases, so +just drop it and instead add a note to the comment before the function. + +Signed-off-by: Hans Verkuil +Reviewed-by: David Hildenbrand +Reported-by: Yikebaer Aizezi +Signed-off-by: Sasha Levin +--- + mm/frame_vector.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/mm/frame_vector.c b/mm/frame_vector.c +index 0e589a9a88012..1cd81d38ad2d0 100644 +--- a/mm/frame_vector.c ++++ b/mm/frame_vector.c +@@ -29,6 +29,10 @@ + * different type underlying the specified range of virtual addresses. + * When the function isn't able to map a single page, it returns error. + * ++ * Note that get_vaddr_frames() cannot follow VM_IO mappings. It used ++ * to be able to do that, but that could (racily) return non-refcounted ++ * pfns. ++ * + * This function takes care of grabbing mmap_lock as necessary. + */ + int get_vaddr_frames(unsigned long start, unsigned int nr_frames, +@@ -77,8 +81,6 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames, + goto out; + } + +- /* This used to (racily) return non-refcounted pfns. Let people know */ +- WARN_ONCE(1, "get_vaddr_frames() cannot follow VM_IO mapping"); + vec->nr_frames = 0; + + out: +-- +2.40.1 + diff --git a/queue-5.10/ncsi-propagate-carrier-gain-loss-events-to-the-ncsi-.patch b/queue-5.10/ncsi-propagate-carrier-gain-loss-events-to-the-ncsi-.patch new file mode 100644 index 00000000000..31ef07e335a --- /dev/null +++ b/queue-5.10/ncsi-propagate-carrier-gain-loss-events-to-the-ncsi-.patch @@ -0,0 +1,40 @@ +From 2ba8d5297ac22027dd7448bf0d395acc011c9443 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 15 Sep 2023 09:12:35 -0700 +Subject: ncsi: Propagate carrier gain/loss events to the NCSI controller + +From: Johnathan Mantey + +[ Upstream commit 3780bb29311eccb7a1c9641032a112eed237f7e3 ] + +Report the carrier/no-carrier state for the network interface +shared between the BMC and the passthrough channel. Without this +functionality the BMC is unable to reconfigure the NIC in the event +of a re-cabling to a different subnet. + +Signed-off-by: Johnathan Mantey +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + net/ncsi/ncsi-aen.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/net/ncsi/ncsi-aen.c b/net/ncsi/ncsi-aen.c +index 62fb1031763d1..f8854bff286cb 100644 +--- a/net/ncsi/ncsi-aen.c ++++ b/net/ncsi/ncsi-aen.c +@@ -89,6 +89,11 @@ static int ncsi_aen_handler_lsc(struct ncsi_dev_priv *ndp, + if ((had_link == has_link) || chained) + return 0; + ++ if (had_link) ++ netif_carrier_off(ndp->ndev.dev); ++ else ++ netif_carrier_on(ndp->ndev.dev); ++ + if (!ndp->multi_package && !nc->package->multi_channel) { + if (had_link) { + ndp->flags |= NCSI_DEV_RESHUFFLE; +-- +2.40.1 + diff --git a/queue-5.10/parisc-drivers-fix-sparse-warning.patch b/queue-5.10/parisc-drivers-fix-sparse-warning.patch new file mode 100644 index 00000000000..d0278f3b446 --- /dev/null +++ b/queue-5.10/parisc-drivers-fix-sparse-warning.patch @@ -0,0 +1,35 @@ +From cf6b35ba008f950cf57c7f595ab667029d6371b1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 31 Aug 2023 22:08:32 +0200 +Subject: parisc: drivers: Fix sparse warning + +From: Helge Deller + +[ Upstream commit b137b9d60b8add5620a06c687a71ce18776730b0 ] + +Fix "warning: directive in macro's argument list" warning. + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/kernel/drivers.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c +index d95157488832a..d11a3123f3dc4 100644 +--- a/arch/parisc/kernel/drivers.c ++++ b/arch/parisc/kernel/drivers.c +@@ -925,9 +925,9 @@ static __init void qemu_header(void) + pr_info("#define PARISC_MODEL \"%s\"\n\n", + boot_cpu_data.pdc.sys_model_name); + ++ #define p ((unsigned long *)&boot_cpu_data.pdc.model) + pr_info("#define PARISC_PDC_MODEL 0x%lx, 0x%lx, 0x%lx, " + "0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%lx\n\n", +- #define p ((unsigned long *)&boot_cpu_data.pdc.model) + p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]); + #undef p + +-- +2.40.1 + diff --git a/queue-5.10/parisc-iosapic.c-fix-sparse-warnings.patch b/queue-5.10/parisc-iosapic.c-fix-sparse-warnings.patch new file mode 100644 index 00000000000..c10e0f354cf --- /dev/null +++ b/queue-5.10/parisc-iosapic.c-fix-sparse-warnings.patch @@ -0,0 +1,50 @@ +From c3e4902becebcde5f8b820d89a8daace1eb49e32 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 30 Aug 2023 11:59:55 +0200 +Subject: parisc: iosapic.c: Fix sparse warnings + +From: Helge Deller + +[ Upstream commit 927c6c8aa27c284a799b8c18784e37d3373af908 ] + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + drivers/parisc/iosapic.c | 4 ++-- + drivers/parisc/iosapic_private.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c +index fd99735dca3e6..6ef663bbcdb01 100644 +--- a/drivers/parisc/iosapic.c ++++ b/drivers/parisc/iosapic.c +@@ -202,9 +202,9 @@ static inline void iosapic_write(void __iomem *iosapic, unsigned int reg, u32 va + + static DEFINE_SPINLOCK(iosapic_lock); + +-static inline void iosapic_eoi(void __iomem *addr, unsigned int data) ++static inline void iosapic_eoi(__le32 __iomem *addr, __le32 data) + { +- __raw_writel(data, addr); ++ __raw_writel((__force u32)data, addr); + } + + /* +diff --git a/drivers/parisc/iosapic_private.h b/drivers/parisc/iosapic_private.h +index 73ecc657ad954..bd8ff40162b4b 100644 +--- a/drivers/parisc/iosapic_private.h ++++ b/drivers/parisc/iosapic_private.h +@@ -118,8 +118,8 @@ struct iosapic_irt { + struct vector_info { + struct iosapic_info *iosapic; /* I/O SAPIC this vector is on */ + struct irt_entry *irte; /* IRT entry */ +- u32 __iomem *eoi_addr; /* precalculate EOI reg address */ +- u32 eoi_data; /* IA64: ? PA: swapped txn_data */ ++ __le32 __iomem *eoi_addr; /* precalculate EOI reg address */ ++ __le32 eoi_data; /* IA64: ? PA: swapped txn_data */ + int txn_irq; /* virtual IRQ number for processor */ + ulong txn_addr; /* IA64: id_eid PA: partial HPA */ + u32 txn_data; /* CPU interrupt bit */ +-- +2.40.1 + diff --git a/queue-5.10/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch b/queue-5.10/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch new file mode 100644 index 00000000000..b49fbf08a33 --- /dev/null +++ b/queue-5.10/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch @@ -0,0 +1,31 @@ +From f5c6edbb3094d754591e20598cfb6da3f307e1c9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 31 Aug 2023 22:36:12 +0200 +Subject: parisc: irq: Make irq_stack_union static to avoid sparse warning + +From: Helge Deller + +[ Upstream commit b1bef1388c427cdad7331a9c8eb4ebbbe5b954b0 ] + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/kernel/irq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c +index 60f5829d476f5..2762e8540672e 100644 +--- a/arch/parisc/kernel/irq.c ++++ b/arch/parisc/kernel/irq.c +@@ -388,7 +388,7 @@ union irq_stack_union { + volatile unsigned int lock[1]; + }; + +-DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { ++static DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { + .slock = { 1,1,1,1 }, + }; + #endif +-- +2.40.1 + diff --git a/queue-5.10/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch b/queue-5.10/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch new file mode 100644 index 00000000000..25f5b108343 --- /dev/null +++ b/queue-5.10/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch @@ -0,0 +1,50 @@ +From 4da4af824b1b88ca4820fc4b830e8a53aa809148 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 30 Aug 2023 08:10:01 +0200 +Subject: parisc: sba: Fix compile warning wrt list of SBA devices + +From: Helge Deller + +[ Upstream commit eb3255ee8f6f4691471a28fbf22db5e8901116cd ] + +Fix this makecheck warning: +drivers/parisc/sba_iommu.c:98:19: warning: symbol 'sba_list' + was not declared. Should it be static? + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/include/asm/ropes.h | 3 +++ + drivers/char/agp/parisc-agp.c | 2 -- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch/parisc/include/asm/ropes.h b/arch/parisc/include/asm/ropes.h +index 8e51c775c80a6..62399c7ea94a1 100644 +--- a/arch/parisc/include/asm/ropes.h ++++ b/arch/parisc/include/asm/ropes.h +@@ -86,6 +86,9 @@ struct sba_device { + struct ioc ioc[MAX_IOC]; + }; + ++/* list of SBA's in system, see drivers/parisc/sba_iommu.c */ ++extern struct sba_device *sba_list; ++ + #define ASTRO_RUNWAY_PORT 0x582 + #define IKE_MERCED_PORT 0x803 + #define REO_MERCED_PORT 0x804 +diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c +index 514f9f287a781..c6f181702b9a7 100644 +--- a/drivers/char/agp/parisc-agp.c ++++ b/drivers/char/agp/parisc-agp.c +@@ -394,8 +394,6 @@ find_quicksilver(struct device *dev, void *data) + static int __init + parisc_agp_init(void) + { +- extern struct sba_device *sba_list; +- + int err = -1; + struct parisc_device *sba = NULL, *lba = NULL; + struct lba_device *lbadev = NULL; +-- +2.40.1 + diff --git a/queue-5.10/platform-mellanox-mlxbf-bootctl-add-net-dependency-i.patch b/queue-5.10/platform-mellanox-mlxbf-bootctl-add-net-dependency-i.patch new file mode 100644 index 00000000000..e762a589c71 --- /dev/null +++ b/queue-5.10/platform-mellanox-mlxbf-bootctl-add-net-dependency-i.patch @@ -0,0 +1,40 @@ +From 57a025b5af075e33fd1cca396f54e5e2c9bf260d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 5 Sep 2023 09:32:43 -0400 +Subject: platform/mellanox: mlxbf-bootctl: add NET dependency into Kconfig + +From: David Thompson + +[ Upstream commit c2dffda1d8f7511505bbbf16ba282f2079b30089 ] + +The latest version of the mlxbf_bootctl driver utilizes +"sysfs_format_mac", and this API is only available if +NET is defined in the kernel configuration. This patch +changes the mlxbf_bootctl Kconfig to depend on NET. + +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202309031058.JvwNDBKt-lkp@intel.com/ +Reported-by: Randy Dunlap +Signed-off-by: David Thompson +Link: https://lore.kernel.org/r/20230905133243.31550-1-davthompson@nvidia.com +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + drivers/platform/mellanox/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/platform/mellanox/Kconfig b/drivers/platform/mellanox/Kconfig +index 916b39dc11bc6..1a11d1a441b53 100644 +--- a/drivers/platform/mellanox/Kconfig ++++ b/drivers/platform/mellanox/Kconfig +@@ -48,6 +48,7 @@ config MLXBF_BOOTCTL + tristate "Mellanox BlueField Firmware Boot Control driver" + depends on ARM64 + depends on ACPI ++ depends on NET + help + The Mellanox BlueField firmware implements functionality to + request swapping the primary and alternate eMMC boot partition, +-- +2.40.1 + diff --git a/queue-5.10/powerpc-watchpoints-disable-preemption-in-thread_cha.patch b/queue-5.10/powerpc-watchpoints-disable-preemption-in-thread_cha.patch new file mode 100644 index 00000000000..e10f7ba9123 --- /dev/null +++ b/queue-5.10/powerpc-watchpoints-disable-preemption-in-thread_cha.patch @@ -0,0 +1,58 @@ +From f4b099b1b3fb1c8b44c9806eba0114c7c30da9a6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 29 Aug 2023 16:34:55 +1000 +Subject: powerpc/watchpoints: Disable preemption in thread_change_pc() + +From: Benjamin Gray + +[ Upstream commit cc879ab3ce39bc39f9b1d238b283f43a5f6f957d ] + +thread_change_pc() uses CPU local data, so must be protected from +swapping CPUs while it is reading the breakpoint struct. + +The error is more noticeable after 1e60f3564bad ("powerpc/watchpoints: +Track perf single step directly on the breakpoint"), which added an +unconditional __this_cpu_read() call in thread_change_pc(). However the +existing __this_cpu_read() that runs if a breakpoint does need to be +re-inserted has the same issue. + +Signed-off-by: Benjamin Gray +Signed-off-by: Michael Ellerman +Link: https://msgid.link/20230829063457.54157-2-bgray@linux.ibm.com +Signed-off-by: Sasha Levin +--- + arch/powerpc/kernel/hw_breakpoint.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c +index f4e8f21046f54..6e5bed50c3578 100644 +--- a/arch/powerpc/kernel/hw_breakpoint.c ++++ b/arch/powerpc/kernel/hw_breakpoint.c +@@ -479,11 +479,13 @@ void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) + struct arch_hw_breakpoint *info; + int i; + ++ preempt_disable(); ++ + for (i = 0; i < nr_wp_slots(); i++) { + if (unlikely(tsk->thread.last_hit_ubp[i])) + goto reset; + } +- return; ++ goto out; + + reset: + regs->msr &= ~MSR_SE; +@@ -492,6 +494,9 @@ void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) + __set_breakpoint(i, info); + tsk->thread.last_hit_ubp[i] = NULL; + } ++ ++out: ++ preempt_enable(); + } + + static bool is_larx_stcx_instr(int type) +-- +2.40.1 + diff --git a/queue-5.10/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch b/queue-5.10/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch new file mode 100644 index 00000000000..6dd3302e24e --- /dev/null +++ b/queue-5.10/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch @@ -0,0 +1,45 @@ +From 9b58bc47df6a85b46d6322800739111785816e95 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 6 Sep 2023 16:19:30 +0800 +Subject: ring-buffer: Avoid softlockup in ring_buffer_resize() + +From: Zheng Yejian + +[ Upstream commit f6bd2c92488c30ef53b5bd80c52f0a7eee9d545a ] + +When user resize all trace ring buffer through file 'buffer_size_kb', +then in ring_buffer_resize(), kernel allocates buffer pages for each +cpu in a loop. + +If the kernel preemption model is PREEMPT_NONE and there are many cpus +and there are many buffer pages to be allocated, it may not give up cpu +for a long time and finally cause a softlockup. + +To avoid it, call cond_resched() after each cpu buffer allocation. + +Link: https://lore.kernel.org/linux-trace-kernel/20230906081930.3939106-1-zhengyejian1@huawei.com + +Cc: +Signed-off-by: Zheng Yejian +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/ring_buffer.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c +index f8126fa0630e2..752e9549a59e8 100644 +--- a/kernel/trace/ring_buffer.c ++++ b/kernel/trace/ring_buffer.c +@@ -2080,6 +2080,8 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, + err = -ENOMEM; + goto out_err; + } ++ ++ cond_resched(); + } + + get_online_cpus(); +-- +2.40.1 + diff --git a/queue-5.10/ring-buffer-do-not-attempt-to-read-past-commit.patch b/queue-5.10/ring-buffer-do-not-attempt-to-read-past-commit.patch new file mode 100644 index 00000000000..28750c4e068 --- /dev/null +++ b/queue-5.10/ring-buffer-do-not-attempt-to-read-past-commit.patch @@ -0,0 +1,57 @@ +From d1ff062b1e6e3e578bdfc4fffc22bd89b8d3a967 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 7 Sep 2023 12:28:20 -0400 +Subject: ring-buffer: Do not attempt to read past "commit" + +From: Steven Rostedt (Google) + +[ Upstream commit 95a404bd60af6c4d9d8db01ad14fe8957ece31ca ] + +When iterating over the ring buffer while the ring buffer is active, the +writer can corrupt the reader. There's barriers to help detect this and +handle it, but that code missed the case where the last event was at the +very end of the page and has only 4 bytes left. + +The checks to detect the corruption by the writer to reads needs to see the +length of the event. If the length in the first 4 bytes is zero then the +length is stored in the second 4 bytes. But if the writer is in the process +of updating that code, there's a small window where the length in the first +4 bytes could be zero even though the length is only 4 bytes. That will +cause rb_event_length() to read the next 4 bytes which could happen to be off the +allocated page. + +To protect against this, fail immediately if the next event pointer is +less than 8 bytes from the end of the commit (last byte of data), as all +events must be a minimum of 8 bytes anyway. + +Link: https://lore.kernel.org/all/20230905141245.26470-1-Tze-nan.Wu@mediatek.com/ +Link: https://lore.kernel.org/linux-trace-kernel/20230907122820.0899019c@gandalf.local.home + +Cc: Masami Hiramatsu +Cc: Mark Rutland +Reported-by: Tze-nan Wu +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/ring_buffer.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c +index 752e9549a59e8..812ec380da820 100644 +--- a/kernel/trace/ring_buffer.c ++++ b/kernel/trace/ring_buffer.c +@@ -2260,6 +2260,11 @@ rb_iter_head_event(struct ring_buffer_iter *iter) + */ + commit = rb_page_commit(iter_head_page); + smp_rmb(); ++ ++ /* An event needs to be at least 8 bytes in size */ ++ if (iter->head > commit - 8) ++ goto reset; ++ + event = __rb_page_index(iter_head_page, iter->head); + length = rb_event_length(event); + +-- +2.40.1 + diff --git a/queue-5.10/scsi-pm80xx-avoid-leaking-tags-when-processing-opc_i.patch b/queue-5.10/scsi-pm80xx-avoid-leaking-tags-when-processing-opc_i.patch new file mode 100644 index 00000000000..06466aa2aa5 --- /dev/null +++ b/queue-5.10/scsi-pm80xx-avoid-leaking-tags-when-processing-opc_i.patch @@ -0,0 +1,42 @@ +From a2a653d4a39ed247f1233ded193e0a3c771669e7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 11 Sep 2023 10:03:40 -0700 +Subject: scsi: pm80xx: Avoid leaking tags when processing + OPC_INB_SET_CONTROLLER_CONFIG command + +From: Michal Grzedzicki + +[ Upstream commit c13e7331745852d0dd7c35eabbe181cbd5b01172 ] + +Tags allocated for OPC_INB_SET_CONTROLLER_CONFIG command need to be freed +when we receive the response. + +Signed-off-by: Michal Grzedzicki +Link: https://lore.kernel.org/r/20230911170340.699533-2-mge@meta.com +Acked-by: Jack Wang +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/pm8001/pm80xx_hwi.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c +index ed01c93062091..89051722e04d6 100644 +--- a/drivers/scsi/pm8001/pm80xx_hwi.c ++++ b/drivers/scsi/pm8001/pm80xx_hwi.c +@@ -3722,10 +3722,12 @@ static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha, + (struct set_ctrl_cfg_resp *)(piomb + 4); + u32 status = le32_to_cpu(pPayload->status); + u32 err_qlfr_pgcd = le32_to_cpu(pPayload->err_qlfr_pgcd); ++ u32 tag = le32_to_cpu(pPayload->tag); + + pm8001_dbg(pm8001_ha, MSG, + "SET CONTROLLER RESP: status 0x%x qlfr_pgcd 0x%x\n", + status, err_qlfr_pgcd); ++ pm8001_tag_free(pm8001_ha, tag); + + return 0; + } +-- +2.40.1 + diff --git a/queue-5.10/scsi-pm80xx-use-phy-specific-sas-address-when-sendin.patch b/queue-5.10/scsi-pm80xx-use-phy-specific-sas-address-when-sendin.patch new file mode 100644 index 00000000000..394c1e6c675 --- /dev/null +++ b/queue-5.10/scsi-pm80xx-use-phy-specific-sas-address-when-sendin.patch @@ -0,0 +1,53 @@ +From 1ccd4f9019dbd97d8a918b147b574bd41a47bc26 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 13 Sep 2023 08:56:10 -0700 +Subject: scsi: pm80xx: Use phy-specific SAS address when sending PHY_START + command + +From: Michal Grzedzicki + +[ Upstream commit 71996bb835aed58c7ec4967be1d05190a27339ec ] + +Some cards have more than one SAS address. Using an incorrect address +causes communication issues with some devices like expanders. + +Closes: https://lore.kernel.org/linux-kernel/A57AEA84-5CA0-403E-8053-106033C73C70@fb.com/ +Signed-off-by: Michal Grzedzicki +Link: https://lore.kernel.org/r/20230913155611.3183612-1-mge@meta.com +Acked-by: Jack Wang +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/pm8001/pm8001_hwi.c | 2 +- + drivers/scsi/pm8001/pm80xx_hwi.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c +index e9b3485baee01..2b20c6a0293f5 100644 +--- a/drivers/scsi/pm8001/pm8001_hwi.c ++++ b/drivers/scsi/pm8001/pm8001_hwi.c +@@ -4344,7 +4344,7 @@ pm8001_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) + payload.sas_identify.dev_type = SAS_END_DEVICE; + payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL; + memcpy(payload.sas_identify.sas_addr, +- pm8001_ha->sas_addr, SAS_ADDR_SIZE); ++ &pm8001_ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE); + payload.sas_identify.phy_id = phy_id; + ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, + sizeof(payload), 0); +diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c +index c98c0a53a018c..ed01c93062091 100644 +--- a/drivers/scsi/pm8001/pm80xx_hwi.c ++++ b/drivers/scsi/pm8001/pm80xx_hwi.c +@@ -4741,7 +4741,7 @@ pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) + payload.sas_identify.dev_type = SAS_END_DEVICE; + payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL; + memcpy(payload.sas_identify.sas_addr, +- &pm8001_ha->sas_addr, SAS_ADDR_SIZE); ++ &pm8001_ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE); + payload.sas_identify.phy_id = phy_id; + ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, + sizeof(payload), 0); +-- +2.40.1 + diff --git a/queue-5.10/scsi-qedf-add-synchronization-between-i-o-completion.patch b/queue-5.10/scsi-qedf-add-synchronization-between-i-o-completion.patch new file mode 100644 index 00000000000..47346403b52 --- /dev/null +++ b/queue-5.10/scsi-qedf-add-synchronization-between-i-o-completion.patch @@ -0,0 +1,99 @@ +From d233eb5ac09bd67d513bbc228079956a68cc2570 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 1 Sep 2023 11:36:46 +0530 +Subject: scsi: qedf: Add synchronization between I/O completions and abort + +From: Javed Hasan + +[ Upstream commit 7df0b2605489bef3f4223ad66f1f9bb8d50d4cd2 ] + +Avoid race condition between I/O completion and abort processing by +protecting the cmd_type with the rport lock. + +Signed-off-by: Javed Hasan +Signed-off-by: Saurav Kashyap +Link: https://lore.kernel.org/r/20230901060646.27885-1-skashyap@marvell.com +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qedf/qedf_io.c | 10 ++++++++-- + drivers/scsi/qedf/qedf_main.c | 7 ++++++- + 2 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c +index 472374d83cede..1f8e81296beb7 100644 +--- a/drivers/scsi/qedf/qedf_io.c ++++ b/drivers/scsi/qedf/qedf_io.c +@@ -1924,6 +1924,7 @@ int qedf_initiate_abts(struct qedf_ioreq *io_req, bool return_scsi_cmd_on_abts) + goto drop_rdata_kref; + } + ++ spin_lock_irqsave(&fcport->rport_lock, flags); + if (!test_bit(QEDF_CMD_OUTSTANDING, &io_req->flags) || + test_bit(QEDF_CMD_IN_CLEANUP, &io_req->flags) || + test_bit(QEDF_CMD_IN_ABORT, &io_req->flags)) { +@@ -1931,17 +1932,20 @@ int qedf_initiate_abts(struct qedf_ioreq *io_req, bool return_scsi_cmd_on_abts) + "io_req xid=0x%x sc_cmd=%p already in cleanup or abort processing or already completed.\n", + io_req->xid, io_req->sc_cmd); + rc = 1; ++ spin_unlock_irqrestore(&fcport->rport_lock, flags); + goto drop_rdata_kref; + } + ++ /* Set the command type to abort */ ++ io_req->cmd_type = QEDF_ABTS; ++ spin_unlock_irqrestore(&fcport->rport_lock, flags); ++ + kref_get(&io_req->refcount); + + xid = io_req->xid; + qedf->control_requests++; + qedf->packet_aborts++; + +- /* Set the command type to abort */ +- io_req->cmd_type = QEDF_ABTS; + io_req->return_scsi_cmd_on_abts = return_scsi_cmd_on_abts; + + set_bit(QEDF_CMD_IN_ABORT, &io_req->flags); +@@ -2230,7 +2234,9 @@ int qedf_initiate_cleanup(struct qedf_ioreq *io_req, + refcount, fcport, fcport->rdata->ids.port_id); + + /* Cleanup cmds re-use the same TID as the original I/O */ ++ spin_lock_irqsave(&fcport->rport_lock, flags); + io_req->cmd_type = QEDF_CLEANUP; ++ spin_unlock_irqrestore(&fcport->rport_lock, flags); + io_req->return_scsi_cmd_on_abts = return_scsi_cmd_on_abts; + + init_completion(&io_req->cleanup_done); +diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c +index 63c9368bafcf1..6923862be3fbc 100644 +--- a/drivers/scsi/qedf/qedf_main.c ++++ b/drivers/scsi/qedf/qedf_main.c +@@ -2803,6 +2803,8 @@ void qedf_process_cqe(struct qedf_ctx *qedf, struct fcoe_cqe *cqe) + struct qedf_ioreq *io_req; + struct qedf_rport *fcport; + u32 comp_type; ++ u8 io_comp_type; ++ unsigned long flags; + + comp_type = (cqe->cqe_data >> FCOE_CQE_CQE_TYPE_SHIFT) & + FCOE_CQE_CQE_TYPE_MASK; +@@ -2836,11 +2838,14 @@ void qedf_process_cqe(struct qedf_ctx *qedf, struct fcoe_cqe *cqe) + return; + } + ++ spin_lock_irqsave(&fcport->rport_lock, flags); ++ io_comp_type = io_req->cmd_type; ++ spin_unlock_irqrestore(&fcport->rport_lock, flags); + + switch (comp_type) { + case FCOE_GOOD_COMPLETION_CQE_TYPE: + atomic_inc(&fcport->free_sqes); +- switch (io_req->cmd_type) { ++ switch (io_comp_type) { + case QEDF_SCSI_CMD: + qedf_scsi_completion(qedf, cqe, io_req); + break; +-- +2.40.1 + diff --git a/queue-5.10/selftests-fix-dependency-checker-script.patch b/queue-5.10/selftests-fix-dependency-checker-script.patch new file mode 100644 index 00000000000..1c43cbabfbb --- /dev/null +++ b/queue-5.10/selftests-fix-dependency-checker-script.patch @@ -0,0 +1,179 @@ +From 1d3a4129c2b2aa984a3e73d1a92af997c5e90c3e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 22 Aug 2023 18:09:40 -0300 +Subject: selftests: fix dependency checker script + +From: Ricardo B. Marliere + +[ Upstream commit 5f9dd2e896a91bfca90f8463eb6808c03d535d8a ] + +This patch fixes inconsistencies in the parsing rules of the levels 1 +and 2 of the kselftest_deps.sh. It was added the levels 4 and 5 to +account for a few edge cases that are present in some tests, also some +minor identation styling have been fixed (s/ /\t/g). + +Signed-off-by: Ricardo B. Marliere +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + tools/testing/selftests/kselftest_deps.sh | 77 +++++++++++++++++++---- + 1 file changed, 65 insertions(+), 12 deletions(-) + +diff --git a/tools/testing/selftests/kselftest_deps.sh b/tools/testing/selftests/kselftest_deps.sh +index bbc04646346b2..e6010de678200 100755 +--- a/tools/testing/selftests/kselftest_deps.sh ++++ b/tools/testing/selftests/kselftest_deps.sh +@@ -46,11 +46,11 @@ fi + print_targets=0 + + while getopts "p" arg; do +- case $arg in +- p) ++ case $arg in ++ p) + print_targets=1 + shift;; +- esac ++ esac + done + + if [ $# -eq 0 ] +@@ -92,6 +92,10 @@ pass_cnt=0 + # Get all TARGETS from selftests Makefile + targets=$(egrep "^TARGETS +|^TARGETS =" Makefile | cut -d "=" -f2) + ++# Initially, in LDLIBS related lines, the dep checker needs ++# to ignore lines containing the following strings: ++filter="\$(VAR_LDLIBS)\|pkg-config\|PKG_CONFIG\|IOURING_EXTRA_LIBS" ++ + # Single test case + if [ $# -eq 2 ] + then +@@ -100,6 +104,8 @@ then + l1_test $test + l2_test $test + l3_test $test ++ l4_test $test ++ l5_test $test + + print_results $1 $2 + exit $? +@@ -113,7 +119,7 @@ fi + # Append space at the end of the list to append more tests. + + l1_tests=$(grep -r --include=Makefile "^LDLIBS" | \ +- grep -v "VAR_LDLIBS" | awk -F: '{print $1}') ++ grep -v "$filter" | awk -F: '{print $1}' | uniq) + + # Level 2: LDLIBS set dynamically. + # +@@ -126,7 +132,7 @@ l1_tests=$(grep -r --include=Makefile "^LDLIBS" | \ + # Append space at the end of the list to append more tests. + + l2_tests=$(grep -r --include=Makefile ": LDLIBS" | \ +- grep -v "VAR_LDLIBS" | awk -F: '{print $1}') ++ grep -v "$filter" | awk -F: '{print $1}' | uniq) + + # Level 3 + # gpio, memfd and others use pkg-config to find mount and fuse libs +@@ -140,11 +146,32 @@ l2_tests=$(grep -r --include=Makefile ": LDLIBS" | \ + # VAR_LDLIBS := $(shell pkg-config fuse --libs 2>/dev/null) + + l3_tests=$(grep -r --include=Makefile "^VAR_LDLIBS" | \ +- grep -v "pkg-config" | awk -F: '{print $1}') ++ grep -v "pkg-config\|PKG_CONFIG" | awk -F: '{print $1}' | uniq) + +-#echo $l1_tests +-#echo $l2_1_tests +-#echo $l3_tests ++# Level 4 ++# some tests may fall back to default using `|| echo -l` ++# if pkg-config doesn't find the libs, instead of using VAR_LDLIBS ++# as per level 3 checks. ++# e.g: ++# netfilter/Makefile ++# LDLIBS += $(shell $(HOSTPKG_CONFIG) --libs libmnl 2>/dev/null || echo -lmnl) ++l4_tests=$(grep -r --include=Makefile "^LDLIBS" | \ ++ grep "pkg-config\|PKG_CONFIG" | awk -F: '{print $1}' | uniq) ++ ++# Level 5 ++# some tests may use IOURING_EXTRA_LIBS to add extra libs to LDLIBS, ++# which in turn may be defined in a sub-Makefile ++# e.g.: ++# mm/Makefile ++# $(OUTPUT)/gup_longterm: LDLIBS += $(IOURING_EXTRA_LIBS) ++l5_tests=$(grep -r --include=Makefile "LDLIBS +=.*\$(IOURING_EXTRA_LIBS)" | \ ++ awk -F: '{print $1}' | uniq) ++ ++#echo l1_tests $l1_tests ++#echo l2_tests $l2_tests ++#echo l3_tests $l3_tests ++#echo l4_tests $l4_tests ++#echo l5_tests $l5_tests + + all_tests + print_results $1 $2 +@@ -166,24 +193,32 @@ all_tests() + for test in $l3_tests; do + l3_test $test + done ++ ++ for test in $l4_tests; do ++ l4_test $test ++ done ++ ++ for test in $l5_tests; do ++ l5_test $test ++ done + } + + # Use same parsing used for l1_tests and pick libraries this time. + l1_test() + { + test_libs=$(grep --include=Makefile "^LDLIBS" $test | \ +- grep -v "VAR_LDLIBS" | \ ++ grep -v "$filter" | \ + sed -e 's/\:/ /' | \ + sed -e 's/+/ /' | cut -d "=" -f 2) + + check_libs $test $test_libs + } + +-# Use same parsing used for l2__tests and pick libraries this time. ++# Use same parsing used for l2_tests and pick libraries this time. + l2_test() + { + test_libs=$(grep --include=Makefile ": LDLIBS" $test | \ +- grep -v "VAR_LDLIBS" | \ ++ grep -v "$filter" | \ + sed -e 's/\:/ /' | sed -e 's/+/ /' | \ + cut -d "=" -f 2) + +@@ -199,6 +234,24 @@ l3_test() + check_libs $test $test_libs + } + ++l4_test() ++{ ++ test_libs=$(grep --include=Makefile "^VAR_LDLIBS\|^LDLIBS" $test | \ ++ grep "\(pkg-config\|PKG_CONFIG\).*|| echo " | \ ++ sed -e 's/.*|| echo //' | sed -e 's/)$//') ++ ++ check_libs $test $test_libs ++} ++ ++l5_test() ++{ ++ tests=$(find $(dirname "$test") -type f -name "*.mk") ++ test_libs=$(grep "^IOURING_EXTRA_LIBS +\?=" $tests | \ ++ cut -d "=" -f 2) ++ ++ check_libs $test $test_libs ++} ++ + check_libs() + { + +-- +2.40.1 + diff --git a/queue-5.10/selftests-ftrace-correctly-enable-event-in-instance-.patch b/queue-5.10/selftests-ftrace-correctly-enable-event-in-instance-.patch new file mode 100644 index 00000000000..a005091be67 --- /dev/null +++ b/queue-5.10/selftests-ftrace-correctly-enable-event-in-instance-.patch @@ -0,0 +1,51 @@ +From 0d1b2bfda0ecbb32607f4bd18e7f45081ee93fe2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 26 Jun 2023 08:11:44 +0800 +Subject: selftests/ftrace: Correctly enable event in instance-event.tc + +From: Zheng Yejian + +[ Upstream commit f4e4ada586995b17f828c6d147d1800eb1471450 ] + +Function instance_set() expects to enable event 'sched_switch', so we +should set 1 to its 'enable' file. + +Testcase passed after this patch: + # ./ftracetest test.d/instances/instance-event.tc + === Ftrace unit tests === + [1] Test creation and deletion of trace instances while setting an event + [PASS] + + # of passed: 1 + # of failed: 0 + # of unresolved: 0 + # of untested: 0 + # of unsupported: 0 + # of xfailed: 0 + # of undefined(test bug): 0 + +Signed-off-by: Zheng Yejian +Acked-by: Masami Hiramatsu (Google) +Acked-by: Steven Rostedt (Google) +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + .../testing/selftests/ftrace/test.d/instances/instance-event.tc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc +index 0eb47fbb3f44d..42422e4251078 100644 +--- a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc ++++ b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc +@@ -39,7 +39,7 @@ instance_read() { + + instance_set() { + while :; do +- echo 1 > foo/events/sched/sched_switch ++ echo 1 > foo/events/sched/sched_switch/enable + done 2> /dev/null + } + +-- +2.40.1 + diff --git a/queue-5.10/series b/queue-5.10/series index 2367e58e497..5c0683eef36 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -108,3 +108,23 @@ xtensa-boot-don-t-add-include-dirs.patch xtensa-boot-lib-fix-function-prototypes.patch gpio-pmic-eic-sprd-add-can_sleep-flag-for-pmic-eic-c.patch i2c-npcm7xx-fix-callback-completion-ordering.patch +dma-debug-don-t-call-__dma_entry_alloc_check_leak-un.patch +parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch +parisc-iosapic.c-fix-sparse-warnings.patch +parisc-drivers-fix-sparse-warning.patch +parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch +scsi-qedf-add-synchronization-between-i-o-completion.patch +selftests-ftrace-correctly-enable-event-in-instance-.patch +ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch +selftests-fix-dependency-checker-script.patch +ring-buffer-do-not-attempt-to-read-past-commit.patch +platform-mellanox-mlxbf-bootctl-add-net-dependency-i.patch +scsi-pm80xx-use-phy-specific-sas-address-when-sendin.patch +scsi-pm80xx-avoid-leaking-tags-when-processing-opc_i.patch +ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch +spi-nxp-fspi-reset-the-flshxcr1-registers.patch +bpf-clarify-error-expectations-from-bpf_clone_redire.patch +media-vb2-frame_vector.c-replace-warn_once-with-a-co.patch +powerpc-watchpoints-disable-preemption-in-thread_cha.patch +ncsi-propagate-carrier-gain-loss-events-to-the-ncsi-.patch +fbdev-sh7760fb-depend-on-fb-y.patch diff --git a/queue-5.10/spi-nxp-fspi-reset-the-flshxcr1-registers.patch b/queue-5.10/spi-nxp-fspi-reset-the-flshxcr1-registers.patch new file mode 100644 index 00000000000..2a4a5801ed7 --- /dev/null +++ b/queue-5.10/spi-nxp-fspi-reset-the-flshxcr1-registers.patch @@ -0,0 +1,41 @@ +From 68bfcae8fd5856edf67f50c20ebd4f7441227430 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 6 Sep 2023 13:32:54 -0500 +Subject: spi: nxp-fspi: reset the FLSHxCR1 registers + +From: Han Xu + +[ Upstream commit 18495676f7886e105133f1dc06c1d5e8d5436f32 ] + +Reset the FLSHxCR1 registers to default value. ROM may set the register +value and it affects the SPI NAND normal functions. + +Signed-off-by: Han Xu +Link: https://lore.kernel.org/r/20230906183254.235847-1-han.xu@nxp.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + drivers/spi/spi-nxp-fspi.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c +index bcc0b5a3a459c..90b5fbc914ae2 100644 +--- a/drivers/spi/spi-nxp-fspi.c ++++ b/drivers/spi/spi-nxp-fspi.c +@@ -950,6 +950,13 @@ static int nxp_fspi_default_setup(struct nxp_fspi *f) + fspi_writel(f, FSPI_AHBCR_PREF_EN | FSPI_AHBCR_RDADDROPT, + base + FSPI_AHBCR); + ++ /* Reset the FLSHxCR1 registers. */ ++ reg = FSPI_FLSHXCR1_TCSH(0x3) | FSPI_FLSHXCR1_TCSS(0x3); ++ fspi_writel(f, reg, base + FSPI_FLSHA1CR1); ++ fspi_writel(f, reg, base + FSPI_FLSHA2CR1); ++ fspi_writel(f, reg, base + FSPI_FLSHB1CR1); ++ fspi_writel(f, reg, base + FSPI_FLSHB2CR1); ++ + /* AHB Read - Set lut sequence ID for all CS. */ + fspi_writel(f, SEQID_LUT, base + FSPI_FLSHA1CR2); + fspi_writel(f, SEQID_LUT, base + FSPI_FLSHA2CR2); +-- +2.40.1 +