From: Greg Kroah-Hartman Date: Tue, 30 Jul 2024 10:31:59 +0000 (+0200) Subject: 6.1-stable patches X-Git-Tag: v6.1.103~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a9a153b14720902fd7fa34a739d8dece767dc826;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: dm-verity-fix-dm_is_verity_target-when-dm-verity-is-builtin.patch drm-etnaviv-don-t-block-scheduler-when-gpu-is-still-active.patch drm-panfrost-mark-simple_ondemand-governor-as-softdep.patch mips-dts-loongson-add-isa-node.patch mips-dts-loongson-fix-gmac-phy-node.patch mips-ip30-ip30-console-add-missing-include.patch mips-loongson64-env-hook-up-loongsson-2k.patch mips-loongson64-remove-memory-node-for-builtin-dtb.patch mips-loongson64-reset-prioritise-firmware-service.patch mips-loongson64-test-register-availability-before-use.patch rbd-don-t-assume-rbd_is_lock_owner-for-exclusive-mappings.patch rdma-iwcm-fix-a-use-after-free-related-to-destroying-cm-ids.patch remoteproc-imx_rproc-fix-refcount-mistake-in-imx_rproc_addr_init.patch remoteproc-imx_rproc-skip-over-memory-region-when-node-value-is-null.patch remoteproc-stm32_rproc-fix-mailbox-interrupts-queuing.patch selftests-sigaltstack-fix-ppc64-gcc-build.patch --- diff --git a/queue-6.1/dm-verity-fix-dm_is_verity_target-when-dm-verity-is-builtin.patch b/queue-6.1/dm-verity-fix-dm_is_verity_target-when-dm-verity-is-builtin.patch new file mode 100644 index 00000000000..948c267c99a --- /dev/null +++ b/queue-6.1/dm-verity-fix-dm_is_verity_target-when-dm-verity-is-builtin.patch @@ -0,0 +1,56 @@ +From 3708c7269593b836b1d684214cd9f5d83e4ed3fd Mon Sep 17 00:00:00 2001 +From: Eric Biggers +Date: Thu, 4 Jul 2024 16:09:57 +0200 +Subject: dm-verity: fix dm_is_verity_target() when dm-verity is builtin + +From: Eric Biggers + +commit 3708c7269593b836b1d684214cd9f5d83e4ed3fd upstream. + +When CONFIG_DM_VERITY=y, dm_is_verity_target() returned true for any +builtin dm target, not just dm-verity. Fix this by checking for +verity_target instead of THIS_MODULE (which is NULL for builtin code). + +Fixes: b6c1c5745ccc ("dm: Add verity helpers for LoadPin") +Cc: stable@vger.kernel.org +Cc: Matthias Kaehlcke +Cc: Kees Cook +Signed-off-by: Eric Biggers +Signed-off-by: Mikulas Patocka +Signed-off-by: Greg Kroah-Hartman +--- + drivers/md/dm-verity-target.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +--- a/drivers/md/dm-verity-target.c ++++ b/drivers/md/dm-verity-target.c +@@ -1497,14 +1497,6 @@ bad: + } + + /* +- * Check whether a DM target is a verity target. +- */ +-bool dm_is_verity_target(struct dm_target *ti) +-{ +- return ti->type->module == THIS_MODULE; +-} +- +-/* + * Get the verity mode (error behavior) of a verity target. + * + * Returns the verity mode of the target, or -EINVAL if 'ti' is not a verity +@@ -1575,6 +1567,14 @@ static void __exit dm_verity_exit(void) + module_init(dm_verity_init); + module_exit(dm_verity_exit); + ++/* ++ * Check whether a DM target is a verity target. ++ */ ++bool dm_is_verity_target(struct dm_target *ti) ++{ ++ return ti->type == &verity_target; ++} ++ + MODULE_AUTHOR("Mikulas Patocka "); + MODULE_AUTHOR("Mandeep Baines "); + MODULE_AUTHOR("Will Drewry "); diff --git a/queue-6.1/drm-etnaviv-don-t-block-scheduler-when-gpu-is-still-active.patch b/queue-6.1/drm-etnaviv-don-t-block-scheduler-when-gpu-is-still-active.patch new file mode 100644 index 00000000000..382f08dfa9a --- /dev/null +++ b/queue-6.1/drm-etnaviv-don-t-block-scheduler-when-gpu-is-still-active.patch @@ -0,0 +1,65 @@ +From 704d3d60fec451f37706368d9d3e320322978986 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 21 Jun 2024 21:59:19 +0200 +Subject: drm/etnaviv: don't block scheduler when GPU is still active + +From: Lucas Stach + +commit 704d3d60fec451f37706368d9d3e320322978986 upstream. + +Since 45ecaea73883 ("drm/sched: Partial revert of 'drm/sched: Keep +s_fence->parent pointer'") still active jobs aren't put back in the +pending list on drm_sched_start(), as they don't have a active +parent fence anymore, so if the GPU is still working and the timeout +is extended, all currently active jobs will be freed. + +To avoid prematurely freeing jobs that are still active on the GPU, +don't block the scheduler until we are fully committed to actually +reset the GPU. + +As the current job is already removed from the pending list and +will not be put back when drm_sched_start() isn't called, we must +make sure to put the job back on the pending list when extending +the timeout. + +Cc: stable@vger.kernel.org #6.0 +Signed-off-by: Lucas Stach +Reviewed-by: Philipp Zabel +Reviewed-by: Christian Gmeiner +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/etnaviv/etnaviv_sched.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +--- a/drivers/gpu/drm/etnaviv/etnaviv_sched.c ++++ b/drivers/gpu/drm/etnaviv/etnaviv_sched.c +@@ -38,9 +38,6 @@ static enum drm_gpu_sched_stat etnaviv_s + u32 dma_addr; + int change; + +- /* block scheduler */ +- drm_sched_stop(&gpu->sched, sched_job); +- + /* + * If the GPU managed to complete this jobs fence, the timout is + * spurious. Bail out. +@@ -62,6 +59,9 @@ static enum drm_gpu_sched_stat etnaviv_s + goto out_no_timeout; + } + ++ /* block scheduler */ ++ drm_sched_stop(&gpu->sched, sched_job); ++ + if(sched_job) + drm_sched_increase_karma(sched_job); + +@@ -75,8 +75,7 @@ static enum drm_gpu_sched_stat etnaviv_s + return DRM_GPU_SCHED_STAT_NOMINAL; + + out_no_timeout: +- /* restart scheduler after GPU is usable again */ +- drm_sched_start(&gpu->sched, true); ++ list_add(&sched_job->list, &sched_job->sched->pending_list); + return DRM_GPU_SCHED_STAT_NOMINAL; + } + diff --git a/queue-6.1/drm-panfrost-mark-simple_ondemand-governor-as-softdep.patch b/queue-6.1/drm-panfrost-mark-simple_ondemand-governor-as-softdep.patch new file mode 100644 index 00000000000..b48f02c7e33 --- /dev/null +++ b/queue-6.1/drm-panfrost-mark-simple_ondemand-governor-as-softdep.patch @@ -0,0 +1,64 @@ +From 80f4e62730a91572b7fdc657f7bb747e107ae308 Mon Sep 17 00:00:00 2001 +From: Dragan Simic +Date: Mon, 17 Jun 2024 22:17:48 +0200 +Subject: drm/panfrost: Mark simple_ondemand governor as softdep + +From: Dragan Simic + +commit 80f4e62730a91572b7fdc657f7bb747e107ae308 upstream. + +Panfrost DRM driver uses devfreq to perform DVFS, while using simple_ondemand +devfreq governor by default. This causes driver initialization to fail on +boot when simple_ondemand governor isn't built into the kernel statically, +as a result of the missing module dependency and, consequently, the required +governor module not being included in the initial ramdisk. Thus, let's mark +simple_ondemand governor as a softdep for Panfrost, to have its kernel module +included in the initial ramdisk. + +This is a rather longstanding issue that has forced distributions to build +devfreq governors statically into their kernels, [1][2] or has forced users +to introduce some unnecessary workarounds. [3] + +For future reference, not having support for the simple_ondemand governor in +the initial ramdisk produces errors in the kernel log similar to these below, +which were taken from a Pine64 RockPro64: + + panfrost ff9a0000.gpu: [drm:panfrost_devfreq_init [panfrost]] *ERROR* Couldn't initialize GPU devfreq + panfrost ff9a0000.gpu: Fatal error during GPU init + panfrost: probe of ff9a0000.gpu failed with error -22 + +Having simple_ondemand marked as a softdep for Panfrost may not resolve this +issue for all Linux distributions. In particular, it will remain unresolved +for the distributions whose utilities for the initial ramdisk generation do +not handle the available softdep information [4] properly yet. However, some +Linux distributions already handle softdeps properly while generating their +initial ramdisks, [5] and this is a prerequisite step in the right direction +for the distributions that don't handle them properly yet. + +[1] https://gitlab.manjaro.org/manjaro-arm/packages/core/linux/-/blob/linux61/config?ref_type=heads#L8180 +[2] https://salsa.debian.org/kernel-team/linux/-/merge_requests/1066 +[3] https://forum.pine64.org/showthread.php?tid=15458 +[4] https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=49d8e0b59052999de577ab732b719cfbeb89504d +[5] https://github.com/archlinux/mkinitcpio/commit/97ac4d37aae084a050be512f6d8f4489054668ad + +Cc: Diederik de Haas +Cc: Furkan Kardame +Cc: stable@vger.kernel.org +Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver") +Signed-off-by: Dragan Simic +Reviewed-by: Steven Price +Reviewed-by: Boris Brezillon +Signed-off-by: Steven Price +Link: https://patchwork.freedesktop.org/patch/msgid/4e1e00422a14db4e2a80870afb704405da16fd1b.1718655077.git.dsimic@manjaro.org +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/panfrost/panfrost_drv.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/panfrost/panfrost_drv.c ++++ b/drivers/gpu/drm/panfrost/panfrost_drv.c +@@ -704,3 +704,4 @@ module_platform_driver(panfrost_driver); + MODULE_AUTHOR("Panfrost Project Developers"); + MODULE_DESCRIPTION("Panfrost DRM Driver"); + MODULE_LICENSE("GPL v2"); ++MODULE_SOFTDEP("pre: governor_simpleondemand"); diff --git a/queue-6.1/mips-dts-loongson-add-isa-node.patch b/queue-6.1/mips-dts-loongson-add-isa-node.patch new file mode 100644 index 00000000000..68b7f10997f --- /dev/null +++ b/queue-6.1/mips-dts-loongson-add-isa-node.patch @@ -0,0 +1,38 @@ +From da3f62466e5afc752f8b72146bbc4700dbba5a9f Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:13 +0100 +Subject: MIPS: dts: loongson: Add ISA node + +From: Jiaxun Yang + +commit da3f62466e5afc752f8b72146bbc4700dbba5a9f upstream. + +ISA node is required by Loongson64 platforms to initialize +PIO support. + +Kernel will hang at boot without ISA node. + +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi ++++ b/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi +@@ -52,6 +52,13 @@ + 0 0x40000000 0 0x40000000 0 0x40000000 + 0xfe 0x00000000 0xfe 0x00000000 0 0x40000000>; + ++ isa@18000000 { ++ compatible = "isa"; ++ #size-cells = <1>; ++ #address-cells = <2>; ++ ranges = <1 0x0 0x0 0x18000000 0x4000>; ++ }; ++ + pm: reset-controller@1fe07000 { + compatible = "loongson,ls2k-pm"; + reg = <0 0x1fe07000 0 0x422>; diff --git a/queue-6.1/mips-dts-loongson-fix-gmac-phy-node.patch b/queue-6.1/mips-dts-loongson-fix-gmac-phy-node.patch new file mode 100644 index 00000000000..f9d483b12b2 --- /dev/null +++ b/queue-6.1/mips-dts-loongson-fix-gmac-phy-node.patch @@ -0,0 +1,44 @@ +From 813c18d1ca1987afaf47e035152e1baa1375b1b2 Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:12 +0100 +Subject: MIPS: dts: loongson: Fix GMAC phy node + +From: Jiaxun Yang + +commit 813c18d1ca1987afaf47e035152e1baa1375b1b2 upstream. + +phy-mode should be rgmii-id to match hardware configuration. + +Also there should be a phy-handle to reference phy node. + +Fixes: f8a11425075f ("MIPS: Loongson64: Add GMAC support for Loongson-2K1000") +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi ++++ b/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi +@@ -137,7 +137,8 @@ + <13 IRQ_TYPE_LEVEL_LOW>; + interrupt-names = "macirq", "eth_lpi"; + interrupt-parent = <&liointc0>; +- phy-mode = "rgmii"; ++ phy-mode = "rgmii-id"; ++ phy-handle = <&phy1>; + mdio { + #address-cells = <1>; + #size-cells = <0>; +@@ -160,7 +161,8 @@ + <15 IRQ_TYPE_LEVEL_LOW>; + interrupt-names = "macirq", "eth_lpi"; + interrupt-parent = <&liointc0>; +- phy-mode = "rgmii"; ++ phy-mode = "rgmii-id"; ++ phy-handle = <&phy1>; + mdio { + #address-cells = <1>; + #size-cells = <0>; diff --git a/queue-6.1/mips-ip30-ip30-console-add-missing-include.patch b/queue-6.1/mips-ip30-ip30-console-add-missing-include.patch new file mode 100644 index 00000000000..1009e903871 --- /dev/null +++ b/queue-6.1/mips-ip30-ip30-console-add-missing-include.patch @@ -0,0 +1,36 @@ +From 8de4ed75bd14ed197119ac509c6902a8561e0c1c Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Sun, 16 Jun 2024 18:54:24 +0100 +Subject: MIPS: ip30: ip30-console: Add missing include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Jiaxun Yang + +commit 8de4ed75bd14ed197119ac509c6902a8561e0c1c upstream. + +Include linux/processor.h to fix build error: + +arch/mips/sgi-ip30/ip30-console.c: In function ‘prom_putchar’: +arch/mips/sgi-ip30/ip30-console.c:21:17: error: implicit declaration of function ‘cpu_relax’ [-Werror=implicit-function-declaration] + 21 | cpu_relax(); + +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/sgi-ip30/ip30-console.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/mips/sgi-ip30/ip30-console.c ++++ b/arch/mips/sgi-ip30/ip30-console.c +@@ -1,6 +1,7 @@ + // SPDX-License-Identifier: GPL-2.0 + + #include ++#include + + #include + diff --git a/queue-6.1/mips-loongson64-env-hook-up-loongsson-2k.patch b/queue-6.1/mips-loongson64-env-hook-up-loongsson-2k.patch new file mode 100644 index 00000000000..84fc8c5a902 --- /dev/null +++ b/queue-6.1/mips-loongson64-env-hook-up-loongsson-2k.patch @@ -0,0 +1,65 @@ +From 77543269ff23c75bebfb8e6e9a1177b350908ea7 Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:18 +0100 +Subject: MIPS: Loongson64: env: Hook up Loongsson-2K + +From: Jiaxun Yang + +commit 77543269ff23c75bebfb8e6e9a1177b350908ea7 upstream. + +Somehow those enablement bits were left over when we were +adding initial Loongson-2K support. + +Set up basic information and select proper builtin DTB for +Loongson-2K. + +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/include/asm/mach-loongson64/boot_param.h | 2 ++ + arch/mips/loongson64/env.c | 8 ++++++++ + 2 files changed, 10 insertions(+) + +--- a/arch/mips/include/asm/mach-loongson64/boot_param.h ++++ b/arch/mips/include/asm/mach-loongson64/boot_param.h +@@ -42,12 +42,14 @@ enum loongson_cpu_type { + Legacy_1B = 0x5, + Legacy_2G = 0x6, + Legacy_2H = 0x7, ++ Legacy_2K = 0x8, + Loongson_1A = 0x100, + Loongson_1B = 0x101, + Loongson_2E = 0x200, + Loongson_2F = 0x201, + Loongson_2G = 0x202, + Loongson_2H = 0x203, ++ Loongson_2K = 0x204, + Loongson_3A = 0x300, + Loongson_3B = 0x301 + }; +--- a/arch/mips/loongson64/env.c ++++ b/arch/mips/loongson64/env.c +@@ -88,6 +88,12 @@ void __init prom_lefi_init_env(void) + cpu_clock_freq = ecpu->cpu_clock_freq; + loongson_sysconf.cputype = ecpu->cputype; + switch (ecpu->cputype) { ++ case Legacy_2K: ++ case Loongson_2K: ++ smp_group[0] = 0x900000001fe11000; ++ loongson_sysconf.cores_per_node = 2; ++ loongson_sysconf.cores_per_package = 2; ++ break; + case Legacy_3A: + case Loongson_3A: + loongson_sysconf.cores_per_node = 4; +@@ -221,6 +227,8 @@ void __init prom_lefi_init_env(void) + default: + break; + } ++ } else if ((read_c0_prid() & PRID_IMP_MASK) == PRID_IMP_LOONGSON_64R) { ++ loongson_fdt_blob = __dtb_loongson64_2core_2k1000_begin; + } else if ((read_c0_prid() & PRID_IMP_MASK) == PRID_IMP_LOONGSON_64G) { + if (loongson_sysconf.bridgetype == LS7A) + loongson_fdt_blob = __dtb_loongson64g_4core_ls7a_begin; diff --git a/queue-6.1/mips-loongson64-remove-memory-node-for-builtin-dtb.patch b/queue-6.1/mips-loongson64-remove-memory-node-for-builtin-dtb.patch new file mode 100644 index 00000000000..cad383386d9 --- /dev/null +++ b/queue-6.1/mips-loongson64-remove-memory-node-for-builtin-dtb.patch @@ -0,0 +1,40 @@ +From b81656c37acf1e682dde02f3e07987784b0f3634 Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:09 +0100 +Subject: MIPS: Loongson64: Remove memory node for builtin-dtb + +From: Jiaxun Yang + +commit b81656c37acf1e682dde02f3e07987784b0f3634 upstream. + +Builtin DTBS should never contain memory node as memory is +going to be managed by LEFI interface. + +Remove memory node to prevent confliction. + +Fixes: b1a792601f26 ("MIPS: Loongson64: DeviceTree for Loongson-2K1000") +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi | 8 -------- + 1 file changed, 8 deletions(-) + +--- a/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi ++++ b/arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi +@@ -23,14 +23,6 @@ + }; + }; + +- memory@200000 { +- compatible = "memory"; +- device_type = "memory"; +- reg = <0x00000000 0x00200000 0x00000000 0x0ee00000>, /* 238 MB at 2 MB */ +- <0x00000000 0x20000000 0x00000000 0x1f000000>, /* 496 MB at 512 MB */ +- <0x00000001 0x10000000 0x00000001 0xb0000000>; /* 6912 MB at 4352MB */ +- }; +- + cpu_clk: cpu_clk { + #clock-cells = <0>; + compatible = "fixed-clock"; diff --git a/queue-6.1/mips-loongson64-reset-prioritise-firmware-service.patch b/queue-6.1/mips-loongson64-reset-prioritise-firmware-service.patch new file mode 100644 index 00000000000..5f550fb4f81 --- /dev/null +++ b/queue-6.1/mips-loongson64-reset-prioritise-firmware-service.patch @@ -0,0 +1,102 @@ +From 4e7ca0b57f3bc09ba3e4ab86bf6b7c35134bfd04 Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:16 +0100 +Subject: MIPS: Loongson64: reset: Prioritise firmware service + +From: Jiaxun Yang + +commit 4e7ca0b57f3bc09ba3e4ab86bf6b7c35134bfd04 upstream. + +We should always use firmware's poweroff & reboot service +if it's available as firmware may need to perform more task +than platform's syscon etc. + +However _machine_restart & poweroff hooks are registered at +low priority, which means platform reboot driver can override +them. + +Register firmware based reboot/poweroff implementation with +register_sys_off_handler with appropriate priority so that +they will be prioritised. Remove _machine_halt hook as it's +deemed to be unnecessary. + +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/loongson64/reset.c | 38 ++++++++++++++++---------------------- + 1 file changed, 16 insertions(+), 22 deletions(-) + +--- a/arch/mips/loongson64/reset.c ++++ b/arch/mips/loongson64/reset.c +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -21,36 +22,21 @@ + #include + #include + +-static void loongson_restart(char *command) ++static int firmware_restart(struct sys_off_data *unusedd) + { + + void (*fw_restart)(void) = (void *)loongson_sysconf.restart_addr; + + fw_restart(); +- while (1) { +- if (cpu_wait) +- cpu_wait(); +- } ++ return NOTIFY_DONE; + } + +-static void loongson_poweroff(void) ++static int firmware_poweroff(struct sys_off_data *unused) + { + void (*fw_poweroff)(void) = (void *)loongson_sysconf.poweroff_addr; + + fw_poweroff(); +- while (1) { +- if (cpu_wait) +- cpu_wait(); +- } +-} +- +-static void loongson_halt(void) +-{ +- pr_notice("\n\n** You can safely turn off the power now **\n\n"); +- while (1) { +- if (cpu_wait) +- cpu_wait(); +- } ++ return NOTIFY_DONE; + } + + #ifdef CONFIG_KEXEC +@@ -154,9 +140,17 @@ static void loongson_crash_shutdown(stru + + static int __init mips_reboot_setup(void) + { +- _machine_restart = loongson_restart; +- _machine_halt = loongson_halt; +- pm_power_off = loongson_poweroff; ++ if (loongson_sysconf.restart_addr) { ++ register_sys_off_handler(SYS_OFF_MODE_RESTART, ++ SYS_OFF_PRIO_FIRMWARE, ++ firmware_restart, NULL); ++ } ++ ++ if (loongson_sysconf.poweroff_addr) { ++ register_sys_off_handler(SYS_OFF_MODE_POWER_OFF, ++ SYS_OFF_PRIO_FIRMWARE, ++ firmware_poweroff, NULL); ++ } + + #ifdef CONFIG_KEXEC + kexec_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL); diff --git a/queue-6.1/mips-loongson64-test-register-availability-before-use.patch b/queue-6.1/mips-loongson64-test-register-availability-before-use.patch new file mode 100644 index 00000000000..9fc03e0faf0 --- /dev/null +++ b/queue-6.1/mips-loongson64-test-register-availability-before-use.patch @@ -0,0 +1,85 @@ +From c04366b1207a036b7de02dfcc1ac7138d3343c9b Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Fri, 14 Jun 2024 16:40:14 +0100 +Subject: MIPS: Loongson64: Test register availability before use + +From: Jiaxun Yang + +commit c04366b1207a036b7de02dfcc1ac7138d3343c9b upstream. + +Some global register address variable may be missing on +specific CPU type, test them before use them. + +Cc: stable@vger.kernel.org +Signed-off-by: Jiaxun Yang +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/loongson64/smp.c | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +--- a/arch/mips/loongson64/smp.c ++++ b/arch/mips/loongson64/smp.c +@@ -479,12 +479,25 @@ static void loongson3_smp_finish(void) + static void __init loongson3_smp_setup(void) + { + int i = 0, num = 0; /* i: physical id, num: logical id */ ++ int max_cpus = 0; + + init_cpu_possible(cpu_none_mask); + ++ for (i = 0; i < ARRAY_SIZE(smp_group); i++) { ++ if (!smp_group[i]) ++ break; ++ max_cpus += loongson_sysconf.cores_per_node; ++ } ++ ++ if (max_cpus < loongson_sysconf.nr_cpus) { ++ pr_err("SMP Groups are less than the number of CPUs\n"); ++ loongson_sysconf.nr_cpus = max_cpus ? max_cpus : 1; ++ } ++ + /* For unified kernel, NR_CPUS is the maximum possible value, + * loongson_sysconf.nr_cpus is the really present value + */ ++ i = 0; + while (i < loongson_sysconf.nr_cpus) { + if (loongson_sysconf.reserved_cpus_mask & (1< +Date: Tue, 23 Jul 2024 18:08:08 +0200 +Subject: rbd: don't assume rbd_is_lock_owner() for exclusive mappings + +From: Ilya Dryomov + +commit 3ceccb14f5576e02b81cc8b105ab81f224bd87f6 upstream. + +Expanding on the previous commit, assuming that rbd_is_lock_owner() +always returns true (i.e. that we are either in RBD_LOCK_STATE_LOCKED +or RBD_LOCK_STATE_QUIESCING) if the mapping is exclusive is wrong too. +In case ceph_cls_set_cookie() fails, the lock would be temporarily +released even if the mapping is exclusive, meaning that we can end up +even in RBD_LOCK_STATE_UNLOCKED. + +IOW, exclusive mappings are really "just" about disabling automatic +lock transitions (as documented in the man page), not about grabbing +the lock and holding on to it whatever it takes. + +Cc: stable@vger.kernel.org +Fixes: 637cd060537d ("rbd: new exclusive lock wait/wake code") +Signed-off-by: Ilya Dryomov +Reviewed-by: Dongsheng Yang +Signed-off-by: Greg Kroah-Hartman +--- + drivers/block/rbd.c | 5 ----- + 1 file changed, 5 deletions(-) + +--- a/drivers/block/rbd.c ++++ b/drivers/block/rbd.c +@@ -6589,11 +6589,6 @@ static int rbd_add_acquire_lock(struct r + if (ret) + return ret; + +- /* +- * The lock may have been released by now, unless automatic lock +- * transitions are disabled. +- */ +- rbd_assert(!rbd_dev->opts->exclusive || rbd_is_lock_owner(rbd_dev)); + return 0; + } + diff --git a/queue-6.1/rdma-iwcm-fix-a-use-after-free-related-to-destroying-cm-ids.patch b/queue-6.1/rdma-iwcm-fix-a-use-after-free-related-to-destroying-cm-ids.patch new file mode 100644 index 00000000000..86909013145 --- /dev/null +++ b/queue-6.1/rdma-iwcm-fix-a-use-after-free-related-to-destroying-cm-ids.patch @@ -0,0 +1,74 @@ +From aee2424246f9f1dadc33faa78990c1e2eb7826e4 Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Wed, 5 Jun 2024 08:51:01 -0600 +Subject: RDMA/iwcm: Fix a use-after-free related to destroying CM IDs + +From: Bart Van Assche + +commit aee2424246f9f1dadc33faa78990c1e2eb7826e4 upstream. + +iw_conn_req_handler() associates a new struct rdma_id_private (conn_id) with +an existing struct iw_cm_id (cm_id) as follows: + + conn_id->cm_id.iw = cm_id; + cm_id->context = conn_id; + cm_id->cm_handler = cma_iw_handler; + +rdma_destroy_id() frees both the cm_id and the struct rdma_id_private. Make +sure that cm_work_handler() does not trigger a use-after-free by only +freeing of the struct rdma_id_private after all pending work has finished. + +Cc: stable@vger.kernel.org +Fixes: 59c68ac31e15 ("iw_cm: free cm_id resources on the last deref") +Reviewed-by: Zhu Yanjun +Tested-by: Shin'ichiro Kawasaki +Signed-off-by: Bart Van Assche +Link: https://lore.kernel.org/r/20240605145117.397751-6-bvanassche@acm.org +Signed-off-by: Leon Romanovsky +Signed-off-by: Greg Kroah-Hartman +--- + drivers/infiniband/core/iwcm.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +--- a/drivers/infiniband/core/iwcm.c ++++ b/drivers/infiniband/core/iwcm.c +@@ -369,8 +369,10 @@ EXPORT_SYMBOL(iw_cm_disconnect); + * + * Clean up all resources associated with the connection and release + * the initial reference taken by iw_create_cm_id. ++ * ++ * Returns true if and only if the last cm_id_priv reference has been dropped. + */ +-static void destroy_cm_id(struct iw_cm_id *cm_id) ++static bool destroy_cm_id(struct iw_cm_id *cm_id) + { + struct iwcm_id_private *cm_id_priv; + struct ib_qp *qp; +@@ -440,7 +442,7 @@ static void destroy_cm_id(struct iw_cm_i + iwpm_remove_mapping(&cm_id->local_addr, RDMA_NL_IWCM); + } + +- (void)iwcm_deref_id(cm_id_priv); ++ return iwcm_deref_id(cm_id_priv); + } + + /* +@@ -451,7 +453,8 @@ static void destroy_cm_id(struct iw_cm_i + */ + void iw_destroy_cm_id(struct iw_cm_id *cm_id) + { +- destroy_cm_id(cm_id); ++ if (!destroy_cm_id(cm_id)) ++ flush_workqueue(iwcm_wq); + } + EXPORT_SYMBOL(iw_destroy_cm_id); + +@@ -1035,7 +1038,7 @@ static void cm_work_handler(struct work_ + if (!test_bit(IWCM_F_DROP_EVENTS, &cm_id_priv->flags)) { + ret = process_event(cm_id_priv, &levent); + if (ret) +- destroy_cm_id(&cm_id_priv->id); ++ WARN_ON_ONCE(destroy_cm_id(&cm_id_priv->id)); + } else + pr_debug("dropping event %d\n", levent.event); + if (iwcm_deref_id(cm_id_priv)) diff --git a/queue-6.1/remoteproc-imx_rproc-fix-refcount-mistake-in-imx_rproc_addr_init.patch b/queue-6.1/remoteproc-imx_rproc-fix-refcount-mistake-in-imx_rproc_addr_init.patch new file mode 100644 index 00000000000..e37c415b01e --- /dev/null +++ b/queue-6.1/remoteproc-imx_rproc-fix-refcount-mistake-in-imx_rproc_addr_init.patch @@ -0,0 +1,59 @@ +From dce68a49be26abf52712e0ee452a45fa01ab4624 Mon Sep 17 00:00:00 2001 +From: Aleksandr Mishin +Date: Wed, 12 Jun 2024 16:17:14 +0300 +Subject: remoteproc: imx_rproc: Fix refcount mistake in imx_rproc_addr_init + +From: Aleksandr Mishin + +commit dce68a49be26abf52712e0ee452a45fa01ab4624 upstream. + +In imx_rproc_addr_init() strcmp() is performed over the node after the +of_node_put() is performed over it. +Fix this error by moving of_node_put() calls. + +Found by Linux Verification Center (linuxtesting.org) with SVACE. + +Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel") +Cc: stable@vger.kernel.org +Signed-off-by: Aleksandr Mishin +Link: https://lore.kernel.org/r/20240612131714.12907-1-amishin@t-argos.ru +Signed-off-by: Mathieu Poirier +Signed-off-by: Greg Kroah-Hartman +--- + drivers/remoteproc/imx_rproc.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +--- a/drivers/remoteproc/imx_rproc.c ++++ b/drivers/remoteproc/imx_rproc.c +@@ -604,25 +604,29 @@ static int imx_rproc_addr_init(struct im + continue; + } + err = of_address_to_resource(node, 0, &res); +- of_node_put(node); + if (err) { + dev_err(dev, "unable to resolve memory region\n"); ++ of_node_put(node); + return err; + } + +- if (b >= IMX_RPROC_MEM_MAX) ++ if (b >= IMX_RPROC_MEM_MAX) { ++ of_node_put(node); + break; ++ } + + /* Not use resource version, because we might share region */ + priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev, res.start, resource_size(&res)); + if (!priv->mem[b].cpu_addr) { + dev_err(dev, "failed to remap %pr\n", &res); ++ of_node_put(node); + return -ENOMEM; + } + priv->mem[b].sys_addr = res.start; + priv->mem[b].size = resource_size(&res); + if (!strcmp(node->name, "rsc-table")) + priv->rsc_table = priv->mem[b].cpu_addr; ++ of_node_put(node); + b++; + } + diff --git a/queue-6.1/remoteproc-imx_rproc-skip-over-memory-region-when-node-value-is-null.patch b/queue-6.1/remoteproc-imx_rproc-skip-over-memory-region-when-node-value-is-null.patch new file mode 100644 index 00000000000..ecfc43d8ab5 --- /dev/null +++ b/queue-6.1/remoteproc-imx_rproc-skip-over-memory-region-when-node-value-is-null.patch @@ -0,0 +1,39 @@ +From 2fa26ca8b786888673689ccc9da6094150939982 Mon Sep 17 00:00:00 2001 +From: Aleksandr Mishin +Date: Thu, 6 Jun 2024 10:52:04 +0300 +Subject: remoteproc: imx_rproc: Skip over memory region when node value is NULL + +From: Aleksandr Mishin + +commit 2fa26ca8b786888673689ccc9da6094150939982 upstream. + +In imx_rproc_addr_init() "nph = of_count_phandle_with_args()" just counts +number of phandles. But phandles may be empty. So of_parse_phandle() in +the parsing loop (0 < a < nph) may return NULL which is later dereferenced. +Adjust this issue by adding NULL-return check. + +Found by Linux Verification Center (linuxtesting.org) with SVACE. + +Fixes: a0ff4aa6f010 ("remoteproc: imx_rproc: add a NXP/Freescale imx_rproc driver") +Signed-off-by: Aleksandr Mishin +Reviewed-by: Peng Fan +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20240606075204.12354-1-amishin@t-argos.ru +[Fixed title to fit within the prescribed 70-75 charcters] +Signed-off-by: Mathieu Poirier +Signed-off-by: Greg Kroah-Hartman +--- + drivers/remoteproc/imx_rproc.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/remoteproc/imx_rproc.c ++++ b/drivers/remoteproc/imx_rproc.c +@@ -596,6 +596,8 @@ static int imx_rproc_addr_init(struct im + struct resource res; + + node = of_parse_phandle(np, "memory-region", a); ++ if (!node) ++ continue; + /* Not map vdevbuffer, vdevring region */ + if (!strncmp(node->name, "vdev", strlen("vdev"))) { + of_node_put(node); diff --git a/queue-6.1/remoteproc-stm32_rproc-fix-mailbox-interrupts-queuing.patch b/queue-6.1/remoteproc-stm32_rproc-fix-mailbox-interrupts-queuing.patch new file mode 100644 index 00000000000..a6947ceee03 --- /dev/null +++ b/queue-6.1/remoteproc-stm32_rproc-fix-mailbox-interrupts-queuing.patch @@ -0,0 +1,34 @@ +From c3281abea67c9c0dc6219bbc41d1feae05a16da3 Mon Sep 17 00:00:00 2001 +From: Gwenael Treuveur +Date: Tue, 21 May 2024 18:23:16 +0200 +Subject: remoteproc: stm32_rproc: Fix mailbox interrupts queuing + +From: Gwenael Treuveur + +commit c3281abea67c9c0dc6219bbc41d1feae05a16da3 upstream. + +Manage interrupt coming from coprocessor also when state is +ATTACHED. + +Fixes: 35bdafda40cc ("remoteproc: stm32_rproc: Add mutex protection for workqueue") +Cc: stable@vger.kernel.org +Signed-off-by: Gwenael Treuveur +Acked-by: Arnaud Pouliquen +Link: https://lore.kernel.org/r/20240521162316.156259-1-gwenael.treuveur@foss.st.com +Signed-off-by: Mathieu Poirier +Signed-off-by: Greg Kroah-Hartman +--- + drivers/remoteproc/stm32_rproc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/remoteproc/stm32_rproc.c ++++ b/drivers/remoteproc/stm32_rproc.c +@@ -293,7 +293,7 @@ static void stm32_rproc_mb_vq_work(struc + + mutex_lock(&rproc->lock); + +- if (rproc->state != RPROC_RUNNING) ++ if (rproc->state != RPROC_RUNNING && rproc->state != RPROC_ATTACHED) + goto unlock_mutex; + + if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE) diff --git a/queue-6.1/selftests-sigaltstack-fix-ppc64-gcc-build.patch b/queue-6.1/selftests-sigaltstack-fix-ppc64-gcc-build.patch new file mode 100644 index 00000000000..a1caf44e0ae --- /dev/null +++ b/queue-6.1/selftests-sigaltstack-fix-ppc64-gcc-build.patch @@ -0,0 +1,48 @@ +From 17c743b9da9e0d073ff19fd5313f521744514939 Mon Sep 17 00:00:00 2001 +From: Michael Ellerman +Date: Mon, 20 May 2024 16:26:47 +1000 +Subject: selftests/sigaltstack: Fix ppc64 GCC build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Michael Ellerman + +commit 17c743b9da9e0d073ff19fd5313f521744514939 upstream. + +Building the sigaltstack test with GCC on 64-bit powerpc errors with: + + gcc -Wall sas.c -o /home/michael/linux/.build/kselftest/sigaltstack/sas + In file included from sas.c:23: + current_stack_pointer.h:22:2: error: #error "implement current_stack_pointer equivalent" + 22 | #error "implement current_stack_pointer equivalent" + | ^~~~~ + sas.c: In function ‘my_usr1’: + sas.c:50:13: error: ‘sp’ undeclared (first use in this function); did you mean ‘p’? + 50 | if (sp < (unsigned long)sstack || + | ^~ + +This happens because GCC doesn't define __ppc__ for 64-bit builds, only +32-bit builds. Instead use __powerpc__ to detect powerpc builds, which +is defined by clang and GCC for 64-bit and 32-bit builds. + +Fixes: 05107edc9101 ("selftests: sigaltstack: fix -Wuninitialized") +Cc: stable@vger.kernel.org # v6.3+ +Signed-off-by: Michael Ellerman +Link: https://msgid.link/20240520062647.688667-1-mpe@ellerman.id.au +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/sigaltstack/current_stack_pointer.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/tools/testing/selftests/sigaltstack/current_stack_pointer.h ++++ b/tools/testing/selftests/sigaltstack/current_stack_pointer.h +@@ -8,7 +8,7 @@ register unsigned long sp asm("sp"); + register unsigned long sp asm("esp"); + #elif __loongarch64 + register unsigned long sp asm("$sp"); +-#elif __ppc__ ++#elif __powerpc__ + register unsigned long sp asm("r1"); + #elif __s390x__ + register unsigned long sp asm("%15"); diff --git a/queue-6.1/series b/queue-6.1/series index df5c7c8c282..f3104068d20 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -363,3 +363,19 @@ drm-i915-dp-reset-intel_dp-link_trained-before-retraining-the-link.patch rtc-isl1208-fix-return-value-of-nvmem-callbacks.patch watchdog-perf-properly-initialize-the-turbo-mode-timestamp-and-rearm-counter.patch platform-mips-cpu_hwmon-disable-driver-on-unsupported-hardware.patch +rdma-iwcm-fix-a-use-after-free-related-to-destroying-cm-ids.patch +selftests-sigaltstack-fix-ppc64-gcc-build.patch +dm-verity-fix-dm_is_verity_target-when-dm-verity-is-builtin.patch +rbd-don-t-assume-rbd_is_lock_owner-for-exclusive-mappings.patch +remoteproc-stm32_rproc-fix-mailbox-interrupts-queuing.patch +remoteproc-imx_rproc-skip-over-memory-region-when-node-value-is-null.patch +remoteproc-imx_rproc-fix-refcount-mistake-in-imx_rproc_addr_init.patch +mips-dts-loongson-add-isa-node.patch +mips-ip30-ip30-console-add-missing-include.patch +mips-dts-loongson-fix-gmac-phy-node.patch +mips-loongson64-env-hook-up-loongsson-2k.patch +mips-loongson64-remove-memory-node-for-builtin-dtb.patch +mips-loongson64-reset-prioritise-firmware-service.patch +mips-loongson64-test-register-availability-before-use.patch +drm-etnaviv-don-t-block-scheduler-when-gpu-is-still-active.patch +drm-panfrost-mark-simple_ondemand-governor-as-softdep.patch