From 7af500cd5566c39ce680f430c8a6764e32e4d64e Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Sat, 15 Mar 2025 09:34:17 -0400 Subject: [PATCH] Fixes for 6.1 Signed-off-by: Sasha Levin --- ...irq-override-for-eluktronics-mech-17.patch | 43 ++++ ...sc-setarch-test-of-util-linux-by-rem.patch | 152 ++++++++++++ ...ek-limit-mic-boost-on-positivo-arn50.patch | 36 +++ ...era-use-fsleep-in-up-down-dapm-event.patch | 174 ++++++++++++++ ...-rsnd-adjust-convert-rate-limitation.patch | 216 ++++++++++++++++++ ...indicate-warning-on-rsnd_kctrl_accep.patch | 125 ++++++++++ ...da-add-softdep-pre-to-snd-hda-codec-.patch | 44 ++++ .../asoc-tas2764-fix-power-control-mask.patch | 35 +++ ...764-set-the-sdout-polarity-correctly.patch | 84 +++++++ queue-6.1/asoc-tas2770-fix-volume-scale.patch | 36 +++ ...cache-of-name-bio-108-already-exists.patch | 41 ++++ ...not-override-forced-connector-status.patch | 35 +++ ...on-t-truncate-cached-mutated-symlink.patch | 119 ++++++++++ ...-the-f6-key-on-the-omoton-kb066-keyb.patch | 53 +++++ ...ple-magic-keyboard-a3203-usb-c-suppo.patch | 59 +++++ ...n-functional-sensor-in-hp-5mp-camera.patch | 56 +++++ ...d-fix-the-length-of-mng_sync_fw_cloc.patch | 56 +++++ ...d-send-clock-sync-message-immediatel.patch | 77 +++++++ ..._migration_base-with-__always_inline.patch | 79 +++++++ ...bsan-shift-out-of-bounds-warning-in-.patch | 42 ++++ .../mptcp-safety-check-before-fallback.patch | 41 ++++ ...n_mbim-silence-sequence-number-glitc.patch | 61 +++++ ...ght-to-connecting-state-when-initial.patch | 43 ++++ ...-entering-live-from-connecting-state.patch | 38 +++ ...cer-fa100-for-non-uniqueue-identifie.patch | 86 +++++++ ...basic-support-for-the-c2htermreq-pdu.patch | 103 +++++++++ ...ck-queue-state-is-live-in-state-lock.patch | 79 +++++++ ...se-better-start-period-for-frequency.patch | 150 ++++++++++++ ...nkpad_acpi-fix-invalid-fan-speed-on-.patch | 106 +++++++++ ...nkpad_acpi-support-for-v9-dytc-platf.patch | 122 ++++++++++ ...t_device-on-an-error-path-in-powerca.patch | 46 ++++ ...ix-chpid-configure-attribute-caching.patch | 60 +++++ ...ake_up_q-s-write-to-task-wake_q.next.patch | 41 ++++ ...p_noio-to-avoid-circular-locking-dep.patch | 59 +++++ ...0-fix-kernel-oops-when-debug-level-2.patch | 38 +++ ...ned-behavior-in-left-shift-operation.patch | 43 ++++ queue-6.1/series | 41 ++++ ...oisy-when-tree-connecting-to-dfs-int.patch | 44 ++++ ...cooling-remove-structure-member-docu.patch | 41 ++++ .../vboxsf-fix-building-with-gcc-15.patch | 51 +++++ ...rq-define-trace-events-conditionally.patch | 48 ++++ ...wiotlb-mark-xen_swiotlb_fixup-__init.patch | 37 +++ 42 files changed, 2940 insertions(+) create mode 100644 queue-6.1/acpi-resource-irq-override-for-eluktronics-mech-17.patch create mode 100644 queue-6.1/alpha-elf-fix-misc-setarch-test-of-util-linux-by-rem.patch create mode 100644 queue-6.1/alsa-hda-realtek-limit-mic-boost-on-positivo-arn50.patch create mode 100644 queue-6.1/asoc-arizona-madera-use-fsleep-in-up-down-dapm-event.patch create mode 100644 queue-6.1/asoc-rsnd-adjust-convert-rate-limitation.patch create mode 100644 queue-6.1/asoc-rsnd-don-t-indicate-warning-on-rsnd_kctrl_accep.patch create mode 100644 queue-6.1/asoc-sof-intel-hda-add-softdep-pre-to-snd-hda-codec-.patch create mode 100644 queue-6.1/asoc-tas2764-fix-power-control-mask.patch create mode 100644 queue-6.1/asoc-tas2764-set-the-sdout-polarity-correctly.patch create mode 100644 queue-6.1/asoc-tas2770-fix-volume-scale.patch create mode 100644 queue-6.1/block-fix-kmem_cache-of-name-bio-108-already-exists.patch create mode 100644 queue-6.1/drm-nouveau-do-not-override-forced-connector-status.patch create mode 100644 queue-6.1/fuse-don-t-truncate-cached-mutated-symlink.patch create mode 100644 queue-6.1/hid-apple-fix-up-the-f6-key-on-the-omoton-kb066-keyb.patch create mode 100644 queue-6.1/hid-hid-apple-apple-magic-keyboard-a3203-usb-c-suppo.patch create mode 100644 queue-6.1/hid-ignore-non-functional-sensor-in-hp-5mp-camera.patch create mode 100644 queue-6.1/hid-intel-ish-hid-fix-the-length-of-mng_sync_fw_cloc.patch create mode 100644 queue-6.1/hid-intel-ish-hid-send-clock-sync-message-immediatel.patch create mode 100644 queue-6.1/hrtimers-mark-is_migration_base-with-__always_inline.patch create mode 100644 queue-6.1/iscsi_ibft-fix-ubsan-shift-out-of-bounds-warning-in-.patch create mode 100644 queue-6.1/mptcp-safety-check-before-fallback.patch create mode 100644 queue-6.1/net-wwan-mhi_wwan_mbim-silence-sequence-number-glitc.patch create mode 100644 queue-6.1/nvme-fc-go-straight-to-connecting-state-when-initial.patch create mode 100644 queue-6.1/nvme-only-allow-entering-live-from-connecting-state.patch create mode 100644 queue-6.1/nvme-pci-quirk-acer-fa100-for-non-uniqueue-identifie.patch create mode 100644 queue-6.1/nvme-tcp-add-basic-support-for-the-c2htermreq-pdu.patch create mode 100644 queue-6.1/nvmet-rdma-recheck-queue-state-is-live-in-state-lock.patch create mode 100644 queue-6.1/perf-x86-intel-use-better-start-period-for-frequency.patch create mode 100644 queue-6.1/platform-x86-thinkpad_acpi-fix-invalid-fan-speed-on-.patch create mode 100644 queue-6.1/platform-x86-thinkpad_acpi-support-for-v9-dytc-platf.patch create mode 100644 queue-6.1/powercap-call-put_device-on-an-error-path-in-powerca.patch create mode 100644 queue-6.1/s390-cio-fix-chpid-configure-attribute-caching.patch create mode 100644 queue-6.1/sched-clarify-wake_up_q-s-write-to-task-wake_q.next.patch create mode 100644 queue-6.1/scsi-core-use-gfp_noio-to-avoid-circular-locking-dep.patch create mode 100644 queue-6.1/scsi-qla1280-fix-kernel-oops-when-debug-level-2.patch create mode 100644 queue-6.1/sctp-fix-undefined-behavior-in-left-shift-operation.patch create mode 100644 queue-6.1/smb-client-fix-noisy-when-tree-connecting-to-dfs-int.patch create mode 100644 queue-6.1/thermal-cpufreq_cooling-remove-structure-member-docu.patch create mode 100644 queue-6.1/vboxsf-fix-building-with-gcc-15.patch create mode 100644 queue-6.1/x86-irq-define-trace-events-conditionally.patch create mode 100644 queue-6.1/xen-swiotlb-mark-xen_swiotlb_fixup-__init.patch diff --git a/queue-6.1/acpi-resource-irq-override-for-eluktronics-mech-17.patch b/queue-6.1/acpi-resource-irq-override-for-eluktronics-mech-17.patch new file mode 100644 index 0000000000..e603c2f8f0 --- /dev/null +++ b/queue-6.1/acpi-resource-irq-override-for-eluktronics-mech-17.patch @@ -0,0 +1,43 @@ +From 3c492269e6e6ed79dc8cc70fc19be2d17680e01b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 27 Jan 2025 02:39:02 -0700 +Subject: ACPI: resource: IRQ override for Eluktronics MECH-17 + +From: Gannon Kolding + +[ Upstream commit 607ab6f85f4194b644ea95ac5fe660ef575db3b4 ] + +The Eluktronics MECH-17 (GM7RG7N) needs IRQ overriding for the +keyboard to work. + +Adding a DMI_MATCH entry for this laptop model makes the internal +keyboard function normally. + +Signed-off-by: Gannon Kolding +Link: https://patch.msgid.link/20250127093902.328361-1-gannon.kolding@gmail.com +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Sasha Levin +--- + drivers/acpi/resource.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c +index 34cb7894e54ee..d4fb1436f9f57 100644 +--- a/drivers/acpi/resource.c ++++ b/drivers/acpi/resource.c +@@ -553,6 +553,12 @@ static const struct dmi_system_id maingear_laptop[] = { + DMI_MATCH(DMI_BOARD_NAME, "RP-15"), + }, + }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "Eluktronics Inc."), ++ DMI_MATCH(DMI_BOARD_NAME, "MECH-17"), ++ }, ++ }, + { + /* TongFang GM6XGxX/TUXEDO Stellaris 16 Gen5 AMD */ + .matches = { +-- +2.39.5 + diff --git a/queue-6.1/alpha-elf-fix-misc-setarch-test-of-util-linux-by-rem.patch b/queue-6.1/alpha-elf-fix-misc-setarch-test-of-util-linux-by-rem.patch new file mode 100644 index 0000000000..467d206080 --- /dev/null +++ b/queue-6.1/alpha-elf-fix-misc-setarch-test-of-util-linux-by-rem.patch @@ -0,0 +1,152 @@ +From bd664d74f73b346916b355bf70c6b8ccb10fe79f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 12 Jan 2025 23:39:01 -0600 +Subject: alpha/elf: Fix misc/setarch test of util-linux by removing 32bit + support + +From: Eric W. Biederman + +[ Upstream commit b029628be267cba3c7684ec684749fe3e4372398 ] + +Richard Henderson writes[1]: + +> There was a Spec benchmark (I forget which) which was memory bound and ran +> twice as fast with 32-bit pointers. +> +> I copied the idea from DEC to the ELF abi, but never did all the other work +> to allow the toolchain to take advantage. +> +> Amusingly, a later Spec changed the benchmark data sets to not fit into a +> 32-bit address space, specifically because of this. +> +> I expect one could delete the ELF bit and personality and no one would +> notice. Not even the 10 remaining Alpha users. + +In [2] it was pointed out that parts of setarch weren't working +properly on alpha because it has it's own SET_PERSONALITY +implementation. In the discussion that followed Richard Henderson +pointed out that the 32bit pointer support for alpha was never +completed. + +Fix this by removing alpha's 32bit pointer support. + +As a bit of paranoia refuse to execute any alpha binaries that have +the EF_ALPHA_32BIT flag set. Just in case someone somewhere has +binaries that try to use alpha's 32bit pointer support. + +Link: https://lkml.kernel.org/r/CAFXwXrkgu=4Qn-v1PjnOR4SG0oUb9LSa0g6QXpBq4ttm52pJOQ@mail.gmail.com [1] +Link: https://lkml.kernel.org/r/20250103140148.370368-1-glaubitz@physik.fu-berlin.de [2] +Signed-off-by: Eric W. Biederman +Reviewed-by: Richard Henderson +Reviewed-by: Arnd Bergmann +Reviewed-by: John Paul Adrian Glaubitz +Tested-by: John Paul Adrian Glaubitz +Link: https://lore.kernel.org/r/87y0zfs26i.fsf_-_@email.froward.int.ebiederm.org +Signed-off-by: Kees Cook +Signed-off-by: Sasha Levin +--- + arch/alpha/include/asm/elf.h | 6 +----- + arch/alpha/include/asm/pgtable.h | 2 +- + arch/alpha/include/asm/processor.h | 8 ++------ + arch/alpha/kernel/osf_sys.c | 11 ++--------- + 4 files changed, 6 insertions(+), 21 deletions(-) + +diff --git a/arch/alpha/include/asm/elf.h b/arch/alpha/include/asm/elf.h +index 8049997fa372a..2039a8c8d5473 100644 +--- a/arch/alpha/include/asm/elf.h ++++ b/arch/alpha/include/asm/elf.h +@@ -74,7 +74,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; + /* + * This is used to ensure we don't load something for the wrong architecture. + */ +-#define elf_check_arch(x) ((x)->e_machine == EM_ALPHA) ++#define elf_check_arch(x) (((x)->e_machine == EM_ALPHA) && !((x)->e_flags & EF_ALPHA_32BIT)) + + /* + * These are used to set parameters in the core dumps. +@@ -145,10 +145,6 @@ extern int dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task); + : amask (AMASK_CIX) ? "ev6" : "ev67"); \ + }) + +-#define SET_PERSONALITY(EX) \ +- set_personality(((EX).e_flags & EF_ALPHA_32BIT) \ +- ? PER_LINUX_32BIT : PER_LINUX) +- + extern int alpha_l1i_cacheshape; + extern int alpha_l1d_cacheshape; + extern int alpha_l2_cacheshape; +diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgtable.h +index 9e45f6735d5d2..6fe4e9deeb5ef 100644 +--- a/arch/alpha/include/asm/pgtable.h ++++ b/arch/alpha/include/asm/pgtable.h +@@ -322,7 +322,7 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) + + extern void paging_init(void); + +-/* We have our own get_unmapped_area to cope with ADDR_LIMIT_32BIT. */ ++/* We have our own get_unmapped_area */ + #define HAVE_ARCH_UNMAPPED_AREA + + #endif /* _ALPHA_PGTABLE_H */ +diff --git a/arch/alpha/include/asm/processor.h b/arch/alpha/include/asm/processor.h +index 714abe494e5fd..916a2dd782c1a 100644 +--- a/arch/alpha/include/asm/processor.h ++++ b/arch/alpha/include/asm/processor.h +@@ -8,23 +8,19 @@ + #ifndef __ASM_ALPHA_PROCESSOR_H + #define __ASM_ALPHA_PROCESSOR_H + +-#include /* for ADDR_LIMIT_32BIT */ +- + /* + * We have a 42-bit user address space: 4TB user VM... + */ + #define TASK_SIZE (0x40000000000UL) + +-#define STACK_TOP \ +- (current->personality & ADDR_LIMIT_32BIT ? 0x80000000 : 0x00120000000UL) ++#define STACK_TOP (0x00120000000UL) + + #define STACK_TOP_MAX 0x00120000000UL + + /* This decides where the kernel will search for a free chunk of vm + * space during mmap's. + */ +-#define TASK_UNMAPPED_BASE \ +- ((current->personality & ADDR_LIMIT_32BIT) ? 0x40000000 : TASK_SIZE / 2) ++#define TASK_UNMAPPED_BASE (TASK_SIZE / 2) + + /* This is dead. Everything has been moved to thread_info. */ + struct thread_struct { }; +diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c +index c54469b369cb6..03b70b6c92502 100644 +--- a/arch/alpha/kernel/osf_sys.c ++++ b/arch/alpha/kernel/osf_sys.c +@@ -1213,8 +1213,7 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p) + return ret; + } + +-/* Get an address range which is currently unmapped. Similar to the +- generic version except that we know how to honor ADDR_LIMIT_32BIT. */ ++/* Get an address range which is currently unmapped. */ + + static unsigned long + arch_get_unmapped_area_1(unsigned long addr, unsigned long len, +@@ -1236,13 +1235,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) + { +- unsigned long limit; +- +- /* "32 bit" actually means 31 bit, since pointers sign extend. */ +- if (current->personality & ADDR_LIMIT_32BIT) +- limit = 0x80000000; +- else +- limit = TASK_SIZE; ++ unsigned long limit = TASK_SIZE; + + if (len > limit) + return -ENOMEM; +-- +2.39.5 + diff --git a/queue-6.1/alsa-hda-realtek-limit-mic-boost-on-positivo-arn50.patch b/queue-6.1/alsa-hda-realtek-limit-mic-boost-on-positivo-arn50.patch new file mode 100644 index 0000000000..0973b722e0 --- /dev/null +++ b/queue-6.1/alsa-hda-realtek-limit-mic-boost-on-positivo-arn50.patch @@ -0,0 +1,36 @@ +From 4e7434affee66fd0a9b009a8bdaccbd01200df37 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 1 Feb 2025 11:39:30 -0300 +Subject: ALSA: hda/realtek: Limit mic boost on Positivo ARN50 + +From: Edson Juliano Drosdeck + +[ Upstream commit 76b0a22d4cf7dc9091129560fdc04e73eb9db4cb ] + +The internal mic boost on the Positivo ARN50 is too high. +Fix this by applying the ALC269_FIXUP_LIMIT_INT_MIC_BOOST fixup to the machine +to limit the gain. + +Signed-off-by: Edson Juliano Drosdeck +Link: https://patch.msgid.link/20250201143930.25089-1-edson.drosdeck@gmail.com +Signed-off-by: Takashi Iwai +Signed-off-by: Sasha Levin +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c +index e5e222e74d783..102af43f74423 100644 +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -10333,6 +10333,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { + SND_PCI_QUIRK(0x1d72, 0x1945, "Redmi G", ALC256_FIXUP_ASUS_HEADSET_MIC), + SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC), + SND_PCI_QUIRK(0x1f66, 0x0105, "Ayaneo Portable Game Player", ALC287_FIXUP_CS35L41_I2C_2), ++ SND_PCI_QUIRK(0x2014, 0x800a, "Positivo ARN50", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), + SND_PCI_QUIRK(0x2782, 0x0214, "VAIO VJFE-CL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), + SND_PCI_QUIRK(0x2782, 0x0228, "Infinix ZERO BOOK 13", ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13), + SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO), +-- +2.39.5 + diff --git a/queue-6.1/asoc-arizona-madera-use-fsleep-in-up-down-dapm-event.patch b/queue-6.1/asoc-arizona-madera-use-fsleep-in-up-down-dapm-event.patch new file mode 100644 index 0000000000..dac542c7a4 --- /dev/null +++ b/queue-6.1/asoc-arizona-madera-use-fsleep-in-up-down-dapm-event.patch @@ -0,0 +1,174 @@ +From 3ffc480706f1ce93c074a5e4540569563a959b3a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 5 Feb 2025 16:08:46 +0000 +Subject: ASoC: arizona/madera: use fsleep() in up/down DAPM event delays. + +From: Vitaly Rodionov + +[ Upstream commit 679074942c2502a95842a80471d8fb718165ac77 ] + +Using `fsleep` instead of `msleep` resolves some customer complaints +regarding the precision of up/down DAPM event timing. `fsleep()` +automatically selects the appropriate sleep function, making the delay +time more predictable. + +Signed-off-by: Vitaly Rodionov +Link: https://patch.msgid.link/20250205160849.500306-1-vitalyr@opensource.cirrus.com +Reviewed-by: Charles Keepax +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/arizona.c | 14 +++++++------- + sound/soc/codecs/madera.c | 10 +++++----- + sound/soc/codecs/wm5110.c | 8 ++++---- + 3 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c +index 7434aeeda292e..7a74941c608f8 100644 +--- a/sound/soc/codecs/arizona.c ++++ b/sound/soc/codecs/arizona.c +@@ -967,7 +967,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + case ARIZONA_OUT3L_ENA_SHIFT: + case ARIZONA_OUT3R_ENA_SHIFT: + priv->out_up_pending++; +- priv->out_up_delay += 17; ++ priv->out_up_delay += 17000; + break; + case ARIZONA_OUT4L_ENA_SHIFT: + case ARIZONA_OUT4R_ENA_SHIFT: +@@ -977,7 +977,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + case WM8997: + break; + default: +- priv->out_up_delay += 10; ++ priv->out_up_delay += 10000; + break; + } + break; +@@ -999,7 +999,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + if (!priv->out_up_pending && priv->out_up_delay) { + dev_dbg(component->dev, "Power up delay: %d\n", + priv->out_up_delay); +- msleep(priv->out_up_delay); ++ fsleep(priv->out_up_delay); + priv->out_up_delay = 0; + } + break; +@@ -1017,7 +1017,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + case ARIZONA_OUT3L_ENA_SHIFT: + case ARIZONA_OUT3R_ENA_SHIFT: + priv->out_down_pending++; +- priv->out_down_delay++; ++ priv->out_down_delay += 1000; + break; + case ARIZONA_OUT4L_ENA_SHIFT: + case ARIZONA_OUT4R_ENA_SHIFT: +@@ -1028,10 +1028,10 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + break; + case WM8998: + case WM1814: +- priv->out_down_delay += 5; ++ priv->out_down_delay += 5000; + break; + default: +- priv->out_down_delay++; ++ priv->out_down_delay += 1000; + break; + } + break; +@@ -1053,7 +1053,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, + if (!priv->out_down_pending && priv->out_down_delay) { + dev_dbg(component->dev, "Power down delay: %d\n", + priv->out_down_delay); +- msleep(priv->out_down_delay); ++ fsleep(priv->out_down_delay); + priv->out_down_delay = 0; + } + break; +diff --git a/sound/soc/codecs/madera.c b/sound/soc/codecs/madera.c +index b9f19fbd29114..30e680ee10699 100644 +--- a/sound/soc/codecs/madera.c ++++ b/sound/soc/codecs/madera.c +@@ -2322,10 +2322,10 @@ int madera_out_ev(struct snd_soc_dapm_widget *w, + case CS42L92: + case CS47L92: + case CS47L93: +- out_up_delay = 6; ++ out_up_delay = 6000; + break; + default: +- out_up_delay = 17; ++ out_up_delay = 17000; + break; + } + +@@ -2356,7 +2356,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w, + case MADERA_OUT3R_ENA_SHIFT: + priv->out_up_pending--; + if (!priv->out_up_pending) { +- msleep(priv->out_up_delay); ++ fsleep(priv->out_up_delay); + priv->out_up_delay = 0; + } + break; +@@ -2375,7 +2375,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w, + case MADERA_OUT3L_ENA_SHIFT: + case MADERA_OUT3R_ENA_SHIFT: + priv->out_down_pending++; +- priv->out_down_delay++; ++ priv->out_down_delay += 1000; + break; + default: + break; +@@ -2392,7 +2392,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w, + case MADERA_OUT3R_ENA_SHIFT: + priv->out_down_pending--; + if (!priv->out_down_pending) { +- msleep(priv->out_down_delay); ++ fsleep(priv->out_down_delay); + priv->out_down_delay = 0; + } + break; +diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c +index e0b971620d0fb..6db17349484ca 100644 +--- a/sound/soc/codecs/wm5110.c ++++ b/sound/soc/codecs/wm5110.c +@@ -302,7 +302,7 @@ static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w) + } else { + wseq = wm5110_no_dre_left_enable; + nregs = ARRAY_SIZE(wm5110_no_dre_left_enable); +- priv->out_up_delay += 10; ++ priv->out_up_delay += 10000; + } + break; + case ARIZONA_OUT1R_ENA_SHIFT: +@@ -312,7 +312,7 @@ static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w) + } else { + wseq = wm5110_no_dre_right_enable; + nregs = ARRAY_SIZE(wm5110_no_dre_right_enable); +- priv->out_up_delay += 10; ++ priv->out_up_delay += 10000; + } + break; + default: +@@ -338,7 +338,7 @@ static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w) + snd_soc_component_update_bits(component, + ARIZONA_SPARE_TRIGGERS, + ARIZONA_WS_TRG1, 0); +- priv->out_down_delay += 27; ++ priv->out_down_delay += 27000; + } + break; + case ARIZONA_OUT1R_ENA_SHIFT: +@@ -350,7 +350,7 @@ static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w) + snd_soc_component_update_bits(component, + ARIZONA_SPARE_TRIGGERS, + ARIZONA_WS_TRG2, 0); +- priv->out_down_delay += 27; ++ priv->out_down_delay += 27000; + } + break; + default: +-- +2.39.5 + diff --git a/queue-6.1/asoc-rsnd-adjust-convert-rate-limitation.patch b/queue-6.1/asoc-rsnd-adjust-convert-rate-limitation.patch new file mode 100644 index 0000000000..5b263b07bf --- /dev/null +++ b/queue-6.1/asoc-rsnd-adjust-convert-rate-limitation.patch @@ -0,0 +1,216 @@ +From 883185e2519d295e9d0ae9d250e11b9eb8a55e17 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 5 Feb 2025 00:20:48 +0000 +Subject: ASoC: rsnd: adjust convert rate limitation + +From: Kuninori Morimoto + +[ Upstream commit 89f9cf185885d4358aa92b48e51d0f09b71775aa ] + +Current rsnd driver supports Synchronous SRC Mode, but HW allow to update +rate only within 1% from current rate. Adjust to it. + +Becially, this feature is used to fine-tune subtle difference that occur +during sampling rate conversion in SRC. So, it should be called within 1% +margin of rate difference. + +If there was difference over 1%, it will apply with 1% increments by using +loop without indicating error message. + +Cc: Yoshihiro Shimoda +Signed-off-by: Kuninori Morimoto +Reviewed-by: Yoshihiro Shimoda +Tested-by: Yoshihiro Shimoda +Link: https://patch.msgid.link/871pwd2qe8.wl-kuninori.morimoto.gx@renesas.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/sh/rcar/src.c | 98 ++++++++++++++++++++++++++++++++--------- + 1 file changed, 76 insertions(+), 22 deletions(-) + +diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c +index 9893839666d7b..e985681363e25 100644 +--- a/sound/soc/sh/rcar/src.c ++++ b/sound/soc/sh/rcar/src.c +@@ -34,6 +34,7 @@ struct rsnd_src { + struct rsnd_mod *dma; + struct rsnd_kctrl_cfg_s sen; /* sync convert enable */ + struct rsnd_kctrl_cfg_s sync; /* sync convert */ ++ u32 current_sync_rate; + int irq; + }; + +@@ -99,7 +100,7 @@ static u32 rsnd_src_convert_rate(struct rsnd_dai_stream *io, + if (!rsnd_src_sync_is_enabled(mod)) + return rsnd_io_converted_rate(io); + +- convert_rate = src->sync.val; ++ convert_rate = src->current_sync_rate; + + if (!convert_rate) + convert_rate = rsnd_io_converted_rate(io); +@@ -200,13 +201,73 @@ static const u32 chan222222[] = { + static void rsnd_src_set_convert_rate(struct rsnd_dai_stream *io, + struct rsnd_mod *mod) + { ++ struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); + struct rsnd_priv *priv = rsnd_mod_to_priv(mod); +- struct device *dev = rsnd_priv_to_dev(priv); ++ struct rsnd_src *src = rsnd_mod_to_src(mod); ++ u32 fin, fout, new_rate; ++ int inc, cnt, rate; ++ u64 base, val; ++ ++ if (!runtime) ++ return; ++ ++ if (!rsnd_src_sync_is_enabled(mod)) ++ return; ++ ++ fin = rsnd_src_get_in_rate(priv, io); ++ fout = rsnd_src_get_out_rate(priv, io); ++ ++ new_rate = src->sync.val; ++ ++ if (!new_rate) ++ new_rate = fout; ++ ++ /* Do nothing if no diff */ ++ if (new_rate == src->current_sync_rate) ++ return; ++ ++ /* ++ * SRCm_IFSVR::INTIFS can change within 1% ++ * see ++ * SRCm_IFSVR::INTIFS Note ++ */ ++ inc = fout / 100; ++ cnt = abs(new_rate - fout) / inc; ++ if (fout > new_rate) ++ inc *= -1; ++ ++ /* ++ * After start running SRC, we can update only SRC_IFSVR ++ * for Synchronous Mode ++ */ ++ base = (u64)0x0400000 * fin; ++ rate = fout; ++ for (int i = 0; i < cnt; i++) { ++ val = base; ++ rate += inc; ++ do_div(val, rate); ++ ++ rsnd_mod_write(mod, SRC_IFSVR, val); ++ } ++ val = base; ++ do_div(val, new_rate); ++ ++ rsnd_mod_write(mod, SRC_IFSVR, val); ++ ++ /* update current_sync_rate */ ++ src->current_sync_rate = new_rate; ++} ++ ++static void rsnd_src_init_convert_rate(struct rsnd_dai_stream *io, ++ struct rsnd_mod *mod) ++{ + struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); ++ struct rsnd_priv *priv = rsnd_mod_to_priv(mod); ++ struct device *dev = rsnd_priv_to_dev(priv); + int is_play = rsnd_io_is_play(io); + int use_src = 0; + u32 fin, fout; +- u32 ifscr, fsrate, adinr; ++ u32 ifscr, adinr; + u32 cr, route; + u32 i_busif, o_busif, tmp; + const u32 *bsdsr_table; +@@ -244,26 +305,15 @@ static void rsnd_src_set_convert_rate(struct rsnd_dai_stream *io, + adinr = rsnd_get_adinr_bit(mod, io) | chan; + + /* +- * SRC_IFSCR / SRC_IFSVR +- */ +- ifscr = 0; +- fsrate = 0; +- if (use_src) { +- u64 n; +- +- ifscr = 1; +- n = (u64)0x0400000 * fin; +- do_div(n, fout); +- fsrate = n; +- } +- +- /* ++ * SRC_IFSCR + * SRC_SRCCR / SRC_ROUTE_MODE0 + */ ++ ifscr = 0; + cr = 0x00011110; + route = 0x0; + if (use_src) { + route = 0x1; ++ ifscr = 0x1; + + if (rsnd_src_sync_is_enabled(mod)) { + cr |= 0x1; +@@ -334,7 +384,6 @@ static void rsnd_src_set_convert_rate(struct rsnd_dai_stream *io, + rsnd_mod_write(mod, SRC_SRCIR, 1); /* initialize */ + rsnd_mod_write(mod, SRC_ADINR, adinr); + rsnd_mod_write(mod, SRC_IFSCR, ifscr); +- rsnd_mod_write(mod, SRC_IFSVR, fsrate); + rsnd_mod_write(mod, SRC_SRCCR, cr); + rsnd_mod_write(mod, SRC_BSDSR, bsdsr_table[idx]); + rsnd_mod_write(mod, SRC_BSISR, bsisr_table[idx]); +@@ -347,6 +396,9 @@ static void rsnd_src_set_convert_rate(struct rsnd_dai_stream *io, + + rsnd_adg_set_src_timesel_gen2(mod, io, fin, fout); + ++ /* update SRC_IFSVR */ ++ rsnd_src_set_convert_rate(io, mod); ++ + return; + + convert_rate_err: +@@ -466,7 +518,8 @@ static int rsnd_src_init(struct rsnd_mod *mod, + int ret; + + /* reset sync convert_rate */ +- src->sync.val = 0; ++ src->sync.val = ++ src->current_sync_rate = 0; + + ret = rsnd_mod_power_on(mod); + if (ret < 0) +@@ -474,7 +527,7 @@ static int rsnd_src_init(struct rsnd_mod *mod, + + rsnd_src_activation(mod); + +- rsnd_src_set_convert_rate(io, mod); ++ rsnd_src_init_convert_rate(io, mod); + + rsnd_src_status_clear(mod); + +@@ -492,7 +545,8 @@ static int rsnd_src_quit(struct rsnd_mod *mod, + rsnd_mod_power_off(mod); + + /* reset sync convert_rate */ +- src->sync.val = 0; ++ src->sync.val = ++ src->current_sync_rate = 0; + + return 0; + } +@@ -600,7 +654,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod, + "SRC Out Rate Switch" : + "SRC In Rate Switch", + rsnd_kctrl_accept_anytime, +- rsnd_src_set_convert_rate, ++ rsnd_src_init_convert_rate, + &src->sen, 1); + if (ret < 0) + return ret; +-- +2.39.5 + diff --git a/queue-6.1/asoc-rsnd-don-t-indicate-warning-on-rsnd_kctrl_accep.patch b/queue-6.1/asoc-rsnd-don-t-indicate-warning-on-rsnd_kctrl_accep.patch new file mode 100644 index 0000000000..591ed4f86c --- /dev/null +++ b/queue-6.1/asoc-rsnd-don-t-indicate-warning-on-rsnd_kctrl_accep.patch @@ -0,0 +1,125 @@ +From 243c20fb651eba226aa3ac778f2bee867d7116e1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 5 Feb 2025 00:20:42 +0000 +Subject: ASoC: rsnd: don't indicate warning on rsnd_kctrl_accept_runtime() + +From: Kuninori Morimoto + +[ Upstream commit c3fc002b206c6c83d1e3702b979733002ba6fb2c ] + +rsnd_kctrl_accept_runtime() (1) is used for runtime convert rate +(= Synchronous SRC Mode). Now, rsnd driver has 2 kctrls for it + +(A): "SRC Out Rate Switch" +(B): "SRC Out Rate" // it calls (1) + +(A): can be called anytime +(B): can be called only runtime, and will indicate warning if it was used + at non-runtime. + +To use runtime convert rate (= Synchronous SRC Mode), user might uses +command in below order. + +(X): > amixer set "SRC Out Rate" on + > aplay xxx.wav & +(Y): > amixer set "SRC Out Rate" 48010 // convert rate to 48010Hz + +(Y): calls B +(X): calls both A and B. + +In this case, when user calls (X), it calls both (A) and (B), but it is not +yet start running. So, (B) will indicate warning. + +This warning was added by commit b5c088689847 ("ASoC: rsnd: add warning +message to rsnd_kctrl_accept_runtime()"), but the message sounds like the +operation was not correct. Let's update warning message. + +The message is very SRC specific, implement it in src.c + +Signed-off-by: Kuninori Morimoto +Reviewed-by: Yoshihiro Shimoda +Link: https://patch.msgid.link/8734gt2qed.wl-kuninori.morimoto.gx@renesas.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/sh/rcar/core.c | 14 -------------- + sound/soc/sh/rcar/rsnd.h | 1 - + sound/soc/sh/rcar/src.c | 18 +++++++++++++++++- + 3 files changed, 17 insertions(+), 16 deletions(-) + +diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c +index 7e380d71b0f88..0964b4e3fbdfb 100644 +--- a/sound/soc/sh/rcar/core.c ++++ b/sound/soc/sh/rcar/core.c +@@ -1694,20 +1694,6 @@ int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io) + return 1; + } + +-int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io) +-{ +- struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); +- struct rsnd_priv *priv = rsnd_io_to_priv(io); +- struct device *dev = rsnd_priv_to_dev(priv); +- +- if (!runtime) { +- dev_warn(dev, "Can't update kctrl when idle\n"); +- return 0; +- } +- +- return 1; +-} +- + struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg) + { + cfg->cfg.val = cfg->val; +diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h +index f8ef6836ef84e..690f4932357c1 100644 +--- a/sound/soc/sh/rcar/rsnd.h ++++ b/sound/soc/sh/rcar/rsnd.h +@@ -742,7 +742,6 @@ struct rsnd_kctrl_cfg_s { + #define rsnd_kctrl_vals(x) ((x).val) /* = (x).cfg.val[0] */ + + int rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io); +-int rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io); + struct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg); + struct rsnd_kctrl_cfg *rsnd_kctrl_init_s(struct rsnd_kctrl_cfg_s *cfg); + int rsnd_kctrl_new(struct rsnd_mod *mod, +diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c +index f832165e46bc0..9893839666d7b 100644 +--- a/sound/soc/sh/rcar/src.c ++++ b/sound/soc/sh/rcar/src.c +@@ -530,6 +530,22 @@ static irqreturn_t rsnd_src_interrupt(int irq, void *data) + return IRQ_HANDLED; + } + ++static int rsnd_src_kctrl_accept_runtime(struct rsnd_dai_stream *io) ++{ ++ struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); ++ ++ if (!runtime) { ++ struct rsnd_priv *priv = rsnd_io_to_priv(io); ++ struct device *dev = rsnd_priv_to_dev(priv); ++ ++ dev_warn(dev, "\"SRC Out Rate\" can use during running\n"); ++ ++ return 0; ++ } ++ ++ return 1; ++} ++ + static int rsnd_src_probe_(struct rsnd_mod *mod, + struct rsnd_dai_stream *io, + struct rsnd_priv *priv) +@@ -593,7 +609,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod, + rsnd_io_is_play(io) ? + "SRC Out Rate" : + "SRC In Rate", +- rsnd_kctrl_accept_runtime, ++ rsnd_src_kctrl_accept_runtime, + rsnd_src_set_convert_rate, + &src->sync, 192000); + +-- +2.39.5 + diff --git a/queue-6.1/asoc-sof-intel-hda-add-softdep-pre-to-snd-hda-codec-.patch b/queue-6.1/asoc-sof-intel-hda-add-softdep-pre-to-snd-hda-codec-.patch new file mode 100644 index 0000000000..4668c87ef9 --- /dev/null +++ b/queue-6.1/asoc-sof-intel-hda-add-softdep-pre-to-snd-hda-codec-.patch @@ -0,0 +1,44 @@ +From 818a5428c1cf2908a1861a73ec727d8cf37a374c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 6 Feb 2025 11:47:23 +0200 +Subject: ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Terry Cheong + +[ Upstream commit 33b7dc7843dbdc9b90c91d11ba30b107f9138ffd ] + +In enviornment without KMOD requesting module may fail to load +snd-hda-codec-hdmi, resulting in HDMI audio not usable. +Add softdep to loading HDMI codec module first to ensure we can load it +correctly. + +Signed-off-by: Terry Cheong +Reviewed-by: Bard Liao +Reviewed-by: Johny Lin +Reviewed-by: Péter Ujfalusi +Signed-off-by: Peter Ujfalusi +Link: https://patch.msgid.link/20250206094723.18013-1-peter.ujfalusi@linux.intel.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/sof/intel/hda-codec.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/soc/sof/intel/hda-codec.c b/sound/soc/sof/intel/hda-codec.c +index a0dfd7de431fe..a75f81116643b 100644 +--- a/sound/soc/sof/intel/hda-codec.c ++++ b/sound/soc/sof/intel/hda-codec.c +@@ -282,6 +282,7 @@ int hda_codec_i915_exit(struct snd_sof_dev *sdev) + } + EXPORT_SYMBOL_NS(hda_codec_i915_exit, SND_SOC_SOF_HDA_AUDIO_CODEC_I915); + ++MODULE_SOFTDEP("pre: snd-hda-codec-hdmi"); + #endif + + MODULE_LICENSE("Dual BSD/GPL"); +-- +2.39.5 + diff --git a/queue-6.1/asoc-tas2764-fix-power-control-mask.patch b/queue-6.1/asoc-tas2764-fix-power-control-mask.patch new file mode 100644 index 0000000000..1e4491ebc8 --- /dev/null +++ b/queue-6.1/asoc-tas2764-fix-power-control-mask.patch @@ -0,0 +1,35 @@ +From d24083e01c7222d779cccfaa802010affc9f15ef Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Feb 2025 18:35:35 +1000 +Subject: ASoC: tas2764: Fix power control mask + +From: Hector Martin + +[ Upstream commit a3f172359e22b2c11b750d23560481a55bf86af1 ] + +Reviewed-by: Neal Gompa +Signed-off-by: Hector Martin +Signed-off-by: James Calligeros +Link: https://patch.msgid.link/20250218-apple-codec-changes-v2-1-932760fd7e07@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/tas2764.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sound/soc/codecs/tas2764.h b/sound/soc/codecs/tas2764.h +index 168af772a898f..d13ecae9c9c2f 100644 +--- a/sound/soc/codecs/tas2764.h ++++ b/sound/soc/codecs/tas2764.h +@@ -25,7 +25,7 @@ + + /* Power Control */ + #define TAS2764_PWR_CTRL TAS2764_REG(0X0, 0x02) +-#define TAS2764_PWR_CTRL_MASK GENMASK(1, 0) ++#define TAS2764_PWR_CTRL_MASK GENMASK(2, 0) + #define TAS2764_PWR_CTRL_ACTIVE 0x0 + #define TAS2764_PWR_CTRL_MUTE BIT(0) + #define TAS2764_PWR_CTRL_SHUTDOWN BIT(1) +-- +2.39.5 + diff --git a/queue-6.1/asoc-tas2764-set-the-sdout-polarity-correctly.patch b/queue-6.1/asoc-tas2764-set-the-sdout-polarity-correctly.patch new file mode 100644 index 0000000000..d6aff49083 --- /dev/null +++ b/queue-6.1/asoc-tas2764-set-the-sdout-polarity-correctly.patch @@ -0,0 +1,84 @@ +From 9dcde879502b1ee9151061b520a8c77d7eac84dc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Feb 2025 18:36:02 +1000 +Subject: ASoC: tas2764: Set the SDOUT polarity correctly + +From: Hector Martin + +[ Upstream commit f5468beeab1b1adfc63c2717b1f29ef3f49a5fab ] + +TX launch polarity needs to be the opposite of RX capture polarity, to +generate the right bit slot alignment. + +Reviewed-by: Neal Gompa +Signed-off-by: Hector Martin +Signed-off-by: James Calligeros +Link: https://patch.msgid.link/20250218-apple-codec-changes-v2-28-932760fd7e07@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/tas2764.c | 10 +++++++++- + sound/soc/codecs/tas2764.h | 6 ++++++ + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c +index 2e0ed3e68fa54..fc8479d3d2852 100644 +--- a/sound/soc/codecs/tas2764.c ++++ b/sound/soc/codecs/tas2764.c +@@ -367,7 +367,7 @@ static int tas2764_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) + { + struct snd_soc_component *component = dai->component; + struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); +- u8 tdm_rx_start_slot = 0, asi_cfg_0 = 0, asi_cfg_1 = 0; ++ u8 tdm_rx_start_slot = 0, asi_cfg_0 = 0, asi_cfg_1 = 0, asi_cfg_4 = 0; + int ret; + + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { +@@ -376,12 +376,14 @@ static int tas2764_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) + fallthrough; + case SND_SOC_DAIFMT_NB_NF: + asi_cfg_1 = TAS2764_TDM_CFG1_RX_RISING; ++ asi_cfg_4 = TAS2764_TDM_CFG4_TX_FALLING; + break; + case SND_SOC_DAIFMT_IB_IF: + asi_cfg_0 ^= TAS2764_TDM_CFG0_FRAME_START; + fallthrough; + case SND_SOC_DAIFMT_IB_NF: + asi_cfg_1 = TAS2764_TDM_CFG1_RX_FALLING; ++ asi_cfg_4 = TAS2764_TDM_CFG4_TX_RISING; + break; + } + +@@ -391,6 +393,12 @@ static int tas2764_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) + if (ret < 0) + return ret; + ++ ret = snd_soc_component_update_bits(component, TAS2764_TDM_CFG4, ++ TAS2764_TDM_CFG4_TX_MASK, ++ asi_cfg_4); ++ if (ret < 0) ++ return ret; ++ + switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: + asi_cfg_0 ^= TAS2764_TDM_CFG0_FRAME_START; +diff --git a/sound/soc/codecs/tas2764.h b/sound/soc/codecs/tas2764.h +index d13ecae9c9c2f..9490f2686e389 100644 +--- a/sound/soc/codecs/tas2764.h ++++ b/sound/soc/codecs/tas2764.h +@@ -79,6 +79,12 @@ + #define TAS2764_TDM_CFG3_RXS_SHIFT 0x4 + #define TAS2764_TDM_CFG3_MASK GENMASK(3, 0) + ++/* TDM Configuration Reg4 */ ++#define TAS2764_TDM_CFG4 TAS2764_REG(0X0, 0x0d) ++#define TAS2764_TDM_CFG4_TX_MASK BIT(0) ++#define TAS2764_TDM_CFG4_TX_RISING 0x0 ++#define TAS2764_TDM_CFG4_TX_FALLING BIT(0) ++ + /* TDM Configuration Reg5 */ + #define TAS2764_TDM_CFG5 TAS2764_REG(0X0, 0x0e) + #define TAS2764_TDM_CFG5_VSNS_MASK BIT(6) +-- +2.39.5 + diff --git a/queue-6.1/asoc-tas2770-fix-volume-scale.patch b/queue-6.1/asoc-tas2770-fix-volume-scale.patch new file mode 100644 index 0000000000..0c89d72de0 --- /dev/null +++ b/queue-6.1/asoc-tas2770-fix-volume-scale.patch @@ -0,0 +1,36 @@ +From 6bbc9de4ea4fa79bf194bbdc8c024a2388ed178b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 8 Feb 2025 00:54:35 +0000 +Subject: ASoC: tas2770: Fix volume scale + +From: Hector Martin + +[ Upstream commit 579cd64b9df8a60284ec3422be919c362de40e41 ] + +The scale starts at -100dB, not -128dB. + +Signed-off-by: Hector Martin +Signed-off-by: Mark Brown +Link: https://patch.msgid.link/20250208-asoc-tas2770-v1-1-cf50ff1d59a3@kernel.org +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/tas2770.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c +index 8557759acb1f2..e284a3a854591 100644 +--- a/sound/soc/codecs/tas2770.c ++++ b/sound/soc/codecs/tas2770.c +@@ -508,7 +508,7 @@ static int tas2770_codec_probe(struct snd_soc_component *component) + } + + static DECLARE_TLV_DB_SCALE(tas2770_digital_tlv, 1100, 50, 0); +-static DECLARE_TLV_DB_SCALE(tas2770_playback_volume, -12750, 50, 0); ++static DECLARE_TLV_DB_SCALE(tas2770_playback_volume, -10050, 50, 0); + + static const struct snd_kcontrol_new tas2770_snd_controls[] = { + SOC_SINGLE_TLV("Speaker Playback Volume", TAS2770_PLAY_CFG_REG2, +-- +2.39.5 + diff --git a/queue-6.1/block-fix-kmem_cache-of-name-bio-108-already-exists.patch b/queue-6.1/block-fix-kmem_cache-of-name-bio-108-already-exists.patch new file mode 100644 index 0000000000..70242fd484 --- /dev/null +++ b/queue-6.1/block-fix-kmem_cache-of-name-bio-108-already-exists.patch @@ -0,0 +1,41 @@ +From e577cc29138d84037d6ffae475739288997d6ff8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 28 Feb 2025 21:26:56 +0800 +Subject: block: fix 'kmem_cache of name 'bio-108' already exists' + +From: Ming Lei + +[ Upstream commit b654f7a51ffb386131de42aa98ed831f8c126546 ] + +Device mapper bioset often has big bio_slab size, which can be more than +1000, then 8byte can't hold the slab name any more, cause the kmem_cache +allocation warning of 'kmem_cache of name 'bio-108' already exists'. + +Fix the warning by extending bio_slab->name to 12 bytes, but fix output +of /proc/slabinfo + +Reported-by: Guangwu Zhang +Signed-off-by: Ming Lei +Link: https://lore.kernel.org/r/20250228132656.2838008-1-ming.lei@redhat.com +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + block/bio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/bio.c b/block/bio.c +index 3318e0022fdfd..a7323d567c798 100644 +--- a/block/bio.c ++++ b/block/bio.c +@@ -73,7 +73,7 @@ struct bio_slab { + struct kmem_cache *slab; + unsigned int slab_ref; + unsigned int slab_size; +- char name[8]; ++ char name[12]; + }; + static DEFINE_MUTEX(bio_slab_lock); + static DEFINE_XARRAY(bio_slabs); +-- +2.39.5 + diff --git a/queue-6.1/drm-nouveau-do-not-override-forced-connector-status.patch b/queue-6.1/drm-nouveau-do-not-override-forced-connector-status.patch new file mode 100644 index 0000000000..98c501ef7d --- /dev/null +++ b/queue-6.1/drm-nouveau-do-not-override-forced-connector-status.patch @@ -0,0 +1,35 @@ +From 35611132e9e22cbc06d406f844f79dddf9a8c206 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 Jan 2025 10:57:25 +0100 +Subject: drm/nouveau: Do not override forced connector status + +From: Thomas Zimmermann + +[ Upstream commit 01f1d77a2630e774ce33233c4e6723bca3ae9daa ] + +Keep user-forced connector status even if it cannot be programmed. Same +behavior as for the rest of the drivers. + +Signed-off-by: Thomas Zimmermann +Signed-off-by: Lyude Paul +Link: https://patchwork.freedesktop.org/patch/msgid/20250114100214.195386-1-tzimmermann@suse.de +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/nouveau/nouveau_connector.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c +index bdf5262ebd35e..5a30d115525ad 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_connector.c ++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c +@@ -755,7 +755,6 @@ nouveau_connector_force(struct drm_connector *connector) + if (!nv_encoder) { + NV_ERROR(drm, "can't find encoder to force %s on!\n", + connector->name); +- connector->status = connector_status_disconnected; + return; + } + +-- +2.39.5 + diff --git a/queue-6.1/fuse-don-t-truncate-cached-mutated-symlink.patch b/queue-6.1/fuse-don-t-truncate-cached-mutated-symlink.patch new file mode 100644 index 0000000000..89ae18b768 --- /dev/null +++ b/queue-6.1/fuse-don-t-truncate-cached-mutated-symlink.patch @@ -0,0 +1,119 @@ +From e31f0d089f204807b1fdb975b7638bb7a622ff24 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Feb 2025 11:02:58 +0100 +Subject: fuse: don't truncate cached, mutated symlink + +From: Miklos Szeredi + +[ Upstream commit b4c173dfbb6c78568578ff18f9e8822d7bd0e31b ] + +Fuse allows the value of a symlink to change and this property is exploited +by some filesystems (e.g. CVMFS). + +It has been observed, that sometimes after changing the symlink contents, +the value is truncated to the old size. + +This is caused by fuse_getattr() racing with fuse_reverse_inval_inode(). +fuse_reverse_inval_inode() updates the fuse_inode's attr_version, which +results in fuse_change_attributes() exiting before updating the cached +attributes + +This is okay, as the cached attributes remain invalid and the next call to +fuse_change_attributes() will likely update the inode with the correct +values. + +The reason this causes problems is that cached symlinks will be +returned through page_get_link(), which truncates the symlink to +inode->i_size. This is correct for filesystems that don't mutate +symlinks, but in this case it causes bad behavior. + +The solution is to just remove this truncation. This can cause a +regression in a filesystem that relies on supplying a symlink larger than +the file size, but this is unlikely. If that happens we'd need to make +this behavior conditional. + +Reported-by: Laura Promberger +Tested-by: Sam Lewis +Signed-off-by: Miklos Szeredi +Link: https://lore.kernel.org/r/20250220100258.793363-1-mszeredi@redhat.com +Reviewed-by: Bernd Schubert +Signed-off-by: Christian Brauner +Signed-off-by: Sasha Levin +--- + fs/fuse/dir.c | 2 +- + fs/namei.c | 24 +++++++++++++++++++----- + include/linux/fs.h | 2 ++ + 3 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c +index aa2be4c1ea8f2..de31cb8eb7201 100644 +--- a/fs/fuse/dir.c ++++ b/fs/fuse/dir.c +@@ -1445,7 +1445,7 @@ static const char *fuse_get_link(struct dentry *dentry, struct inode *inode, + goto out_err; + + if (fc->cache_symlinks) +- return page_get_link(dentry, inode, callback); ++ return page_get_link_raw(dentry, inode, callback); + + err = -ECHILD; + if (!dentry) +diff --git a/fs/namei.c b/fs/namei.c +index 166d71c82d7ac..6ce07cde1c277 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -5156,10 +5156,9 @@ const char *vfs_get_link(struct dentry *dentry, struct delayed_call *done) + EXPORT_SYMBOL(vfs_get_link); + + /* get the link contents into pagecache */ +-const char *page_get_link(struct dentry *dentry, struct inode *inode, +- struct delayed_call *callback) ++static char *__page_get_link(struct dentry *dentry, struct inode *inode, ++ struct delayed_call *callback) + { +- char *kaddr; + struct page *page; + struct address_space *mapping = inode->i_mapping; + +@@ -5178,8 +5177,23 @@ const char *page_get_link(struct dentry *dentry, struct inode *inode, + } + set_delayed_call(callback, page_put_link, page); + BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM); +- kaddr = page_address(page); +- nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1); ++ return page_address(page); ++} ++ ++const char *page_get_link_raw(struct dentry *dentry, struct inode *inode, ++ struct delayed_call *callback) ++{ ++ return __page_get_link(dentry, inode, callback); ++} ++EXPORT_SYMBOL_GPL(page_get_link_raw); ++ ++const char *page_get_link(struct dentry *dentry, struct inode *inode, ++ struct delayed_call *callback) ++{ ++ char *kaddr = __page_get_link(dentry, inode, callback); ++ ++ if (!IS_ERR(kaddr)) ++ nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1); + return kaddr; + } + +diff --git a/include/linux/fs.h b/include/linux/fs.h +index 0d32634c5cf0d..08fba309ddc78 100644 +--- a/include/linux/fs.h ++++ b/include/linux/fs.h +@@ -3385,6 +3385,8 @@ extern const struct file_operations generic_ro_fops; + + extern int readlink_copy(char __user *, int, const char *); + extern int page_readlink(struct dentry *, char __user *, int); ++extern const char *page_get_link_raw(struct dentry *, struct inode *, ++ struct delayed_call *); + extern const char *page_get_link(struct dentry *, struct inode *, + struct delayed_call *); + extern void page_put_link(void *); +-- +2.39.5 + diff --git a/queue-6.1/hid-apple-fix-up-the-f6-key-on-the-omoton-kb066-keyb.patch b/queue-6.1/hid-apple-fix-up-the-f6-key-on-the-omoton-kb066-keyb.patch new file mode 100644 index 0000000000..f28151c466 --- /dev/null +++ b/queue-6.1/hid-apple-fix-up-the-f6-key-on-the-omoton-kb066-keyb.patch @@ -0,0 +1,53 @@ +From 73cff6f1cd8085c2bcf110fb0e8af1809311f1c7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 16 Jan 2025 23:12:17 -0700 +Subject: HID: apple: fix up the F6 key on the Omoton KB066 keyboard + +From: Alex Henrie + +[ Upstream commit 819083cb6eedcc8495cbf84845877bcc741b93b3 ] + +The Omoton KB066 is an Apple A1255 keyboard clone (HID product code +05ac:022c). On both keyboards, the F6 key becomes Num Lock when the Fn +key is held. But unlike its Apple exemplar, when the Omoton's F6 key is +pressed without Fn, it sends the usage code 0xC0301 from the reserved +section of the consumer page instead of the standard F6 usage code +0x7003F from the keyboard page. The nonstandard code is translated to +KEY_UNKNOWN and becomes useless on Linux. The Omoton KB066 is a pretty +popular keyboard, judging from its 29,058 reviews on Amazon at time of +writing, so let's account for its quirk to make it more usable. + +By the way, it would be nice if we could automatically set fnmode to 0 +for Omoton keyboards because they handle the Fn key internally and the +kernel's Fn key handling creates undesirable side effects such as making +F1 and F2 always Brightness Up and Brightness Down in fnmode=1 (the +default) or always F1 and F2 in fnmode=2. Unfortunately I don't think +there's a way to identify Bluetooth keyboards more specifically than the +HID product code which is obviously inaccurate. Users of Omoton +keyboards will just have to set fnmode to 0 manually to get full Fn key +functionality. + +Signed-off-by: Alex Henrie +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-apple.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c +index da8751601534f..86a5e09544c4a 100644 +--- a/drivers/hid/hid-apple.c ++++ b/drivers/hid/hid-apple.c +@@ -497,6 +497,9 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, + } + } + ++ if (usage->hid == 0xc0301) /* Omoton KB066 quirk */ ++ code = KEY_F6; ++ + if (usage->code != code) { + input_event_with_scancode(input, usage->type, code, usage->hid, value); + +-- +2.39.5 + diff --git a/queue-6.1/hid-hid-apple-apple-magic-keyboard-a3203-usb-c-suppo.patch b/queue-6.1/hid-hid-apple-apple-magic-keyboard-a3203-usb-c-suppo.patch new file mode 100644 index 0000000000..d82366541b --- /dev/null +++ b/queue-6.1/hid-hid-apple-apple-magic-keyboard-a3203-usb-c-suppo.patch @@ -0,0 +1,59 @@ +From b26384c1dbb86628e3575df55bf8caf6ccb9bd0b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 12 Jan 2025 13:13:14 +0900 +Subject: HID: hid-apple: Apple Magic Keyboard a3203 USB-C support + +From: Ievgen Vovk + +[ Upstream commit 2813e00dcd748cef47d2bffaa04071de93fddf00 ] + +Add Apple Magic Keyboard 2024 model (with USB-C port) device ID (0320) +to those recognized by the hid-apple driver. Keyboard is otherwise +compatible with the existing implementation for its earlier 2021 model. + +Signed-off-by: Ievgen Vovk +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-apple.c | 5 +++++ + drivers/hid/hid-ids.h | 1 + + 2 files changed, 6 insertions(+) + +diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c +index 37b2ce9b50fe8..da8751601534f 100644 +--- a/drivers/hid/hid-apple.c ++++ b/drivers/hid/hid-apple.c +@@ -425,6 +425,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, + hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2015) + table = magic_keyboard_2015_fn_keys; + else if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 || ++ hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 || + hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 || + hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021) + table = apple2021_fn_keys; +@@ -1030,6 +1031,10 @@ static const struct hid_device_id apple_devices[] = { + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY }, + { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021), + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024), ++ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY }, ++ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024), ++ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021), + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY }, + { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021), +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 29b8c96ce9f4d..4187d890bcc1a 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -184,6 +184,7 @@ + #define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242 + #define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243 + #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 0x029c ++#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 0x0320 + #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 0x029a + #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021 0x029f + #define USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT 0x8102 +-- +2.39.5 + diff --git a/queue-6.1/hid-ignore-non-functional-sensor-in-hp-5mp-camera.patch b/queue-6.1/hid-ignore-non-functional-sensor-in-hp-5mp-camera.patch new file mode 100644 index 0000000000..44397f5d54 --- /dev/null +++ b/queue-6.1/hid-ignore-non-functional-sensor-in-hp-5mp-camera.patch @@ -0,0 +1,56 @@ +From db43f29884a8484a3b6a8098a37a9e11f8a41567 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 15 Jan 2025 15:00:20 +0800 +Subject: HID: ignore non-functional sensor in HP 5MP Camera + +From: Chia-Lin Kao (AceLan) + +[ Upstream commit 363236d709e75610b628c2a4337ccbe42e454b6d ] + +The HP 5MP Camera (USB ID 0408:5473) reports a HID sensor interface that +is not actually implemented. Attempting to access this non-functional +sensor via iio_info causes system hangs as runtime PM tries to wake up +an unresponsive sensor. + + [453] hid-sensor-hub 0003:0408:5473.0003: Report latency attributes: ffffffff:ffffffff + [453] hid-sensor-hub 0003:0408:5473.0003: common attributes: 5:1, 2:1, 3:1 ffffffff:ffffffff + +Add this device to the HID ignore list since the sensor interface is +non-functional by design and should not be exposed to userspace. + +Signed-off-by: Chia-Lin Kao (AceLan) +Acked-by: Srinivas Pandruvada +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-ids.h | 1 + + drivers/hid/hid-quirks.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index d8c5e24e7d44c..29b8c96ce9f4d 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -1072,6 +1072,7 @@ + #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001 0x3001 + #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003 0x3003 + #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008 0x3008 ++#define USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473 0x5473 + + #define I2C_VENDOR_ID_RAYDIUM 0x2386 + #define I2C_PRODUCT_ID_RAYDIUM_4B33 0x4b33 +diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c +index debc49272a5c0..875c44e5cf6c2 100644 +--- a/drivers/hid/hid-quirks.c ++++ b/drivers/hid/hid-quirks.c +@@ -882,6 +882,7 @@ static const struct hid_device_id hid_ignore_list[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) }, + #endif + { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) }, + { } + }; + +-- +2.39.5 + diff --git a/queue-6.1/hid-intel-ish-hid-fix-the-length-of-mng_sync_fw_cloc.patch b/queue-6.1/hid-intel-ish-hid-fix-the-length-of-mng_sync_fw_cloc.patch new file mode 100644 index 0000000000..62cce4757c --- /dev/null +++ b/queue-6.1/hid-intel-ish-hid-fix-the-length-of-mng_sync_fw_cloc.patch @@ -0,0 +1,56 @@ +From 7d4298a49426a4c1218b2e3316f4f7bf2742ceb7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 22 Jan 2025 09:29:00 +0800 +Subject: HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell + +From: Zhang Lixu + +[ Upstream commit 4b54ae69197b9f416baa0fceadff7e89075f8454 ] + +The timestamps in the Firmware log and HID sensor samples are incorrect. +They show 1970-01-01 because the current IPC driver only uses the first +8 bytes of bootup time when synchronizing time with the firmware. The +firmware converts the bootup time to UTC time, which results in the +display of 1970-01-01. + +In write_ipc_from_queue(), when sending the MNG_SYNC_FW_CLOCK message, +the clock is updated according to the definition of ipc_time_update_msg. +However, in _ish_sync_fw_clock(), the message length is specified as the +size of uint64_t when building the doorbell. As a result, the firmware +only receives the first 8 bytes of struct ipc_time_update_msg. +This patch corrects the length in the doorbell to ensure the entire +ipc_time_update_msg is sent, fixing the timestamp issue. + +Signed-off-by: Zhang Lixu +Acked-by: Srinivas Pandruvada +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/intel-ish-hid/ipc/ipc.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-ish-hid/ipc/ipc.c +index dd5fc60874ba1..b1a41c90c5741 100644 +--- a/drivers/hid/intel-ish-hid/ipc/ipc.c ++++ b/drivers/hid/intel-ish-hid/ipc/ipc.c +@@ -577,14 +577,14 @@ static void fw_reset_work_fn(struct work_struct *unused) + static void _ish_sync_fw_clock(struct ishtp_device *dev) + { + static unsigned long prev_sync; +- uint64_t usec; ++ struct ipc_time_update_msg time = {}; + + if (prev_sync && time_before(jiffies, prev_sync + 20 * HZ)) + return; + + prev_sync = jiffies; +- usec = ktime_to_us(ktime_get_boottime()); +- ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &usec, sizeof(uint64_t)); ++ /* The fields of time would be updated while sending message */ ++ ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &time, sizeof(time)); + } + + /** +-- +2.39.5 + diff --git a/queue-6.1/hid-intel-ish-hid-send-clock-sync-message-immediatel.patch b/queue-6.1/hid-intel-ish-hid-send-clock-sync-message-immediatel.patch new file mode 100644 index 0000000000..d89bc13669 --- /dev/null +++ b/queue-6.1/hid-intel-ish-hid-send-clock-sync-message-immediatel.patch @@ -0,0 +1,77 @@ +From 0c7c5b5622b11bc8427d9baa172daa5442096612 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 22 Jan 2025 09:29:01 +0800 +Subject: HID: intel-ish-hid: Send clock sync message immediately after reset + +From: Zhang Lixu + +[ Upstream commit 7e0d1cff12b895f44f4ddc8cf50311bc1f775201 ] + +The ISH driver performs a clock sync with the firmware once at system +startup and then every 20 seconds. If a firmware reset occurs right +after a clock sync, the driver would wait 20 seconds before performing +another clock sync with the firmware. This is particularly problematic +with the introduction of the "load firmware from host" feature, where +the driver performs a clock sync with the bootloader and then has to +wait 20 seconds before syncing with the main firmware. + +This patch clears prev_sync immediately upon receiving an IPC reset, +so that the main firmware and driver will perform a clock sync +immediately after completing the IPC handshake. + +Signed-off-by: Zhang Lixu +Acked-by: Srinivas Pandruvada +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/intel-ish-hid/ipc/ipc.c | 9 ++++++--- + drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h | 2 ++ + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-ish-hid/ipc/ipc.c +index b1a41c90c5741..42141a78bdb4b 100644 +--- a/drivers/hid/intel-ish-hid/ipc/ipc.c ++++ b/drivers/hid/intel-ish-hid/ipc/ipc.c +@@ -517,6 +517,10 @@ static int ish_fw_reset_handler(struct ishtp_device *dev) + /* ISH FW is dead */ + if (!ish_is_input_ready(dev)) + return -EPIPE; ++ ++ /* Send clock sync at once after reset */ ++ ishtp_dev->prev_sync = 0; ++ + /* + * Set HOST2ISH.ILUP. Apparently we need this BEFORE sending + * RESET_NOTIFY_ACK - FW will be checking for it +@@ -576,13 +580,12 @@ static void fw_reset_work_fn(struct work_struct *unused) + */ + static void _ish_sync_fw_clock(struct ishtp_device *dev) + { +- static unsigned long prev_sync; + struct ipc_time_update_msg time = {}; + +- if (prev_sync && time_before(jiffies, prev_sync + 20 * HZ)) ++ if (dev->prev_sync && time_before(jiffies, dev->prev_sync + 20 * HZ)) + return; + +- prev_sync = jiffies; ++ dev->prev_sync = jiffies; + /* The fields of time would be updated while sending message */ + ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &time, sizeof(time)); + } +diff --git a/drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h b/drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h +index 32142c7d9a043..9b2ee3fe04b8f 100644 +--- a/drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h ++++ b/drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h +@@ -212,6 +212,8 @@ struct ishtp_device { + unsigned int ipc_tx_cnt; + unsigned long long ipc_tx_bytes_cnt; + ++ /* Time of the last clock sync */ ++ unsigned long prev_sync; + const struct ishtp_hw_ops *ops; + size_t mtu; + uint32_t ishtp_msg_hdr; +-- +2.39.5 + diff --git a/queue-6.1/hrtimers-mark-is_migration_base-with-__always_inline.patch b/queue-6.1/hrtimers-mark-is_migration_base-with-__always_inline.patch new file mode 100644 index 0000000000..5ace2d8aec --- /dev/null +++ b/queue-6.1/hrtimers-mark-is_migration_base-with-__always_inline.patch @@ -0,0 +1,79 @@ +From 5d1856aa68c10e8c14f1d711ec16f55191f7adb0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 16 Jan 2025 18:07:45 +0200 +Subject: hrtimers: Mark is_migration_base() with __always_inline + +From: Andy Shevchenko + +[ Upstream commit 27af31e44949fa85550176520ef7086a0d00fd7b ] + +When is_migration_base() is unused, it prevents kernel builds +with clang, `make W=1` and CONFIG_WERROR=y: + +kernel/time/hrtimer.c:156:20: error: unused function 'is_migration_base' [-Werror,-Wunused-function] + 156 | static inline bool is_migration_base(struct hrtimer_clock_base *base) + | ^~~~~~~~~~~~~~~~~ + +Fix this by marking it with __always_inline. + +[ tglx: Use __always_inline instead of __maybe_unused and move it into the + usage sites conditional ] + +Signed-off-by: Andy Shevchenko +Signed-off-by: Thomas Gleixner +Link: https://lore.kernel.org/all/20250116160745.243358-1-andriy.shevchenko@linux.intel.com +Signed-off-by: Sasha Levin +--- + kernel/time/hrtimer.c | 22 ++++++++++++---------- + 1 file changed, 12 insertions(+), 10 deletions(-) + +diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c +index f6d799646dd9c..e60863ab74b50 100644 +--- a/kernel/time/hrtimer.c ++++ b/kernel/time/hrtimer.c +@@ -145,11 +145,6 @@ static struct hrtimer_cpu_base migration_cpu_base = { + + #define migration_base migration_cpu_base.clock_base[0] + +-static inline bool is_migration_base(struct hrtimer_clock_base *base) +-{ +- return base == &migration_base; +-} +- + /* + * We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock + * means that all timers which are tied to this base via timer->base are +@@ -274,11 +269,6 @@ switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base, + + #else /* CONFIG_SMP */ + +-static inline bool is_migration_base(struct hrtimer_clock_base *base) +-{ +- return false; +-} +- + static inline struct hrtimer_clock_base * + lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags) + { +@@ -1378,6 +1368,18 @@ static void hrtimer_sync_wait_running(struct hrtimer_cpu_base *cpu_base, + } + } + ++#ifdef CONFIG_SMP ++static __always_inline bool is_migration_base(struct hrtimer_clock_base *base) ++{ ++ return base == &migration_base; ++} ++#else ++static __always_inline bool is_migration_base(struct hrtimer_clock_base *base) ++{ ++ return false; ++} ++#endif ++ + /* + * This function is called on PREEMPT_RT kernels when the fast path + * deletion of a timer failed because the timer callback function was +-- +2.39.5 + diff --git a/queue-6.1/iscsi_ibft-fix-ubsan-shift-out-of-bounds-warning-in-.patch b/queue-6.1/iscsi_ibft-fix-ubsan-shift-out-of-bounds-warning-in-.patch new file mode 100644 index 0000000000..5b1ca7cc9b --- /dev/null +++ b/queue-6.1/iscsi_ibft-fix-ubsan-shift-out-of-bounds-warning-in-.patch @@ -0,0 +1,42 @@ +From da0cf27d045a15162d6d6d0b6dfaff4d0354af19 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 Jan 2025 12:12:34 +0800 +Subject: iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in + ibft_attr_show_nic() + +From: Chengen Du + +[ Upstream commit 07e0d99a2f701123ad3104c0f1a1e66bce74d6e5 ] + +When performing an iSCSI boot using IPv6, iscsistart still reads the +/sys/firmware/ibft/ethernetX/subnet-mask entry. Since the IPv6 prefix +length is 64, this causes the shift exponent to become negative, +triggering a UBSAN warning. As the concept of a subnet mask does not +apply to IPv6, the value is set to ~0 to suppress the warning message. + +Signed-off-by: Chengen Du +Signed-off-by: Konrad Rzeszutek Wilk +Signed-off-by: Sasha Levin +--- + drivers/firmware/iscsi_ibft.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c +index 6e9788324fea5..371f24569b3b2 100644 +--- a/drivers/firmware/iscsi_ibft.c ++++ b/drivers/firmware/iscsi_ibft.c +@@ -310,7 +310,10 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf) + str += sprintf_ipaddr(str, nic->ip_addr); + break; + case ISCSI_BOOT_ETH_SUBNET_MASK: +- val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1)); ++ if (nic->subnet_mask_prefix > 32) ++ val = cpu_to_be32(~0); ++ else ++ val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1)); + str += sprintf(str, "%pI4", &val); + break; + case ISCSI_BOOT_ETH_PREFIX_LEN: +-- +2.39.5 + diff --git a/queue-6.1/mptcp-safety-check-before-fallback.patch b/queue-6.1/mptcp-safety-check-before-fallback.patch new file mode 100644 index 0000000000..cfdf5480c0 --- /dev/null +++ b/queue-6.1/mptcp-safety-check-before-fallback.patch @@ -0,0 +1,41 @@ +From ab2ecf92c2287983a0e0ca3a4479161698fb012f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 24 Feb 2025 19:11:52 +0100 +Subject: mptcp: safety check before fallback + +From: Matthieu Baerts (NGI0) + +[ Upstream commit db75a16813aabae3b78c06b1b99f5e314c1f55d3 ] + +Recently, some fallback have been initiated, while the connection was +not supposed to fallback. + +Add a safety check with a warning to detect when an wrong attempt to +fallback is being done. This should help detecting any future issues +quicker. + +Acked-by: Paolo Abeni +Signed-off-by: Matthieu Baerts (NGI0) +Link: https://patch.msgid.link/20250224-net-mptcp-misc-fixes-v1-3-f550f636b435@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + net/mptcp/protocol.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h +index 77e727d81cc24..25c1cda5c1bcf 100644 +--- a/net/mptcp/protocol.h ++++ b/net/mptcp/protocol.h +@@ -981,6 +981,8 @@ static inline void __mptcp_do_fallback(struct mptcp_sock *msk) + pr_debug("TCP fallback already done (msk=%p)\n", msk); + return; + } ++ if (WARN_ON_ONCE(!READ_ONCE(msk->allow_infinite_fallback))) ++ return; + set_bit(MPTCP_FALLBACK_DONE, &msk->flags); + } + +-- +2.39.5 + diff --git a/queue-6.1/net-wwan-mhi_wwan_mbim-silence-sequence-number-glitc.patch b/queue-6.1/net-wwan-mhi_wwan_mbim-silence-sequence-number-glitc.patch new file mode 100644 index 0000000000..067e5bbd0a --- /dev/null +++ b/queue-6.1/net-wwan-mhi_wwan_mbim-silence-sequence-number-glitc.patch @@ -0,0 +1,61 @@ +From 07b0d0f04fc39c056da8ef2632433a1d5ac7ac81 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 12 Feb 2025 12:15:35 +0100 +Subject: net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors + +From: Stephan Gerhold + +[ Upstream commit 0d1fac6d26aff5df21bb4ec980d9b7a11c410b96 ] + +When using the Qualcomm X55 modem on the ThinkPad X13s, the kernel log is +constantly being filled with errors related to a "sequence number glitch", +e.g.: + + [ 1903.284538] sequence number glitch prev=16 curr=0 + [ 1913.812205] sequence number glitch prev=50 curr=0 + [ 1923.698219] sequence number glitch prev=142 curr=0 + [ 2029.248276] sequence number glitch prev=1555 curr=0 + [ 2046.333059] sequence number glitch prev=70 curr=0 + [ 2076.520067] sequence number glitch prev=272 curr=0 + [ 2158.704202] sequence number glitch prev=2655 curr=0 + [ 2218.530776] sequence number glitch prev=2349 curr=0 + [ 2225.579092] sequence number glitch prev=6 curr=0 + +Internet connectivity is working fine, so this error seems harmless. It +looks like modem does not preserve the sequence number when entering low +power state; the amount of errors depends on how actively the modem is +being used. + +A similar issue has also been seen on USB-based MBIM modems [1]. However, +in cdc_ncm.c the "sequence number glitch" message is a debug message +instead of an error. Apply the same to the mhi_wwan_mbim.c driver to +silence these errors when using the modem. + +[1]: https://lists.freedesktop.org/archives/libmbim-devel/2016-November/000781.html + +Signed-off-by: Stephan Gerhold +Reviewed-by: Loic Poulain +Acked-by: Manivannan Sadhasivam +Link: https://patch.msgid.link/20250212-mhi-wwan-mbim-sequence-glitch-v1-1-503735977cbd@linaro.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + drivers/net/wwan/mhi_wwan_mbim.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/wwan/mhi_wwan_mbim.c b/drivers/net/wwan/mhi_wwan_mbim.c +index ef70bb7c88ad6..43c20deab3189 100644 +--- a/drivers/net/wwan/mhi_wwan_mbim.c ++++ b/drivers/net/wwan/mhi_wwan_mbim.c +@@ -209,7 +209,7 @@ static int mbim_rx_verify_nth16(struct mhi_mbim_context *mbim, struct sk_buff *s + if (mbim->rx_seq + 1 != le16_to_cpu(nth16->wSequence) && + (mbim->rx_seq || le16_to_cpu(nth16->wSequence)) && + !(mbim->rx_seq == 0xffff && !le16_to_cpu(nth16->wSequence))) { +- net_err_ratelimited("sequence number glitch prev=%d curr=%d\n", ++ net_dbg_ratelimited("sequence number glitch prev=%d curr=%d\n", + mbim->rx_seq, le16_to_cpu(nth16->wSequence)); + } + mbim->rx_seq = le16_to_cpu(nth16->wSequence); +-- +2.39.5 + diff --git a/queue-6.1/nvme-fc-go-straight-to-connecting-state-when-initial.patch b/queue-6.1/nvme-fc-go-straight-to-connecting-state-when-initial.patch new file mode 100644 index 0000000000..791e47c109 --- /dev/null +++ b/queue-6.1/nvme-fc-go-straight-to-connecting-state-when-initial.patch @@ -0,0 +1,43 @@ +From 6f636fb2f6f64c218e71075f69c84b5ca9f51ef1 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 9 Jan 2025 14:30:47 +0100 +Subject: nvme-fc: go straight to connecting state when initializing + +From: Daniel Wagner + +[ Upstream commit d3d380eded7ee5fc2fc53b3b0e72365ded025c4a ] + +The initial controller initialization mimiks the reconnect loop +behavior by switching from NEW to RESETTING and then to CONNECTING. + +The transition from NEW to CONNECTING is a valid transition, so there is +no point entering the RESETTING state. TCP and RDMA also transition +directly to CONNECTING state. + +Reviewed-by: Sagi Grimberg +Reviewed-by: Hannes Reinecke +Reviewed-by: Christoph Hellwig +Signed-off-by: Daniel Wagner +Signed-off-by: Keith Busch +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/fc.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c +index 3dbf926fd99fd..2b0f15de77111 100644 +--- a/drivers/nvme/host/fc.c ++++ b/drivers/nvme/host/fc.c +@@ -3525,8 +3525,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, + list_add_tail(&ctrl->ctrl_list, &rport->ctrl_list); + spin_unlock_irqrestore(&rport->lock, flags); + +- if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_RESETTING) || +- !nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) { ++ if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) { + dev_err(ctrl->ctrl.device, + "NVME-FC{%d}: failed to init ctrl state\n", ctrl->cnum); + goto fail_ctrl; +-- +2.39.5 + diff --git a/queue-6.1/nvme-only-allow-entering-live-from-connecting-state.patch b/queue-6.1/nvme-only-allow-entering-live-from-connecting-state.patch new file mode 100644 index 0000000000..47f1a57951 --- /dev/null +++ b/queue-6.1/nvme-only-allow-entering-live-from-connecting-state.patch @@ -0,0 +1,38 @@ +From 10452c1344887cf449b2c5becc61cf6c4254b3d5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 14 Feb 2025 09:02:03 +0100 +Subject: nvme: only allow entering LIVE from CONNECTING state + +From: Daniel Wagner + +[ Upstream commit d2fe192348f93fe3a0cb1e33e4aba58e646397f4 ] + +The fabric transports and also the PCI transport are not entering the +LIVE state from NEW or RESETTING. This makes the state machine more +restrictive and allows to catch not supported state transitions, e.g. +directly switching from RESETTING to LIVE. + +Reviewed-by: Sagi Grimberg +Signed-off-by: Daniel Wagner +Signed-off-by: Keith Busch +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/core.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c +index ba76cd3b5f852..6a636fe6506b4 100644 +--- a/drivers/nvme/host/core.c ++++ b/drivers/nvme/host/core.c +@@ -501,8 +501,6 @@ bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, + switch (new_state) { + case NVME_CTRL_LIVE: + switch (old_state) { +- case NVME_CTRL_NEW: +- case NVME_CTRL_RESETTING: + case NVME_CTRL_CONNECTING: + changed = true; + fallthrough; +-- +2.39.5 + diff --git a/queue-6.1/nvme-pci-quirk-acer-fa100-for-non-uniqueue-identifie.patch b/queue-6.1/nvme-pci-quirk-acer-fa100-for-non-uniqueue-identifie.patch new file mode 100644 index 0000000000..b24d86eb41 --- /dev/null +++ b/queue-6.1/nvme-pci-quirk-acer-fa100-for-non-uniqueue-identifie.patch @@ -0,0 +1,86 @@ +From dc4dabdcd75e1e60f5fc280ec7c6a1666445f1ad Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Feb 2025 08:59:29 -0500 +Subject: nvme-pci: quirk Acer FA100 for non-uniqueue identifiers + +From: Christopher Lentocha + +[ Upstream commit fcd875445866a5219cf2be3101e276b21fc843f3 ] + +In order for two Acer FA100 SSDs to work in one PC (in the case of +myself, a Lenovo Legion T5 28IMB05), and not show one drive and not +the other, and sometimes mix up what drive shows up (randomly), these +two lines of code need to be added, and then both of the SSDs will +show up and not conflict when booting off of one of them. If you boot +up your computer with both SSDs installed without this patch, you may +also randomly get into a kernel panic (if the initrd is not set up) or +stuck in the initrd "/init" process, it is set up, however, if you do +apply this patch, there should not be problems with booting or seeing +both contents of the drive. Tested with the btrfs filesystem with a +RAID configuration of having the root drive '/' combined to make two +256GB Acer FA100 SSDs become 512GB in total storage. + +Kernel Logs with patch applied (`dmesg -t | grep -i nvm`): + +``` +... +nvme 0000:04:00.0: platform quirk: setting simple suspend +nvme nvme0: pci function 0000:04:00.0 +nvme 0000:05:00.0: platform quirk: setting simple suspend +nvme nvme1: pci function 0000:05:00.0 +nvme nvme1: missing or invalid SUBNQN field. +nvme nvme1: allocated 64 MiB host memory buffer. +nvme nvme0: missing or invalid SUBNQN field. +nvme nvme0: allocated 64 MiB host memory buffer. +nvme nvme1: 8/0/0 default/read/poll queues +nvme nvme1: Ignoring bogus Namespace Identifiers +nvme nvme0: 8/0/0 default/read/poll queues +nvme nvme0: Ignoring bogus Namespace Identifiers +nvme0n1: p1 p2 +... +``` + +Kernel Logs with patch not applied (`dmesg -t | grep -i nvm`): + +``` +... +nvme 0000:04:00.0: platform quirk: setting simple suspend +nvme nvme0: pci function 0000:04:00.0 +nvme 0000:05:00.0: platform quirk: setting simple suspend +nvme nvme1: pci function 0000:05:00.0 +nvme nvme0: missing or invalid SUBNQN field. +nvme nvme1: missing or invalid SUBNQN field. +nvme nvme0: allocated 64 MiB host memory buffer. +nvme nvme1: allocated 64 MiB host memory buffer. +nvme nvme0: 8/0/0 default/read/poll queues +nvme nvme1: 8/0/0 default/read/poll queues +nvme nvme1: globally duplicate IDs for nsid 1 +nvme nvme1: VID:DID 1dbe:5216 model:Acer SSD FA100 256GB firmware:1.Z.J.2X +nvme0n1: p1 p2 +... +``` + +Signed-off-by: Christopher Lentocha +Reviewed-by: Christoph Hellwig +Signed-off-by: Keith Busch +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/pci.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c +index f939b6dc295e6..afcb9668dad98 100644 +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -3577,6 +3577,8 @@ static const struct pci_device_id nvme_id_table[] = { + .driver_data = NVME_QUIRK_BOGUS_NID, }, + { PCI_DEVICE(0x1cc1, 0x5350), /* ADATA XPG GAMMIX S50 */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, ++ { PCI_DEVICE(0x1dbe, 0x5216), /* Acer/INNOGRIT FA100/5216 NVMe SSD */ ++ .driver_data = NVME_QUIRK_BOGUS_NID, }, + { PCI_DEVICE(0x1dbe, 0x5236), /* ADATA XPG GAMMIX S70 */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, + { PCI_DEVICE(0x1e49, 0x0021), /* ZHITAI TiPro5000 NVMe SSD */ +-- +2.39.5 + diff --git a/queue-6.1/nvme-tcp-add-basic-support-for-the-c2htermreq-pdu.patch b/queue-6.1/nvme-tcp-add-basic-support-for-the-c2htermreq-pdu.patch new file mode 100644 index 0000000000..57d41639d7 --- /dev/null +++ b/queue-6.1/nvme-tcp-add-basic-support-for-the-c2htermreq-pdu.patch @@ -0,0 +1,103 @@ +From 69279ade9d3ed4358df29217a0ccf7dd223d9229 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 17 Feb 2025 17:08:27 +0100 +Subject: nvme-tcp: add basic support for the C2HTermReq PDU + +From: Maurizio Lombardi + +[ Upstream commit 84e009042d0f3dfe91bec60bcd208ee3f866cbcd ] + +Previously, the NVMe/TCP host driver did not handle the C2HTermReq PDU, +instead printing "unsupported pdu type (3)" when received. This patch adds +support for processing the C2HTermReq PDU, allowing the driver +to print the Fatal Error Status field. + +Example of output: +nvme nvme4: Received C2HTermReq (FES = Invalid PDU Header Field) + +Signed-off-by: Maurizio Lombardi +Reviewed-by: Sagi Grimberg +Signed-off-by: Keith Busch +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/tcp.c | 43 ++++++++++++++++++++++++++++++++++++++++ + include/linux/nvme-tcp.h | 2 ++ + 2 files changed, 45 insertions(+) + +diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c +index 29489c2c52fb9..f7ef727ee44e3 100644 +--- a/drivers/nvme/host/tcp.c ++++ b/drivers/nvme/host/tcp.c +@@ -694,6 +694,40 @@ static int nvme_tcp_handle_r2t(struct nvme_tcp_queue *queue, + return 0; + } + ++static void nvme_tcp_handle_c2h_term(struct nvme_tcp_queue *queue, ++ struct nvme_tcp_term_pdu *pdu) ++{ ++ u16 fes; ++ const char *msg; ++ u32 plen = le32_to_cpu(pdu->hdr.plen); ++ ++ static const char * const msg_table[] = { ++ [NVME_TCP_FES_INVALID_PDU_HDR] = "Invalid PDU Header Field", ++ [NVME_TCP_FES_PDU_SEQ_ERR] = "PDU Sequence Error", ++ [NVME_TCP_FES_HDR_DIGEST_ERR] = "Header Digest Error", ++ [NVME_TCP_FES_DATA_OUT_OF_RANGE] = "Data Transfer Out Of Range", ++ [NVME_TCP_FES_R2T_LIMIT_EXCEEDED] = "R2T Limit Exceeded", ++ [NVME_TCP_FES_UNSUPPORTED_PARAM] = "Unsupported Parameter", ++ }; ++ ++ if (plen < NVME_TCP_MIN_C2HTERM_PLEN || ++ plen > NVME_TCP_MAX_C2HTERM_PLEN) { ++ dev_err(queue->ctrl->ctrl.device, ++ "Received a malformed C2HTermReq PDU (plen = %u)\n", ++ plen); ++ return; ++ } ++ ++ fes = le16_to_cpu(pdu->fes); ++ if (fes && fes < ARRAY_SIZE(msg_table)) ++ msg = msg_table[fes]; ++ else ++ msg = "Unknown"; ++ ++ dev_err(queue->ctrl->ctrl.device, ++ "Received C2HTermReq (FES = %s)\n", msg); ++} ++ + static int nvme_tcp_recv_pdu(struct nvme_tcp_queue *queue, struct sk_buff *skb, + unsigned int *offset, size_t *len) + { +@@ -715,6 +749,15 @@ static int nvme_tcp_recv_pdu(struct nvme_tcp_queue *queue, struct sk_buff *skb, + return 0; + + hdr = queue->pdu; ++ if (unlikely(hdr->type == nvme_tcp_c2h_term)) { ++ /* ++ * C2HTermReq never includes Header or Data digests. ++ * Skip the checks. ++ */ ++ nvme_tcp_handle_c2h_term(queue, (void *)queue->pdu); ++ return -EINVAL; ++ } ++ + if (queue->hdr_digest) { + ret = nvme_tcp_verify_hdgst(queue, queue->pdu, hdr->hlen); + if (unlikely(ret)) +diff --git a/include/linux/nvme-tcp.h b/include/linux/nvme-tcp.h +index 57ebe1267f7fb..0278ce3ad1fbd 100644 +--- a/include/linux/nvme-tcp.h ++++ b/include/linux/nvme-tcp.h +@@ -13,6 +13,8 @@ + #define NVME_TCP_ADMIN_CCSZ SZ_8K + #define NVME_TCP_DIGEST_LENGTH 4 + #define NVME_TCP_MIN_MAXH2CDATA 4096 ++#define NVME_TCP_MIN_C2HTERM_PLEN 24 ++#define NVME_TCP_MAX_C2HTERM_PLEN 152 + + enum nvme_tcp_pfv { + NVME_TCP_PFV_1_0 = 0x0, +-- +2.39.5 + diff --git a/queue-6.1/nvmet-rdma-recheck-queue-state-is-live-in-state-lock.patch b/queue-6.1/nvmet-rdma-recheck-queue-state-is-live-in-state-lock.patch new file mode 100644 index 0000000000..7038c8f90b --- /dev/null +++ b/queue-6.1/nvmet-rdma-recheck-queue-state-is-live-in-state-lock.patch @@ -0,0 +1,79 @@ +From 50515494d6757a23282a7df6effd103784ce2e3c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 16 Feb 2025 20:49:56 +0800 +Subject: nvmet-rdma: recheck queue state is LIVE in state lock in recv done + +From: Ruozhu Li + +[ Upstream commit 3988ac1c67e6e84d2feb987d7b36d5791174b3da ] + +The queue state checking in nvmet_rdma_recv_done is not in queue state +lock.Queue state can transfer to LIVE in cm establish handler between +state checking and state lock here, cause a silent drop of nvme connect +cmd. +Recheck queue state whether in LIVE state in state lock to prevent this +issue. + +Signed-off-by: Ruozhu Li +Reviewed-by: Sagi Grimberg +Signed-off-by: Keith Busch +Signed-off-by: Sasha Levin +--- + drivers/nvme/target/rdma.c | 33 +++++++++++++++++++++++---------- + 1 file changed, 23 insertions(+), 10 deletions(-) + +diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c +index a6d55ebb82382..298c46834a539 100644 +--- a/drivers/nvme/target/rdma.c ++++ b/drivers/nvme/target/rdma.c +@@ -997,6 +997,27 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue, + nvmet_req_complete(&cmd->req, status); + } + ++static bool nvmet_rdma_recv_not_live(struct nvmet_rdma_queue *queue, ++ struct nvmet_rdma_rsp *rsp) ++{ ++ unsigned long flags; ++ bool ret = true; ++ ++ spin_lock_irqsave(&queue->state_lock, flags); ++ /* ++ * recheck queue state is not live to prevent a race condition ++ * with RDMA_CM_EVENT_ESTABLISHED handler. ++ */ ++ if (queue->state == NVMET_RDMA_Q_LIVE) ++ ret = false; ++ else if (queue->state == NVMET_RDMA_Q_CONNECTING) ++ list_add_tail(&rsp->wait_list, &queue->rsp_wait_list); ++ else ++ nvmet_rdma_put_rsp(rsp); ++ spin_unlock_irqrestore(&queue->state_lock, flags); ++ return ret; ++} ++ + static void nvmet_rdma_recv_done(struct ib_cq *cq, struct ib_wc *wc) + { + struct nvmet_rdma_cmd *cmd = +@@ -1038,17 +1059,9 @@ static void nvmet_rdma_recv_done(struct ib_cq *cq, struct ib_wc *wc) + rsp->req.port = queue->port; + rsp->n_rdma = 0; + +- if (unlikely(queue->state != NVMET_RDMA_Q_LIVE)) { +- unsigned long flags; +- +- spin_lock_irqsave(&queue->state_lock, flags); +- if (queue->state == NVMET_RDMA_Q_CONNECTING) +- list_add_tail(&rsp->wait_list, &queue->rsp_wait_list); +- else +- nvmet_rdma_put_rsp(rsp); +- spin_unlock_irqrestore(&queue->state_lock, flags); ++ if (unlikely(queue->state != NVMET_RDMA_Q_LIVE) && ++ nvmet_rdma_recv_not_live(queue, rsp)) + return; +- } + + nvmet_rdma_handle_command(queue, rsp); + } +-- +2.39.5 + diff --git a/queue-6.1/perf-x86-intel-use-better-start-period-for-frequency.patch b/queue-6.1/perf-x86-intel-use-better-start-period-for-frequency.patch new file mode 100644 index 0000000000..3cad2eddd3 --- /dev/null +++ b/queue-6.1/perf-x86-intel-use-better-start-period-for-frequency.patch @@ -0,0 +1,150 @@ +From dbb90fad33a7c4507e8c537cffe3853e866373a6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 17 Jan 2025 07:19:13 -0800 +Subject: perf/x86/intel: Use better start period for frequency mode + +From: Kan Liang + +[ Upstream commit a26b24b2e21f6222635a95426b9ef9eec63d69b1 ] + +Freqency mode is the current default mode of Linux perf. A period of 1 is +used as a starting period. The period is auto-adjusted on each tick or an +overflow, to meet the frequency target. + +The start period of 1 is too low and may trigger some issues: + +- Many HWs do not support period 1 well. + https://lore.kernel.org/lkml/875xs2oh69.ffs@tglx/ + +- For an event that occurs frequently, period 1 is too far away from the + real period. Lots of samples are generated at the beginning. + The distribution of samples may not be even. + +- A low starting period for frequently occurring events also challenges + virtualization, which has a longer path to handle a PMI. + +The limit_period value only checks the minimum acceptable value for HW. +It cannot be used to set the start period, because some events may +need a very low period. The limit_period cannot be set too high. It +doesn't help with the events that occur frequently. + +It's hard to find a universal starting period for all events. The idea +implemented by this patch is to only give an estimate for the popular +HW and HW cache events. For the rest of the events, start from the lowest +possible recommended value. + +Signed-off-by: Kan Liang +Signed-off-by: Ingo Molnar +Cc: Peter Zijlstra +Link: https://lore.kernel.org/r/20250117151913.3043942-3-kan.liang@linux.intel.com +Signed-off-by: Sasha Levin +--- + arch/x86/events/intel/core.c | 85 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 85 insertions(+) + +diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c +index 117f86283183f..b9dde37694120 100644 +--- a/arch/x86/events/intel/core.c ++++ b/arch/x86/events/intel/core.c +@@ -3852,6 +3852,85 @@ static inline bool intel_pmu_has_cap(struct perf_event *event, int idx) + return test_bit(idx, (unsigned long *)&intel_cap->capabilities); + } + ++static u64 intel_pmu_freq_start_period(struct perf_event *event) ++{ ++ int type = event->attr.type; ++ u64 config, factor; ++ s64 start; ++ ++ /* ++ * The 127 is the lowest possible recommended SAV (sample after value) ++ * for a 4000 freq (default freq), according to the event list JSON file. ++ * Also, assume the workload is idle 50% time. ++ */ ++ factor = 64 * 4000; ++ if (type != PERF_TYPE_HARDWARE && type != PERF_TYPE_HW_CACHE) ++ goto end; ++ ++ /* ++ * The estimation of the start period in the freq mode is ++ * based on the below assumption. ++ * ++ * For a cycles or an instructions event, 1GHZ of the ++ * underlying platform, 1 IPC. The workload is idle 50% time. ++ * The start period = 1,000,000,000 * 1 / freq / 2. ++ * = 500,000,000 / freq ++ * ++ * Usually, the branch-related events occur less than the ++ * instructions event. According to the Intel event list JSON ++ * file, the SAV (sample after value) of a branch-related event ++ * is usually 1/4 of an instruction event. ++ * The start period of branch-related events = 125,000,000 / freq. ++ * ++ * The cache-related events occurs even less. The SAV is usually ++ * 1/20 of an instruction event. ++ * The start period of cache-related events = 25,000,000 / freq. ++ */ ++ config = event->attr.config & PERF_HW_EVENT_MASK; ++ if (type == PERF_TYPE_HARDWARE) { ++ switch (config) { ++ case PERF_COUNT_HW_CPU_CYCLES: ++ case PERF_COUNT_HW_INSTRUCTIONS: ++ case PERF_COUNT_HW_BUS_CYCLES: ++ case PERF_COUNT_HW_STALLED_CYCLES_FRONTEND: ++ case PERF_COUNT_HW_STALLED_CYCLES_BACKEND: ++ case PERF_COUNT_HW_REF_CPU_CYCLES: ++ factor = 500000000; ++ break; ++ case PERF_COUNT_HW_BRANCH_INSTRUCTIONS: ++ case PERF_COUNT_HW_BRANCH_MISSES: ++ factor = 125000000; ++ break; ++ case PERF_COUNT_HW_CACHE_REFERENCES: ++ case PERF_COUNT_HW_CACHE_MISSES: ++ factor = 25000000; ++ break; ++ default: ++ goto end; ++ } ++ } ++ ++ if (type == PERF_TYPE_HW_CACHE) ++ factor = 25000000; ++end: ++ /* ++ * Usually, a prime or a number with less factors (close to prime) ++ * is chosen as an SAV, which makes it less likely that the sampling ++ * period synchronizes with some periodic event in the workload. ++ * Minus 1 to make it at least avoiding values near power of twos ++ * for the default freq. ++ */ ++ start = DIV_ROUND_UP_ULL(factor, event->attr.sample_freq) - 1; ++ ++ if (start > x86_pmu.max_period) ++ start = x86_pmu.max_period; ++ ++ if (x86_pmu.limit_period) ++ x86_pmu.limit_period(event, &start); ++ ++ return start; ++} ++ + static int intel_pmu_hw_config(struct perf_event *event) + { + int ret = x86_pmu_hw_config(event); +@@ -3863,6 +3942,12 @@ static int intel_pmu_hw_config(struct perf_event *event) + if (ret) + return ret; + ++ if (event->attr.freq && event->attr.sample_freq) { ++ event->hw.sample_period = intel_pmu_freq_start_period(event); ++ event->hw.last_period = event->hw.sample_period; ++ local64_set(&event->hw.period_left, event->hw.sample_period); ++ } ++ + if (event->attr.precise_ip) { + if ((event->attr.config & INTEL_ARCH_EVENT_MASK) == INTEL_FIXED_VLBR_EVENT) + return -EINVAL; +-- +2.39.5 + diff --git a/queue-6.1/platform-x86-thinkpad_acpi-fix-invalid-fan-speed-on-.patch b/queue-6.1/platform-x86-thinkpad_acpi-fix-invalid-fan-speed-on-.patch new file mode 100644 index 0000000000..4ddd9e27d9 --- /dev/null +++ b/queue-6.1/platform-x86-thinkpad_acpi-fix-invalid-fan-speed-on-.patch @@ -0,0 +1,106 @@ +From 8fa7b6301aefc6c690d5de44c0090d184c41a01f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Feb 2025 16:33:15 +0000 +Subject: platform/x86: thinkpad_acpi: Fix invalid fan speed on ThinkPad X120e +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Sybil Isabel Dorsett + +[ Upstream commit 1046cac109225eda0973b898e053aeb3d6c10e1d ] + +On ThinkPad X120e, fan speed is reported in ticks per revolution +rather than RPM. + +Recalculate the fan speed value reported for ThinkPad X120e +to RPM based on a 22.5 kHz clock. + +Based on the information on +https://www.thinkwiki.org/wiki/How_to_control_fan_speed, +the same problem is highly likely to be relevant to at least Edge11, +but Edge11 is not addressed in this patch. + +Signed-off-by: Sybil Isabel Dorsett +Reviewed-by: Ilpo Järvinen +Link: https://lore.kernel.org/r/20250203163255.5525-1-sybdorsett@proton.me +Signed-off-by: Ilpo Järvinen +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/thinkpad_acpi.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c +index a57e236be0504..a8b6f38d344fd 100644 +--- a/drivers/platform/x86/thinkpad_acpi.c ++++ b/drivers/platform/x86/thinkpad_acpi.c +@@ -8161,6 +8161,7 @@ static struct ibm_struct volume_driver_data = { + + #define FAN_NS_CTRL_STATUS BIT(2) /* Bit which determines control is enabled or not */ + #define FAN_NS_CTRL BIT(4) /* Bit which determines control is by host or EC */ ++#define FAN_CLOCK_TPM (22500*60) /* Ticks per minute for a 22.5 kHz clock */ + + enum { /* Fan control constants */ + fan_status_offset = 0x2f, /* EC register 0x2f */ +@@ -8214,6 +8215,7 @@ static int fan_watchdog_maxinterval; + + static bool fan_with_ns_addr; + static bool ecfw_with_fan_dec_rpm; ++static bool fan_speed_in_tpr; + + static struct mutex fan_mutex; + +@@ -8396,8 +8398,11 @@ static int fan_get_speed(unsigned int *speed) + !acpi_ec_read(fan_rpm_offset + 1, &hi))) + return -EIO; + +- if (likely(speed)) ++ if (likely(speed)) { + *speed = (hi << 8) | lo; ++ if (fan_speed_in_tpr && *speed != 0) ++ *speed = FAN_CLOCK_TPM / *speed; ++ } + break; + case TPACPI_FAN_RD_TPEC_NS: + if (!acpi_ec_read(fan_rpm_status_ns, &lo)) +@@ -8430,8 +8435,11 @@ static int fan2_get_speed(unsigned int *speed) + if (rc) + return -EIO; + +- if (likely(speed)) ++ if (likely(speed)) { + *speed = (hi << 8) | lo; ++ if (fan_speed_in_tpr && *speed != 0) ++ *speed = FAN_CLOCK_TPM / *speed; ++ } + break; + + case TPACPI_FAN_RD_TPEC_NS: +@@ -8959,6 +8967,7 @@ static const struct attribute_group fan_driver_attr_group = { + #define TPACPI_FAN_NOFAN 0x0008 /* no fan available */ + #define TPACPI_FAN_NS 0x0010 /* For EC with non-Standard register addresses */ + #define TPACPI_FAN_DECRPM 0x0020 /* For ECFW's with RPM in register as decimal */ ++#define TPACPI_FAN_TPR 0x0040 /* Fan speed is in Ticks Per Revolution */ + + static const struct tpacpi_quirk fan_quirk_table[] __initconst = { + TPACPI_QEC_IBM('1', 'Y', TPACPI_FAN_Q1), +@@ -8981,6 +8990,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = { + TPACPI_Q_LNV3('N', '2', 'U', TPACPI_FAN_NS), /* X13 Yoga Gen 2*/ + TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN), /* X1 Tablet (2nd gen) */ + TPACPI_Q_LNV3('R', '0', 'Q', TPACPI_FAN_DECRPM),/* L480 */ ++ TPACPI_Q_LNV('8', 'F', TPACPI_FAN_TPR), /* ThinkPad x120e */ + }; + + static int __init fan_init(struct ibm_init_struct *iibm) +@@ -9044,6 +9054,8 @@ static int __init fan_init(struct ibm_init_struct *iibm) + + if (quirks & TPACPI_FAN_Q1) + fan_quirk1_setup(); ++ if (quirks & TPACPI_FAN_TPR) ++ fan_speed_in_tpr = true; + /* Try and probe the 2nd fan */ + tp_features.second_fan = 1; /* needed for get_speed to work */ + res = fan2_get_speed(&speed); +-- +2.39.5 + diff --git a/queue-6.1/platform-x86-thinkpad_acpi-support-for-v9-dytc-platf.patch b/queue-6.1/platform-x86-thinkpad_acpi-support-for-v9-dytc-platf.patch new file mode 100644 index 0000000000..b4ebfc286f --- /dev/null +++ b/queue-6.1/platform-x86-thinkpad_acpi-support-for-v9-dytc-platf.patch @@ -0,0 +1,122 @@ +From 6aceb64e37f1f444c6bf083617681a5621b71478 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 6 Feb 2025 14:39:41 -0500 +Subject: platform/x86: thinkpad_acpi: Support for V9 DYTC platform profiles +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Mark Pearson + +[ Upstream commit 9cff907cbf8c7fb5345918dbcc7b74a01656f34f ] + +Newer Thinkpad AMD platforms are using V9 DYTC and this changes the +profiles used for PSC mode. Add support for this update. +Tested on P14s G5 AMD + +Signed-off-by: Mark Pearson +Link: https://lore.kernel.org/r/20250206193953.58365-1-mpearson-lenovo@squebb.ca +Reviewed-by: Ilpo Järvinen +Signed-off-by: Ilpo Järvinen +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/thinkpad_acpi.c | 34 ++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 12 deletions(-) + +diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c +index a8b6f38d344fd..26ca9c453a59c 100644 +--- a/drivers/platform/x86/thinkpad_acpi.c ++++ b/drivers/platform/x86/thinkpad_acpi.c +@@ -10485,6 +10485,10 @@ static struct ibm_struct proxsensor_driver_data = { + #define DYTC_MODE_PSC_BALANCE 5 /* Default mode aka balanced */ + #define DYTC_MODE_PSC_PERFORM 7 /* High power mode aka performance */ + ++#define DYTC_MODE_PSCV9_LOWPOWER 1 /* Low power mode */ ++#define DYTC_MODE_PSCV9_BALANCE 3 /* Default mode aka balanced */ ++#define DYTC_MODE_PSCV9_PERFORM 4 /* High power mode aka performance */ ++ + #define DYTC_ERR_MASK 0xF /* Bits 0-3 in cmd result are the error result */ + #define DYTC_ERR_SUCCESS 1 /* CMD completed successful */ + +@@ -10505,6 +10509,10 @@ static int dytc_capabilities; + static bool dytc_mmc_get_available; + static int profile_force; + ++static int platform_psc_profile_lowpower = DYTC_MODE_PSC_LOWPOWER; ++static int platform_psc_profile_balanced = DYTC_MODE_PSC_BALANCE; ++static int platform_psc_profile_performance = DYTC_MODE_PSC_PERFORM; ++ + static int convert_dytc_to_profile(int funcmode, int dytcmode, + enum platform_profile_option *profile) + { +@@ -10526,19 +10534,15 @@ static int convert_dytc_to_profile(int funcmode, int dytcmode, + } + return 0; + case DYTC_FUNCTION_PSC: +- switch (dytcmode) { +- case DYTC_MODE_PSC_LOWPOWER: ++ if (dytcmode == platform_psc_profile_lowpower) + *profile = PLATFORM_PROFILE_LOW_POWER; +- break; +- case DYTC_MODE_PSC_BALANCE: ++ else if (dytcmode == platform_psc_profile_balanced) + *profile = PLATFORM_PROFILE_BALANCED; +- break; +- case DYTC_MODE_PSC_PERFORM: ++ else if (dytcmode == platform_psc_profile_performance) + *profile = PLATFORM_PROFILE_PERFORMANCE; +- break; +- default: /* Unknown mode */ ++ else + return -EINVAL; +- } ++ + return 0; + case DYTC_FUNCTION_AMT: + /* For now return balanced. It's the closest we have to 'auto' */ +@@ -10559,19 +10563,19 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe + if (dytc_capabilities & BIT(DYTC_FC_MMC)) + *perfmode = DYTC_MODE_MMC_LOWPOWER; + else if (dytc_capabilities & BIT(DYTC_FC_PSC)) +- *perfmode = DYTC_MODE_PSC_LOWPOWER; ++ *perfmode = platform_psc_profile_lowpower; + break; + case PLATFORM_PROFILE_BALANCED: + if (dytc_capabilities & BIT(DYTC_FC_MMC)) + *perfmode = DYTC_MODE_MMC_BALANCE; + else if (dytc_capabilities & BIT(DYTC_FC_PSC)) +- *perfmode = DYTC_MODE_PSC_BALANCE; ++ *perfmode = platform_psc_profile_balanced; + break; + case PLATFORM_PROFILE_PERFORMANCE: + if (dytc_capabilities & BIT(DYTC_FC_MMC)) + *perfmode = DYTC_MODE_MMC_PERFORM; + else if (dytc_capabilities & BIT(DYTC_FC_PSC)) +- *perfmode = DYTC_MODE_PSC_PERFORM; ++ *perfmode = platform_psc_profile_performance; + break; + default: /* Unknown profile */ + return -EOPNOTSUPP; +@@ -10760,6 +10764,7 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) + if (output & BIT(DYTC_QUERY_ENABLE_BIT)) + dytc_version = (output >> DYTC_QUERY_REV_BIT) & 0xF; + ++ dbg_printk(TPACPI_DBG_INIT, "DYTC version %d\n", dytc_version); + /* Check DYTC is enabled and supports mode setting */ + if (dytc_version < 5) + return -ENODEV; +@@ -10798,6 +10803,11 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) + } + } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { /* PSC MODE */ + pr_debug("PSC is supported\n"); ++ if (dytc_version >= 9) { /* update profiles for DYTC 9 and up */ ++ platform_psc_profile_lowpower = DYTC_MODE_PSCV9_LOWPOWER; ++ platform_psc_profile_balanced = DYTC_MODE_PSCV9_BALANCE; ++ platform_psc_profile_performance = DYTC_MODE_PSCV9_PERFORM; ++ } + } else { + dbg_printk(TPACPI_DBG_INIT, "No DYTC support available\n"); + return -ENODEV; +-- +2.39.5 + diff --git a/queue-6.1/powercap-call-put_device-on-an-error-path-in-powerca.patch b/queue-6.1/powercap-call-put_device-on-an-error-path-in-powerca.patch new file mode 100644 index 0000000000..f792ada49f --- /dev/null +++ b/queue-6.1/powercap-call-put_device-on-an-error-path-in-powerca.patch @@ -0,0 +1,46 @@ +From 6f9b15b2f3391788815aeaa028adcc2cce4b32f9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 10 Jan 2025 10:05:54 +0900 +Subject: powercap: call put_device() on an error path in + powercap_register_control_type() + +From: Joe Hattori + +[ Upstream commit 93c66fbc280747ea700bd6199633d661e3c819b3 ] + +powercap_register_control_type() calls device_register(), but does not +release the refcount of the device when it fails. + +Call put_device() before returning an error to balance the refcount. + +Since the kfree(control_type) will be done by powercap_release(), remove +the lines in powercap_register_control_type() before returning the error. + +This bug was found by an experimental verifier that I am developing. + +Signed-off-by: Joe Hattori +Link: https://patch.msgid.link/20250110010554.1583411-1-joe@pf.is.s.u-tokyo.ac.jp +[ rjw: Changelog edits ] +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Sasha Levin +--- + drivers/powercap/powercap_sys.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c +index ff736b006198f..fd475e463d1fa 100644 +--- a/drivers/powercap/powercap_sys.c ++++ b/drivers/powercap/powercap_sys.c +@@ -626,8 +626,7 @@ struct powercap_control_type *powercap_register_control_type( + dev_set_name(&control_type->dev, "%s", name); + result = device_register(&control_type->dev); + if (result) { +- if (control_type->allocated) +- kfree(control_type); ++ put_device(&control_type->dev); + return ERR_PTR(result); + } + idr_init(&control_type->idr); +-- +2.39.5 + diff --git a/queue-6.1/s390-cio-fix-chpid-configure-attribute-caching.patch b/queue-6.1/s390-cio-fix-chpid-configure-attribute-caching.patch new file mode 100644 index 0000000000..6eadb2d3a7 --- /dev/null +++ b/queue-6.1/s390-cio-fix-chpid-configure-attribute-caching.patch @@ -0,0 +1,60 @@ +From 068d7c7474b73c6983923d2b2a9069caaac889ef Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 31 Jan 2025 12:02:55 +0100 +Subject: s390/cio: Fix CHPID "configure" attribute caching + +From: Peter Oberparleiter + +[ Upstream commit 32ae4a2992529e2c7934e422035fad1d9b0f1fb5 ] + +In some environments, the SCLP firmware interface used to query a +CHPID's configured state is not supported. On these environments, +rapidly reading the corresponding sysfs attribute produces inconsistent +results: + + $ cat /sys/devices/css0/chp0.00/configure + cat: /sys/devices/css0/chp0.00/configure: Operation not supported + $ cat /sys/devices/css0/chp0.00/configure + 3 + +This occurs for example when Linux is run as a KVM guest. The +inconsistency is a result of CIO using cached results for generating +the value of the "configure" attribute while failing to handle the +situation where no data was returned by SCLP. + +Fix this by not updating the cache-expiration timestamp when SCLP +returns no data. With the fix applied, the system response is +consistent: + + $ cat /sys/devices/css0/chp0.00/configure + cat: /sys/devices/css0/chp0.00/configure: Operation not supported + $ cat /sys/devices/css0/chp0.00/configure + cat: /sys/devices/css0/chp0.00/configure: Operation not supported + +Reviewed-by: Vineeth Vijayan +Reviewed-by: Eric Farman +Tested-by: Eric Farman +Signed-off-by: Peter Oberparleiter +Signed-off-by: Vasily Gorbik +Signed-off-by: Sasha Levin +--- + drivers/s390/cio/chp.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/s390/cio/chp.c b/drivers/s390/cio/chp.c +index 5440f285f3494..7e00c061538db 100644 +--- a/drivers/s390/cio/chp.c ++++ b/drivers/s390/cio/chp.c +@@ -661,7 +661,8 @@ static int info_update(void) + if (time_after(jiffies, chp_info_expires)) { + /* Data is too old, update. */ + rc = sclp_chp_read_info(&chp_info); +- chp_info_expires = jiffies + CHP_INFO_UPDATE_INTERVAL ; ++ if (!rc) ++ chp_info_expires = jiffies + CHP_INFO_UPDATE_INTERVAL; + } + mutex_unlock(&info_lock); + +-- +2.39.5 + diff --git a/queue-6.1/sched-clarify-wake_up_q-s-write-to-task-wake_q.next.patch b/queue-6.1/sched-clarify-wake_up_q-s-write-to-task-wake_q.next.patch new file mode 100644 index 0000000000..c8cc3eb0d4 --- /dev/null +++ b/queue-6.1/sched-clarify-wake_up_q-s-write-to-task-wake_q.next.patch @@ -0,0 +1,41 @@ +From 9f185c9fe29122fcdc8fb1587578507aeb840a64 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 29 Jan 2025 20:53:03 +0100 +Subject: sched: Clarify wake_up_q()'s write to task->wake_q.next + +From: Jann Horn + +[ Upstream commit bcc6244e13b4d4903511a1ea84368abf925031c0 ] + +Clarify that wake_up_q() does an atomic write to task->wake_q.next, after +which a concurrent __wake_q_add() can immediately overwrite +task->wake_q.next again. + +Signed-off-by: Jann Horn +Signed-off-by: Peter Zijlstra (Intel) +Link: https://lkml.kernel.org/r/20250129-sched-wakeup-prettier-v1-1-2f51f5f663fa@google.com +Signed-off-by: Sasha Levin +--- + kernel/sched/core.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/kernel/sched/core.c b/kernel/sched/core.c +index 9be8a509b5f3f..9b01fdceb6220 100644 +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -997,9 +997,10 @@ void wake_up_q(struct wake_q_head *head) + struct task_struct *task; + + task = container_of(node, struct task_struct, wake_q); +- /* Task can safely be re-inserted now: */ + node = node->next; +- task->wake_q.next = NULL; ++ /* pairs with cmpxchg_relaxed() in __wake_q_add() */ ++ WRITE_ONCE(task->wake_q.next, NULL); ++ /* Task can safely be re-inserted now. */ + + /* + * wake_up_process() executes a full barrier, which pairs with +-- +2.39.5 + diff --git a/queue-6.1/scsi-core-use-gfp_noio-to-avoid-circular-locking-dep.patch b/queue-6.1/scsi-core-use-gfp_noio-to-avoid-circular-locking-dep.patch new file mode 100644 index 0000000000..63dec1fd34 --- /dev/null +++ b/queue-6.1/scsi-core-use-gfp_noio-to-avoid-circular-locking-dep.patch @@ -0,0 +1,59 @@ +From 86d0e9d033ede12f261a1d41df32c7821d474263 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 Jan 2025 16:35:39 -0500 +Subject: scsi: core: Use GFP_NOIO to avoid circular locking dependency +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Rik van Riel + +[ Upstream commit 5363ee9d110e139584c2d92a0b640bc210588506 ] + +Filesystems can write to disk from page reclaim with __GFP_FS +set. Marc found a case where scsi_realloc_sdev_budget_map() ends up in +page reclaim with GFP_KERNEL, where it could try to take filesystem +locks again, leading to a deadlock. + +WARNING: possible circular locking dependency detected +6.13.0 #1 Not tainted +------------------------------------------------------ +kswapd0/70 is trying to acquire lock: +ffff8881025d5d78 (&q->q_usage_counter(io)){++++}-{0:0}, at: blk_mq_submit_bio+0x461/0x6e0 + +but task is already holding lock: +ffffffff81ef5f40 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0x9f/0x760 + +The full lockdep splat can be found in Marc's report: + +https://lkml.org/lkml/2025/1/24/1101 + +Avoid the potential deadlock by doing the allocation with GFP_NOIO, which +prevents both filesystem and block layer recursion. + +Reported-by: Marc Aurèle La France +Signed-off-by: Rik van Riel +Link: https://lore.kernel.org/r/20250129104525.0ae8421e@fangorn +Reviewed-by: Christoph Hellwig +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/scsi_scan.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c +index 852d509b19b2b..69288303e6004 100644 +--- a/drivers/scsi/scsi_scan.c ++++ b/drivers/scsi/scsi_scan.c +@@ -245,7 +245,7 @@ static int scsi_realloc_sdev_budget_map(struct scsi_device *sdev, + } + ret = sbitmap_init_node(&sdev->budget_map, + scsi_device_max_queue_depth(sdev), +- new_shift, GFP_KERNEL, ++ new_shift, GFP_NOIO, + sdev->request_queue->node, false, true); + if (!ret) + sbitmap_resize(&sdev->budget_map, depth); +-- +2.39.5 + diff --git a/queue-6.1/scsi-qla1280-fix-kernel-oops-when-debug-level-2.patch b/queue-6.1/scsi-qla1280-fix-kernel-oops-when-debug-level-2.patch new file mode 100644 index 0000000000..572f33ec0c --- /dev/null +++ b/queue-6.1/scsi-qla1280-fix-kernel-oops-when-debug-level-2.patch @@ -0,0 +1,38 @@ +From d1b95d7743720e936b23f999d497191427c33e4e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 25 Jan 2025 10:49:22 +0100 +Subject: scsi: qla1280: Fix kernel oops when debug level > 2 + +From: Magnus Lindholm + +[ Upstream commit 5233e3235dec3065ccc632729675575dbe3c6b8a ] + +A null dereference or oops exception will eventually occur when qla1280.c +driver is compiled with DEBUG_QLA1280 enabled and ql_debug_level > 2. I +think its clear from the code that the intention here is sg_dma_len(s) not +length of sg_next(s) when printing the debug info. + +Signed-off-by: Magnus Lindholm +Link: https://lore.kernel.org/r/20250125095033.26188-1-linmag7@gmail.com +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qla1280.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c +index 1e7f4d138e06c..0bb80d135f560 100644 +--- a/drivers/scsi/qla1280.c ++++ b/drivers/scsi/qla1280.c +@@ -2866,7 +2866,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) + dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n", + cpu_to_le32(upper_32_bits(dma_handle)), + cpu_to_le32(lower_32_bits(dma_handle)), +- cpu_to_le32(sg_dma_len(sg_next(s)))); ++ cpu_to_le32(sg_dma_len(s))); + remseg--; + } + dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather " +-- +2.39.5 + diff --git a/queue-6.1/sctp-fix-undefined-behavior-in-left-shift-operation.patch b/queue-6.1/sctp-fix-undefined-behavior-in-left-shift-operation.patch new file mode 100644 index 0000000000..12c41d88f1 --- /dev/null +++ b/queue-6.1/sctp-fix-undefined-behavior-in-left-shift-operation.patch @@ -0,0 +1,43 @@ +From ca2931ef94942e94e6fc8e99853313913b997d8d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Feb 2025 16:12:16 +0800 +Subject: sctp: Fix undefined behavior in left shift operation + +From: Yu-Chun Lin + +[ Upstream commit 606572eb22c1786a3957d24307f5760bb058ca19 ] + +According to the C11 standard (ISO/IEC 9899:2011, 6.5.7): +"If E1 has a signed type and E1 x 2^E2 is not representable in the result +type, the behavior is undefined." + +Shifting 1 << 31 causes signed integer overflow, which leads to undefined +behavior. + +Fix this by explicitly using '1U << 31' to ensure the shift operates on +an unsigned type, avoiding undefined behavior. + +Signed-off-by: Yu-Chun Lin +Link: https://patch.msgid.link/20250218081217.3468369-1-eleanor15x@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + net/sctp/stream.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/sctp/stream.c b/net/sctp/stream.c +index ee6514af830f7..0527728aee986 100644 +--- a/net/sctp/stream.c ++++ b/net/sctp/stream.c +@@ -735,7 +735,7 @@ struct sctp_chunk *sctp_process_strreset_tsnreq( + * value SHOULD be the smallest TSN not acknowledged by the + * receiver of the request plus 2^31. + */ +- init_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1 << 31); ++ init_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1U << 31); + sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL, + init_tsn, GFP_ATOMIC); + +-- +2.39.5 + diff --git a/queue-6.1/series b/queue-6.1/series index ad63f31820..16dd80601e 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -28,3 +28,44 @@ gre-fix-ipv6-link-local-address-generation.patch net-openvswitch-remove-misbehaving-actions-length-ch.patch net-mlx5-bridge-fix-the-crash-caused-by-lag-state-ch.patch net-mlx5e-prevent-bridge-link-show-failure-for-non-e.patch +nvme-fc-go-straight-to-connecting-state-when-initial.patch +hrtimers-mark-is_migration_base-with-__always_inline.patch +powercap-call-put_device-on-an-error-path-in-powerca.patch +iscsi_ibft-fix-ubsan-shift-out-of-bounds-warning-in-.patch +scsi-core-use-gfp_noio-to-avoid-circular-locking-dep.patch +scsi-qla1280-fix-kernel-oops-when-debug-level-2.patch +acpi-resource-irq-override-for-eluktronics-mech-17.patch +smb-client-fix-noisy-when-tree-connecting-to-dfs-int.patch +alpha-elf-fix-misc-setarch-test-of-util-linux-by-rem.patch +vboxsf-fix-building-with-gcc-15.patch +hid-intel-ish-hid-fix-the-length-of-mng_sync_fw_cloc.patch +hid-intel-ish-hid-send-clock-sync-message-immediatel.patch +hid-ignore-non-functional-sensor-in-hp-5mp-camera.patch +hid-hid-apple-apple-magic-keyboard-a3203-usb-c-suppo.patch +hid-apple-fix-up-the-f6-key-on-the-omoton-kb066-keyb.patch +sched-clarify-wake_up_q-s-write-to-task-wake_q.next.patch +platform-x86-thinkpad_acpi-fix-invalid-fan-speed-on-.patch +platform-x86-thinkpad_acpi-support-for-v9-dytc-platf.patch +s390-cio-fix-chpid-configure-attribute-caching.patch +thermal-cpufreq_cooling-remove-structure-member-docu.patch +xen-swiotlb-mark-xen_swiotlb_fixup-__init.patch +alsa-hda-realtek-limit-mic-boost-on-positivo-arn50.patch +asoc-rsnd-don-t-indicate-warning-on-rsnd_kctrl_accep.patch +asoc-rsnd-adjust-convert-rate-limitation.patch +asoc-arizona-madera-use-fsleep-in-up-down-dapm-event.patch +asoc-sof-intel-hda-add-softdep-pre-to-snd-hda-codec-.patch +net-wwan-mhi_wwan_mbim-silence-sequence-number-glitc.patch +nvme-pci-quirk-acer-fa100-for-non-uniqueue-identifie.patch +nvme-tcp-add-basic-support-for-the-c2htermreq-pdu.patch +nvmet-rdma-recheck-queue-state-is-live-in-state-lock.patch +sctp-fix-undefined-behavior-in-left-shift-operation.patch +nvme-only-allow-entering-live-from-connecting-state.patch +asoc-tas2770-fix-volume-scale.patch +asoc-tas2764-fix-power-control-mask.patch +asoc-tas2764-set-the-sdout-polarity-correctly.patch +fuse-don-t-truncate-cached-mutated-symlink.patch +perf-x86-intel-use-better-start-period-for-frequency.patch +x86-irq-define-trace-events-conditionally.patch +mptcp-safety-check-before-fallback.patch +drm-nouveau-do-not-override-forced-connector-status.patch +block-fix-kmem_cache-of-name-bio-108-already-exists.patch diff --git a/queue-6.1/smb-client-fix-noisy-when-tree-connecting-to-dfs-int.patch b/queue-6.1/smb-client-fix-noisy-when-tree-connecting-to-dfs-int.patch new file mode 100644 index 0000000000..5370c85b27 --- /dev/null +++ b/queue-6.1/smb-client-fix-noisy-when-tree-connecting-to-dfs-int.patch @@ -0,0 +1,44 @@ +From e3be38553592f078af2b555ea6fa86c0a4174679 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 5 Feb 2025 13:22:11 -0300 +Subject: smb: client: fix noisy when tree connecting to DFS interlink targets + +From: Paulo Alcantara + +[ Upstream commit 773dc23ff81838b6f74d7fabba5a441cc6a93982 ] + +When the client attempts to tree connect to a domain-based DFS +namespace from a DFS interlink target, the server will return +STATUS_BAD_NETWORK_NAME and the following will appear on dmesg: + + CIFS: VFS: BAD_NETWORK_NAME: \\dom\dfs + +Since a DFS share might contain several DFS interlinks and they expire +after 10 minutes, the above message might end up being flooded on +dmesg when mounting or accessing them. + +Print this only once per share. + +Signed-off-by: Paulo Alcantara (Red Hat) +Signed-off-by: Steve French +Signed-off-by: Sasha Levin +--- + fs/smb/client/smb2pdu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c +index 217d381eb9fea..0ae931e023cee 100644 +--- a/fs/smb/client/smb2pdu.c ++++ b/fs/smb/client/smb2pdu.c +@@ -1999,7 +1999,7 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree, + + tcon_error_exit: + if (rsp && rsp->hdr.Status == STATUS_BAD_NETWORK_NAME) +- cifs_tcon_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree); ++ cifs_dbg(VFS | ONCE, "BAD_NETWORK_NAME: %s\n", tree); + goto tcon_exit; + } + +-- +2.39.5 + diff --git a/queue-6.1/thermal-cpufreq_cooling-remove-structure-member-docu.patch b/queue-6.1/thermal-cpufreq_cooling-remove-structure-member-docu.patch new file mode 100644 index 0000000000..84b518bce2 --- /dev/null +++ b/queue-6.1/thermal-cpufreq_cooling-remove-structure-member-docu.patch @@ -0,0 +1,41 @@ +From 6c0ee4b3bd5009b1a19919ba64283db1d07850b2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Feb 2025 09:47:11 +0100 +Subject: thermal/cpufreq_cooling: Remove structure member documentation + +From: Daniel Lezcano + +[ Upstream commit a6768c4f92e152265590371975d44c071a5279c7 ] + +The structure member documentation refers to a member which does not +exist any more. Remove it. + +Link: https://lore.kernel.org/all/202501220046.h3PMBCti-lkp@intel.com/ +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202501220046.h3PMBCti-lkp@intel.com/ +Signed-off-by: Daniel Lezcano +Acked-by: Viresh Kumar +Link: https://patch.msgid.link/20250211084712.2746705-1-daniel.lezcano@linaro.org +[ rjw: Minor changelog edits ] +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Sasha Levin +--- + drivers/thermal/cpufreq_cooling.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/drivers/thermal/cpufreq_cooling.c b/drivers/thermal/cpufreq_cooling.c +index 9f8b438fcf8f8..bac0f52a361bd 100644 +--- a/drivers/thermal/cpufreq_cooling.c ++++ b/drivers/thermal/cpufreq_cooling.c +@@ -57,8 +57,6 @@ struct time_in_idle { + * @max_level: maximum cooling level. One less than total number of valid + * cpufreq frequencies. + * @em: Reference on the Energy Model of the device +- * @cdev: thermal_cooling_device pointer to keep track of the +- * registered cooling device. + * @policy: cpufreq policy. + * @cooling_ops: cpufreq callbacks to thermal cooling device ops + * @idle_time: idle time stats +-- +2.39.5 + diff --git a/queue-6.1/vboxsf-fix-building-with-gcc-15.patch b/queue-6.1/vboxsf-fix-building-with-gcc-15.patch new file mode 100644 index 0000000000..ac41764cf2 --- /dev/null +++ b/queue-6.1/vboxsf-fix-building-with-gcc-15.patch @@ -0,0 +1,51 @@ +From 43ddf0651c095b38726c909fb7181ff580545d59 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 21 Jan 2025 21:56:48 +0530 +Subject: vboxsf: fix building with GCC 15 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Brahmajit Das + +[ Upstream commit 4e7487245abcbc5a1a1aea54e4d3b33c53804bda ] + +Building with GCC 15 results in build error +fs/vboxsf/super.c:24:54: error: initializer-string for array of ‘unsigned char’ is too long [-Werror=unterminated-string-initialization] + 24 | static const unsigned char VBSF_MOUNT_SIGNATURE[4] = "\000\377\376\375"; + | ^~~~~~~~~~~~~~~~~~ +cc1: all warnings being treated as errors + +Due to GCC having enabled -Werror=unterminated-string-initialization[0] +by default. Separately initializing each array element of +VBSF_MOUNT_SIGNATURE to ensure NUL termination, thus satisfying GCC 15 +and fixing the build error. + +[0]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wno-unterminated-string-initialization + +Signed-off-by: Brahmajit Das +Link: https://lore.kernel.org/r/20250121162648.1408743-1-brahmajit.xyz@gmail.com +Reviewed-by: Hans de Goede +Signed-off-by: Christian Brauner +Signed-off-by: Sasha Levin +--- + fs/vboxsf/super.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/fs/vboxsf/super.c b/fs/vboxsf/super.c +index 74952e58cca06..48f33d4994dc8 100644 +--- a/fs/vboxsf/super.c ++++ b/fs/vboxsf/super.c +@@ -21,7 +21,8 @@ + + #define VBOXSF_SUPER_MAGIC 0x786f4256 /* 'VBox' little endian */ + +-static const unsigned char VBSF_MOUNT_SIGNATURE[4] = "\000\377\376\375"; ++static const unsigned char VBSF_MOUNT_SIGNATURE[4] = { '\000', '\377', '\376', ++ '\375' }; + + static int follow_symlinks; + module_param(follow_symlinks, int, 0444); +-- +2.39.5 + diff --git a/queue-6.1/x86-irq-define-trace-events-conditionally.patch b/queue-6.1/x86-irq-define-trace-events-conditionally.patch new file mode 100644 index 0000000000..3f64fdbfe2 --- /dev/null +++ b/queue-6.1/x86-irq-define-trace-events-conditionally.patch @@ -0,0 +1,48 @@ +From 23ec089b16d0faa0d7feb3f430cabcc9df261913 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 25 Feb 2025 22:32:33 +0100 +Subject: x86/irq: Define trace events conditionally + +From: Arnd Bergmann + +[ Upstream commit 9de7695925d5d2d2085681ba935857246eb2817d ] + +When both of X86_LOCAL_APIC and X86_THERMAL_VECTOR are disabled, +the irq tracing produces a W=1 build warning for the tracing +definitions: + + In file included from include/trace/trace_events.h:27, + from include/trace/define_trace.h:113, + from arch/x86/include/asm/trace/irq_vectors.h:383, + from arch/x86/kernel/irq.c:29: + include/trace/stages/init.h:2:23: error: 'str__irq_vectors__trace_system_name' defined but not used [-Werror=unused-const-variable=] + +Make the tracepoints conditional on the same symbosl that guard +their usage. + +Signed-off-by: Arnd Bergmann +Signed-off-by: Ingo Molnar +Link: https://lore.kernel.org/r/20250225213236.3141752-1-arnd@kernel.org +Signed-off-by: Sasha Levin +--- + arch/x86/kernel/irq.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c +index 766ffe3ba3137..439fdb3f5fdf1 100644 +--- a/arch/x86/kernel/irq.c ++++ b/arch/x86/kernel/irq.c +@@ -23,8 +23,10 @@ + #include + #include + ++#if defined(CONFIG_X86_LOCAL_APIC) || defined(CONFIG_X86_THERMAL_VECTOR) + #define CREATE_TRACE_POINTS + #include ++#endif + + DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); + EXPORT_PER_CPU_SYMBOL(irq_stat); +-- +2.39.5 + diff --git a/queue-6.1/xen-swiotlb-mark-xen_swiotlb_fixup-__init.patch b/queue-6.1/xen-swiotlb-mark-xen_swiotlb_fixup-__init.patch new file mode 100644 index 0000000000..74ec309689 --- /dev/null +++ b/queue-6.1/xen-swiotlb-mark-xen_swiotlb_fixup-__init.patch @@ -0,0 +1,37 @@ +From 7e8aaf14ecc42d2b5c9eb8222c2d09b074b7e4b7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 12 Feb 2025 16:14:38 +0100 +Subject: Xen/swiotlb: mark xen_swiotlb_fixup() __init + +From: Jan Beulich + +[ Upstream commit 75ad02318af2e4ae669e26a79f001bd5e1f97472 ] + +It's sole user (pci_xen_swiotlb_init()) is __init, too. + +Signed-off-by: Jan Beulich +Reviewed-by: Stefano Stabellini + +Message-ID: +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + drivers/xen/swiotlb-xen.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c +index 0893c1012de62..fe52c8cbf1364 100644 +--- a/drivers/xen/swiotlb-xen.c ++++ b/drivers/xen/swiotlb-xen.c +@@ -112,7 +112,7 @@ static int is_xen_swiotlb_buffer(struct device *dev, dma_addr_t dma_addr) + } + + #ifdef CONFIG_X86 +-int xen_swiotlb_fixup(void *buf, unsigned long nslabs) ++int __init xen_swiotlb_fixup(void *buf, unsigned long nslabs) + { + int rc; + unsigned int order = get_order(IO_TLB_SEGSIZE << IO_TLB_SHIFT); +-- +2.39.5 + -- 2.47.3