commit:     a2caeaa3d282040a954d3b967fa62e1b3bbbd71b
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Mon Feb  6 12:46:18 2023 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Mon Feb  6 12:46:18 2023 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=a2caeaa3

Linux patch 6.1.10

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README             |   4 +
 1009_linux-6.1.10.patch | 855 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 859 insertions(+)

diff --git a/0000_README b/0000_README
index 1f899f11..10671afd 100644
--- a/0000_README
+++ b/0000_README
@@ -79,6 +79,10 @@ Patch:  1008_linux-6.1.9.patch
 From:   http://www.kernel.org
 Desc:   Linux 6.1.9
 
+Patch:  1009_linux-6.1.10.patch
+From:   http://www.kernel.org
+Desc:   Linux 6.1.10
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1009_linux-6.1.10.patch b/1009_linux-6.1.10.patch
new file mode 100644
index 00000000..3d6ca3ee
--- /dev/null
+++ b/1009_linux-6.1.10.patch
@@ -0,0 +1,855 @@
+diff --git a/Makefile b/Makefile
+index 3778b422fa113..6e34c942744e3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 6
+ PATCHLEVEL = 1
+-SUBLEVEL = 9
++SUBLEVEL = 10
+ EXTRAVERSION =
+ NAME = Hurr durr I'ma ninja sloth
+ 
+diff --git a/arch/arm/boot/dts/imx53-ppd.dts b/arch/arm/boot/dts/imx53-ppd.dts
+index 37d0cffea99c5..70c4a4852256c 100644
+--- a/arch/arm/boot/dts/imx53-ppd.dts
++++ b/arch/arm/boot/dts/imx53-ppd.dts
+@@ -488,7 +488,7 @@
+       scl-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
+       status = "okay";
+ 
+-      i2c-switch@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9547";
+               #address-cells = <1>;
+               #size-cells = <0>;
+diff --git a/arch/arm/boot/dts/vf610-zii-dev-rev-b.dts 
b/arch/arm/boot/dts/vf610-zii-dev-rev-b.dts
+index 42ed4a04a12e2..6280c5e86a124 100644
+--- a/arch/arm/boot/dts/vf610-zii-dev-rev-b.dts
++++ b/arch/arm/boot/dts/vf610-zii-dev-rev-b.dts
+@@ -345,7 +345,7 @@
+ };
+ 
+ &i2c2 {
+-      tca9548@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9548";
+               pinctrl-0 = <&pinctrl_i2c_mux_reset>;
+               pinctrl-names = "default";
+diff --git a/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts 
b/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
+index de79dcfd32e62..ba2001f373158 100644
+--- a/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
++++ b/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
+@@ -340,7 +340,7 @@
+ };
+ 
+ &i2c2 {
+-      tca9548@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9548";
+               pinctrl-0 = <&pinctrl_i2c_mux_reset>;
+               pinctrl-names = "default";
+diff --git a/arch/arm/mach-omap1/gpio15xx.c b/arch/arm/mach-omap1/gpio15xx.c
+index c675f11de99db..61fa26efd8653 100644
+--- a/arch/arm/mach-omap1/gpio15xx.c
++++ b/arch/arm/mach-omap1/gpio15xx.c
+@@ -11,6 +11,7 @@
+ #include <linux/gpio.h>
+ #include <linux/platform_data/gpio-omap.h>
+ #include <linux/soc/ti/omap1-soc.h>
++#include <asm/irq.h>
+ 
+ #include "irqs.h"
+ 
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts
+index 5a8d85a7d1612..bbdf989058ff7 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts
+@@ -110,7 +110,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      pca9547@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts
+index 9b726c2a48426..dda27ed7aaf2b 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts
+@@ -89,7 +89,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      pca9547@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts
+index b2fcbba60d3ac..3b0ed9305f2bd 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts
+@@ -88,7 +88,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      pca9547@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts
+index 41d8b15f25a54..aa52ff73ff9e0 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts
+@@ -53,7 +53,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      i2c-switch@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts
+index 1bfbce69cc8b7..ee8e932628d17 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts
+@@ -136,7 +136,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      i2c-switch@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts 
b/arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts
+index ef6c8967533ef..d4867d6cf47cd 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts
+@@ -245,7 +245,7 @@
+ &i2c3 {
+       status = "okay";
+ 
+-      i2c-switch@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9540";
+               #address-cells = <1>;
+               #size-cells = <0>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi 
b/arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi
+index f598669e742fc..52c5a43b30a0f 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi
++++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi
+@@ -103,7 +103,7 @@
+ 
+ &i2c0 {
+       status = "okay";
+-      pca9547@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               reg = <0x77>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi 
b/arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi
+index 3d9647b3da147..537cecb13dd08 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi
++++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi
+@@ -44,7 +44,7 @@
+ 
+ &i2c0 {
+       status = "okay";
+-      pca9547@75 {
++      i2c-mux@75 {
+               compatible = "nxp,pca9547";
+               reg = <0x75>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi 
b/arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi
+index afb455210bd07..d32a52ab00a42 100644
+--- a/arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi
++++ b/arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi
+@@ -54,7 +54,7 @@
+ &i2c0 {
+       status = "okay";
+ 
+-      i2c-switch@77 {
++      i2c-mux@77 {
+               compatible = "nxp,pca9547";
+               #address-cells = <1>;
+               #size-cells = <0>;
+diff --git a/arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts 
b/arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts
+index 74c09891600f2..6357078185edd 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts
++++ b/arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts
+@@ -214,7 +214,7 @@
+       pinctrl-0 = <&pinctrl_i2c3>;
+       status = "okay";
+ 
+-      i2cmux@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9540";
+               reg = <0x70>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts 
b/arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts
+index 9dda2a1554c32..8614c18b5998c 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts
++++ b/arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts
+@@ -133,7 +133,7 @@
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+ 
+-      i2cmux@70 {
++      i2c-mux@70 {
+               compatible = "nxp,pca9546";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_i2c1_pca9546>;
+@@ -216,7 +216,7 @@
+       pinctrl-0 = <&pinctrl_i2c4>;
+       status = "okay";
+ 
+-      pca9546: i2cmux@70 {
++      pca9546: i2c-mux@70 {
+               compatible = "nxp,pca9546";
+               reg = <0x70>;
+               #address-cells = <1>;
+diff --git a/arch/arm64/boot/dts/freescale/imx8mq-thor96.dts 
b/arch/arm64/boot/dts/freescale/imx8mq-thor96.dts
+index 5d5aa6537225f..6e6182709d220 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mq-thor96.dts
++++ b/arch/arm64/boot/dts/freescale/imx8mq-thor96.dts
+@@ -339,7 +339,7 @@
+       bus-width = <4>;
+       non-removable;
+       no-sd;
+-      no-emmc;
++      no-mmc;
+       status = "okay";
+ 
+       brcmf: wifi@1 {
+@@ -359,7 +359,7 @@
+       cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       no-sdio;
+-      no-emmc;
++      no-mmc;
+       disable-wp;
+       status = "okay";
+ };
+diff --git a/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts 
b/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
+index 07d8dd8160f68..afa883389456c 100644
+--- a/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
++++ b/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
+@@ -61,7 +61,7 @@
+       pinctrl-0 = <&pinctrl_lpi2c1 &pinctrl_ioexp_rst>;
+       status = "okay";
+ 
+-      i2c-switch@71 {
++      i2c-mux@71 {
+               compatible = "nxp,pca9646", "nxp,pca9546";
+               #address-cells = <1>;
+               #size-cells = <0>;
+diff --git a/arch/arm64/boot/dts/qcom/msm8994-huawei-angler-rev-101.dts 
b/arch/arm64/boot/dts/qcom/msm8994-huawei-angler-rev-101.dts
+index dbfbb77e9ff57..7e2c0dcc11ab1 100644
+--- a/arch/arm64/boot/dts/qcom/msm8994-huawei-angler-rev-101.dts
++++ b/arch/arm64/boot/dts/qcom/msm8994-huawei-angler-rev-101.dts
+@@ -8,9 +8,6 @@
+ 
+ #include "msm8994.dtsi"
+ 
+-/* Angler's firmware does not report where the memory is allocated */
+-/delete-node/ &cont_splash_mem;
+-
+ / {
+       model = "Huawei Nexus 6P";
+       compatible = "huawei,angler", "qcom,msm8994";
+@@ -27,6 +24,22 @@
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
++
++      reserved-memory {
++              #address-cells = <2>;
++              #size-cells = <2>;
++              ranges;
++
++              tzapp_mem: tzapp@4800000 {
++                      reg = <0 0x04800000 0 0x1900000>;
++                      no-map;
++              };
++
++              removed_region: reserved@6300000 {
++                      reg = <0 0x06300000 0 0xD00000>;
++                      no-map;
++              };
++      };
+ };
+ 
+ &blsp1_uart2 {
+diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c
+index ddb8ba4eb399d..90a5de7463326 100644
+--- a/arch/loongarch/kernel/process.c
++++ b/arch/loongarch/kernel/process.c
+@@ -185,20 +185,14 @@ out:
+ 
+ unsigned long __get_wchan(struct task_struct *task)
+ {
+-      unsigned long pc;
++      unsigned long pc = 0;
+       struct unwind_state state;
+ 
+       if (!try_get_task_stack(task))
+               return 0;
+ 
+-      unwind_start(&state, task, NULL);
+-      state.sp = thread_saved_fp(task);
+-      get_stack_info(state.sp, state.task, &state.stack_info);
+-      state.pc = thread_saved_ra(task);
+-#ifdef CONFIG_UNWINDER_PROLOGUE
+-      state.type = UNWINDER_PROLOGUE;
+-#endif
+-      for (; !unwind_done(&state); unwind_next_frame(&state)) {
++      for (unwind_start(&state, task, NULL);
++           !unwind_done(&state); unwind_next_frame(&state)) {
+               pc = unwind_get_return_address(&state);
+               if (!pc)
+                       break;
+diff --git a/arch/loongarch/kernel/unwind_guess.c 
b/arch/loongarch/kernel/unwind_guess.c
+index 5afa6064d73e4..0c20e5184de60 100644
+--- a/arch/loongarch/kernel/unwind_guess.c
++++ b/arch/loongarch/kernel/unwind_guess.c
+@@ -25,6 +25,12 @@ void unwind_start(struct unwind_state *state, struct 
task_struct *task,
+       if (regs) {
+               state->sp = regs->regs[3];
+               state->pc = regs->csr_era;
++      } else if (task && task != current) {
++              state->sp = thread_saved_fp(task);
++              state->pc = thread_saved_ra(task);
++      } else {
++              state->sp = (unsigned long)__builtin_frame_address(0);
++              state->pc = (unsigned long)__builtin_return_address(0);
+       }
+ 
+       state->task = task;
+diff --git a/arch/loongarch/kernel/unwind_prologue.c 
b/arch/loongarch/kernel/unwind_prologue.c
+index 4571c3c87cd4c..1c5b65756144d 100644
+--- a/arch/loongarch/kernel/unwind_prologue.c
++++ b/arch/loongarch/kernel/unwind_prologue.c
+@@ -111,12 +111,22 @@ void unwind_start(struct unwind_state *state, struct 
task_struct *task,
+                   struct pt_regs *regs)
+ {
+       memset(state, 0, sizeof(*state));
++      state->type = UNWINDER_PROLOGUE;
+ 
+-      if (regs &&  __kernel_text_address(regs->csr_era)) {
+-              state->pc = regs->csr_era;
++      if (regs) {
+               state->sp = regs->regs[3];
++              state->pc = regs->csr_era;
+               state->ra = regs->regs[1];
+-              state->type = UNWINDER_PROLOGUE;
++              if (!__kernel_text_address(state->pc))
++                      state->type = UNWINDER_GUESS;
++      } else if (task && task != current) {
++              state->sp = thread_saved_fp(task);
++              state->pc = thread_saved_ra(task);
++              state->ra = 0;
++      } else {
++              state->sp = (unsigned long)__builtin_frame_address(0);
++              state->pc = (unsigned long)__builtin_return_address(0);
++              state->ra = 0;
+       }
+ 
+       state->task = task;
+diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
+index ab19ddb09d65e..2ec5f1e0312fa 100644
+--- a/arch/s390/kernel/setup.c
++++ b/arch/s390/kernel/setup.c
+@@ -507,6 +507,7 @@ static void __init setup_lowcore_dat_on(void)
+ {
+       struct lowcore *abs_lc;
+       unsigned long flags;
++      int i;
+ 
+       __ctl_clear_bit(0, 28);
+       S390_lowcore.external_new_psw.mask |= PSW_MASK_DAT;
+@@ -521,8 +522,8 @@ static void __init setup_lowcore_dat_on(void)
+       abs_lc = get_abs_lowcore(&flags);
+       abs_lc->restart_flags = RESTART_FLAG_CTLREGS;
+       abs_lc->program_new_psw = S390_lowcore.program_new_psw;
+-      memcpy(abs_lc->cregs_save_area, S390_lowcore.cregs_save_area,
+-             sizeof(abs_lc->cregs_save_area));
++      for (i = 0; i < 16; i++)
++              abs_lc->cregs_save_area[i] = S390_lowcore.cregs_save_area[i];
+       put_abs_lowcore(abs_lc, flags);
+ }
+ 
+diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
+index fcf9cf49f5de1..7c91d9195da8d 100644
+--- a/block/blk-cgroup.c
++++ b/block/blk-cgroup.c
+@@ -1408,6 +1408,10 @@ retry:
+               list_for_each_entry_reverse(blkg, &q->blkg_list, q_node)
+                       pol->pd_init_fn(blkg->pd[pol->plid]);
+ 
++      if (pol->pd_online_fn)
++              list_for_each_entry_reverse(blkg, &q->blkg_list, q_node)
++                      pol->pd_online_fn(blkg->pd[pol->plid]);
++
+       __set_bit(pol->plid, q->blkcg_pols);
+       ret = 0;
+ 
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index 63abbe342b28c..83fbc7c546172 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -2858,6 +2858,7 @@ static inline struct request 
*blk_mq_get_cached_request(struct request_queue *q,
+               struct blk_plug *plug, struct bio **bio, unsigned int nsegs)
+ {
+       struct request *rq;
++      enum hctx_type type, hctx_type;
+ 
+       if (!plug)
+               return NULL;
+@@ -2870,7 +2871,10 @@ static inline struct request 
*blk_mq_get_cached_request(struct request_queue *q,
+               return NULL;
+       }
+ 
+-      if (blk_mq_get_hctx_type((*bio)->bi_opf) != rq->mq_hctx->type)
++      type = blk_mq_get_hctx_type((*bio)->bi_opf);
++      hctx_type = rq->mq_hctx->type;
++      if (type != hctx_type &&
++          !(type == HCTX_TYPE_READ && hctx_type == HCTX_TYPE_DEFAULT))
+               return NULL;
+       if (op_is_flush(rq->cmd_flags) != op_is_flush((*bio)->bi_opf))
+               return NULL;
+diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
+index 5c32b318c173d..b48f85c3791e9 100644
+--- a/drivers/acpi/video_detect.c
++++ b/drivers/acpi/video_detect.c
+@@ -493,6 +493,14 @@ static const struct dmi_system_id 
video_detect_dmi_table[] = {
+               DMI_MATCH(DMI_PRODUCT_NAME, "Precision 7510"),
+               },
+       },
++      {
++       .callback = video_detect_force_native,
++       /* Acer Aspire 4810T */
++       .matches = {
++              DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
++              DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 4810T"),
++              },
++      },
+       {
+        .callback = video_detect_force_native,
+        /* Acer Aspire 5738z */
+diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
+index fbea5f62dd98b..b926abe4fa43a 100644
+--- a/drivers/dma/imx-sdma.c
++++ b/drivers/dma/imx-sdma.c
+@@ -1521,10 +1521,12 @@ static struct sdma_desc *sdma_transfer_init(struct 
sdma_channel *sdmac,
+               sdma_config_ownership(sdmac, false, true, false);
+ 
+       if (sdma_load_context(sdmac))
+-              goto err_desc_out;
++              goto err_bd_out;
+ 
+       return desc;
+ 
++err_bd_out:
++      sdma_free_bd(desc);
+ err_desc_out:
+       kfree(desc);
+ err_out:
+diff --git a/drivers/firmware/arm_scmi/driver.c 
b/drivers/firmware/arm_scmi/driver.c
+index f818d00bb2c69..ffdad59ec81fc 100644
+--- a/drivers/firmware/arm_scmi/driver.c
++++ b/drivers/firmware/arm_scmi/driver.c
+@@ -910,6 +910,8 @@ static int do_xfer(const struct scmi_protocol_handle *ph,
+                             xfer->hdr.protocol_id, xfer->hdr.seq,
+                             xfer->hdr.poll_completion);
+ 
++      /* Clear any stale status */
++      xfer->hdr.status = SCMI_SUCCESS;
+       xfer->state = SCMI_XFER_SENT_OK;
+       /*
+        * Even though spinlocking is not needed here since no race is possible
+diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
+index a7d2358736fe7..fa3de3c3010ce 100644
+--- a/drivers/gpio/gpiolib-acpi.c
++++ b/drivers/gpio/gpiolib-acpi.c
+@@ -361,7 +361,7 @@ err:
+ }
+ 
+ static bool acpi_gpio_irq_is_wake(struct device *parent,
+-                                struct acpi_resource_gpio *agpio)
++                                const struct acpi_resource_gpio *agpio)
+ {
+       unsigned int pin = agpio->pin_table[0];
+ 
+@@ -754,7 +754,7 @@ static int acpi_populate_gpio_lookup(struct acpi_resource 
*ares, void *data)
+               lookup->info.pin_config = agpio->pin_config;
+               lookup->info.debounce = agpio->debounce_timeout;
+               lookup->info.gpioint = gpioint;
+-              lookup->info.wake_capable = agpio->wake_capable == 
ACPI_WAKE_CAPABLE;
++              lookup->info.wake_capable = 
acpi_gpio_irq_is_wake(&lookup->info.adev->dev, agpio);
+ 
+               /*
+                * Polarity and triggering are only specified for GpioInt
+@@ -1080,7 +1080,8 @@ int acpi_dev_gpio_irq_wake_get_by(struct acpi_device 
*adev, const char *name, in
+                               dev_dbg(&adev->dev, "IRQ %d already in use\n", 
irq);
+                       }
+ 
+-                      if (wake_capable)
++                      /* avoid suspend issues with GPIOs when systems are 
using S3 */
++                      if (wake_capable && acpi_gbl_FADT.flags & 
ACPI_FADT_LOW_POWER_S0)
+                               *wake_capable = info.wake_capable;
+ 
+                       return irq;
+@@ -1599,6 +1600,19 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] 
__initconst = {
+                       .ignore_interrupt = "AMDI0030:00@18",
+               },
+       },
++      {
++              /*
++               * Spurious wakeups from TP_ATTN# pin
++               * Found in BIOS 1.7.8
++               * 
https://gitlab.freedesktop.org/drm/amd/-/issues/1722#note_1720627
++               */
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
++              },
++              .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
++                      .ignore_wake = "ELAN0415:00@9",
++              },
++      },
+       {} /* Terminating entry */
+ };
+ 
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index c3735848ed5db..0f8c11842a3a5 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -1294,6 +1294,7 @@
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_G540  0x0075
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_G640  0x0094
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO01        0x0042
++#define USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO01_V2     0x0905
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO_L        0x0935
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO_PRO_S    0x0909
+ #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_STAR06        0x0078
+diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c
+index 0b58763bfd301..2228f6e4ba23f 100644
+--- a/drivers/hid/hid-playstation.c
++++ b/drivers/hid/hid-playstation.c
+@@ -712,6 +712,7 @@ ATTRIBUTE_GROUPS(ps_device);
+ 
+ static int dualsense_get_calibration_data(struct dualsense *ds)
+ {
++      struct hid_device *hdev = ds->base.hdev;
+       short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus;
+       short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus;
+       short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus;
+@@ -722,6 +723,7 @@ static int dualsense_get_calibration_data(struct dualsense 
*ds)
+       int speed_2x;
+       int range_2g;
+       int ret = 0;
++      int i;
+       uint8_t *buf;
+ 
+       buf = kzalloc(DS_FEATURE_REPORT_CALIBRATION_SIZE, GFP_KERNEL);
+@@ -773,6 +775,21 @@ static int dualsense_get_calibration_data(struct 
dualsense *ds)
+       ds->gyro_calib_data[2].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S;
+       ds->gyro_calib_data[2].sens_denom = gyro_roll_plus - gyro_roll_minus;
+ 
++      /*
++       * Sanity check gyro calibration data. This is needed to prevent crashes
++       * during report handling of virtual, clone or broken devices not 
implementing
++       * calibration data properly.
++       */
++      for (i = 0; i < ARRAY_SIZE(ds->gyro_calib_data); i++) {
++              if (ds->gyro_calib_data[i].sens_denom == 0) {
++                      hid_warn(hdev, "Invalid gyro calibration data for axis 
(%d), disabling calibration.",
++                                      ds->gyro_calib_data[i].abs_code);
++                      ds->gyro_calib_data[i].bias = 0;
++                      ds->gyro_calib_data[i].sens_numer = DS_GYRO_RANGE;
++                      ds->gyro_calib_data[i].sens_denom = S16_MAX;
++              }
++      }
++
+       /*
+        * Set accelerometer calibration and normalization parameters.
+        * Data values will be normalized to 1/DS_ACC_RES_PER_G g.
+@@ -795,6 +812,21 @@ static int dualsense_get_calibration_data(struct 
dualsense *ds)
+       ds->accel_calib_data[2].sens_numer = 2*DS_ACC_RES_PER_G;
+       ds->accel_calib_data[2].sens_denom = range_2g;
+ 
++      /*
++       * Sanity check accelerometer calibration data. This is needed to 
prevent crashes
++       * during report handling of virtual, clone or broken devices not 
implementing calibration
++       * data properly.
++       */
++      for (i = 0; i < ARRAY_SIZE(ds->accel_calib_data); i++) {
++              if (ds->accel_calib_data[i].sens_denom == 0) {
++                      hid_warn(hdev, "Invalid accelerometer calibration data 
for axis (%d), disabling calibration.",
++                                      ds->accel_calib_data[i].abs_code);
++                      ds->accel_calib_data[i].bias = 0;
++                      ds->accel_calib_data[i].sens_numer = DS_ACC_RANGE;
++                      ds->accel_calib_data[i].sens_denom = S16_MAX;
++              }
++      }
++
+ err_free:
+       kfree(buf);
+       return ret;
+diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c
+index 7fa6fe04f1b26..cfbbc39807a69 100644
+--- a/drivers/hid/hid-uclogic-core.c
++++ b/drivers/hid/hid-uclogic-core.c
+@@ -525,6 +525,8 @@ static const struct hid_device_id uclogic_devices[] = {
+                               USB_DEVICE_ID_UGEE_XPPEN_TABLET_G640) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
+                               USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO01) },
++      { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
++                              USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO01_V2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
+                               USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO_L) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
+diff --git a/drivers/hid/hid-uclogic-params.c 
b/drivers/hid/hid-uclogic-params.c
+index cd1233d7e2535..3c5eea3df3288 100644
+--- a/drivers/hid/hid-uclogic-params.c
++++ b/drivers/hid/hid-uclogic-params.c
+@@ -1655,6 +1655,8 @@ int uclogic_params_init(struct uclogic_params *params,
+               break;
+       case VID_PID(USB_VENDOR_ID_UGEE,
+                    USB_DEVICE_ID_UGEE_PARBLO_A610_PRO):
++      case VID_PID(USB_VENDOR_ID_UGEE,
++                   USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO01_V2):
+       case VID_PID(USB_VENDOR_ID_UGEE,
+                    USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO_L):
+       case VID_PID(USB_VENDOR_ID_UGEE,
+diff --git a/drivers/nvme/host/apple.c b/drivers/nvme/host/apple.c
+index ff8b083dc5c6d..262d2b60ac6dd 100644
+--- a/drivers/nvme/host/apple.c
++++ b/drivers/nvme/host/apple.c
+@@ -987,11 +987,11 @@ static void apple_nvme_reset_work(struct work_struct 
*work)
+               goto out;
+       }
+ 
+-      if (anv->ctrl.ctrl_config & NVME_CC_ENABLE)
+-              apple_nvme_disable(anv, false);
+-
+       /* RTKit must be shut down cleanly for the (soft)-reset to work */
+       if (apple_rtkit_is_running(anv->rtk)) {
++              /* reset the controller if it is enabled */
++              if (anv->ctrl.ctrl_config & NVME_CC_ENABLE)
++                      apple_nvme_disable(anv, false);
+               dev_dbg(anv->dev, "Trying to shut down RTKit before reset.");
+               ret = apple_rtkit_shutdown(anv->rtk);
+               if (ret)
+diff --git a/fs/cifs/dfs_cache.c b/fs/cifs/dfs_cache.c
+index 4302dc75843cb..3bc1d3494be3a 100644
+--- a/fs/cifs/dfs_cache.c
++++ b/fs/cifs/dfs_cache.c
+@@ -1050,10 +1050,10 @@ int dfs_cache_update_tgthint(const unsigned int xid, 
struct cifs_ses *ses,
+                            const struct nls_table *cp, int remap, const char 
*path,
+                            const struct dfs_cache_tgt_iterator *it)
+ {
+-      int rc;
+-      const char *npath;
+-      struct cache_entry *ce;
+       struct cache_dfs_tgt *t;
++      struct cache_entry *ce;
++      const char *npath;
++      int rc = 0;
+ 
+       npath = dfs_cache_canonical_path(path, cp, remap);
+       if (IS_ERR(npath))
+diff --git a/fs/erofs/super.c b/fs/erofs/super.c
+index 481788c24a68b..626a615dafc2f 100644
+--- a/fs/erofs/super.c
++++ b/fs/erofs/super.c
+@@ -577,26 +577,25 @@ static int erofs_fc_parse_param(struct fs_context *fc,
+               }
+               ++ctx->devs->extra_devices;
+               break;
+-      case Opt_fsid:
+ #ifdef CONFIG_EROFS_FS_ONDEMAND
++      case Opt_fsid:
+               kfree(ctx->fsid);
+               ctx->fsid = kstrdup(param->string, GFP_KERNEL);
+               if (!ctx->fsid)
+                       return -ENOMEM;
+-#else
+-              errorfc(fc, "fsid option not supported");
+-#endif
+               break;
+       case Opt_domain_id:
+-#ifdef CONFIG_EROFS_FS_ONDEMAND
+               kfree(ctx->domain_id);
+               ctx->domain_id = kstrdup(param->string, GFP_KERNEL);
+               if (!ctx->domain_id)
+                       return -ENOMEM;
++              break;
+ #else
+-              errorfc(fc, "domain_id option not supported");
+-#endif
++      case Opt_fsid:
++      case Opt_domain_id:
++              errorfc(fc, "%s option not supported", 
erofs_fs_parameters[opt].name);
+               break;
++#endif
+       default:
+               return -ENOPARAM;
+       }
+diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c
+index e6d5d7a18fb06..39cc014dba40c 100644
+--- a/fs/erofs/zmap.c
++++ b/fs/erofs/zmap.c
+@@ -793,12 +793,16 @@ static int z_erofs_iomap_begin_report(struct inode 
*inode, loff_t offset,
+               iomap->type = IOMAP_HOLE;
+               iomap->addr = IOMAP_NULL_ADDR;
+               /*
+-               * No strict rule how to describe extents for post EOF, yet
+-               * we need do like below. Otherwise, iomap itself will get
++               * No strict rule on how to describe extents for post EOF, yet
++               * we need to do like below. Otherwise, iomap itself will get
+                * into an endless loop on post EOF.
++               *
++               * Calculate the effective offset by subtracting extent start
++               * (map.m_la) from the requested offset, and add it to length.
++               * (NB: offset >= map.m_la always)
+                */
+               if (iomap->offset >= inode->i_size)
+-                      iomap->length = length + map.m_la - offset;
++                      iomap->length = length + offset - map.m_la;
+       }
+       iomap->flags = 0;
+       return 0;
+diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
+index 1ed08967fb979..eb8c117cc8b6c 100644
+--- a/kernel/trace/bpf_trace.c
++++ b/kernel/trace/bpf_trace.c
+@@ -847,6 +847,9 @@ static int bpf_send_signal_common(u32 sig, enum pid_type 
type)
+               return -EPERM;
+       if (unlikely(!nmi_uaccess_okay()))
+               return -EPERM;
++      /* Task should not be pid=1 to avoid kernel panic. */
++      if (unlikely(is_global_init(current)))
++              return -EPERM;
+ 
+       if (irqs_disabled()) {
+               /* Do an early check on signal validity. Otherwise,
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index 759bede0b3dd6..51db260f471f4 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -4034,7 +4034,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
+ 
+       skb_shinfo(skb)->frag_list = NULL;
+ 
+-      do {
++      while (list_skb) {
+               nskb = list_skb;
+               list_skb = list_skb->next;
+ 
+@@ -4080,8 +4080,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
+               if (skb_needs_linearize(nskb, features) &&
+                   __skb_linearize(nskb))
+                       goto err_linearize;
+-
+-      } while (list_skb);
++      }
+ 
+       skb->truesize = skb->truesize - delta_truesize;
+       skb->data_len = skb->data_len - delta_len;
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 3262ebb240926..8f0d7c666df7e 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -4859,6 +4859,9 @@ static bool ieee80211_prepare_and_rx_handle(struct 
ieee80211_rx_data *rx,
+                */
+               shwt = skb_hwtstamps(rx->skb);
+               shwt->hwtstamp = skb_hwtstamps(skb)->hwtstamp;
++
++              /* Update the hdr pointer to the new skb for translation below 
*/
++              hdr = (struct ieee80211_hdr *)rx->skb->data;
+       }
+ 
+       if (unlikely(rx->sta && rx->sta->sta.mlo)) {
+diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c
+index 45bbe3e54cc28..3150f3f0c8725 100644
+--- a/net/mctp/af_mctp.c
++++ b/net/mctp/af_mctp.c
+@@ -587,6 +587,11 @@ static void mctp_sk_unhash(struct sock *sk)
+       del_timer_sync(&msk->key_expiry);
+ }
+ 
++static void mctp_sk_destruct(struct sock *sk)
++{
++      skb_queue_purge(&sk->sk_receive_queue);
++}
++
+ static struct proto mctp_proto = {
+       .name           = "MCTP",
+       .owner          = THIS_MODULE,
+@@ -623,6 +628,7 @@ static int mctp_pf_create(struct net *net, struct socket 
*sock,
+               return -ENOMEM;
+ 
+       sock_init_data(sock, sk);
++      sk->sk_destruct = mctp_sk_destruct;
+ 
+       rc = 0;
+       if (sk->sk_prot->init)
+diff --git a/rust/kernel/print.rs b/rust/kernel/print.rs
+index 55db5a1ba7521..97ff086ba22e9 100644
+--- a/rust/kernel/print.rs
++++ b/rust/kernel/print.rs
+@@ -115,17 +115,24 @@ pub unsafe fn call_printk(
+ macro_rules! print_macro (
+     // The non-continuation cases (most of them, e.g. `INFO`).
+     ($format_string:path, $($arg:tt)+) => (
+-        // SAFETY: This hidden macro should only be called by the documented
+-        // printing macros which ensure the format string is one of the fixed
+-        // ones. All `__LOG_PREFIX`s are null-terminated as they are generated
+-        // by the `module!` proc macro or fixed values defined in a kernel
+-        // crate.
+-        unsafe {
+-            $crate::print::call_printk(
+-                &$format_string,
+-                crate::__LOG_PREFIX,
+-                format_args!($($arg)+),
+-            );
++        // To remain sound, `arg`s must be expanded outside the `unsafe` 
block.
++        // Typically one would use a `let` binding for that; however, 
`format_args!`
++        // takes borrows on the arguments, but does not extend the scope of 
temporaries.
++        // Therefore, a `match` expression is used to keep them around, since
++        // the scrutinee is kept until the end of the `match`.
++        match format_args!($($arg)+) {
++            // SAFETY: This hidden macro should only be called by the 
documented
++            // printing macros which ensure the format string is one of the 
fixed
++            // ones. All `__LOG_PREFIX`s are null-terminated as they are 
generated
++            // by the `module!` proc macro or fixed values defined in a kernel
++            // crate.
++            args => unsafe {
++                $crate::print::call_printk(
++                    &$format_string,
++                    crate::__LOG_PREFIX,
++                    args,
++                );
++            }
+         }
+     );
+ );
+diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
+index 291144c284fbc..f7900e75d2306 100644
+--- a/tools/testing/selftests/lib.mk
++++ b/tools/testing/selftests/lib.mk
+@@ -20,7 +20,7 @@ CLANG_TARGET_FLAGS              := 
$(CLANG_TARGET_FLAGS_$(ARCH))
+ 
+ ifeq ($(CROSS_COMPILE),)
+ ifeq ($(CLANG_TARGET_FLAGS),)
+-$(error Specify CROSS_COMPILE or add '--target=' option to lib.mk
++$(error Specify CROSS_COMPILE or add '--target=' option to lib.mk)
+ else
+ CLANG_FLAGS     += --target=$(CLANG_TARGET_FLAGS)
+ endif # CLANG_TARGET_FLAGS

Reply via email to