From: Greg Kroah-Hartman Date: Tue, 22 Jul 2025 09:40:10 +0000 (+0200) Subject: 6.12-stable patches X-Git-Tag: v6.1.147~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8ca1a0391f82d8b3f60ad7f3a92169f943ab23ad;p=thirdparty%2Fkernel%2Fstable-queue.git 6.12-stable patches added patches: i2c-omap-add-support-for-setting-mux.patch i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch net-libwx-fix-multicast-packets-received-count.patch rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch --- diff --git a/queue-6.12/i2c-omap-add-support-for-setting-mux.patch b/queue-6.12/i2c-omap-add-support-for-setting-mux.patch new file mode 100644 index 0000000000..b429b80b33 --- /dev/null +++ b/queue-6.12/i2c-omap-add-support-for-setting-mux.patch @@ -0,0 +1,86 @@ +From b6ef830c60b6f4adfb72d0780b4363df3a1feb9c Mon Sep 17 00:00:00 2001 +From: Jayesh Choudhary +Date: Tue, 18 Mar 2025 16:06:22 +0530 +Subject: i2c: omap: Add support for setting mux + +From: Jayesh Choudhary + +commit b6ef830c60b6f4adfb72d0780b4363df3a1feb9c upstream. + +Some SoCs require muxes in the routing for SDA and SCL lines. +Therefore, add support for setting the mux by reading the mux-states +property from the dt-node. + +Signed-off-by: Jayesh Choudhary +Link: https://lore.kernel.org/r/20250318103622.29979-3-j-choudhary@ti.com +Signed-off-by: Andi Shyti +Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i2c/busses/Kconfig | 1 + + drivers/i2c/busses/i2c-omap.c | 22 ++++++++++++++++++++++ + 2 files changed, 23 insertions(+) + +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -937,6 +937,7 @@ config I2C_OMAP + tristate "OMAP I2C adapter" + depends on ARCH_OMAP || ARCH_K3 || COMPILE_TEST + default MACH_OMAP_OSK ++ select MULTIPLEXER + help + If you say yes to this option, support will be included for the + I2C interface on the Texas Instruments OMAP1/2 family of processors. +--- a/drivers/i2c/busses/i2c-omap.c ++++ b/drivers/i2c/busses/i2c-omap.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -211,6 +212,7 @@ struct omap_i2c_dev { + u16 syscstate; + u16 westate; + u16 errata; ++ struct mux_state *mux_state; + }; + + static const u8 reg_map_ip_v1[] = { +@@ -1452,6 +1454,23 @@ omap_i2c_probe(struct platform_device *p + (1000 * omap->speed / 8); + } + ++ if (of_property_read_bool(node, "mux-states")) { ++ struct mux_state *mux_state; ++ ++ mux_state = devm_mux_state_get(&pdev->dev, NULL); ++ if (IS_ERR(mux_state)) { ++ r = PTR_ERR(mux_state); ++ dev_dbg(&pdev->dev, "failed to get I2C mux: %d\n", r); ++ goto err_disable_pm; ++ } ++ omap->mux_state = mux_state; ++ r = mux_state_select(omap->mux_state); ++ if (r) { ++ dev_err(&pdev->dev, "failed to select I2C mux: %d\n", r); ++ goto err_disable_pm; ++ } ++ } ++ + /* reset ASAP, clearing any IRQs */ + omap_i2c_init(omap); + +@@ -1511,6 +1530,9 @@ static void omap_i2c_remove(struct platf + + i2c_del_adapter(&omap->adapter); + ++ if (omap->mux_state) ++ mux_state_deselect(omap->mux_state); ++ + ret = pm_runtime_get_sync(&pdev->dev); + if (ret < 0) + dev_err(omap->dev, "Failed to resume hardware, skip disable\n"); diff --git a/queue-6.12/i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch b/queue-6.12/i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch new file mode 100644 index 0000000000..976d3f1b75 --- /dev/null +++ b/queue-6.12/i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch @@ -0,0 +1,52 @@ +From 666c23af755dccca8c25b5d5200ca28153c69a05 Mon Sep 17 00:00:00 2001 +From: Christophe JAILLET +Date: Sat, 14 Jun 2025 16:59:26 +0200 +Subject: i2c: omap: Fix an error handling path in omap_i2c_probe() + +From: Christophe JAILLET + +commit 666c23af755dccca8c25b5d5200ca28153c69a05 upstream. + +If an error occurs after calling mux_state_select(), mux_state_deselect() +should be called as already done in the remove function. + +Fixes: b6ef830c60b6 ("i2c: omap: Add support for setting mux") +Signed-off-by: Christophe JAILLET +Cc: # v6.15+ +Signed-off-by: Andi Shyti +Link: https://lore.kernel.org/r/998542981b6d2435c057dd8b9fe71743927babab.1749913149.git.christophe.jaillet@wanadoo.fr +Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i2c/busses/i2c-omap.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/i2c/busses/i2c-omap.c ++++ b/drivers/i2c/busses/i2c-omap.c +@@ -1461,13 +1461,13 @@ omap_i2c_probe(struct platform_device *p + if (IS_ERR(mux_state)) { + r = PTR_ERR(mux_state); + dev_dbg(&pdev->dev, "failed to get I2C mux: %d\n", r); +- goto err_disable_pm; ++ goto err_put_pm; + } + omap->mux_state = mux_state; + r = mux_state_select(omap->mux_state); + if (r) { + dev_err(&pdev->dev, "failed to select I2C mux: %d\n", r); +- goto err_disable_pm; ++ goto err_put_pm; + } + } + +@@ -1515,6 +1515,9 @@ omap_i2c_probe(struct platform_device *p + + err_unuse_clocks: + omap_i2c_write_reg(omap, OMAP_I2C_CON_REG, 0); ++ if (omap->mux_state) ++ mux_state_deselect(omap->mux_state); ++err_put_pm: + pm_runtime_dont_use_autosuspend(omap->dev); + pm_runtime_put_sync(omap->dev); + err_disable_pm: diff --git a/queue-6.12/i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch b/queue-6.12/i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch new file mode 100644 index 0000000000..4fffdc43eb --- /dev/null +++ b/queue-6.12/i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch @@ -0,0 +1,43 @@ +From a9503a2ecd95e23d7243bcde7138192de8c1c281 Mon Sep 17 00:00:00 2001 +From: Christophe JAILLET +Date: Sat, 5 Jul 2025 09:57:37 +0200 +Subject: i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe() + +From: Christophe JAILLET + +commit a9503a2ecd95e23d7243bcde7138192de8c1c281 upstream. + +omap_i2c_init() can fail. Handle this error in omap_i2c_probe(). + +Fixes: 010d442c4a29 ("i2c: New bus driver for TI OMAP boards") +Signed-off-by: Christophe JAILLET +Cc: # v2.6.19+ +Signed-off-by: Andi Shyti +Link: https://lore.kernel.org/r/565311abf9bafd7291ca82bcecb48c1fac1e727b.1751701715.git.christophe.jaillet@wanadoo.fr +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i2c/busses/i2c-omap.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/i2c/busses/i2c-omap.c ++++ b/drivers/i2c/busses/i2c-omap.c +@@ -1472,7 +1472,9 @@ omap_i2c_probe(struct platform_device *p + } + + /* reset ASAP, clearing any IRQs */ +- omap_i2c_init(omap); ++ r = omap_i2c_init(omap); ++ if (r) ++ goto err_mux_state_deselect; + + if (omap->rev < OMAP_I2C_OMAP1_REV_2) + r = devm_request_irq(&pdev->dev, omap->irq, omap_i2c_omap1_isr, +@@ -1515,6 +1517,7 @@ omap_i2c_probe(struct platform_device *p + + err_unuse_clocks: + omap_i2c_write_reg(omap, OMAP_I2C_CON_REG, 0); ++err_mux_state_deselect: + if (omap->mux_state) + mux_state_deselect(omap->mux_state); + err_put_pm: diff --git a/queue-6.12/net-libwx-fix-multicast-packets-received-count.patch b/queue-6.12/net-libwx-fix-multicast-packets-received-count.patch new file mode 100644 index 0000000000..f821a506af --- /dev/null +++ b/queue-6.12/net-libwx-fix-multicast-packets-received-count.patch @@ -0,0 +1,36 @@ +From 2b30a3d1ec2538a1fd363fde746b9fe1d38abc77 Mon Sep 17 00:00:00 2001 +From: Jiawen Wu +Date: Mon, 14 Jul 2025 09:56:56 +0800 +Subject: net: libwx: fix multicast packets received count + +From: Jiawen Wu + +commit 2b30a3d1ec2538a1fd363fde746b9fe1d38abc77 upstream. + +Multicast good packets received by PF rings that pass ethternet MAC +address filtering are counted for rtnl_link_stats64.multicast. The +counter is not cleared on read. Fix the duplicate counting on updating +statistics. + +Fixes: 46b92e10d631 ("net: libwx: support hardware statistics") +Cc: stable@vger.kernel.org +Signed-off-by: Jiawen Wu +Reviewed-by: Simon Horman +Link: https://patch.msgid.link/DA229A4F58B70E51+20250714015656.91772-1-jiawenwu@trustnetic.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/wangxun/libwx/wx_hw.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c ++++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c +@@ -2355,6 +2355,8 @@ void wx_update_stats(struct wx *wx) + hwstats->fdirmiss += rd32(wx, WX_RDB_FDIR_MISS); + } + ++ /* qmprc is not cleared on read, manual reset it */ ++ hwstats->qmprc = 0; + for (i = 0; i < wx->mac.max_rx_queues; i++) + hwstats->qmprc += rd32(wx, WX_PX_MPRC(i)); + } diff --git a/queue-6.12/rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch b/queue-6.12/rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch new file mode 100644 index 0000000000..d3e27e2878 --- /dev/null +++ b/queue-6.12/rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch @@ -0,0 +1,142 @@ +From 7498159226772d66f150dd406be462d75964a366 Mon Sep 17 00:00:00 2001 +From: Miguel Ojeda +Date: Sat, 12 Jul 2025 18:01:03 +0200 +Subject: rust: use `#[used(compiler)]` to fix build and `modpost` with Rust >= 1.89.0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Miguel Ojeda + +commit 7498159226772d66f150dd406be462d75964a366 upstream. + +Starting with Rust 1.89.0 (expected 2025-08-07), the Rust compiler fails +to build the `rusttest` target due to undefined references such as: + + kernel...-cgu.0:(.text....+0x116): undefined reference to + `rust_helper_kunit_get_current_test' + +Moreover, tooling like `modpost` gets confused: + + WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/nova/nova.o + ERROR: modpost: missing MODULE_LICENSE() in drivers/gpu/nova-core/nova_core.o + +The reason behind both issues is that the Rust compiler will now [1] +treat `#[used]` as `#[used(linker)]` instead of `#[used(compiler)]` +for our targets. This means that the retain section flag (`R`, +`SHF_GNU_RETAIN`) will be used and that they will be marked as `unique` +too, with different IDs. In turn, that means we end up with undefined +references that did not get discarded in `rusttest` and that multiple +`.modinfo` sections are generated, which confuse tooling like `modpost` +because they only expect one. + +Thus start using `#[used(compiler)]` to keep the previous behavior +and to be explicit about what we want. Sadly, it is an unstable feature +(`used_with_arg`) [2] -- we will talk to upstream Rust about it. The good +news is that it has been available for a long time (Rust >= 1.60) [3]. + +The changes should also be fine for previous Rust versions, since they +behave the same way as before [4]. + +Alternatively, we could use `#[no_mangle]` or `#[export_name = ...]` +since those still behave like `#[used(compiler)]`, but of course it is +not really what we want to express, and it requires other changes to +avoid symbol conflicts. + +Cc: David Wood +Cc: Wesley Wiser +Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs). +Link: https://github.com/rust-lang/rust/pull/140872 [1] +Link: https://github.com/rust-lang/rust/issues/93798 [2] +Link: https://github.com/rust-lang/rust/pull/91504 [3] +Link: https://godbolt.org/z/sxzWTMfzW [4] +Reviewed-by: Alice Ryhl +Acked-by: Björn Roy Baron +Link: https://lore.kernel.org/r/20250712160103.1244945-3-ojeda@kernel.org +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + rust/Makefile | 1 + + rust/kernel/lib.rs | 1 + + rust/macros/module.rs | 10 +++++----- + scripts/Makefile.build | 2 +- + 4 files changed, 8 insertions(+), 6 deletions(-) + +--- a/rust/Makefile ++++ b/rust/Makefile +@@ -157,6 +157,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $< + cmd_rustdoc_test = \ + OBJTREE=$(abspath $(objtree)) \ + $(RUSTDOC) --test $(rust_common_flags) \ ++ -Zcrate-attr='feature(used_with_arg)' \ + @$(objtree)/include/generated/rustc_cfg \ + $(rustc_target_flags) $(rustdoc_test_target_flags) \ + $(rustdoc_test_quiet) \ +--- a/rust/kernel/lib.rs ++++ b/rust/kernel/lib.rs +@@ -18,6 +18,7 @@ + #![feature(inline_const)] + #![feature(lint_reasons)] + #![feature(unsize)] ++#![feature(used_with_arg)] + + // Ensure conditional compilation based on the kernel configuration works; + // otherwise we may silently break things like initcall handling. +--- a/rust/macros/module.rs ++++ b/rust/macros/module.rs +@@ -57,7 +57,7 @@ impl<'a> ModInfoBuilder<'a> { + {cfg} + #[doc(hidden)] + #[link_section = \".modinfo\"] +- #[used] ++ #[used(compiler)] + pub static __{module}_{counter}: [u8; {length}] = *{string}; + ", + cfg = if builtin { +@@ -230,7 +230,7 @@ pub(crate) fn module(ts: TokenStream) -> + // key or a new section. For the moment, keep it simple. + #[cfg(MODULE)] + #[doc(hidden)] +- #[used] ++ #[used(compiler)] + static __IS_RUST_MODULE: () = (); + + static mut __MOD: Option<{type_}> = None; +@@ -253,7 +253,7 @@ pub(crate) fn module(ts: TokenStream) -> + + #[cfg(MODULE)] + #[doc(hidden)] +- #[used] ++ #[used(compiler)] + #[link_section = \".init.data\"] + static __UNIQUE_ID___addressable_init_module: unsafe extern \"C\" fn() -> i32 = init_module; + +@@ -273,7 +273,7 @@ pub(crate) fn module(ts: TokenStream) -> + + #[cfg(MODULE)] + #[doc(hidden)] +- #[used] ++ #[used(compiler)] + #[link_section = \".exit.data\"] + static __UNIQUE_ID___addressable_cleanup_module: extern \"C\" fn() = cleanup_module; + +@@ -283,7 +283,7 @@ pub(crate) fn module(ts: TokenStream) -> + #[cfg(not(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS))] + #[doc(hidden)] + #[link_section = \"{initcall_section}\"] +- #[used] ++ #[used(compiler)] + pub static __{name}_initcall: extern \"C\" fn() -> kernel::ffi::c_int = __{name}_init; + + #[cfg(not(MODULE))] +--- a/scripts/Makefile.build ++++ b/scripts/Makefile.build +@@ -248,7 +248,7 @@ $(obj)/%.lst: $(obj)/%.c FORCE + # Compile Rust sources (.rs) + # --------------------------------------------------------------------------- + +-rust_allowed_features := arbitrary_self_types,lint_reasons ++rust_allowed_features := arbitrary_self_types,lint_reasons,used_with_arg + + # `--out-dir` is required to avoid temporaries being created by `rustc` in the + # current working directory, which may be not accessible in the out-of-tree diff --git a/queue-6.12/selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch b/queue-6.12/selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch new file mode 100644 index 0000000000..97616ad5dc --- /dev/null +++ b/queue-6.12/selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch @@ -0,0 +1,88 @@ +From f01750aecdfb8bfb02842f60af3d805a3ae7267a Mon Sep 17 00:00:00 2001 +From: Ihor Solodrai +Date: Fri, 15 Nov 2024 00:38:55 +0000 +Subject: selftests/bpf: Set test path for token/obj_priv_implicit_token_envvar + +From: Ihor Solodrai + +commit f01750aecdfb8bfb02842f60af3d805a3ae7267a upstream. + +token/obj_priv_implicit_token_envvar test may fail in an environment +where the process executing tests can not write to the root path. + +Example: +https://github.com/libbpf/libbpf/actions/runs/11844507007/job/33007897936 + +Change default path used by the test to /tmp/bpf-token-fs, and make it +runtime configurable via an environment variable. + +Signed-off-by: Ihor Solodrai +Signed-off-by: Andrii Nakryiko +Link: https://lore.kernel.org/bpf/20241115003853.864397-1-ihor.solodrai@pm.me +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Shung-Hsi Yu +--- + tools/testing/selftests/bpf/prog_tests/token.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +--- a/tools/testing/selftests/bpf/prog_tests/token.c ++++ b/tools/testing/selftests/bpf/prog_tests/token.c +@@ -828,8 +828,12 @@ static int userns_obj_priv_btf_success(i + return validate_struct_ops_load(mnt_fd, true /* should succeed */); + } + ++static const char *token_bpffs_custom_dir() ++{ ++ return getenv("BPF_SELFTESTS_BPF_TOKEN_DIR") ?: "/tmp/bpf-token-fs"; ++} ++ + #define TOKEN_ENVVAR "LIBBPF_BPF_TOKEN_PATH" +-#define TOKEN_BPFFS_CUSTOM "/bpf-token-fs" + + static int userns_obj_priv_implicit_token(int mnt_fd, struct token_lsm *lsm_skel) + { +@@ -892,6 +896,7 @@ static int userns_obj_priv_implicit_toke + + static int userns_obj_priv_implicit_token_envvar(int mnt_fd, struct token_lsm *lsm_skel) + { ++ const char *custom_dir = token_bpffs_custom_dir(); + LIBBPF_OPTS(bpf_object_open_opts, opts); + struct dummy_st_ops_success *skel; + int err; +@@ -909,10 +914,10 @@ static int userns_obj_priv_implicit_toke + * BPF token implicitly, unless pointed to it through + * LIBBPF_BPF_TOKEN_PATH envvar + */ +- rmdir(TOKEN_BPFFS_CUSTOM); +- if (!ASSERT_OK(mkdir(TOKEN_BPFFS_CUSTOM, 0777), "mkdir_bpffs_custom")) ++ rmdir(custom_dir); ++ if (!ASSERT_OK(mkdir(custom_dir, 0777), "mkdir_bpffs_custom")) + goto err_out; +- err = sys_move_mount(mnt_fd, "", AT_FDCWD, TOKEN_BPFFS_CUSTOM, MOVE_MOUNT_F_EMPTY_PATH); ++ err = sys_move_mount(mnt_fd, "", AT_FDCWD, custom_dir, MOVE_MOUNT_F_EMPTY_PATH); + if (!ASSERT_OK(err, "move_mount_bpffs")) + goto err_out; + +@@ -925,7 +930,7 @@ static int userns_obj_priv_implicit_toke + goto err_out; + } + +- err = setenv(TOKEN_ENVVAR, TOKEN_BPFFS_CUSTOM, 1 /*overwrite*/); ++ err = setenv(TOKEN_ENVVAR, custom_dir, 1 /*overwrite*/); + if (!ASSERT_OK(err, "setenv_token_path")) + goto err_out; + +@@ -951,11 +956,11 @@ static int userns_obj_priv_implicit_toke + if (!ASSERT_ERR(err, "obj_empty_token_path_load")) + goto err_out; + +- rmdir(TOKEN_BPFFS_CUSTOM); ++ rmdir(custom_dir); + unsetenv(TOKEN_ENVVAR); + return 0; + err_out: +- rmdir(TOKEN_BPFFS_CUSTOM); ++ rmdir(custom_dir); + unsetenv(TOKEN_ENVVAR); + return -EINVAL; + } diff --git a/queue-6.12/series b/queue-6.12/series index 218b85a5cb..2153017098 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -145,3 +145,9 @@ usb-hub-fix-flushing-and-scheduling-of-delayed-work-that-tunes-runtime-pm.patch usb-hub-fix-flushing-of-delayed-work-used-for-post-resume-purposes.patch usb-hub-don-t-try-to-recover-devices-lost-during-warm-reset.patch usb-dwc3-qcom-don-t-leave-bcr-asserted.patch +net-libwx-fix-multicast-packets-received-count.patch +rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch +selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch +i2c-omap-add-support-for-setting-mux.patch +i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch +i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch