From: Greg Kroah-Hartman Date: Tue, 1 Aug 2023 06:21:51 +0000 (+0200) Subject: 6.1-stable patches X-Git-Tag: v5.15.124~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c7c50cf889e47cbc9bfd9f1aa6d5168c614432c4;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: arm64-sme-set-new-vector-length-before-reallocating.patch asoc-wm8904-fill-the-cache-for-wm8904_adc_test_0-register.patch loongarch-bpf-enable-bpf_probe_read-str-on-loongarch.patch loongarch-bpf-fix-check-condition-to-call-lu32id-in-move_imm.patch pm-sleep-wakeirq-fix-wake-irq-arming.patch revert-um-use-swap-to-make-code-cleaner.patch s390-dasd-fix-hanging-device-after-quiesce-resume.patch s390-dasd-print-copy-pair-message-only-for-the-correct-error.patch selftests-mptcp-join-only-check-for-ip6tables-if-needed.patch selftests-rseq-play-nice-with-binaries-statically-linked-against-glibc-2.35.patch soundwire-fix-enumeration-completion.patch --- diff --git a/queue-6.1/arm64-sme-set-new-vector-length-before-reallocating.patch b/queue-6.1/arm64-sme-set-new-vector-length-before-reallocating.patch new file mode 100644 index 00000000000..2e54e959ab3 --- /dev/null +++ b/queue-6.1/arm64-sme-set-new-vector-length-before-reallocating.patch @@ -0,0 +1,54 @@ +From 05d881b85b48c7ac6a7c92ce00aa916c4a84d052 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Wed, 26 Jul 2023 13:12:26 +0100 +Subject: arm64/sme: Set new vector length before reallocating + +From: Mark Brown + +commit 05d881b85b48c7ac6a7c92ce00aa916c4a84d052 upstream. + +As part of fixing the allocation of the buffer for SVE state when changing +SME vector length we introduced an immediate reallocation of the SVE state, +this is also done when changing the SVE vector length for consistency. +Unfortunately this reallocation is done prior to writing the new vector +length to the task struct, meaning the allocation is done with the old +vector length and can lead to memory corruption due to an undersized buffer +being used. + +Move the update of the vector length before the allocation to ensure that +the new vector length is taken into account. + +For some reason this isn't triggering any problems when running tests on +the arm64 fixes branch (even after repeated tries) but is triggering +issues very often after merge into mainline. + +Fixes: d4d5be94a878 ("arm64/fpsimd: Ensure SME storage is allocated after SVE VL changes") +Signed-off-by: Mark Brown +Cc: +Link: https://lore.kernel.org/r/20230726-arm64-fix-sme-fix-v1-1-7752ec58af27@kernel.org +Signed-off-by: Catalin Marinas +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm64/kernel/fpsimd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/arm64/kernel/fpsimd.c ++++ b/arch/arm64/kernel/fpsimd.c +@@ -871,6 +871,8 @@ int vec_set_vector_length(struct task_st + if (task == current) + put_cpu_fpsimd_context(); + ++ task_set_vl(task, type, vl); ++ + /* + * Free the changed states if they are not in use, SME will be + * reallocated to the correct size on next use and we just +@@ -885,8 +887,6 @@ int vec_set_vector_length(struct task_st + if (free_sme) + sme_free(task); + +- task_set_vl(task, type, vl); +- + out: + update_tsk_thread_flag(task, vec_vl_inherit_flag(type), + flags & PR_SVE_VL_INHERIT); diff --git a/queue-6.1/asoc-wm8904-fill-the-cache-for-wm8904_adc_test_0-register.patch b/queue-6.1/asoc-wm8904-fill-the-cache-for-wm8904_adc_test_0-register.patch new file mode 100644 index 00000000000..c2b1eed6a6a --- /dev/null +++ b/queue-6.1/asoc-wm8904-fill-the-cache-for-wm8904_adc_test_0-register.patch @@ -0,0 +1,40 @@ +From f061e2be8689057cb4ec0dbffa9f03e1a23cdcb2 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Sun, 23 Jul 2023 00:27:22 +0100 +Subject: ASoC: wm8904: Fill the cache for WM8904_ADC_TEST_0 register + +From: Mark Brown + +commit f061e2be8689057cb4ec0dbffa9f03e1a23cdcb2 upstream. + +The WM8904_ADC_TEST_0 register is modified as part of updating the OSR +controls but does not have a cache default, leading to errors when we try +to modify these controls in cache only mode with no prior read: + +wm8904 3-001a: ASoC: error at snd_soc_component_update_bits on wm8904.3-001a for register: [0x000000c6] -16 + +Add a read of the register to probe() to fill the cache and avoid both the +error messages and the misconfiguration of the chip which will result. + +Acked-by: Charles Keepax +Signed-off-by: Mark Brown +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20230723-asoc-fix-wm8904-adc-test-read-v1-1-2cdf2edd83fd@kernel.org +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/wm8904.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/sound/soc/codecs/wm8904.c ++++ b/sound/soc/codecs/wm8904.c +@@ -2308,6 +2308,9 @@ static int wm8904_i2c_probe(struct i2c_c + regmap_update_bits(wm8904->regmap, WM8904_BIAS_CONTROL_0, + WM8904_POBCTRL, 0); + ++ /* Fill the cache for the ADC test register */ ++ regmap_read(wm8904->regmap, WM8904_ADC_TEST_0, &val); ++ + /* Can leave the device powered off until we need it */ + regcache_cache_only(wm8904->regmap, true); + regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies), wm8904->supplies); diff --git a/queue-6.1/loongarch-bpf-enable-bpf_probe_read-str-on-loongarch.patch b/queue-6.1/loongarch-bpf-enable-bpf_probe_read-str-on-loongarch.patch new file mode 100644 index 00000000000..f4ffc27a202 --- /dev/null +++ b/queue-6.1/loongarch-bpf-enable-bpf_probe_read-str-on-loongarch.patch @@ -0,0 +1,39 @@ +From de0e30bee86d0f99c696a1fea34474e556a946ec Mon Sep 17 00:00:00 2001 +From: Chenguang Zhao +Date: Fri, 28 Jul 2023 10:30:42 +0800 +Subject: LoongArch: BPF: Enable bpf_probe_read{, str}() on LoongArch + +From: Chenguang Zhao + +commit de0e30bee86d0f99c696a1fea34474e556a946ec upstream. + +Currently nettrace does not work on LoongArch due to missing +bpf_probe_read{,str}() support, with the error message: + + ERROR: failed to load kprobe-based eBPF + ERROR: failed to load kprobe-based bpf + +According to commit 0ebeea8ca8a4d1d ("bpf: Restrict bpf_probe_read{, +str}() only to archs where they work"), we only need to select +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE to add said support, +because LoongArch does have non-overlapping address ranges for kernel +and userspace. + +Cc: stable@vger.kernel.org # 6.1 +Signed-off-by: Chenguang Zhao +Signed-off-by: Huacai Chen +Signed-off-by: Greg Kroah-Hartman +--- + arch/loongarch/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/loongarch/Kconfig ++++ b/arch/loongarch/Kconfig +@@ -10,6 +10,7 @@ config LOONGARCH + select ARCH_ENABLE_MEMORY_HOTPLUG + select ARCH_ENABLE_MEMORY_HOTREMOVE + select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI ++ select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE + select ARCH_HAS_PTE_SPECIAL + select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST + select ARCH_INLINE_READ_LOCK if !PREEMPTION diff --git a/queue-6.1/loongarch-bpf-fix-check-condition-to-call-lu32id-in-move_imm.patch b/queue-6.1/loongarch-bpf-fix-check-condition-to-call-lu32id-in-move_imm.patch new file mode 100644 index 00000000000..f5126349e61 --- /dev/null +++ b/queue-6.1/loongarch-bpf-fix-check-condition-to-call-lu32id-in-move_imm.patch @@ -0,0 +1,37 @@ +From 4eece7e6de94d833c8aeed2f438faf487cbf94ff Mon Sep 17 00:00:00 2001 +From: Tiezhu Yang +Date: Fri, 28 Jul 2023 10:30:42 +0800 +Subject: LoongArch: BPF: Fix check condition to call lu32id in move_imm() + +From: Tiezhu Yang + +commit 4eece7e6de94d833c8aeed2f438faf487cbf94ff upstream. + +As the code comment says, the initial aim is to reduce one instruction +in some corner cases, if bit[51:31] is all 0 or all 1, no need to call +lu32id. That is to say, it should call lu32id only if bit[51:31] is not +all 0 and not all 1. The current code always call lu32id, the result is +right but the logic is unexpected and wrong, fix it. + +Cc: stable@vger.kernel.org # 6.1 +Fixes: 5dc615520c4d ("LoongArch: Add BPF JIT support") +Reported-by: Colin King (gmail) +Closes: https://lore.kernel.org/all/bcf97046-e336-712a-ac68-7fd194f2953e@gmail.com/ +Signed-off-by: Tiezhu Yang +Signed-off-by: Huacai Chen +Signed-off-by: Greg Kroah-Hartman +--- + arch/loongarch/net/bpf_jit.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/loongarch/net/bpf_jit.h ++++ b/arch/loongarch/net/bpf_jit.h +@@ -148,7 +148,7 @@ static inline void move_imm(struct jit_c + * no need to call lu32id to do a new filled operation. + */ + imm_51_31 = (imm >> 31) & 0x1fffff; +- if (imm_51_31 != 0 || imm_51_31 != 0x1fffff) { ++ if (imm_51_31 != 0 && imm_51_31 != 0x1fffff) { + /* lu32id rd, imm_51_32 */ + imm_51_32 = (imm >> 32) & 0xfffff; + emit_insn(ctx, lu32id, rd, imm_51_32); diff --git a/queue-6.1/pm-sleep-wakeirq-fix-wake-irq-arming.patch b/queue-6.1/pm-sleep-wakeirq-fix-wake-irq-arming.patch new file mode 100644 index 00000000000..0ad647804ac --- /dev/null +++ b/queue-6.1/pm-sleep-wakeirq-fix-wake-irq-arming.patch @@ -0,0 +1,88 @@ +From 8527beb12087238d4387607597b4020bc393c4b4 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 13 Jul 2023 16:57:39 +0200 +Subject: PM: sleep: wakeirq: fix wake irq arming + +From: Johan Hovold + +commit 8527beb12087238d4387607597b4020bc393c4b4 upstream. + +The decision whether to enable a wake irq during suspend can not be done +based on the runtime PM state directly as a driver may use wake irqs +without implementing runtime PM. Such drivers specifically leave the +state set to the default 'suspended' and the wake irq is thus never +enabled at suspend. + +Add a new wake irq flag to track whether a dedicated wake irq has been +enabled at runtime suspend and therefore must not be enabled at system +suspend. + +Note that pm_runtime_enabled() can not be used as runtime PM is always +disabled during late suspend. + +Fixes: 69728051f5bf ("PM / wakeirq: Fix unbalanced IRQ enable for wakeirq") +Cc: 4.16+ # 4.16+ +Signed-off-by: Johan Hovold +Reviewed-by: Tony Lindgren +Tested-by: Tony Lindgren +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman +--- + drivers/base/power/power.h | 1 + + drivers/base/power/wakeirq.c | 12 ++++++++---- + 2 files changed, 9 insertions(+), 4 deletions(-) + +--- a/drivers/base/power/power.h ++++ b/drivers/base/power/power.h +@@ -29,6 +29,7 @@ extern u64 pm_runtime_active_time(struct + #define WAKE_IRQ_DEDICATED_MASK (WAKE_IRQ_DEDICATED_ALLOCATED | \ + WAKE_IRQ_DEDICATED_MANAGED | \ + WAKE_IRQ_DEDICATED_REVERSE) ++#define WAKE_IRQ_DEDICATED_ENABLED BIT(3) + + struct wake_irq { + struct device *dev; +--- a/drivers/base/power/wakeirq.c ++++ b/drivers/base/power/wakeirq.c +@@ -314,8 +314,10 @@ void dev_pm_enable_wake_irq_check(struct + return; + + enable: +- if (!can_change_status || !(wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) ++ if (!can_change_status || !(wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) { + enable_irq(wirq->irq); ++ wirq->status |= WAKE_IRQ_DEDICATED_ENABLED; ++ } + } + + /** +@@ -336,8 +338,10 @@ void dev_pm_disable_wake_irq_check(struc + if (cond_disable && (wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) + return; + +- if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) ++ if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) { ++ wirq->status &= ~WAKE_IRQ_DEDICATED_ENABLED; + disable_irq_nosync(wirq->irq); ++ } + } + + /** +@@ -376,7 +380,7 @@ void dev_pm_arm_wake_irq(struct wake_irq + + if (device_may_wakeup(wirq->dev)) { + if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && +- !pm_runtime_status_suspended(wirq->dev)) ++ !(wirq->status & WAKE_IRQ_DEDICATED_ENABLED)) + enable_irq(wirq->irq); + + enable_irq_wake(wirq->irq); +@@ -399,7 +403,7 @@ void dev_pm_disarm_wake_irq(struct wake_ + disable_irq_wake(wirq->irq); + + if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && +- !pm_runtime_status_suspended(wirq->dev)) ++ !(wirq->status & WAKE_IRQ_DEDICATED_ENABLED)) + disable_irq_nosync(wirq->irq); + } + } diff --git a/queue-6.1/revert-um-use-swap-to-make-code-cleaner.patch b/queue-6.1/revert-um-use-swap-to-make-code-cleaner.patch new file mode 100644 index 00000000000..bb08bcb8015 --- /dev/null +++ b/queue-6.1/revert-um-use-swap-to-make-code-cleaner.patch @@ -0,0 +1,68 @@ +From dddfa05eb58076ad60f9a66e7155a5b3502b2dd5 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Mon, 24 Jul 2023 17:31:31 +0300 +Subject: Revert "um: Use swap() to make code cleaner" + +From: Andy Shevchenko + +commit dddfa05eb58076ad60f9a66e7155a5b3502b2dd5 upstream. + +This reverts commit 9b0da3f22307af693be80f5d3a89dc4c7f360a85. + +The sigio.c is clearly user space code which is handled by +arch/um/scripts/Makefile.rules (see USER_OBJS rule). + +The above mentioned commit simply broke this agreement, +we may not use Linux kernel internal headers in them without +thorough thinking. + +Hence, revert the wrong commit. + +Link: https://lkml.kernel.org/r/20230724143131.30090-1-andriy.shevchenko@linux.intel.com +Signed-off-by: Andy Shevchenko +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202307212304.cH79zJp1-lkp@intel.com/ +Cc: Anton Ivanov +Cc: Herve Codina +Cc: Jason A. Donenfeld +Cc: Johannes Berg +Cc: Rasmus Villemoes +Cc: Richard Weinberger +Cc: Yang Guang +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +--- + arch/um/os-Linux/sigio.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +--- a/arch/um/os-Linux/sigio.c ++++ b/arch/um/os-Linux/sigio.c +@@ -3,7 +3,6 @@ + * Copyright (C) 2002 - 2008 Jeff Dike (jdike@{addtoit,linux.intel}.com) + */ + +-#include + #include + #include + #include +@@ -51,7 +50,7 @@ static struct pollfds all_sigio_fds; + + static int write_sigio_thread(void *unused) + { +- struct pollfds *fds; ++ struct pollfds *fds, tmp; + struct pollfd *p; + int i, n, respond_fd; + char c; +@@ -78,7 +77,9 @@ static int write_sigio_thread(void *unus + "write_sigio_thread : " + "read on socket failed, " + "err = %d\n", errno); +- swap(current_poll, next_poll); ++ tmp = current_poll; ++ current_poll = next_poll; ++ next_poll = tmp; + respond_fd = sigio_private[1]; + } + else { diff --git a/queue-6.1/s390-dasd-fix-hanging-device-after-quiesce-resume.patch b/queue-6.1/s390-dasd-fix-hanging-device-after-quiesce-resume.patch new file mode 100644 index 00000000000..44397077432 --- /dev/null +++ b/queue-6.1/s390-dasd-fix-hanging-device-after-quiesce-resume.patch @@ -0,0 +1,44 @@ +From 05f1d8ed03f547054efbc4d29bb7991c958ede95 Mon Sep 17 00:00:00 2001 +From: Stefan Haberland +Date: Fri, 21 Jul 2023 21:36:44 +0200 +Subject: s390/dasd: fix hanging device after quiesce/resume + +From: Stefan Haberland + +commit 05f1d8ed03f547054efbc4d29bb7991c958ede95 upstream. + +Quiesce and resume are functions that tell the DASD driver to stop/resume +issuing I/Os to a specific DASD. + +On resume dasd_schedule_block_bh() is called to kick handling of IO +requests again. This does unfortunately not cover internal requests which +are used for path verification for example. + +This could lead to a hanging device when a path event or anything else +that triggers internal requests occurs on a quiesced device. + +Fix by also calling dasd_schedule_device_bh() which triggers handling of +internal requests on resume. + +Fixes: 8e09f21574ea ("[S390] dasd: add hyper PAV support to DASD device driver, part 1") + +Cc: stable@vger.kernel.org +Signed-off-by: Stefan Haberland +Reviewed-by: Jan Hoeppner +Link: https://lore.kernel.org/r/20230721193647.3889634-2-sth@linux.ibm.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/s390/block/dasd_ioctl.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/s390/block/dasd_ioctl.c ++++ b/drivers/s390/block/dasd_ioctl.c +@@ -131,6 +131,7 @@ static int dasd_ioctl_resume(struct dasd + spin_unlock_irqrestore(get_ccwdev_lock(base->cdev), flags); + + dasd_schedule_block_bh(block); ++ dasd_schedule_device_bh(base); + return 0; + } + diff --git a/queue-6.1/s390-dasd-print-copy-pair-message-only-for-the-correct-error.patch b/queue-6.1/s390-dasd-print-copy-pair-message-only-for-the-correct-error.patch new file mode 100644 index 00000000000..5f16af812b0 --- /dev/null +++ b/queue-6.1/s390-dasd-print-copy-pair-message-only-for-the-correct-error.patch @@ -0,0 +1,56 @@ +From 856d8e3c633b183df23549ce760ae84478a7098d Mon Sep 17 00:00:00 2001 +From: Stefan Haberland +Date: Fri, 21 Jul 2023 21:36:47 +0200 +Subject: s390/dasd: print copy pair message only for the correct error + +From: Stefan Haberland + +commit 856d8e3c633b183df23549ce760ae84478a7098d upstream. + +The DASD driver has certain types of requests that might be rejected by +the storage server or z/VM because they are not supported. Since the +missing support of the command is not a real issue there is no user +visible kernel error message for this. + +For copy pair setups there is a specific error that IO is not allowed on +secondary devices. This error case is explicitly handled and an error +message is printed. + +The code checking for the error did use a bitwise 'and' that is used to +check for specific bits. But in this case the whole sense byte has to +match. + +This leads to the problem that the copy pair related error message is +erroneously printed for other error cases that are usually not reported. +This might heavily confuse users and lead to follow on actions that might +disrupt application processing. + +Fix by checking the sense byte for the exact value and not single bits. + +Cc: stable@vger.kernel.org # 6.1+ +Fixes: 1fca631a1185 ("s390/dasd: suppress generic error messages for PPRC secondary devices") +Signed-off-by: Stefan Haberland +Reviewed-by: Jan Hoeppner +Link: https://lore.kernel.org/r/20230721193647.3889634-5-sth@linux.ibm.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/s390/block/dasd_3990_erp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c +index 91e9a17b848e..89957bb7244d 100644 +--- a/drivers/s390/block/dasd_3990_erp.c ++++ b/drivers/s390/block/dasd_3990_erp.c +@@ -1050,7 +1050,7 @@ dasd_3990_erp_com_rej(struct dasd_ccw_req * erp, char *sense) + dev_err(&device->cdev->dev, "An I/O request was rejected" + " because writing is inhibited\n"); + erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); +- } else if (sense[7] & SNS7_INVALID_ON_SEC) { ++ } else if (sense[7] == SNS7_INVALID_ON_SEC) { + dev_err(&device->cdev->dev, "An I/O request was rejected on a copy pair secondary device\n"); + /* suppress dump of sense data for this error */ + set_bit(DASD_CQR_SUPPRESS_CR, &erp->refers->flags); +-- +2.41.0 + diff --git a/queue-6.1/selftests-mptcp-join-only-check-for-ip6tables-if-needed.patch b/queue-6.1/selftests-mptcp-join-only-check-for-ip6tables-if-needed.patch new file mode 100644 index 00000000000..dde63a7b59a --- /dev/null +++ b/queue-6.1/selftests-mptcp-join-only-check-for-ip6tables-if-needed.patch @@ -0,0 +1,38 @@ +From 016e7ba47f33064fbef8c4307a2485d2669dfd03 Mon Sep 17 00:00:00 2001 +From: Matthieu Baerts +Date: Tue, 25 Jul 2023 11:34:55 -0700 +Subject: selftests: mptcp: join: only check for ip6tables if needed + +From: Matthieu Baerts + +commit 016e7ba47f33064fbef8c4307a2485d2669dfd03 upstream. + +If 'iptables-legacy' is available, 'ip6tables-legacy' command will be +used instead of 'ip6tables'. So no need to look if 'ip6tables' is +available in this case. + +Cc: stable@vger.kernel.org +Fixes: 0c4cd3f86a40 ("selftests: mptcp: join: use 'iptables-legacy' if available") +Acked-by: Paolo Abeni +Signed-off-by: Matthieu Baerts +Signed-off-by: Mat Martineau +Link: https://lore.kernel.org/r/20230725-send-net-20230725-v1-1-6f60fe7137a9@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -151,9 +151,7 @@ check_tools() + elif ! iptables -V &> /dev/null; then + echo "SKIP: Could not run all tests without iptables tool" + exit $ksft_skip +- fi +- +- if ! ip6tables -V &> /dev/null; then ++ elif ! ip6tables -V &> /dev/null; then + echo "SKIP: Could not run all tests without ip6tables tool" + exit $ksft_skip + fi diff --git a/queue-6.1/selftests-rseq-play-nice-with-binaries-statically-linked-against-glibc-2.35.patch b/queue-6.1/selftests-rseq-play-nice-with-binaries-statically-linked-against-glibc-2.35.patch new file mode 100644 index 00000000000..36574b33d1a --- /dev/null +++ b/queue-6.1/selftests-rseq-play-nice-with-binaries-statically-linked-against-glibc-2.35.patch @@ -0,0 +1,78 @@ +From 3bcbc20942db5d738221cca31a928efc09827069 Mon Sep 17 00:00:00 2001 +From: Sean Christopherson +Date: Fri, 21 Jul 2023 15:33:52 -0700 +Subject: selftests/rseq: Play nice with binaries statically linked against glibc 2.35+ + +From: Sean Christopherson + +commit 3bcbc20942db5d738221cca31a928efc09827069 upstream. + +To allow running rseq and KVM's rseq selftests as statically linked +binaries, initialize the various "trampoline" pointers to point directly +at the expect glibc symbols, and skip the dlysm() lookups if the rseq +size is non-zero, i.e. the binary is statically linked *and* the libc +registered its own rseq. + +Define weak versions of the symbols so as not to break linking against +libc versions that don't support rseq in any capacity. + +The KVM selftests in particular are often statically linked so that they +can be run on targets with very limited runtime environments, i.e. test +machines. + +Fixes: 233e667e1ae3 ("selftests/rseq: Uplift rseq selftests for compatibility with glibc-2.35") +Cc: Aaron Lewis +Cc: kvm@vger.kernel.org +Cc: stable@vger.kernel.org +Signed-off-by: Sean Christopherson +Message-Id: <20230721223352.2333911-1-seanjc@google.com> +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/rseq/rseq.c | 28 ++++++++++++++++++++++------ + 1 file changed, 22 insertions(+), 6 deletions(-) + +--- a/tools/testing/selftests/rseq/rseq.c ++++ b/tools/testing/selftests/rseq/rseq.c +@@ -32,9 +32,17 @@ + #include "../kselftest.h" + #include "rseq.h" + +-static const ptrdiff_t *libc_rseq_offset_p; +-static const unsigned int *libc_rseq_size_p; +-static const unsigned int *libc_rseq_flags_p; ++/* ++ * Define weak versions to play nice with binaries that are statically linked ++ * against a libc that doesn't support registering its own rseq. ++ */ ++__weak ptrdiff_t __rseq_offset; ++__weak unsigned int __rseq_size; ++__weak unsigned int __rseq_flags; ++ ++static const ptrdiff_t *libc_rseq_offset_p = &__rseq_offset; ++static const unsigned int *libc_rseq_size_p = &__rseq_size; ++static const unsigned int *libc_rseq_flags_p = &__rseq_flags; + + /* Offset from the thread pointer to the rseq area. */ + ptrdiff_t rseq_offset; +@@ -108,9 +116,17 @@ int rseq_unregister_current_thread(void) + static __attribute__((constructor)) + void rseq_init(void) + { +- libc_rseq_offset_p = dlsym(RTLD_NEXT, "__rseq_offset"); +- libc_rseq_size_p = dlsym(RTLD_NEXT, "__rseq_size"); +- libc_rseq_flags_p = dlsym(RTLD_NEXT, "__rseq_flags"); ++ /* ++ * If the libc's registered rseq size isn't already valid, it may be ++ * because the binary is dynamically linked and not necessarily due to ++ * libc not having registered a restartable sequence. Try to find the ++ * symbols if that's the case. ++ */ ++ if (!*libc_rseq_size_p) { ++ libc_rseq_offset_p = dlsym(RTLD_NEXT, "__rseq_offset"); ++ libc_rseq_size_p = dlsym(RTLD_NEXT, "__rseq_size"); ++ libc_rseq_flags_p = dlsym(RTLD_NEXT, "__rseq_flags"); ++ } + if (libc_rseq_size_p && libc_rseq_offset_p && libc_rseq_flags_p && + *libc_rseq_size_p != 0) { + /* rseq registration owned by glibc */ diff --git a/queue-6.1/series b/queue-6.1/series index 8582101dcd5..e6b9c823bfb 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -197,3 +197,14 @@ virtio-net-fix-race-between-set-queues-and-probe.patch net-dsa-qca8k-fix-search_and_insert-wrong-handling-of-new-rule.patch net-dsa-qca8k-fix-broken-search_and_del.patch net-dsa-qca8k-fix-mdb-add-del-case-with-0-vid.patch +selftests-rseq-play-nice-with-binaries-statically-linked-against-glibc-2.35.patch +selftests-mptcp-join-only-check-for-ip6tables-if-needed.patch +soundwire-fix-enumeration-completion.patch +revert-um-use-swap-to-make-code-cleaner.patch +loongarch-bpf-fix-check-condition-to-call-lu32id-in-move_imm.patch +loongarch-bpf-enable-bpf_probe_read-str-on-loongarch.patch +s390-dasd-fix-hanging-device-after-quiesce-resume.patch +s390-dasd-print-copy-pair-message-only-for-the-correct-error.patch +asoc-wm8904-fill-the-cache-for-wm8904_adc_test_0-register.patch +arm64-sme-set-new-vector-length-before-reallocating.patch +pm-sleep-wakeirq-fix-wake-irq-arming.patch diff --git a/queue-6.1/soundwire-fix-enumeration-completion.patch b/queue-6.1/soundwire-fix-enumeration-completion.patch new file mode 100644 index 00000000000..5f552e018d2 --- /dev/null +++ b/queue-6.1/soundwire-fix-enumeration-completion.patch @@ -0,0 +1,70 @@ +From c40d6b3249b11d60e09d81530588f56233d9aa44 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Wed, 5 Jul 2023 14:30:11 +0200 +Subject: soundwire: fix enumeration completion + +From: Johan Hovold + +commit c40d6b3249b11d60e09d81530588f56233d9aa44 upstream. + +The soundwire subsystem uses two completion structures that allow +drivers to wait for soundwire device to become enumerated on the bus and +initialised by their drivers, respectively. + +The code implementing the signalling is currently broken as it does not +signal all current and future waiters and also uses the wrong +reinitialisation function, which can potentially lead to memory +corruption if there are still waiters on the queue. + +Not signalling future waiters specifically breaks sound card probe +deferrals as codec drivers can not tell that the soundwire device is +already attached when being reprobed. Some codec runtime PM +implementations suffer from similar problems as waiting for enumeration +during resume can also timeout despite the device already having been +enumerated. + +Fixes: fb9469e54fa7 ("soundwire: bus: fix race condition with enumeration_complete signaling") +Fixes: a90def068127 ("soundwire: bus: fix race condition with initialization_complete signaling") +Cc: stable@vger.kernel.org # 5.7 +Cc: Pierre-Louis Bossart +Cc: Rander Wang +Signed-off-by: Johan Hovold +Reviewed-by: Pierre-Louis Bossart +Link: https://lore.kernel.org/r/20230705123018.30903-2-johan+linaro@kernel.org +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/soundwire/bus.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/soundwire/bus.c ++++ b/drivers/soundwire/bus.c +@@ -884,8 +884,8 @@ static void sdw_modify_slave_status(stru + "initializing enumeration and init completion for Slave %d\n", + slave->dev_num); + +- init_completion(&slave->enumeration_complete); +- init_completion(&slave->initialization_complete); ++ reinit_completion(&slave->enumeration_complete); ++ reinit_completion(&slave->initialization_complete); + + } else if ((status == SDW_SLAVE_ATTACHED) && + (slave->status == SDW_SLAVE_UNATTACHED)) { +@@ -893,7 +893,7 @@ static void sdw_modify_slave_status(stru + "signaling enumeration completion for Slave %d\n", + slave->dev_num); + +- complete(&slave->enumeration_complete); ++ complete_all(&slave->enumeration_complete); + } + slave->status = status; + mutex_unlock(&bus->bus_lock); +@@ -1916,7 +1916,7 @@ int sdw_handle_slave_status(struct sdw_b + "signaling initialization completion for Slave %d\n", + slave->dev_num); + +- complete(&slave->initialization_complete); ++ complete_all(&slave->initialization_complete); + + /* + * If the manager became pm_runtime active, the peripherals will be