diff options
| author | John Audia | 2026-07-05 20:17:55 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2026-07-07 00:01:46 +0000 |
| commit | 5b6bc962bd1a7cf61176400b82304e0fcfe71f61 (patch) | |
| tree | 33b6f3eb0c250d486165e9fd00fc7e7221013e8c | |
| parent | 649b42331c8332db5f91074b0c6143c7919a6973 (diff) | |
| download | openwrt-main.tar.gz | |
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.18.38
Removed upstreamed:
linux/generic/backport-6.18/300-v7.2-MIPS-smp-report-dying-CPU-to-RCU-in-stop_this_cpu.patch[1]
All other patches automatically rebased via update_kernel.sh
1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.18.38&id=f9b57a0015c241274651f4b36627f56b1b5a8651
Build system: x86/64
Build-tested: x86/64-glibc
Run-tested: x86/64-glibc
Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/24083
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
7 files changed, 12 insertions, 78 deletions
diff --git a/target/linux/generic/backport-6.18/300-v7.2-MIPS-smp-report-dying-CPU-to-RCU-in-stop_this_cpu.patch b/target/linux/generic/backport-6.18/300-v7.2-MIPS-smp-report-dying-CPU-to-RCU-in-stop_this_cpu.patch deleted file mode 100644 index 8f419e2fe4..0000000000 --- a/target/linux/generic/backport-6.18/300-v7.2-MIPS-smp-report-dying-CPU-to-RCU-in-stop_this_cpu.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 9f3f3bdc6d9dac1a5a8262ee7ad0f2ff1527a7e7 Mon Sep 17 00:00:00 2001 -From: Jonas Jelonek <jelonek.jonas@gmail.com> -Date: Mon, 8 Jun 2026 09:37:29 +0000 -Subject: MIPS: smp: report dying CPU to RCU in stop_this_cpu() - -smp_send_stop() parks all secondary CPUs in stop_this_cpu(). The function -marks the CPU offline for the scheduler via set_cpu_online(false) but -never informs RCU, so RCU keeps expecting a quiescent state from CPUs -that are now spinning forever with interrupts disabled. - -As long as nothing waits for an RCU grace period after smp_send_stop() -this is harmless, which is why it went unnoticed. Since commit -91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT") -however, irq_work_sync() calls synchronize_rcu() on architectures without -an irq_work self-IPI, i.e. where arch_irq_work_has_interrupt() returns -false. That is the asm-generic default used by MIPS. Any irq_work_sync() -issued in the reboot/shutdown path after smp_send_stop() then blocks on -a grace period that can never complete, hanging the reboot: - - WARNING: CPU: 0 PID: 15 at kernel/irq_work.c:144 irq_work_queue_on - ... - rcu: INFO: rcu_sched detected stalls on CPUs/tasks: - rcu: Offline CPU 1 blocking current GP. - rcu: Offline CPU 2 blocking current GP. - rcu: Offline CPU 3 blocking current GP. - -This issue was noticed on several Realtek MIPS switch SoCs (MIPS -interAptiv) and came up during kernel bump downstream in OpenWrt from -6.18.33 to 6.18.34, after the backport of the patch to the 6.18 stable -branch. The patch also has been backported all the way back to 6.1. - -Call rcutree_report_cpu_dead() once interrupts are disabled, mirroring the -generic CPU-hotplug offline path, so RCU stops waiting on the parked CPUs -and grace periods can still complete. MIPS shuts down all CPUs here -without going through the CPU-hotplug mechanism, so this report is not -otherwise issued. Reporting a dying CPU to RCU outside the regular hotplug -offline path is not unprecedented: arm64 does the same in cpu_die_early(). -There it is an exception for a CPU that was coming online and is aborting -bringup, rather than the default shutdown action as on MIPS. - -Fixes: 91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT") -CC: stable@vger.kernel.org -Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com> -Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> ---- - arch/mips/kernel/smp.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/arch/mips/kernel/smp.c -+++ b/arch/mips/kernel/smp.c -@@ -20,6 +20,7 @@ - #include <linux/sched/mm.h> - #include <linux/cpumask.h> - #include <linux/cpu.h> -+#include <linux/rcupdate.h> - #include <linux/err.h> - #include <linux/ftrace.h> - #include <linux/irqdomain.h> -@@ -422,6 +423,7 @@ static void stop_this_cpu(void *dummy) - set_cpu_online(smp_processor_id(), false); - calculate_cpu_foreign_map(); - local_irq_disable(); -+ rcutree_report_cpu_dead(); - while (1); - } - diff --git a/target/linux/generic/kernel-6.18 b/target/linux/generic/kernel-6.18 index efbfe51433..4c51e5d02c 100644 --- a/target/linux/generic/kernel-6.18 +++ b/target/linux/generic/kernel-6.18 @@ -1,2 +1,2 @@ -LINUX_VERSION-6.18 = .37 -LINUX_KERNEL_HASH-6.18.37 = a83cd200e6646db52866b8309e9137b9e9048b613cbda10ced2b811aae125255 +LINUX_VERSION-6.18 = .38 +LINUX_KERNEL_HASH-6.18.38 = ac26e508abd56e9f8b89872b6e10c49fc823bcc70d8068a5d8504c1a7c4ff045 diff --git a/target/linux/generic/pending-6.18/454-block-add-support-for-notifications.patch b/target/linux/generic/pending-6.18/454-block-add-support-for-notifications.patch index b6ee4b53bd..b537bff359 100644 --- a/target/linux/generic/pending-6.18/454-block-add-support-for-notifications.patch +++ b/target/linux/generic/pending-6.18/454-block-add-support-for-notifications.patch @@ -149,7 +149,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> +device_initcall(blk_notifications_init); --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -1875,4 +1875,12 @@ static inline int bio_split_rw_at(struct +@@ -1871,4 +1871,12 @@ static inline int bio_split_rw_at(struct #define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { } diff --git a/target/linux/generic/pending-6.18/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch b/target/linux/generic/pending-6.18/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch index 034675f951..48cf504d5a 100644 --- a/target/linux/generic/pending-6.18/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch +++ b/target/linux/generic/pending-6.18/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch @@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct rtnl_link { rtnl_doit_func doit; -@@ -5332,7 +5332,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu +@@ -5340,7 +5340,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu brport_nla_put_flag(skb, flags, mask, IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) || brport_nla_put_flag(skb, flags, mask, diff --git a/target/linux/ipq40xx/patches-6.18/900-PCI-qcom-add-hack-compatible-for-ipq4019-Lantiq-DSL.patch b/target/linux/ipq40xx/patches-6.18/900-PCI-qcom-add-hack-compatible-for-ipq4019-Lantiq-DSL.patch index bfd9e4459e..42a010b883 100644 --- a/target/linux/ipq40xx/patches-6.18/900-PCI-qcom-add-hack-compatible-for-ipq4019-Lantiq-DSL.patch +++ b/target/linux/ipq40xx/patches-6.18/900-PCI-qcom-add-hack-compatible-for-ipq4019-Lantiq-DSL.patch @@ -43,7 +43,7 @@ Signed-off-by: Florian Maurer <f.maurer@outlook.com> }; #define QCOM_PCIE_2_7_0_MAX_SUPPLIES 2 -@@ -732,12 +745,65 @@ static int qcom_pcie_post_init_2_3_2(str +@@ -727,12 +740,65 @@ static int qcom_pcie_post_init_2_3_2(str return 0; } @@ -110,7 +110,7 @@ Signed-off-by: Florian Maurer <f.maurer@outlook.com> int ret; res->num_clks = devm_clk_bulk_get_all(dev, &res->clks); -@@ -776,6 +842,17 @@ static void qcom_pcie_deinit_2_4_0(struc +@@ -771,6 +837,17 @@ static void qcom_pcie_deinit_2_4_0(struc clk_bulk_disable_unprepare(res->num_clks, res->clks); } @@ -128,7 +128,7 @@ Signed-off-by: Florian Maurer <f.maurer@outlook.com> static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie) { struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0; -@@ -1384,6 +1461,16 @@ static const struct qcom_pcie_ops ops_2_ +@@ -1379,6 +1456,16 @@ static const struct qcom_pcie_ops ops_2_ .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable, }; @@ -145,7 +145,7 @@ Signed-off-by: Florian Maurer <f.maurer@outlook.com> /* Qcom IP rev.: 2.3.3 Synopsys IP rev.: 4.30a */ static const struct qcom_pcie_ops ops_2_3_3 = { .get_resources = qcom_pcie_get_resources_2_3_3, -@@ -1462,6 +1549,10 @@ static const struct qcom_pcie_cfg cfg_2_ +@@ -1457,6 +1544,10 @@ static const struct qcom_pcie_cfg cfg_2_ .ops = &ops_2_4_0, }; @@ -156,7 +156,7 @@ Signed-off-by: Florian Maurer <f.maurer@outlook.com> static const struct qcom_pcie_cfg cfg_2_7_0 = { .ops = &ops_2_7_0, }; -@@ -2021,6 +2112,7 @@ static const struct of_device_id qcom_pc +@@ -2016,6 +2107,7 @@ static const struct of_device_id qcom_pc { .compatible = "qcom,pcie-apq8064", .data = &cfg_2_1_0 }, { .compatible = "qcom,pcie-apq8084", .data = &cfg_1_0_0 }, { .compatible = "qcom,pcie-ipq4019", .data = &cfg_2_4_0 }, diff --git a/target/linux/starfive/patches-6.18/0010-uart-8250-add-reset-operation-in-runtime-PM.patch b/target/linux/starfive/patches-6.18/0010-uart-8250-add-reset-operation-in-runtime-PM.patch index 26b3bfbfa1..7798360b1d 100644 --- a/target/linux/starfive/patches-6.18/0010-uart-8250-add-reset-operation-in-runtime-PM.patch +++ b/target/linux/starfive/patches-6.18/0010-uart-8250-add-reset-operation-in-runtime-PM.patch @@ -12,7 +12,7 @@ Signed-off-by: William Qiu <william.qiu@starfivetech.com> --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c -@@ -903,6 +903,8 @@ static int dw8250_runtime_suspend(struct +@@ -905,6 +905,8 @@ static int dw8250_runtime_suspend(struct { struct dw8250_data *data = dev_get_drvdata(dev); @@ -21,7 +21,7 @@ Signed-off-by: William Qiu <william.qiu@starfivetech.com> clk_disable_unprepare(data->clk); clk_disable_unprepare(data->pclk); -@@ -925,6 +927,8 @@ static int dw8250_runtime_resume(struct +@@ -927,6 +929,8 @@ static int dw8250_runtime_resume(struct return ret; } diff --git a/target/linux/starfive/patches-6.18/1002-serial-8250_dw-Add-starfive-jh7100-hsuart-compatible.patch b/target/linux/starfive/patches-6.18/1002-serial-8250_dw-Add-starfive-jh7100-hsuart-compatible.patch index fffbc009e9..856c0beb88 100644 --- a/target/linux/starfive/patches-6.18/1002-serial-8250_dw-Add-starfive-jh7100-hsuart-compatible.patch +++ b/target/linux/starfive/patches-6.18/1002-serial-8250_dw-Add-starfive-jh7100-hsuart-compatible.patch @@ -15,7 +15,7 @@ Signed-off-by: Emil Renner Berthing <kernel@esmil.dk> --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c -@@ -973,6 +973,7 @@ static const struct of_device_id dw8250_ +@@ -975,6 +975,7 @@ static const struct of_device_id dw8250_ { .compatible = "marvell,armada-38x-uart", .data = &dw8250_armada_38x_data }, { .compatible = "renesas,rzn1-uart", .data = &dw8250_renesas_rzn1_data }, { .compatible = "sophgo,sg2044-uart", .data = &dw8250_skip_set_rate_data }, |