--- /dev/null
+From 2ae147d643d326f74d93ba4f72a405f25f2677ea Mon Sep 17 00:00:00 2001
+From: Andy Chi <andy.chi@canonical.com>
+Date: Thu, 20 Apr 2023 11:59:41 +0800
+Subject: ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
+
+From: Andy Chi <andy.chi@canonical.com>
+
+commit 2ae147d643d326f74d93ba4f72a405f25f2677ea upstream.
+
+There is a HP ProBook 455 G10 which using ALC236 codec and need the
+ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF quirk to make mute LED and
+micmute LED work.
+
+Signed-off-by: Andy Chi <andy.chi@canonical.com>
+Cc: <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20230420035942.66817-1-andy.chi@canonical.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/patch_realtek.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -9468,6 +9468,7 @@ static const struct snd_pci_quirk alc269
+ SND_PCI_QUIRK(0x103c, 0x8b47, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x8b5d, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
+ SND_PCI_QUIRK(0x103c, 0x8b5e, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
++ SND_PCI_QUIRK(0x103c, 0x8b65, "HP ProBook 455 15.6 inch G10 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
+ SND_PCI_QUIRK(0x103c, 0x8b66, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
+ SND_PCI_QUIRK(0x103c, 0x8b7a, "HP", ALC236_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x8b7d, "HP", ALC236_FIXUP_HP_GPIO_LED),
--- /dev/null
+From ef9cddfe57d86aac6b509b550136395669159b30 Mon Sep 17 00:00:00 2001
+From: Boris Burkov <boris@bur.io>
+Date: Wed, 5 Apr 2023 12:43:59 -0700
+Subject: btrfs: reinterpret async discard iops_limit=0 as no delay
+
+From: Boris Burkov <boris@bur.io>
+
+commit ef9cddfe57d86aac6b509b550136395669159b30 upstream.
+
+Currently, a limit of 0 results in a hard coded metering over 6 hours.
+Since the default is a set limit, I suspect no one truly depends on this
+rather arbitrary setting. Repurpose it for an arguably more useful
+"unlimited" mode, where the delay is 0.
+
+Note that if block groups are too new, or go fully empty, there is still
+a delay associated with those conditions. Those delays implement
+heuristics for not trimming a region we are relatively likely to fully
+overwrite soon.
+
+CC: stable@vger.kernel.org # 6.2+
+Reviewed-by: Neal Gompa <neal@gompa.dev>
+Signed-off-by: Boris Burkov <boris@bur.io>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/discard.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+--- a/fs/btrfs/discard.c
++++ b/fs/btrfs/discard.c
+@@ -56,8 +56,6 @@
+ #define BTRFS_DISCARD_DELAY (120ULL * NSEC_PER_SEC)
+ #define BTRFS_DISCARD_UNUSED_DELAY (10ULL * NSEC_PER_SEC)
+
+-/* Target completion latency of discarding all discardable extents */
+-#define BTRFS_DISCARD_TARGET_MSEC (6 * 60 * 60UL * MSEC_PER_SEC)
+ #define BTRFS_DISCARD_MIN_DELAY_MSEC (1UL)
+ #define BTRFS_DISCARD_MAX_DELAY_MSEC (1000UL)
+ #define BTRFS_DISCARD_MAX_IOPS (1000U)
+@@ -577,6 +575,7 @@ void btrfs_discard_calc_delay(struct btr
+ s32 discardable_extents;
+ s64 discardable_bytes;
+ u32 iops_limit;
++ unsigned long min_delay = BTRFS_DISCARD_MIN_DELAY_MSEC;
+ unsigned long delay;
+
+ discardable_extents = atomic_read(&discard_ctl->discardable_extents);
+@@ -607,13 +606,19 @@ void btrfs_discard_calc_delay(struct btr
+ }
+
+ iops_limit = READ_ONCE(discard_ctl->iops_limit);
+- if (iops_limit)
++
++ if (iops_limit) {
+ delay = MSEC_PER_SEC / iops_limit;
+- else
+- delay = BTRFS_DISCARD_TARGET_MSEC / discardable_extents;
++ } else {
++ /*
++ * Unset iops_limit means go as fast as possible, so allow a
++ * delay of 0.
++ */
++ delay = 0;
++ min_delay = 0;
++ }
+
+- delay = clamp(delay, BTRFS_DISCARD_MIN_DELAY_MSEC,
+- BTRFS_DISCARD_MAX_DELAY_MSEC);
++ delay = clamp(delay, min_delay, BTRFS_DISCARD_MAX_DELAY_MSEC);
+ discard_ctl->delay_ms = delay;
+
+ spin_unlock(&discard_ctl->lock);
--- /dev/null
+From e9f59429b87d35cf23ae9ca19629bd686a1c0304 Mon Sep 17 00:00:00 2001
+From: Boris Burkov <boris@bur.io>
+Date: Wed, 5 Apr 2023 12:43:58 -0700
+Subject: btrfs: set default discard iops_limit to 1000
+
+From: Boris Burkov <boris@bur.io>
+
+commit e9f59429b87d35cf23ae9ca19629bd686a1c0304 upstream.
+
+Previously, the default was a relatively conservative 10. This results
+in a 100ms delay, so with ~300 discards in a commit, it takes the full
+30s till the next commit to finish the discards. On a workstation, this
+results in the disk never going idle, wasting power/battery, etc.
+
+Set the default to 1000, which results in using the smallest possible
+delay, currently, which is 1ms. This has shown to not pathologically
+keep the disk busy by the original reporter.
+
+Link: https://lore.kernel.org/linux-btrfs/Y%2F+n1wS%2F4XAH7X1p@nz/
+Link: https://bugzilla.redhat.com/show_bug.cgi?id=2182228
+CC: stable@vger.kernel.org # 6.2+
+Reviewed-by: Neal Gompa <neal@gompa.dev
+Signed-off-by: Boris Burkov <boris@bur.io>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/discard.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/btrfs/discard.c
++++ b/fs/btrfs/discard.c
+@@ -60,7 +60,7 @@
+ #define BTRFS_DISCARD_TARGET_MSEC (6 * 60 * 60UL * MSEC_PER_SEC)
+ #define BTRFS_DISCARD_MIN_DELAY_MSEC (1UL)
+ #define BTRFS_DISCARD_MAX_DELAY_MSEC (1000UL)
+-#define BTRFS_DISCARD_MAX_IOPS (10U)
++#define BTRFS_DISCARD_MAX_IOPS (1000U)
+
+ /* Monotonically decreasing minimum length filters after index 0 */
+ static int discard_minlen[BTRFS_NR_DISCARD_LISTS] = {
--- /dev/null
+From ffef73791574b8da872cfbf881d8e3e9955fc130 Mon Sep 17 00:00:00 2001
+From: Liang He <windhl@126.com>
+Date: Wed, 22 Mar 2023 11:56:27 +0800
+Subject: iio: dac: ad5755: Add missing fwnode_handle_put()
+
+From: Liang He <windhl@126.com>
+
+commit ffef73791574b8da872cfbf881d8e3e9955fc130 upstream.
+
+In ad5755_parse_fw(), we should add fwnode_handle_put()
+when break out of the iteration device_for_each_child_node()
+as it will automatically increase and decrease the refcounter.
+
+Fixes: 3ac27afefd5d ("iio:dac:ad5755: Switch to generic firmware properties and drop pdata")
+Signed-off-by: Liang He <windhl@126.com>
+Link: https://lore.kernel.org/r/20230322035627.1856421-1-windhl@126.com
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/dac/ad5755.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/iio/dac/ad5755.c
++++ b/drivers/iio/dac/ad5755.c
+@@ -802,6 +802,7 @@ static struct ad5755_platform_data *ad57
+ return pdata;
+
+ error_out:
++ fwnode_handle_put(pp);
+ devm_kfree(dev, pdata);
+ return NULL;
+ }
--- /dev/null
+From b1cb00d51e361cf5af93649917d9790e1623647e Mon Sep 17 00:00:00 2001
+From: Brian Masney <bmasney@redhat.com>
+Date: Mon, 3 Apr 2023 21:14:55 -0400
+Subject: iio: light: tsl2772: fix reading proximity-diodes from device tree
+
+From: Brian Masney <bmasney@redhat.com>
+
+commit b1cb00d51e361cf5af93649917d9790e1623647e upstream.
+
+tsl2772_read_prox_diodes() will correctly parse the properties from
+device tree to determine which proximity diode(s) to read from, however
+it didn't actually set this value on the struct tsl2772_settings. Let's
+go ahead and fix that.
+
+Reported-by: Tom Rix <trix@redhat.com>
+Link: https://lore.kernel.org/lkml/20230327120823.1369700-1-trix@redhat.com/
+Fixes: 94cd1113aaa0 ("iio: tsl2772: add support for reading proximity led settings from device tree")
+Signed-off-by: Brian Masney <bmasney@redhat.com>
+Link: https://lore.kernel.org/r/20230404011455.339454-1-bmasney@redhat.com
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/light/tsl2772.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/iio/light/tsl2772.c
++++ b/drivers/iio/light/tsl2772.c
+@@ -601,6 +601,7 @@ static int tsl2772_read_prox_diodes(stru
+ return -EINVAL;
+ }
+ }
++ chip->settings.prox_diode = prox_diode_mask;
+
+ return 0;
+ }
--- /dev/null
+From 370a3b8f58743eceb97c5256538d6048c26d2d03 Mon Sep 17 00:00:00 2001
+From: Tiezhu Yang <yangtiezhu@loongson.cn>
+Date: Wed, 19 Apr 2023 12:07:27 +0800
+Subject: LoongArch: Check unwind_error() in arch_stack_walk()
+
+From: Tiezhu Yang <yangtiezhu@loongson.cn>
+
+commit 370a3b8f58743eceb97c5256538d6048c26d2d03 upstream.
+
+We can see the following messages with CONFIG_PROVE_LOCKING=y on
+LoongArch:
+
+ BUG: MAX_STACK_TRACE_ENTRIES too low!
+ turning off the locking correctness validator.
+
+This is because stack_trace_save() returns a big value after call
+arch_stack_walk(), here is the call trace:
+
+ save_trace()
+ stack_trace_save()
+ arch_stack_walk()
+ stack_trace_consume_entry()
+
+arch_stack_walk() should return immediately if unwind_next_frame()
+failed, no need to do the useless loops to increase the value of c->len
+in stack_trace_consume_entry(), then we can fix the above problem.
+
+Cc: stable@vger.kernel.org
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Link: https://lore.kernel.org/all/8a44ad71-68d2-4926-892f-72bfc7a67e2a@roeck-us.net/
+Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
+Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/loongarch/kernel/stacktrace.c | 2 +-
+ arch/loongarch/kernel/unwind.c | 1 +
+ arch/loongarch/kernel/unwind_prologue.c | 4 +++-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+--- a/arch/loongarch/kernel/stacktrace.c
++++ b/arch/loongarch/kernel/stacktrace.c
+@@ -30,7 +30,7 @@ void arch_stack_walk(stack_trace_consume
+
+ regs->regs[1] = 0;
+ for (unwind_start(&state, task, regs);
+- !unwind_done(&state); unwind_next_frame(&state)) {
++ !unwind_done(&state) && !unwind_error(&state); unwind_next_frame(&state)) {
+ addr = unwind_get_return_address(&state);
+ if (!addr || !consume_entry(cookie, addr))
+ break;
+--- a/arch/loongarch/kernel/unwind.c
++++ b/arch/loongarch/kernel/unwind.c
+@@ -28,5 +28,6 @@ bool default_next_frame(struct unwind_st
+
+ } while (!get_stack_info(state->sp, state->task, info));
+
++ state->error = true;
+ return false;
+ }
+--- a/arch/loongarch/kernel/unwind_prologue.c
++++ b/arch/loongarch/kernel/unwind_prologue.c
+@@ -211,7 +211,7 @@ static bool next_frame(struct unwind_sta
+ pc = regs->csr_era;
+
+ if (user_mode(regs) || !__kernel_text_address(pc))
+- return false;
++ goto out;
+
+ state->first = true;
+ state->pc = pc;
+@@ -226,6 +226,8 @@ static bool next_frame(struct unwind_sta
+
+ } while (!get_stack_info(state->sp, state->task, info));
+
++out:
++ state->error = true;
+ return false;
+ }
+
--- /dev/null
+From df830336045db1246d3245d3737fee9939c5f731 Mon Sep 17 00:00:00 2001
+From: Huacai Chen <chenhuacai@loongson.cn>
+Date: Tue, 18 Apr 2023 19:38:58 +0800
+Subject: LoongArch: Fix probing of the CRC32 feature
+
+From: Huacai Chen <chenhuacai@loongson.cn>
+
+commit df830336045db1246d3245d3737fee9939c5f731 upstream.
+
+Not all LoongArch processors support CRC32 instructions. This feature
+is indicated by CPUCFG1.CRC32 (Bit25) but it is wrongly defined in the
+previous versions of the ISA manual (and so does in loongarch.h). The
+CRC32 feature is set unconditionally now, so fix it.
+
+BTW, expose the CRC32 feature in /proc/cpuinfo.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/loongarch/include/asm/cpu-features.h | 1
+ arch/loongarch/include/asm/cpu.h | 40 +++++++++++++++---------------
+ arch/loongarch/include/asm/loongarch.h | 2 -
+ arch/loongarch/kernel/cpu-probe.c | 7 ++++-
+ arch/loongarch/kernel/proc.c | 1
+ 5 files changed, 30 insertions(+), 21 deletions(-)
+
+--- a/arch/loongarch/include/asm/cpu-features.h
++++ b/arch/loongarch/include/asm/cpu-features.h
+@@ -42,6 +42,7 @@
+ #define cpu_has_fpu cpu_opt(LOONGARCH_CPU_FPU)
+ #define cpu_has_lsx cpu_opt(LOONGARCH_CPU_LSX)
+ #define cpu_has_lasx cpu_opt(LOONGARCH_CPU_LASX)
++#define cpu_has_crc32 cpu_opt(LOONGARCH_CPU_CRC32)
+ #define cpu_has_complex cpu_opt(LOONGARCH_CPU_COMPLEX)
+ #define cpu_has_crypto cpu_opt(LOONGARCH_CPU_CRYPTO)
+ #define cpu_has_lvz cpu_opt(LOONGARCH_CPU_LVZ)
+--- a/arch/loongarch/include/asm/cpu.h
++++ b/arch/loongarch/include/asm/cpu.h
+@@ -78,25 +78,26 @@ enum cpu_type_enum {
+ #define CPU_FEATURE_FPU 3 /* CPU has FPU */
+ #define CPU_FEATURE_LSX 4 /* CPU has LSX (128-bit SIMD) */
+ #define CPU_FEATURE_LASX 5 /* CPU has LASX (256-bit SIMD) */
+-#define CPU_FEATURE_COMPLEX 6 /* CPU has Complex instructions */
+-#define CPU_FEATURE_CRYPTO 7 /* CPU has Crypto instructions */
+-#define CPU_FEATURE_LVZ 8 /* CPU has Virtualization extension */
+-#define CPU_FEATURE_LBT_X86 9 /* CPU has X86 Binary Translation */
+-#define CPU_FEATURE_LBT_ARM 10 /* CPU has ARM Binary Translation */
+-#define CPU_FEATURE_LBT_MIPS 11 /* CPU has MIPS Binary Translation */
+-#define CPU_FEATURE_TLB 12 /* CPU has TLB */
+-#define CPU_FEATURE_CSR 13 /* CPU has CSR */
+-#define CPU_FEATURE_WATCH 14 /* CPU has watchpoint registers */
+-#define CPU_FEATURE_VINT 15 /* CPU has vectored interrupts */
+-#define CPU_FEATURE_CSRIPI 16 /* CPU has CSR-IPI */
+-#define CPU_FEATURE_EXTIOI 17 /* CPU has EXT-IOI */
+-#define CPU_FEATURE_PREFETCH 18 /* CPU has prefetch instructions */
+-#define CPU_FEATURE_PMP 19 /* CPU has perfermance counter */
+-#define CPU_FEATURE_SCALEFREQ 20 /* CPU supports cpufreq scaling */
+-#define CPU_FEATURE_FLATMODE 21 /* CPU has flat mode */
+-#define CPU_FEATURE_EIODECODE 22 /* CPU has EXTIOI interrupt pin decode mode */
+-#define CPU_FEATURE_GUESTID 23 /* CPU has GuestID feature */
+-#define CPU_FEATURE_HYPERVISOR 24 /* CPU has hypervisor (running in VM) */
++#define CPU_FEATURE_CRC32 6 /* CPU has CRC32 instructions */
++#define CPU_FEATURE_COMPLEX 7 /* CPU has Complex instructions */
++#define CPU_FEATURE_CRYPTO 8 /* CPU has Crypto instructions */
++#define CPU_FEATURE_LVZ 9 /* CPU has Virtualization extension */
++#define CPU_FEATURE_LBT_X86 10 /* CPU has X86 Binary Translation */
++#define CPU_FEATURE_LBT_ARM 11 /* CPU has ARM Binary Translation */
++#define CPU_FEATURE_LBT_MIPS 12 /* CPU has MIPS Binary Translation */
++#define CPU_FEATURE_TLB 13 /* CPU has TLB */
++#define CPU_FEATURE_CSR 14 /* CPU has CSR */
++#define CPU_FEATURE_WATCH 15 /* CPU has watchpoint registers */
++#define CPU_FEATURE_VINT 16 /* CPU has vectored interrupts */
++#define CPU_FEATURE_CSRIPI 17 /* CPU has CSR-IPI */
++#define CPU_FEATURE_EXTIOI 18 /* CPU has EXT-IOI */
++#define CPU_FEATURE_PREFETCH 19 /* CPU has prefetch instructions */
++#define CPU_FEATURE_PMP 20 /* CPU has perfermance counter */
++#define CPU_FEATURE_SCALEFREQ 21 /* CPU supports cpufreq scaling */
++#define CPU_FEATURE_FLATMODE 22 /* CPU has flat mode */
++#define CPU_FEATURE_EIODECODE 23 /* CPU has EXTIOI interrupt pin decode mode */
++#define CPU_FEATURE_GUESTID 24 /* CPU has GuestID feature */
++#define CPU_FEATURE_HYPERVISOR 25 /* CPU has hypervisor (running in VM) */
+
+ #define LOONGARCH_CPU_CPUCFG BIT_ULL(CPU_FEATURE_CPUCFG)
+ #define LOONGARCH_CPU_LAM BIT_ULL(CPU_FEATURE_LAM)
+@@ -104,6 +105,7 @@ enum cpu_type_enum {
+ #define LOONGARCH_CPU_FPU BIT_ULL(CPU_FEATURE_FPU)
+ #define LOONGARCH_CPU_LSX BIT_ULL(CPU_FEATURE_LSX)
+ #define LOONGARCH_CPU_LASX BIT_ULL(CPU_FEATURE_LASX)
++#define LOONGARCH_CPU_CRC32 BIT_ULL(CPU_FEATURE_CRC32)
+ #define LOONGARCH_CPU_COMPLEX BIT_ULL(CPU_FEATURE_COMPLEX)
+ #define LOONGARCH_CPU_CRYPTO BIT_ULL(CPU_FEATURE_CRYPTO)
+ #define LOONGARCH_CPU_LVZ BIT_ULL(CPU_FEATURE_LVZ)
+--- a/arch/loongarch/include/asm/loongarch.h
++++ b/arch/loongarch/include/asm/loongarch.h
+@@ -117,7 +117,7 @@ static inline u32 read_cpucfg(u32 reg)
+ #define CPUCFG1_EP BIT(22)
+ #define CPUCFG1_RPLV BIT(23)
+ #define CPUCFG1_HUGEPG BIT(24)
+-#define CPUCFG1_IOCSRBRD BIT(25)
++#define CPUCFG1_CRC32 BIT(25)
+ #define CPUCFG1_MSGINT BIT(26)
+
+ #define LOONGARCH_CPUCFG2 0x2
+--- a/arch/loongarch/kernel/cpu-probe.c
++++ b/arch/loongarch/kernel/cpu-probe.c
+@@ -94,13 +94,18 @@ static void cpu_probe_common(struct cpui
+ c->options = LOONGARCH_CPU_CPUCFG | LOONGARCH_CPU_CSR |
+ LOONGARCH_CPU_TLB | LOONGARCH_CPU_VINT | LOONGARCH_CPU_WATCH;
+
+- elf_hwcap = HWCAP_LOONGARCH_CPUCFG | HWCAP_LOONGARCH_CRC32;
++ elf_hwcap = HWCAP_LOONGARCH_CPUCFG;
+
+ config = read_cpucfg(LOONGARCH_CPUCFG1);
+ if (config & CPUCFG1_UAL) {
+ c->options |= LOONGARCH_CPU_UAL;
+ elf_hwcap |= HWCAP_LOONGARCH_UAL;
+ }
++ if (config & CPUCFG1_CRC32) {
++ c->options |= LOONGARCH_CPU_CRC32;
++ elf_hwcap |= HWCAP_LOONGARCH_CRC32;
++ }
++
+
+ config = read_cpucfg(LOONGARCH_CPUCFG2);
+ if (config & CPUCFG2_LAM) {
+--- a/arch/loongarch/kernel/proc.c
++++ b/arch/loongarch/kernel/proc.c
+@@ -76,6 +76,7 @@ static int show_cpuinfo(struct seq_file
+ if (cpu_has_fpu) seq_printf(m, " fpu");
+ if (cpu_has_lsx) seq_printf(m, " lsx");
+ if (cpu_has_lasx) seq_printf(m, " lasx");
++ if (cpu_has_crc32) seq_printf(m, " crc32");
+ if (cpu_has_complex) seq_printf(m, " complex");
+ if (cpu_has_crypto) seq_printf(m, " crypto");
+ if (cpu_has_lvz) seq_printf(m, " lvz");
--- /dev/null
+From dce5ea1d0f45fa612f5760b88614a3f32bc75e3f Mon Sep 17 00:00:00 2001
+From: Huacai Chen <chenhuacai@loongson.cn>
+Date: Tue, 18 Apr 2023 19:38:58 +0800
+Subject: LoongArch: Mark 3 symbol exports as non-GPL
+
+From: Huacai Chen <chenhuacai@loongson.cn>
+
+commit dce5ea1d0f45fa612f5760b88614a3f32bc75e3f upstream.
+
+vm_map_base, empty_zero_page and invalid_pmd_table could be accessed
+widely by some out-of-tree non-GPL but important file systems or drivers
+(e.g. OpenZFS). Let's use EXPORT_SYMBOL() instead of EXPORT_SYMBOL_GPL()
+to export them, so as to avoid build errors.
+
+1, Details about vm_map_base:
+
+This is a LoongArch-specific symbol and may be referenced through macros
+PCI_IOBASE, VMALLOC_START and VMALLOC_END.
+
+2, Details about empty_zero_page:
+
+As it stands today, only 3 architectures export empty_zero_page as a GPL
+symbol: IA64, LoongArch and MIPS. LoongArch gets the GPL export by
+inheriting from MIPS, and the MIPS export was first introduced in commit
+497d2adcbf50b ("[MIPS] Export empty_zero_page for sake of the ext4
+module."). The IA64 export was similar: commit a7d57ecf4216e ("[IA64]
+Export three symbols for module use") did so for kvm.
+
+In both IA64 and MIPS, the export of empty_zero_page was done for
+satisfying some in-kernel component built as module (kvm and ext4
+respectively), and given its reasonably low-level nature, GPL is a
+reasonable choice. But looking at the bigger picture it is evident most
+other architectures do not regard it as GPL, so in effect the symbol
+probably should not be treated as such, in favor of consistency.
+
+3, Details about invalid_pmd_table:
+
+Keep consistency with invalid_pte_table and make it be possible by some
+modules.
+
+Cc: stable@vger.kernel.org
+Reviewed-by: WANG Xuerui <git@xen0n.name>
+Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/loongarch/kernel/cpu-probe.c | 2 +-
+ arch/loongarch/mm/init.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/loongarch/kernel/cpu-probe.c
++++ b/arch/loongarch/kernel/cpu-probe.c
+@@ -60,7 +60,7 @@ static inline void set_elf_platform(int
+
+ /* MAP BASE */
+ unsigned long vm_map_base;
+-EXPORT_SYMBOL_GPL(vm_map_base);
++EXPORT_SYMBOL(vm_map_base);
+
+ static void cpu_probe_addrbits(struct cpuinfo_loongarch *c)
+ {
+--- a/arch/loongarch/mm/init.c
++++ b/arch/loongarch/mm/init.c
+@@ -41,7 +41,7 @@
+ * don't have to care about aliases on other CPUs.
+ */
+ unsigned long empty_zero_page, zero_page_mask;
+-EXPORT_SYMBOL_GPL(empty_zero_page);
++EXPORT_SYMBOL(empty_zero_page);
+ EXPORT_SYMBOL(zero_page_mask);
+
+ void setup_zero_pages(void)
+@@ -270,7 +270,7 @@ pud_t invalid_pud_table[PTRS_PER_PUD] __
+ #endif
+ #ifndef __PAGETABLE_PMD_FOLDED
+ pmd_t invalid_pmd_table[PTRS_PER_PMD] __page_aligned_bss;
+-EXPORT_SYMBOL_GPL(invalid_pmd_table);
++EXPORT_SYMBOL(invalid_pmd_table);
+ #endif
+ pte_t invalid_pte_table[PTRS_PER_PTE] __page_aligned_bss;
+ EXPORT_SYMBOL(invalid_pte_table);
--- /dev/null
+From 93eb1215ed794a18ba8753e0654f069d58838966 Mon Sep 17 00:00:00 2001
+From: Huacai Chen <chenhuacai@loongson.cn>
+Date: Tue, 18 Apr 2023 19:38:58 +0800
+Subject: LoongArch: module: set section addresses to 0x0
+
+From: Huacai Chen <chenhuacai@loongson.cn>
+
+commit 93eb1215ed794a18ba8753e0654f069d58838966 upstream.
+
+These got*, plt* and .text.ftrace_trampoline sections specified for
+LoongArch have non-zero addressses. Non-zero section addresses in a
+relocatable ELF would confuse GDB when it tries to compute the section
+offsets and it ends up printing wrong symbol addresses. Therefore, set
+them to zero, which mirrors the change in commit 5d8591bc0fbaeb6ded
+("arm64 module: set plt* section addresses to 0x0").
+
+Cc: stable@vger.kernel.org
+Reviewed-by: Guo Ren <guoren@kernel.org>
+Signed-off-by: Chong Qiao <qiaochong@loongson.cn>
+Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/loongarch/include/asm/module.lds.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/arch/loongarch/include/asm/module.lds.h
++++ b/arch/loongarch/include/asm/module.lds.h
+@@ -2,8 +2,8 @@
+ /* Copyright (C) 2020-2022 Loongson Technology Corporation Limited */
+ SECTIONS {
+ . = ALIGN(4);
+- .got : { BYTE(0) }
+- .plt : { BYTE(0) }
+- .plt.idx : { BYTE(0) }
+- .ftrace_trampoline : { BYTE(0) }
++ .got 0 : { BYTE(0) }
++ .plt 0 : { BYTE(0) }
++ .plt.idx 0 : { BYTE(0) }
++ .ftrace_trampoline 0 : { BYTE(0) }
+ }
--- /dev/null
+From c682e4c37d2b8ba3bde1125cbbea4ee88824b4e2 Mon Sep 17 00:00:00 2001
+From: David Gow <davidgow@google.com>
+Date: Wed, 15 Feb 2023 06:47:35 +0800
+Subject: rust: kernel: Mark rust_fmt_argument as extern "C"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: David Gow <davidgow@google.com>
+
+commit c682e4c37d2b8ba3bde1125cbbea4ee88824b4e2 upstream.
+
+The rust_fmt_argument function is called from printk() to handle the %pA
+format specifier.
+
+Since it's called from C, we should mark it extern "C" to make sure it's
+ABI compatible.
+
+Cc: stable@vger.kernel.org
+Fixes: 247b365dc8dc ("rust: add `kernel` crate")
+Signed-off-by: David Gow <davidgow@google.com>
+Reviewed-by: Gary Guo <gary@garyguo.net>
+Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
+Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
+[Applied `rustfmt`]
+Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ rust/kernel/print.rs | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/rust/kernel/print.rs
++++ b/rust/kernel/print.rs
+@@ -18,7 +18,11 @@ use crate::bindings;
+
+ // Called from `vsprintf` with format specifier `%pA`.
+ #[no_mangle]
+-unsafe fn rust_fmt_argument(buf: *mut c_char, end: *mut c_char, ptr: *const c_void) -> *mut c_char {
++unsafe extern "C" fn rust_fmt_argument(
++ buf: *mut c_char,
++ end: *mut c_char,
++ ptr: *const c_void,
++) -> *mut c_char {
+ use fmt::Write;
+ // SAFETY: The C contract guarantees that `buf` is valid if it's less than `end`.
+ let mut w = unsafe { RawFormatter::from_ptrs(buf.cast(), end.cast()) };
pwm-zero-initialize-the-pwm_state-passed-to-driver-s-.get_state.patch
revert-userfaultfd-don-t-fail-on-unrecognized-features.patch
revert-acpica-events-support-fixed-pcie-wake-event.patch
+iio-dac-ad5755-add-missing-fwnode_handle_put.patch
+iio-light-tsl2772-fix-reading-proximity-diodes-from-device-tree.patch
+alsa-hda-realtek-fix-mute-micmute-leds-for-a-hp-probook.patch
+btrfs-set-default-discard-iops_limit-to-1000.patch
+btrfs-reinterpret-async-discard-iops_limit-0-as-no-delay.patch
+rust-kernel-mark-rust_fmt_argument-as-extern-c.patch
+loongarch-module-set-section-addresses-to-0x0.patch
+loongarch-check-unwind_error-in-arch_stack_walk.patch
+loongarch-fix-probing-of-the-crc32-feature.patch
+loongarch-mark-3-symbol-exports-as-non-gpl.patch