From: Sasha Levin Date: Mon, 7 Oct 2024 03:41:37 +0000 (-0400) Subject: Fixes for 5.10 X-Git-Tag: v6.6.55~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1cff4c9e56fbbe4c6437fc2927b642efd0db0eab;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/selftests-breakpoints-use-remaining-time-to-check-if.patch b/queue-5.10/selftests-breakpoints-use-remaining-time-to-check-if.patch new file mode 100644 index 00000000000..6ac6964dd2e --- /dev/null +++ b/queue-5.10/selftests-breakpoints-use-remaining-time-to-check-if.patch @@ -0,0 +1,87 @@ +From c8fc495017a17aad413e46d8325ba60dfaaf1b13 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 30 Sep 2024 15:40:25 -0700 +Subject: selftests: breakpoints: use remaining time to check if suspend + succeed + +From: Yifei Liu + +[ Upstream commit c66be905cda24fb782b91053b196bd2e966f95b7 ] + +step_after_suspend_test fails with device busy error while +writing to /sys/power/state to start suspend. The test believes +it failed to enter suspend state with + +$ sudo ./step_after_suspend_test +TAP version 13 +Bail out! Failed to enter Suspend state + +However, in the kernel message, I indeed see the system get +suspended and then wake up later. + +[611172.033108] PM: suspend entry (s2idle) +[611172.044940] Filesystems sync: 0.006 seconds +[611172.052254] Freezing user space processes +[611172.059319] Freezing user space processes completed (elapsed 0.001 seconds) +[611172.067920] OOM killer disabled. +[611172.072465] Freezing remaining freezable tasks +[611172.080332] Freezing remaining freezable tasks completed (elapsed 0.001 seconds) +[611172.089724] printk: Suspending console(s) (use no_console_suspend to debug) +[611172.117126] serial 00:03: disabled +some other hardware get reconnected +[611203.136277] OOM killer enabled. +[611203.140637] Restarting tasks ... +[611203.141135] usb 1-8.1: USB disconnect, device number 7 +[611203.141755] done. +[611203.155268] random: crng reseeded on system resumption +[611203.162059] PM: suspend exit + +After investigation, I noticed that for the code block +if (write(power_state_fd, "mem", strlen("mem")) != strlen("mem")) + ksft_exit_fail_msg("Failed to enter Suspend state\n"); + +The write will return -1 and errno is set to 16 (device busy). +It should be caused by the write function is not successfully returned +before the system suspend and the return value get messed when waking up. +As a result, It may be better to check the time passed of those few +instructions to determine whether the suspend is executed correctly for +it is pretty hard to execute those few lines for 5 seconds. + +The timer to wake up the system is set to expire after 5 seconds and +no re-arm. If the timer remaining time is 0 second and 0 nano secomd, +it means the timer expired and wake the system up. Otherwise, the system +could be considered to enter the suspend state failed if there is any +remaining time. + +After appling this patch, the test would not fail for it believes the +system does not go to suspend by mistake. It now could continue to the +rest part of the test after suspend. + +Fixes: bfd092b8c272 ("selftests: breakpoint: add step_after_suspend_test") +Reported-by: Sinadin Shan +Signed-off-by: Yifei Liu +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + .../testing/selftests/breakpoints/step_after_suspend_test.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/tools/testing/selftests/breakpoints/step_after_suspend_test.c b/tools/testing/selftests/breakpoints/step_after_suspend_test.c +index 2cf6f10ab7c4a..fc02918962c75 100644 +--- a/tools/testing/selftests/breakpoints/step_after_suspend_test.c ++++ b/tools/testing/selftests/breakpoints/step_after_suspend_test.c +@@ -153,7 +153,10 @@ void suspend(void) + if (err < 0) + ksft_exit_fail_msg("timerfd_settime() failed\n"); + +- if (write(power_state_fd, "mem", strlen("mem")) != strlen("mem")) ++ system("(echo mem > /sys/power/state) 2> /dev/null"); ++ ++ timerfd_gettime(timerfd, &spec); ++ if (spec.it_value.tv_sec != 0 || spec.it_value.tv_nsec != 0) + ksft_exit_fail_msg("Failed to enter Suspend state\n"); + + close(timerfd); +-- +2.43.0 + diff --git a/queue-5.10/selftests-mm-fix-charge_reserved_hugetlb.sh-test.patch b/queue-5.10/selftests-mm-fix-charge_reserved_hugetlb.sh-test.patch new file mode 100644 index 00000000000..4b3042c36f9 --- /dev/null +++ b/queue-5.10/selftests-mm-fix-charge_reserved_hugetlb.sh-test.patch @@ -0,0 +1,123 @@ +From 18cd30f3b18841cdf4dc8b6e4fa64ddc586a4fda Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 21 Aug 2024 14:31:15 +0200 +Subject: selftests/mm: fix charge_reserved_hugetlb.sh test + +From: David Hildenbrand + +[ Upstream commit c41a701d18efe6b8aa402efab16edbaba50c9548 ] + +Currently, running the charge_reserved_hugetlb.sh selftest we can +sometimes observe something like: + + $ ./charge_reserved_hugetlb.sh -cgroup-v2 + ... + write_result is 0 + After write: + hugetlb_usage=0 + reserved_usage=10485760 + killing write_to_hugetlbfs + Received 2. + Deleting the memory + Detach failure: Invalid argument + umount: /mnt/huge: target is busy. + +Both cases are issues in the test. + +While the unmount error seems to be racy, it will make the test fail: + $ ./run_vmtests.sh -t hugetlb + ... + # [FAIL] + not ok 10 charge_reserved_hugetlb.sh -cgroup-v2 # exit=32 + +The issue is that we are not waiting for the write_to_hugetlbfs process to +quit. So it might still have a hugetlbfs file open, about which umount is +not happy. Fix that by making "killall" wait for the process to quit. + +The other error ("Detach failure: Invalid argument") does not seem to +result in a test error, but is misleading. Turns out write_to_hugetlbfs.c +unconditionally tries to cleanup using shmdt(), even when we only +mmap()'ed a hugetlb file. Even worse, shmaddr is never even set for the +SHM case. Fix that as well. + +With this change it seems to work as expected. + +Link: https://lkml.kernel.org/r/20240821123115.2068812-1-david@redhat.com +Fixes: 29750f71a9b4 ("hugetlb_cgroup: add hugetlb_cgroup reservation tests") +Signed-off-by: David Hildenbrand +Reported-by: Mario Casquero +Reviewed-by: Mina Almasry +Tested-by: Mario Casquero +Cc: Shuah Khan +Cc: Muchun Song +Signed-off-by: Andrew Morton +Signed-off-by: Sasha Levin +--- + .../selftests/vm/charge_reserved_hugetlb.sh | 2 +- + .../testing/selftests/vm/write_to_hugetlbfs.c | 21 +++++++++++-------- + 2 files changed, 13 insertions(+), 10 deletions(-) + +diff --git a/tools/testing/selftests/vm/charge_reserved_hugetlb.sh b/tools/testing/selftests/vm/charge_reserved_hugetlb.sh +index d0107f8ae6213..28192ec98498f 100644 +--- a/tools/testing/selftests/vm/charge_reserved_hugetlb.sh ++++ b/tools/testing/selftests/vm/charge_reserved_hugetlb.sh +@@ -249,7 +249,7 @@ function cleanup_hugetlb_memory() { + local cgroup="$1" + if [[ "$(pgrep -f write_to_hugetlbfs)" != "" ]]; then + echo killing write_to_hugetlbfs +- killall -2 write_to_hugetlbfs ++ killall -2 --wait write_to_hugetlbfs + wait_for_hugetlb_memory_to_get_depleted $cgroup + fi + set -e +diff --git a/tools/testing/selftests/vm/write_to_hugetlbfs.c b/tools/testing/selftests/vm/write_to_hugetlbfs.c +index 6a2caba19ee1d..1289d311efd70 100644 +--- a/tools/testing/selftests/vm/write_to_hugetlbfs.c ++++ b/tools/testing/selftests/vm/write_to_hugetlbfs.c +@@ -28,7 +28,7 @@ enum method { + + /* Global variables. */ + static const char *self; +-static char *shmaddr; ++static int *shmaddr; + static int shmid; + + /* +@@ -47,15 +47,17 @@ void sig_handler(int signo) + { + printf("Received %d.\n", signo); + if (signo == SIGINT) { +- printf("Deleting the memory\n"); +- if (shmdt((const void *)shmaddr) != 0) { +- perror("Detach failure"); ++ if (shmaddr) { ++ printf("Deleting the memory\n"); ++ if (shmdt((const void *)shmaddr) != 0) { ++ perror("Detach failure"); ++ shmctl(shmid, IPC_RMID, NULL); ++ exit(4); ++ } ++ + shmctl(shmid, IPC_RMID, NULL); +- exit(4); ++ printf("Done deleting the memory\n"); + } +- +- shmctl(shmid, IPC_RMID, NULL); +- printf("Done deleting the memory\n"); + } + exit(2); + } +@@ -211,7 +213,8 @@ int main(int argc, char **argv) + shmctl(shmid, IPC_RMID, NULL); + exit(2); + } +- printf("shmaddr: %p\n", ptr); ++ shmaddr = ptr; ++ printf("shmaddr: %p\n", shmaddr); + + break; + default: +-- +2.43.0 + diff --git a/queue-5.10/selftests-vdso-fix-vdso-symbols-lookup-for-powerpc64.patch b/queue-5.10/selftests-vdso-fix-vdso-symbols-lookup-for-powerpc64.patch new file mode 100644 index 00000000000..4ba109a3f57 --- /dev/null +++ b/queue-5.10/selftests-vdso-fix-vdso-symbols-lookup-for-powerpc64.patch @@ -0,0 +1,108 @@ +From 608cc99a6a664223cc58f4d0e6dbdbf28b3721c7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 30 Aug 2024 14:28:37 +0200 +Subject: selftests: vDSO: fix vDSO symbols lookup for powerpc64 + +From: Christophe Leroy + +[ Upstream commit ba83b3239e657469709d15dcea5f9b65bf9dbf34 ] + +On powerpc64, following tests fail locating vDSO functions: + + ~ # ./vdso_test_abi + TAP version 13 + 1..16 + # [vDSO kselftest] VDSO_VERSION: LINUX_2.6.15 + # Couldn't find __kernel_gettimeofday + ok 1 # SKIP __kernel_gettimeofday + # clock_id: CLOCK_REALTIME + # Couldn't find __kernel_clock_gettime + ok 2 # SKIP __kernel_clock_gettime CLOCK_REALTIME + # Couldn't find __kernel_clock_getres + ok 3 # SKIP __kernel_clock_getres CLOCK_REALTIME + ... + # Couldn't find __kernel_time + ok 16 # SKIP __kernel_time + # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:16 error:0 + + ~ # ./vdso_test_getrandom + __kernel_getrandom is missing! + + ~ # ./vdso_test_gettimeofday + Could not find __kernel_gettimeofday + + ~ # ./vdso_test_getcpu + Could not find __kernel_getcpu + +On powerpc64, as shown below by readelf, vDSO functions symbols have +type NOTYPE, so also accept that type when looking for symbols. + +$ powerpc64-linux-gnu-readelf -a arch/powerpc/kernel/vdso/vdso64.so.dbg +ELF Header: + Magic: 7f 45 4c 46 02 02 01 00 00 00 00 00 00 00 00 00 + Class: ELF64 + Data: 2's complement, big endian + Version: 1 (current) + OS/ABI: UNIX - System V + ABI Version: 0 + Type: DYN (Shared object file) + Machine: PowerPC64 + Version: 0x1 +... + +Symbol table '.dynsym' contains 12 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000524 84 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 2: 00000000000005f0 36 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 3: 0000000000000578 68 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 4: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LINUX_2.6.15 + 5: 00000000000006c0 48 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 6: 0000000000000614 172 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 7: 00000000000006f0 84 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 8: 000000000000047c 84 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 9: 0000000000000454 12 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 10: 00000000000004d0 84 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + 11: 00000000000005bc 52 NOTYPE GLOBAL DEFAULT 8 __[...]@@LINUX_2.6.15 + +Symbol table '.symtab' contains 56 entries: + Num: Value Size Type Bind Vis Ndx Name +... + 45: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LINUX_2.6.15 + 46: 00000000000006c0 48 NOTYPE GLOBAL DEFAULT 8 __kernel_getcpu + 47: 0000000000000524 84 NOTYPE GLOBAL DEFAULT 8 __kernel_clock_getres + 48: 00000000000005f0 36 NOTYPE GLOBAL DEFAULT 8 __kernel_get_tbfreq + 49: 000000000000047c 84 NOTYPE GLOBAL DEFAULT 8 __kernel_gettimeofday + 50: 0000000000000614 172 NOTYPE GLOBAL DEFAULT 8 __kernel_sync_dicache + 51: 00000000000006f0 84 NOTYPE GLOBAL DEFAULT 8 __kernel_getrandom + 52: 0000000000000454 12 NOTYPE GLOBAL DEFAULT 8 __kernel_sigtram[...] + 53: 0000000000000578 68 NOTYPE GLOBAL DEFAULT 8 __kernel_time + 54: 00000000000004d0 84 NOTYPE GLOBAL DEFAULT 8 __kernel_clock_g[...] + 55: 00000000000005bc 52 NOTYPE GLOBAL DEFAULT 8 __kernel_get_sys[...] + +Fixes: 98eedc3a9dbf ("Document the vDSO and add a reference parser") +Signed-off-by: Christophe Leroy +Acked-by: Shuah Khan +Signed-off-by: Jason A. Donenfeld +Signed-off-by: Sasha Levin +--- + tools/testing/selftests/vDSO/parse_vdso.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tools/testing/selftests/vDSO/parse_vdso.c b/tools/testing/selftests/vDSO/parse_vdso.c +index 4ae417372e9eb..d9ccc5acac182 100644 +--- a/tools/testing/selftests/vDSO/parse_vdso.c ++++ b/tools/testing/selftests/vDSO/parse_vdso.c +@@ -216,7 +216,8 @@ void *vdso_sym(const char *version, const char *name) + ELF(Sym) *sym = &vdso_info.symtab[chain]; + + /* Check for a defined global or weak function w/ right name. */ +- if (ELF64_ST_TYPE(sym->st_info) != STT_FUNC) ++ if (ELF64_ST_TYPE(sym->st_info) != STT_FUNC && ++ ELF64_ST_TYPE(sym->st_info) != STT_NOTYPE) + continue; + if (ELF64_ST_BIND(sym->st_info) != STB_GLOBAL && + ELF64_ST_BIND(sym->st_info) != STB_WEAK) +-- +2.43.0 + diff --git a/queue-5.10/series b/queue-5.10/series index e8c54bc6d2f..99083db7b5e 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -363,3 +363,8 @@ of-irq-refer-to-actual-buffer-size-in-of_irq_parse_o.patch ext4-ext4_search_dir-should-return-a-proper-error.patch ext4-avoid-use-after-free-in-ext4_ext_show_leaf.patch ext4-fix-i_data_sem-unlock-order-in-ext4_ind_migrate.patch +spi-spi-imx-fix-pm_runtime_set_suspended-with-runtim.patch +spi-s3c64xx-fix-timeout-counters-in-flush_fifo.patch +selftests-breakpoints-use-remaining-time-to-check-if.patch +selftests-vdso-fix-vdso-symbols-lookup-for-powerpc64.patch +selftests-mm-fix-charge_reserved_hugetlb.sh-test.patch diff --git a/queue-5.10/spi-s3c64xx-fix-timeout-counters-in-flush_fifo.patch b/queue-5.10/spi-s3c64xx-fix-timeout-counters-in-flush_fifo.patch new file mode 100644 index 00000000000..b96c66ee1bd --- /dev/null +++ b/queue-5.10/spi-s3c64xx-fix-timeout-counters-in-flush_fifo.patch @@ -0,0 +1,49 @@ +From fb2c454a1ad43af408b8cbad696b1a5bbdaf42e6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Sep 2024 14:40:08 +0100 +Subject: spi: s3c64xx: fix timeout counters in flush_fifo + +From: Ben Dooks + +[ Upstream commit 68a16708d2503b6303d67abd43801e2ca40c208d ] + +In the s3c64xx_flush_fifo() code, the loops counter is post-decremented +in the do { } while(test && loops--) condition. This means the loops is +left at the unsigned equivalent of -1 if the loop times out. The test +after will never pass as if tests for loops == 0. + +Signed-off-by: Ben Dooks +Fixes: 230d42d422e7 ("spi: Add s3c64xx SPI Controller driver") +Reviewed-by: Andi Shyti +Link: https://patch.msgid.link/20240924134009.116247-2-ben.dooks@codethink.co.uk +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + drivers/spi/spi-s3c64xx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c +index d435df1b715bb..7beea6f930933 100644 +--- a/drivers/spi/spi-s3c64xx.c ++++ b/drivers/spi/spi-s3c64xx.c +@@ -215,7 +215,7 @@ static void s3c64xx_flush_fifo(struct s3c64xx_spi_driver_data *sdd) + loops = msecs_to_loops(1); + do { + val = readl(regs + S3C64XX_SPI_STATUS); +- } while (TX_FIFO_LVL(val, sdd) && loops--); ++ } while (TX_FIFO_LVL(val, sdd) && --loops); + + if (loops == 0) + dev_warn(&sdd->pdev->dev, "Timed out flushing TX FIFO\n"); +@@ -228,7 +228,7 @@ static void s3c64xx_flush_fifo(struct s3c64xx_spi_driver_data *sdd) + readl(regs + S3C64XX_SPI_RX_DATA); + else + break; +- } while (loops--); ++ } while (--loops); + + if (loops == 0) + dev_warn(&sdd->pdev->dev, "Timed out flushing RX FIFO\n"); +-- +2.43.0 + diff --git a/queue-5.10/spi-spi-imx-fix-pm_runtime_set_suspended-with-runtim.patch b/queue-5.10/spi-spi-imx-fix-pm_runtime_set_suspended-with-runtim.patch new file mode 100644 index 00000000000..95939580c36 --- /dev/null +++ b/queue-5.10/spi-spi-imx-fix-pm_runtime_set_suspended-with-runtim.patch @@ -0,0 +1,39 @@ +From d7b07b322672e7396ef9d27d048a12e3a3939b6f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 23 Sep 2024 12:00:13 +0800 +Subject: spi: spi-imx: Fix pm_runtime_set_suspended() with runtime pm enabled + +From: Jinjie Ruan + +[ Upstream commit b6e05ba0844139dde138625906015c974c86aa93 ] + +It is not valid to call pm_runtime_set_suspended() for devices +with runtime PM enabled because it returns -EAGAIN if it is enabled +already and working. So, call pm_runtime_disable() before to fix it. + +Fixes: 43b6bf406cd0 ("spi: imx: fix runtime pm support for !CONFIG_PM") +Signed-off-by: Jinjie Ruan +Link: https://patch.msgid.link/20240923040015.3009329-2-ruanjinjie@huawei.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + drivers/spi/spi-imx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c +index 8566da12d15e3..f1a0073a8700f 100644 +--- a/drivers/spi/spi-imx.c ++++ b/drivers/spi/spi-imx.c +@@ -1756,8 +1756,8 @@ static int spi_imx_probe(struct platform_device *pdev) + spi_imx_sdma_exit(spi_imx); + out_runtime_pm_put: + pm_runtime_dont_use_autosuspend(spi_imx->dev); +- pm_runtime_set_suspended(&pdev->dev); + pm_runtime_disable(spi_imx->dev); ++ pm_runtime_set_suspended(&pdev->dev); + + clk_disable_unprepare(spi_imx->clk_ipg); + out_put_per: +-- +2.43.0 +