From: Sasha Levin Date: Tue, 25 Jun 2024 03:25:03 +0000 (-0400) Subject: Fixes for 6.1 X-Git-Tag: v6.1.96~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9a9f2a3db163446a8956be5702555229c2b15e82;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.1 Signed-off-by: Sasha Levin --- diff --git a/queue-6.1/arm-dts-samsung-exynos4412-origen-fix-keypad-no-auto.patch b/queue-6.1/arm-dts-samsung-exynos4412-origen-fix-keypad-no-auto.patch new file mode 100644 index 00000000000..49fba6f5994 --- /dev/null +++ b/queue-6.1/arm-dts-samsung-exynos4412-origen-fix-keypad-no-auto.patch @@ -0,0 +1,43 @@ +From 039ad646ca10dd51664d1036bc021c33c3084ff2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 Mar 2024 19:31:03 +0100 +Subject: ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat + +From: Krzysztof Kozlowski + +[ Upstream commit 88208d3cd79821117fd3fb80d9bcab618467d37b ] + +Although the Samsung SoC keypad binding defined +linux,keypad-no-autorepeat property, Linux driver never implemented it +and always used linux,input-no-autorepeat. Correct the DTS to use +property actually implemented. + +This also fixes dtbs_check errors like: + + exynos4412-origen.dtb: keypad@100a0000: 'linux,keypad-no-autorepeat' does not match any of the regexes: '^key-[0-9a-z]+$', 'pinctrl-[0-9]+' + +Cc: +Fixes: bd08f6277e44 ("ARM: dts: Add keypad entries to Exynos4412 based Origen") +Link: https://lore.kernel.org/r/20240312183105.715735-2-krzysztof.kozlowski@linaro.org +Signed-off-by: Krzysztof Kozlowski +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/exynos4412-origen.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts +index a3905e27b9cd9..473aad848848a 100644 +--- a/arch/arm/boot/dts/exynos4412-origen.dts ++++ b/arch/arm/boot/dts/exynos4412-origen.dts +@@ -448,7 +448,7 @@ + &keypad { + samsung,keypad-num-rows = <3>; + samsung,keypad-num-columns = <2>; +- linux,keypad-no-autorepeat; ++ linux,input-no-autorepeat; + wakeup-source; + pinctrl-0 = <&keypad_rows &keypad_cols>; + pinctrl-names = "default"; +-- +2.43.0 + diff --git a/queue-6.1/arm-dts-samsung-smdk4412-fix-keypad-no-autorepeat.patch b/queue-6.1/arm-dts-samsung-smdk4412-fix-keypad-no-autorepeat.patch new file mode 100644 index 00000000000..1e62c8e6686 --- /dev/null +++ b/queue-6.1/arm-dts-samsung-smdk4412-fix-keypad-no-autorepeat.patch @@ -0,0 +1,43 @@ +From 83cb9e4fbacb3e5044f202df101502285294d98d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 Mar 2024 19:31:04 +0100 +Subject: ARM: dts: samsung: smdk4412: fix keypad no-autorepeat + +From: Krzysztof Kozlowski + +[ Upstream commit 4ac4c1d794e7ff454d191bbdab7585ed8dbf3758 ] + +Although the Samsung SoC keypad binding defined +linux,keypad-no-autorepeat property, Linux driver never implemented it +and always used linux,input-no-autorepeat. Correct the DTS to use +property actually implemented. + +This also fixes dtbs_check errors like: + + exynos4412-smdk4412.dtb: keypad@100a0000: 'key-A', 'key-B', 'key-C', 'key-D', 'key-E', 'linux,keypad-no-autorepeat' do not match any of the regexes: '^key-[0-9a-z]+$', 'pinctrl-[0-9]+' + +Cc: +Fixes: c9b92dd70107 ("ARM: dts: Add keypad entries to SMDK4412") +Link: https://lore.kernel.org/r/20240312183105.715735-3-krzysztof.kozlowski@linaro.org +Signed-off-by: Krzysztof Kozlowski +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/exynos4412-smdk4412.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/exynos4412-smdk4412.dts b/arch/arm/boot/dts/exynos4412-smdk4412.dts +index a40ff394977c0..7e0d01498ce3e 100644 +--- a/arch/arm/boot/dts/exynos4412-smdk4412.dts ++++ b/arch/arm/boot/dts/exynos4412-smdk4412.dts +@@ -65,7 +65,7 @@ + &keypad { + samsung,keypad-num-rows = <3>; + samsung,keypad-num-columns = <8>; +- linux,keypad-no-autorepeat; ++ linux,input-no-autorepeat; + wakeup-source; + pinctrl-0 = <&keypad_rows &keypad_cols>; + pinctrl-names = "default"; +-- +2.43.0 + diff --git a/queue-6.1/arm-dts-samsung-smdkv310-fix-keypad-no-autorepeat.patch b/queue-6.1/arm-dts-samsung-smdkv310-fix-keypad-no-autorepeat.patch new file mode 100644 index 00000000000..2849c52bc94 --- /dev/null +++ b/queue-6.1/arm-dts-samsung-smdkv310-fix-keypad-no-autorepeat.patch @@ -0,0 +1,43 @@ +From 6ffc0d38bcfdb62a7f019ba60b11dab1ab817575 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 Mar 2024 19:31:02 +0100 +Subject: ARM: dts: samsung: smdkv310: fix keypad no-autorepeat + +From: Krzysztof Kozlowski + +[ Upstream commit 87d8e522d6f5a004f0aa06c0def302df65aff296 ] + +Although the Samsung SoC keypad binding defined +linux,keypad-no-autorepeat property, Linux driver never implemented it +and always used linux,input-no-autorepeat. Correct the DTS to use +property actually implemented. + +This also fixes dtbs_check errors like: + + exynos4210-smdkv310.dtb: keypad@100a0000: 'linux,keypad-no-autorepeat' does not match any of the regexes: '^key-[0-9a-z]+$', 'pinctrl-[0-9]+' + +Cc: +Fixes: 0561ceabd0f1 ("ARM: dts: Add intial dts file for EXYNOS4210 SoC, SMDKV310 and ORIGEN") +Link: https://lore.kernel.org/r/20240312183105.715735-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Krzysztof Kozlowski +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/exynos4210-smdkv310.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/exynos4210-smdkv310.dts b/arch/arm/boot/dts/exynos4210-smdkv310.dts +index a5dfd7fd49b39..9de3cb3f3290d 100644 +--- a/arch/arm/boot/dts/exynos4210-smdkv310.dts ++++ b/arch/arm/boot/dts/exynos4210-smdkv310.dts +@@ -84,7 +84,7 @@ + &keypad { + samsung,keypad-num-rows = <2>; + samsung,keypad-num-columns = <8>; +- linux,keypad-no-autorepeat; ++ linux,input-no-autorepeat; + wakeup-source; + pinctrl-names = "default"; + pinctrl-0 = <&keypad_rows &keypad_cols>; +-- +2.43.0 + diff --git a/queue-6.1/kheaders-explicitly-define-file-modes-for-archived-h.patch b/queue-6.1/kheaders-explicitly-define-file-modes-for-archived-h.patch new file mode 100644 index 00000000000..f1c553da9dc --- /dev/null +++ b/queue-6.1/kheaders-explicitly-define-file-modes-for-archived-h.patch @@ -0,0 +1,42 @@ +From 3c7152b781a3641fce49a9e059ad1b0c95574c7c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 May 2024 11:32:43 +0000 +Subject: kheaders: explicitly define file modes for archived headers + +From: Matthias Maennich + +[ Upstream commit 3bd27a847a3a4827a948387cc8f0dbc9fa5931d5 ] + +Build environments might be running with different umask settings +resulting in indeterministic file modes for the files contained in +kheaders.tar.xz. The file itself is served with 444, i.e. world +readable. Archive the files explicitly with 744,a+X to improve +reproducibility across build environments. + +--mode=0444 is not suitable as directories need to be executable. Also, +444 makes it hard to delete all the readonly files after extraction. + +Cc: stable@vger.kernel.org +Signed-off-by: Matthias Maennich +Signed-off-by: Masahiro Yamada +Signed-off-by: Sasha Levin +--- + kernel/gen_kheaders.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/gen_kheaders.sh b/kernel/gen_kheaders.sh +index 99422673a782b..12bcd08fe79d4 100755 +--- a/kernel/gen_kheaders.sh ++++ b/kernel/gen_kheaders.sh +@@ -82,7 +82,7 @@ find $cpio_dir -type f -print0 | + + # Create archive and try to normalize metadata for reproducibility. + tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ +- --owner=0 --group=0 --sort=name --numeric-owner \ ++ --owner=0 --group=0 --sort=name --numeric-owner --mode=u=rw,go=r,a+X \ + -I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null + + echo $headers_md5 > kernel/kheaders.md5 +-- +2.43.0 + diff --git a/queue-6.1/perf-script-add-raw-disasm-arguments-to-insn-trace-o.patch b/queue-6.1/perf-script-add-raw-disasm-arguments-to-insn-trace-o.patch new file mode 100644 index 00000000000..e59362fb78f --- /dev/null +++ b/queue-6.1/perf-script-add-raw-disasm-arguments-to-insn-trace-o.patch @@ -0,0 +1,102 @@ +From f3ec07912da6956e62945c90a0530f3a5889f913 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 17 Feb 2024 15:40:45 +0800 +Subject: perf: script: add raw|disasm arguments to --insn-trace option + +From: Changbin Du + +[ Upstream commit 6750ba4b6442fa5ea4bf5c0e4b4ff8b0249ef71d ] + +Now '--insn-trace' accept a argument to specify the output format: + - raw: display raw instructions. + - disasm: display mnemonic instructions (if capstone is installed). + +$ sudo perf script --insn-trace=raw + ls 1443864 [006] 2275506.209908875: 7f216b426100 _start+0x0 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) insn: 48 89 e7 + ls 1443864 [006] 2275506.209908875: 7f216b426103 _start+0x3 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) insn: e8 e8 0c 00 00 + ls 1443864 [006] 2275506.209908875: 7f216b426df0 _dl_start+0x0 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) insn: f3 0f 1e fa + +$ sudo perf script --insn-trace=disasm + ls 1443864 [006] 2275506.209908875: 7f216b426100 _start+0x0 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) movq %rsp, %rdi + ls 1443864 [006] 2275506.209908875: 7f216b426103 _start+0x3 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) callq _dl_start+0x0 + ls 1443864 [006] 2275506.209908875: 7f216b426df0 _dl_start+0x0 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) illegal instruction + ls 1443864 [006] 2275506.209908875: 7f216b426df4 _dl_start+0x4 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) pushq %rbp + ls 1443864 [006] 2275506.209908875: 7f216b426df5 _dl_start+0x5 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) movq %rsp, %rbp + ls 1443864 [006] 2275506.209908875: 7f216b426df8 _dl_start+0x8 (/usr/lib/x86_64-linux-gnu/ld-2.31.so) pushq %r15 + +Signed-off-by: Changbin Du +Reviewed-by: Adrian Hunter +Cc: changbin.du@gmail.com +Cc: Thomas Richter +Cc: Andi Kleen +Signed-off-by: Namhyung Kim +Link: https://lore.kernel.org/r/20240217074046.4100789-5-changbin.du@huawei.com +Stable-dep-of: d4a98b45fbe6 ("perf script: Show also errors for --insn-trace option") +Signed-off-by: Sasha Levin +--- + tools/perf/Documentation/perf-script.txt | 7 ++++--- + tools/perf/builtin-script.c | 22 ++++++++++++++++++---- + 2 files changed, 22 insertions(+), 7 deletions(-) + +diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt +index 68e37de5fae47..96ec1dec9efe3 100644 +--- a/tools/perf/Documentation/perf-script.txt ++++ b/tools/perf/Documentation/perf-script.txt +@@ -438,9 +438,10 @@ include::itrace.txt[] + will be printed. Each entry has function name and file/line. Enabled by + default, disable with --no-inline. + +---insn-trace:: +- Show instruction stream for intel_pt traces. Combine with --xed to +- show disassembly. ++--insn-trace[=]:: ++ Show instruction stream in bytes (raw) or disassembled (disasm) ++ for intel_pt traces. The default is 'raw'. To use xed, combine ++ 'raw' with --xed to show disassembly done by xed. + + --xed:: + Run xed disassembler on output. Requires installing the xed disassembler. +diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c +index a794a3d2e47b7..af91fdcabb05c 100644 +--- a/tools/perf/builtin-script.c ++++ b/tools/perf/builtin-script.c +@@ -3712,10 +3712,24 @@ static int perf_script__process_auxtrace_info(struct perf_session *session, + #endif + + static int parse_insn_trace(const struct option *opt __maybe_unused, +- const char *str __maybe_unused, +- int unset __maybe_unused) ++ const char *str, int unset __maybe_unused) + { +- parse_output_fields(NULL, "+insn,-event,-period", 0); ++ const char *fields = "+insn,-event,-period"; ++ int ret; ++ ++ if (str) { ++ if (strcmp(str, "disasm") == 0) ++ fields = "+disasm,-event,-period"; ++ else if (strlen(str) != 0 && strcmp(str, "raw") != 0) { ++ fprintf(stderr, "Only accept raw|disasm\n"); ++ return -EINVAL; ++ } ++ } ++ ++ ret = parse_output_fields(NULL, fields, 0); ++ if (ret < 0) ++ return ret; ++ + itrace_parse_synth_opts(opt, "i0ns", 0); + symbol_conf.nanosecs = true; + return 0; +@@ -3859,7 +3873,7 @@ int cmd_script(int argc, const char **argv) + "only consider these symbols"), + OPT_INTEGER(0, "addr-range", &symbol_conf.addr_range, + "Use with -S to list traced records within address range"), +- OPT_CALLBACK_OPTARG(0, "insn-trace", &itrace_synth_opts, NULL, NULL, ++ OPT_CALLBACK_OPTARG(0, "insn-trace", &itrace_synth_opts, NULL, "raw|disasm", + "Decode instructions from itrace", parse_insn_trace), + OPT_CALLBACK_OPTARG(0, "xed", NULL, NULL, NULL, + "Run xed disassembler on output", parse_xed), +-- +2.43.0 + diff --git a/queue-6.1/perf-script-show-also-errors-for-insn-trace-option.patch b/queue-6.1/perf-script-show-also-errors-for-insn-trace-option.patch new file mode 100644 index 00000000000..bf1afc37ea0 --- /dev/null +++ b/queue-6.1/perf-script-show-also-errors-for-insn-trace-option.patch @@ -0,0 +1,46 @@ +From f0b3247d57caa5e1a621f42679ca8e8a04d96d75 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 15 Mar 2024 09:13:33 +0200 +Subject: perf script: Show also errors for --insn-trace option + +From: Adrian Hunter + +[ Upstream commit d4a98b45fbe6d06f4b79ed90d0bb05ced8674c23 ] + +The trace could be misleading if trace errors are not taken into +account, so display them also by adding the itrace "e" option. + +Note --call-trace and --call-ret-trace already add the itrace "e" +option. + +Fixes: b585ebdb5912cf14 ("perf script: Add --insn-trace for instruction decoding") +Reviewed-by: Andi Kleen +Signed-off-by: Adrian Hunter +Cc: Andi Kleen +Cc: Ian Rogers +Cc: Jiri Olsa +Cc: Namhyung Kim +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20240315071334.3478-1-adrian.hunter@intel.com +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: Sasha Levin +--- + tools/perf/builtin-script.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c +index af91fdcabb05c..999231d64e225 100644 +--- a/tools/perf/builtin-script.c ++++ b/tools/perf/builtin-script.c +@@ -3730,7 +3730,7 @@ static int parse_insn_trace(const struct option *opt __maybe_unused, + if (ret < 0) + return ret; + +- itrace_parse_synth_opts(opt, "i0ns", 0); ++ itrace_parse_synth_opts(opt, "i0nse", 0); + symbol_conf.nanosecs = true; + return 0; + } +-- +2.43.0 + diff --git a/queue-6.1/pmdomain-ti-sci-fix-duplicate-pd-referrals.patch b/queue-6.1/pmdomain-ti-sci-fix-duplicate-pd-referrals.patch new file mode 100644 index 00000000000..69bf4692269 --- /dev/null +++ b/queue-6.1/pmdomain-ti-sci-fix-duplicate-pd-referrals.patch @@ -0,0 +1,70 @@ +From 4d00a2ec6327aec76dc346fd40e95968f6648e29 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Apr 2024 19:00:23 +0300 +Subject: pmdomain: ti-sci: Fix duplicate PD referrals + +From: Tomi Valkeinen + +[ Upstream commit 670c900f69645db394efb38934b3344d8804171a ] + +When the dts file has multiple referrers to a single PD (e.g. +simple-framebuffer and dss nodes both point to the DSS power-domain) the +ti-sci driver will create two power domains, both with the same ID, and +that will cause problems as one of the power domains will hide the other +one. + +Fix this checking if a PD with the ID has already been created, and only +create a PD for new IDs. + +Fixes: efa5c01cd7ee ("soc: ti: ti_sci_pm_domains: switch to use multiple genpds instead of one") +Signed-off-by: Tomi Valkeinen +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20240415-ti-sci-pd-v1-1-a0e56b8ad897@ideasonboard.com +Signed-off-by: Ulf Hansson +Signed-off-by: Sasha Levin +--- + drivers/soc/ti/ti_sci_pm_domains.c | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +diff --git a/drivers/soc/ti/ti_sci_pm_domains.c b/drivers/soc/ti/ti_sci_pm_domains.c +index a33ec7eaf23d1..17984a7bffba5 100644 +--- a/drivers/soc/ti/ti_sci_pm_domains.c ++++ b/drivers/soc/ti/ti_sci_pm_domains.c +@@ -114,6 +114,18 @@ static const struct of_device_id ti_sci_pm_domain_matches[] = { + }; + MODULE_DEVICE_TABLE(of, ti_sci_pm_domain_matches); + ++static bool ti_sci_pm_idx_exists(struct ti_sci_genpd_provider *pd_provider, u32 idx) ++{ ++ struct ti_sci_pm_domain *pd; ++ ++ list_for_each_entry(pd, &pd_provider->pd_list, node) { ++ if (pd->idx == idx) ++ return true; ++ } ++ ++ return false; ++} ++ + static int ti_sci_pm_domain_probe(struct platform_device *pdev) + { + struct device *dev = &pdev->dev; +@@ -153,8 +165,14 @@ static int ti_sci_pm_domain_probe(struct platform_device *pdev) + break; + + if (args.args_count >= 1 && args.np == dev->of_node) { +- if (args.args[0] > max_id) ++ if (args.args[0] > max_id) { + max_id = args.args[0]; ++ } else { ++ if (ti_sci_pm_idx_exists(pd_provider, args.args[0])) { ++ index++; ++ continue; ++ } ++ } + + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); + if (!pd) +-- +2.43.0 + diff --git a/queue-6.1/revert-kheaders-substituting-sort-in-archive-creatio.patch b/queue-6.1/revert-kheaders-substituting-sort-in-archive-creatio.patch new file mode 100644 index 00000000000..f78508ba9a5 --- /dev/null +++ b/queue-6.1/revert-kheaders-substituting-sort-in-archive-creatio.patch @@ -0,0 +1,48 @@ +From 0c3b62b67227b06164981add85a0eb2fc906c6ea Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 21 May 2023 22:23:35 +0900 +Subject: Revert "kheaders: substituting --sort in archive creation" + +From: Masahiro Yamada + +[ Upstream commit 49c386ebbb43394ff4773ce24f726f6afc4c30c8 ] + +This reverts commit 700dea5a0bea9f64eba89fae7cb2540326fdfdc1. + +The reason for that commit was --sort=ORDER introduced in +tar 1.28 (2014). More than 3 years have passed since then. + +Requiring GNU tar 1.28 should be fine now because we require +GCC 5.1 (2015). + +Signed-off-by: Masahiro Yamada +Reviewed-by: Nicolas Schier +Stable-dep-of: 3bd27a847a3a ("kheaders: explicitly define file modes for archived headers") +Signed-off-by: Sasha Levin +--- + kernel/gen_kheaders.sh | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/kernel/gen_kheaders.sh b/kernel/gen_kheaders.sh +index 473036b43c832..99422673a782b 100755 +--- a/kernel/gen_kheaders.sh ++++ b/kernel/gen_kheaders.sh +@@ -81,12 +81,9 @@ find $cpio_dir -type f -print0 | + xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' + + # Create archive and try to normalize metadata for reproducibility. +-# For compatibility with older versions of tar, files are fed to tar +-# pre-sorted, as --sort=name might not be available. +-find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \ +- tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ +- --owner=0 --group=0 --numeric-owner --no-recursion \ +- -I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null ++tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ ++ --owner=0 --group=0 --sort=name --numeric-owner \ ++ -I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null + + echo $headers_md5 > kernel/kheaders.md5 + echo "$this_file_md5" >> kernel/kheaders.md5 +-- +2.43.0 + diff --git a/queue-6.1/series b/queue-6.1/series index 0ca9563f932..441303b2d92 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -115,3 +115,14 @@ dt-bindings-i2c-google-cros-ec-i2c-tunnel-correct-path-to-i2c-controller-schema. spi-stm32-qspi-fix-dual-flash-mode-sanity-test-in-stm32_qspi_setup.patch arm64-dts-imx8qm-mek-fix-gpio-number-for-reg_usdhc2_vmmc.patch spi-stm32-qspi-clamp-stm32_qspi_get_mode-output-to-ccr_buswidth_4.patch +perf-script-add-raw-disasm-arguments-to-insn-trace-o.patch +perf-script-show-also-errors-for-insn-trace-option.patch +arm-dts-samsung-smdkv310-fix-keypad-no-autorepeat.patch +arm-dts-samsung-exynos4412-origen-fix-keypad-no-auto.patch +arm-dts-samsung-smdk4412-fix-keypad-no-autorepeat.patch +pmdomain-ti-sci-fix-duplicate-pd-referrals.patch +tracing-add-module_description-to-preemptirq_delay_t.patch +x86-cpu-vfm-add-new-macros-to-work-with-vendor-famil.patch +x86-cpu-fix-x86_match_cpu-to-match-just-x86_vendor_i.patch +revert-kheaders-substituting-sort-in-archive-creatio.patch +kheaders-explicitly-define-file-modes-for-archived-h.patch diff --git a/queue-6.1/tracing-add-module_description-to-preemptirq_delay_t.patch b/queue-6.1/tracing-add-module_description-to-preemptirq_delay_t.patch new file mode 100644 index 00000000000..b2800866247 --- /dev/null +++ b/queue-6.1/tracing-add-module_description-to-preemptirq_delay_t.patch @@ -0,0 +1,39 @@ +From 7670f8fa8f3563e15657dc24b5110658a51e4746 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 18 May 2024 15:54:49 -0700 +Subject: tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test + +From: Jeff Johnson + +[ Upstream commit 23748e3e0fbfe471eff5ce439921629f6a427828 ] + +Fix the 'make W=1' warning: + +WARNING: modpost: missing MODULE_DESCRIPTION() in kernel/trace/preemptirq_delay_test.o + +Link: https://lore.kernel.org/linux-trace-kernel/20240518-md-preemptirq_delay_test-v1-1-387d11b30d85@quicinc.com + +Cc: stable@vger.kernel.org +Cc: Mathieu Desnoyers +Fixes: f96e8577da10 ("lib: Add module for testing preemptoff/irqsoff latency tracers") +Acked-by: Masami Hiramatsu (Google) +Signed-off-by: Jeff Johnson +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/preemptirq_delay_test.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/kernel/trace/preemptirq_delay_test.c b/kernel/trace/preemptirq_delay_test.c +index 8c4ffd0761624..cb0871fbdb07f 100644 +--- a/kernel/trace/preemptirq_delay_test.c ++++ b/kernel/trace/preemptirq_delay_test.c +@@ -215,4 +215,5 @@ static void __exit preemptirq_delay_exit(void) + + module_init(preemptirq_delay_init) + module_exit(preemptirq_delay_exit) ++MODULE_DESCRIPTION("Preempt / IRQ disable delay thread to test latency tracers"); + MODULE_LICENSE("GPL v2"); +-- +2.43.0 + diff --git a/queue-6.1/x86-cpu-fix-x86_match_cpu-to-match-just-x86_vendor_i.patch b/queue-6.1/x86-cpu-fix-x86_match_cpu-to-match-just-x86_vendor_i.patch new file mode 100644 index 00000000000..c9db8deaf61 --- /dev/null +++ b/queue-6.1/x86-cpu-fix-x86_match_cpu-to-match-just-x86_vendor_i.patch @@ -0,0 +1,175 @@ +From 4a6f130a1e2b355cddc1ef7e79fba1346fa2688a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 20 May 2024 15:45:33 -0700 +Subject: x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL + +From: Tony Luck + +[ Upstream commit 93022482b2948a9a7e9b5a2bb685f2e1cb4c3348 ] + +Code in v6.9 arch/x86/kernel/smpboot.c was changed by commit + + 4db64279bc2b ("x86/cpu: Switch to new Intel CPU model defines") from: + + static const struct x86_cpu_id intel_cod_cpu[] = { + X86_MATCH_INTEL_FAM6_MODEL(HASWELL_X, 0), /* COD */ + X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_X, 0), /* COD */ + X86_MATCH_INTEL_FAM6_MODEL(ANY, 1), /* SNC */ <--- 443 + {} + }; + + static bool match_llc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o) + { + const struct x86_cpu_id *id = x86_match_cpu(intel_cod_cpu); + +to: + + static const struct x86_cpu_id intel_cod_cpu[] = { + X86_MATCH_VFM(INTEL_HASWELL_X, 0), /* COD */ + X86_MATCH_VFM(INTEL_BROADWELL_X, 0), /* COD */ + X86_MATCH_VFM(INTEL_ANY, 1), /* SNC */ + {} + }; + + static bool match_llc(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o) + { + const struct x86_cpu_id *id = x86_match_cpu(intel_cod_cpu); + +On an Intel CPU with SNC enabled this code previously matched the rule on line +443 to avoid printing messages about insane cache configuration. The new code +did not match any rules. + +Expanding the macros for the intel_cod_cpu[] array shows that the old is +equivalent to: + + static const struct x86_cpu_id intel_cod_cpu[] = { + [0] = { .vendor = 0, .family = 6, .model = 0x3F, .steppings = 0, .feature = 0, .driver_data = 0 }, + [1] = { .vendor = 0, .family = 6, .model = 0x4F, .steppings = 0, .feature = 0, .driver_data = 0 }, + [2] = { .vendor = 0, .family = 6, .model = 0x00, .steppings = 0, .feature = 0, .driver_data = 1 }, + [3] = { .vendor = 0, .family = 0, .model = 0x00, .steppings = 0, .feature = 0, .driver_data = 0 } + } + +while the new code expands to: + + static const struct x86_cpu_id intel_cod_cpu[] = { + [0] = { .vendor = 0, .family = 6, .model = 0x3F, .steppings = 0, .feature = 0, .driver_data = 0 }, + [1] = { .vendor = 0, .family = 6, .model = 0x4F, .steppings = 0, .feature = 0, .driver_data = 0 }, + [2] = { .vendor = 0, .family = 0, .model = 0x00, .steppings = 0, .feature = 0, .driver_data = 1 }, + [3] = { .vendor = 0, .family = 0, .model = 0x00, .steppings = 0, .feature = 0, .driver_data = 0 } + } + +Looking at the code for x86_match_cpu(): + + const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match) + { + const struct x86_cpu_id *m; + struct cpuinfo_x86 *c = &boot_cpu_data; + + for (m = match; + m->vendor | m->family | m->model | m->steppings | m->feature; + m++) { + ... + } + return NULL; + +it is clear that there was no match because the ANY entry in the table (array +index 2) is now the loop termination condition (all of vendor, family, model, +steppings, and feature are zero). + +So this code was working before because the "ANY" check was looking for any +Intel CPU in family 6. But fails now because the family is a wild card. So the +root cause is that x86_match_cpu() has never been able to match on a rule with +just X86_VENDOR_INTEL and all other fields set to wildcards. + +Add a new flags field to struct x86_cpu_id that has a bit set to indicate that +this entry in the array is valid. Update X86_MATCH*() macros to set that bit. +Change the end-marker check in x86_match_cpu() to just check the flags field +for this bit. + +Backporter notes: The commit in Fixes is really the one that is broken: +you can't have m->vendor as part of the loop termination conditional in +x86_match_cpu() because it can happen - as it has happened above +- that that whole conditional is 0 albeit vendor == 0 is a valid case +- X86_VENDOR_INTEL is 0. + +However, the only case where the above happens is the SNC check added by +4db64279bc2b1 so you only need this fix if you have backported that +other commit + + 4db64279bc2b ("x86/cpu: Switch to new Intel CPU model defines") + +Fixes: 644e9cbbe3fc ("Add driver auto probing for x86 features v4") +Suggested-by: Thomas Gleixner +Suggested-by: Borislav Petkov +Signed-off-by: Tony Luck +Signed-off-by: Borislav Petkov (AMD) +Cc: # see above +Link: https://lore.kernel.org/r/20240517144312.GBZkdtAOuJZCvxhFbJ@fat_crate.local +Signed-off-by: Sasha Levin +--- + arch/x86/include/asm/cpu_device_id.h | 5 +++++ + arch/x86/kernel/cpu/match.c | 4 +--- + include/linux/mod_devicetable.h | 2 ++ + 3 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/arch/x86/include/asm/cpu_device_id.h b/arch/x86/include/asm/cpu_device_id.h +index dd7b9463696f5..e8e3dbe7f1730 100644 +--- a/arch/x86/include/asm/cpu_device_id.h ++++ b/arch/x86/include/asm/cpu_device_id.h +@@ -53,6 +53,9 @@ + #define X86_CENTAUR_FAM6_C7_D 0xd + #define X86_CENTAUR_FAM6_NANO 0xf + ++/* x86_cpu_id::flags */ ++#define X86_CPU_ID_FLAG_ENTRY_VALID BIT(0) ++ + #define X86_STEPPINGS(mins, maxs) GENMASK(maxs, mins) + /** + * X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching +@@ -79,6 +82,7 @@ + .model = _model, \ + .steppings = _steppings, \ + .feature = _feature, \ ++ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, \ + .driver_data = (unsigned long) _data \ + } + +@@ -89,6 +93,7 @@ + .model = _model, \ + .steppings = _steppings, \ + .feature = _feature, \ ++ .flags = X86_CPU_ID_FLAG_ENTRY_VALID, \ + .driver_data = (unsigned long) _data \ + } + +diff --git a/arch/x86/kernel/cpu/match.c b/arch/x86/kernel/cpu/match.c +index ad6776081e60d..ae71b8ef909c9 100644 +--- a/arch/x86/kernel/cpu/match.c ++++ b/arch/x86/kernel/cpu/match.c +@@ -39,9 +39,7 @@ const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match) + const struct x86_cpu_id *m; + struct cpuinfo_x86 *c = &boot_cpu_data; + +- for (m = match; +- m->vendor | m->family | m->model | m->steppings | m->feature; +- m++) { ++ for (m = match; m->flags & X86_CPU_ID_FLAG_ENTRY_VALID; m++) { + if (m->vendor != X86_VENDOR_ANY && c->x86_vendor != m->vendor) + continue; + if (m->family != X86_FAMILY_ANY && c->x86 != m->family) +diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h +index 549590e9c644d..a18b7b43fbbbf 100644 +--- a/include/linux/mod_devicetable.h ++++ b/include/linux/mod_devicetable.h +@@ -676,6 +676,8 @@ struct x86_cpu_id { + __u16 model; + __u16 steppings; + __u16 feature; /* bit index */ ++ /* Solely for kernel-internal use: DO NOT EXPORT to userspace! */ ++ __u16 flags; + kernel_ulong_t driver_data; + }; + +-- +2.43.0 + diff --git a/queue-6.1/x86-cpu-vfm-add-new-macros-to-work-with-vendor-famil.patch b/queue-6.1/x86-cpu-vfm-add-new-macros-to-work-with-vendor-famil.patch new file mode 100644 index 00000000000..bd24b4d019e --- /dev/null +++ b/queue-6.1/x86-cpu-vfm-add-new-macros-to-work-with-vendor-famil.patch @@ -0,0 +1,146 @@ +From 41cb0ec32658c00cfcfb1e8aa2c7af8ce675f159 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 Apr 2024 14:19:04 -0700 +Subject: x86/cpu/vfm: Add new macros to work with (vendor/family/model) values + +From: Tony Luck + +[ Upstream commit e6dfdc2e89a0adedf455814c91b977d6a584cc88 ] + +To avoid adding a slew of new macros for each new Intel CPU family +switch over from providing CPU model number #defines to a new +scheme that encodes vendor, family, and model in a single number. + + [ bp: s/casted/cast/g ] + +Signed-off-by: Tony Luck +Signed-off-by: Borislav Petkov (AMD) +Reviewed-by: Thomas Gleixner +Link: https://lore.kernel.org/r/20240416211941.9369-3-tony.luck@intel.com +Stable-dep-of: 93022482b294 ("x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL") +Signed-off-by: Sasha Levin +--- + arch/x86/include/asm/cpu_device_id.h | 93 ++++++++++++++++++++++++++++ + 1 file changed, 93 insertions(+) + +diff --git a/arch/x86/include/asm/cpu_device_id.h b/arch/x86/include/asm/cpu_device_id.h +index eb8fcede9e3bf..dd7b9463696f5 100644 +--- a/arch/x86/include/asm/cpu_device_id.h ++++ b/arch/x86/include/asm/cpu_device_id.h +@@ -2,6 +2,39 @@ + #ifndef _ASM_X86_CPU_DEVICE_ID + #define _ASM_X86_CPU_DEVICE_ID + ++/* ++ * Can't use because it generates expressions that ++ * cannot be used in structure initializers. Bitfield construction ++ * here must match the union in struct cpuinfo_86: ++ * union { ++ * struct { ++ * __u8 x86_model; ++ * __u8 x86; ++ * __u8 x86_vendor; ++ * __u8 x86_reserved; ++ * }; ++ * __u32 x86_vfm; ++ * }; ++ */ ++#define VFM_MODEL_BIT 0 ++#define VFM_FAMILY_BIT 8 ++#define VFM_VENDOR_BIT 16 ++#define VFM_RSVD_BIT 24 ++ ++#define VFM_MODEL_MASK GENMASK(VFM_FAMILY_BIT - 1, VFM_MODEL_BIT) ++#define VFM_FAMILY_MASK GENMASK(VFM_VENDOR_BIT - 1, VFM_FAMILY_BIT) ++#define VFM_VENDOR_MASK GENMASK(VFM_RSVD_BIT - 1, VFM_VENDOR_BIT) ++ ++#define VFM_MODEL(vfm) (((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT) ++#define VFM_FAMILY(vfm) (((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT) ++#define VFM_VENDOR(vfm) (((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT) ++ ++#define VFM_MAKE(_vendor, _family, _model) ( \ ++ ((_model) << VFM_MODEL_BIT) | \ ++ ((_family) << VFM_FAMILY_BIT) | \ ++ ((_vendor) << VFM_VENDOR_BIT) \ ++) ++ + /* + * Declare drivers belonging to specific x86 CPUs + * Similar in spirit to pci_device_id and related PCI functions +@@ -49,6 +82,16 @@ + .driver_data = (unsigned long) _data \ + } + ++#define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \ ++ _steppings, _feature, _data) { \ ++ .vendor = _vendor, \ ++ .family = _family, \ ++ .model = _model, \ ++ .steppings = _steppings, \ ++ .feature = _feature, \ ++ .driver_data = (unsigned long) _data \ ++} ++ + /** + * X86_MATCH_VENDOR_FAM_MODEL_FEATURE - Macro for CPU matching + * @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY +@@ -164,6 +207,56 @@ + X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, INTEL_FAM6_##model, \ + steppings, X86_FEATURE_ANY, data) + ++/** ++ * X86_MATCH_VFM - Match encoded vendor/family/model ++ * @vfm: Encoded 8-bits each for vendor, family, model ++ * @data: Driver specific data or NULL. The internal storage ++ * format is unsigned long. The supplied value, pointer ++ * etc. is cast to unsigned long internally. ++ * ++ * Stepping and feature are set to wildcards ++ */ ++#define X86_MATCH_VFM(vfm, data) \ ++ X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ ++ VFM_VENDOR(vfm), \ ++ VFM_FAMILY(vfm), \ ++ VFM_MODEL(vfm), \ ++ X86_STEPPING_ANY, X86_FEATURE_ANY, data) ++ ++/** ++ * X86_MATCH_VFM_STEPPINGS - Match encoded vendor/family/model/stepping ++ * @vfm: Encoded 8-bits each for vendor, family, model ++ * @steppings: Bitmask of steppings to match ++ * @data: Driver specific data or NULL. The internal storage ++ * format is unsigned long. The supplied value, pointer ++ * etc. is cast to unsigned long internally. ++ * ++ * feature is set to wildcard ++ */ ++#define X86_MATCH_VFM_STEPPINGS(vfm, steppings, data) \ ++ X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ ++ VFM_VENDOR(vfm), \ ++ VFM_FAMILY(vfm), \ ++ VFM_MODEL(vfm), \ ++ steppings, X86_FEATURE_ANY, data) ++ ++/** ++ * X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature ++ * @vfm: Encoded 8-bits each for vendor, family, model ++ * @feature: A X86_FEATURE bit ++ * @data: Driver specific data or NULL. The internal storage ++ * format is unsigned long. The supplied value, pointer ++ * etc. is cast to unsigned long internally. ++ * ++ * Steppings is set to wildcard ++ */ ++#define X86_MATCH_VFM_FEATURE(vfm, feature, data) \ ++ X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ ++ VFM_VENDOR(vfm), \ ++ VFM_FAMILY(vfm), \ ++ VFM_MODEL(vfm), \ ++ X86_STEPPING_ANY, feature, data) ++ + /* + * Match specific microcode revisions. + * +-- +2.43.0 +