commit:     58ae19e554581d28820f4eb5cc5bbe0d9c691c60
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Oct 26 11:43:22 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Oct 26 11:43:22 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=58ae19e5

Linux patch 4.9.331

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

 0000_README              |    4 +
 1330_linux-4.9.331.patch | 4226 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 4230 insertions(+)

diff --git a/0000_README b/0000_README
index f8b8cc43..87dd59e8 100644
--- a/0000_README
+++ b/0000_README
@@ -1367,6 +1367,10 @@ Patch:  1329_linux-4.9.330.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.9.330
 
+Patch:  1330_linux-4.9.331.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.9.331
+
 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/1330_linux-4.9.331.patch b/1330_linux-4.9.331.patch
new file mode 100644
index 00000000..eda7cb19
--- /dev/null
+++ b/1330_linux-4.9.331.patch
@@ -0,0 +1,4226 @@
+diff --git a/Documentation/ABI/testing/sysfs-bus-iio 
b/Documentation/ABI/testing/sysfs-bus-iio
+index 743ffbcc6b5f0..2d1f8f803fb27 100644
+--- a/Documentation/ABI/testing/sysfs-bus-iio
++++ b/Documentation/ABI/testing/sysfs-bus-iio
+@@ -125,7 +125,7 @@ Description:
+               Raw capacitance measurement from channel Y. Units after
+               application of scale and offset are nanofarads.
+ 
+-What:         /sys/.../iio:deviceX/in_capacitanceY-in_capacitanceZ_raw
++What:         /sys/.../iio:deviceX/in_capacitanceY-capacitanceZ_raw
+ KernelVersion:        3.2
+ Contact:      [email protected]
+ Description:
+diff --git a/Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt 
b/Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt
+index 8a9f3559335b5..7e14e26676ec9 100644
+--- a/Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt
++++ b/Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt
+@@ -34,8 +34,8 @@ Example:
+ Use specific request line passing from dma
+ For example, MMC request line is 5
+ 
+-      sdhci: sdhci@98e00000 {
+-              compatible = "moxa,moxart-sdhci";
++      mmc: mmc@98e00000 {
++              compatible = "moxa,moxart-mmc";
+               reg = <0x98e00000 0x5C>;
+               interrupts = <5 0>;
+               clocks = <&clk_apb>;
+diff --git a/Makefile b/Makefile
+index ad86576ed692e..b9a0f8e5f09f0 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 9
+-SUBLEVEL = 330
++SUBLEVEL = 331
+ EXTRAVERSION =
+ NAME = Roaring Lionus
+ 
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 0f1dbd3238a5e..25eaf37759048 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -53,7 +53,7 @@ config ARM
+       select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) 
&& MMU
+       select HAVE_EXIT_THREAD
+       select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
+-      select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
++      select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL && !CC_IS_CLANG)
+       select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
+       select HAVE_FUTEX_CMPXCHG if FUTEX
+       select HAVE_GCC_PLUGINS
+@@ -1961,7 +1961,6 @@ config CMDLINE
+ choice
+       prompt "Kernel command line type" if CMDLINE != ""
+       default CMDLINE_FROM_BOOTLOADER
+-      depends on ATAGS
+ 
+ config CMDLINE_FROM_BOOTLOADER
+       bool "Use bootloader kernel arguments if available"
+diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
+index 8df8cdd093e98..8558b47df7a06 100644
+--- a/arch/arm/Kconfig.debug
++++ b/arch/arm/Kconfig.debug
+@@ -17,8 +17,8 @@ config ARM_PTDUMP
+ 
+ choice
+       prompt "Choose kernel unwinder"
+-      default UNWINDER_ARM if AEABI && !FUNCTION_GRAPH_TRACER
+-      default UNWINDER_FRAME_POINTER if !AEABI || FUNCTION_GRAPH_TRACER
++      default UNWINDER_ARM if AEABI
++      default UNWINDER_FRAME_POINTER if !AEABI
+       help
+         This determines which method will be used for unwinding kernel stack
+         traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
+@@ -35,7 +35,7 @@ config UNWINDER_FRAME_POINTER
+ 
+ config UNWINDER_ARM
+       bool "ARM EABI stack unwinder"
+-      depends on AEABI
++      depends on AEABI && !FUNCTION_GRAPH_TRACER
+       select ARM_UNWIND
+       help
+         This option enables stack unwinding support in the kernel
+diff --git a/arch/arm/boot/dts/exynos4412-origen.dts 
b/arch/arm/boot/dts/exynos4412-origen.dts
+index a1ab6f94bb64d..62f9623d1fb1b 100644
+--- a/arch/arm/boot/dts/exynos4412-origen.dts
++++ b/arch/arm/boot/dts/exynos4412-origen.dts
+@@ -90,7 +90,7 @@
+ };
+ 
+ &ehci {
+-      samsung,vbus-gpio = <&gpx3 5 1>;
++      samsung,vbus-gpio = <&gpx3 5 GPIO_ACTIVE_HIGH>;
+       status = "okay";
+ 
+       port@1{
+diff --git a/arch/arm/boot/dts/imx6dl.dtsi b/arch/arm/boot/dts/imx6dl.dtsi
+index 7aa120fbdc71e..82a7d5b68da79 100644
+--- a/arch/arm/boot/dts/imx6dl.dtsi
++++ b/arch/arm/boot/dts/imx6dl.dtsi
+@@ -63,6 +63,9 @@
+               ocram: sram@00900000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00900000 0x20000>;
++                      ranges = <0 0x00900000 0x20000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+                       clocks = <&clks IMX6QDL_CLK_OCRAM>;
+               };
+ 
+diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
+index 908b269a016b9..692afd2f5dd4d 100644
+--- a/arch/arm/boot/dts/imx6q.dtsi
++++ b/arch/arm/boot/dts/imx6q.dtsi
+@@ -82,6 +82,9 @@
+               ocram: sram@00900000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00900000 0x40000>;
++                      ranges = <0 0x00900000 0x40000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+                       clocks = <&clks IMX6QDL_CLK_OCRAM>;
+               };
+ 
+diff --git a/arch/arm/boot/dts/imx6qp.dtsi b/arch/arm/boot/dts/imx6qp.dtsi
+index 886dbf2eca49b..711ab061c81d6 100644
+--- a/arch/arm/boot/dts/imx6qp.dtsi
++++ b/arch/arm/boot/dts/imx6qp.dtsi
+@@ -47,12 +47,18 @@
+               ocram2: sram@00940000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00940000 0x20000>;
++                      ranges = <0 0x00940000 0x20000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+                       clocks = <&clks IMX6QDL_CLK_OCRAM>;
+               };
+ 
+               ocram3: sram@00960000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00960000 0x20000>;
++                      ranges = <0 0x00960000 0x20000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+                       clocks = <&clks IMX6QDL_CLK_OCRAM>;
+               };
+ 
+diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
+index a2c76797e871d..a9a53a78de031 100644
+--- a/arch/arm/boot/dts/imx6sl.dtsi
++++ b/arch/arm/boot/dts/imx6sl.dtsi
+@@ -102,6 +102,9 @@
+               ocram: sram@00900000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00900000 0x20000>;
++                      ranges = <0 0x00900000 0x20000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+                       clocks = <&clks IMX6SL_CLK_OCRAM>;
+               };
+ 
+diff --git a/arch/arm/boot/dts/imx7d-sdb.dts b/arch/arm/boot/dts/imx7d-sdb.dts
+index 2f33c463cbce4..83867357f1350 100644
+--- a/arch/arm/boot/dts/imx7d-sdb.dts
++++ b/arch/arm/boot/dts/imx7d-sdb.dts
+@@ -126,12 +126,7 @@
+               interrupt-parent = <&gpio2>;
+               interrupts = <29 0>;
+               pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>;
+-              ti,x-min = /bits/ 16 <0>;
+-              ti,x-max = /bits/ 16 <0>;
+-              ti,y-min = /bits/ 16 <0>;
+-              ti,y-max = /bits/ 16 <0>;
+-              ti,pressure-max = /bits/ 16 <0>;
+-              ti,x-plate-ohms = /bits/ 16 <400>;
++              touchscreen-max-pressure = <255>;
+               wakeup-source;
+       };
+ };
+diff --git a/arch/arm/boot/dts/kirkwood-lsxl.dtsi 
b/arch/arm/boot/dts/kirkwood-lsxl.dtsi
+index 8b7c6ce79a41a..450b4de544e13 100644
+--- a/arch/arm/boot/dts/kirkwood-lsxl.dtsi
++++ b/arch/arm/boot/dts/kirkwood-lsxl.dtsi
+@@ -9,6 +9,11 @@
+ 
+       ocp@f1000000 {
+               pinctrl: pin-controller@10000 {
++                      /* Non-default UART pins */
++                      pmx_uart0: pmx-uart0 {
++                              marvell,pins = "mpp4", "mpp5";
++                      };
++
+                       pmx_power_hdd: pmx-power-hdd {
+                               marvell,pins = "mpp10";
+                               marvell,function = "gpo";
+@@ -212,22 +217,11 @@
+ &mdio {
+       status = "okay";
+ 
+-      ethphy0: ethernet-phy@0 {
+-              reg = <0>;
+-      };
+-
+       ethphy1: ethernet-phy@8 {
+               reg = <8>;
+       };
+ };
+ 
+-&eth0 {
+-      status = "okay";
+-      ethernet0-port@0 {
+-              phy-handle = <&ethphy0>;
+-      };
+-};
+-
+ &eth1 {
+       status = "okay";
+       ethernet1-port@0 {
+diff --git a/arch/arm/boot/dts/moxart-uc7112lx.dts 
b/arch/arm/boot/dts/moxart-uc7112lx.dts
+index 4a962a26482df..59d8775a3a939 100644
+--- a/arch/arm/boot/dts/moxart-uc7112lx.dts
++++ b/arch/arm/boot/dts/moxart-uc7112lx.dts
+@@ -80,7 +80,7 @@
+       clocks = <&ref12>;
+ };
+ 
+-&sdhci {
++&mmc {
+       status = "okay";
+ };
+ 
+diff --git a/arch/arm/boot/dts/moxart.dtsi b/arch/arm/boot/dts/moxart.dtsi
+index 64f2f44235d02..167278f8d1172 100644
+--- a/arch/arm/boot/dts/moxart.dtsi
++++ b/arch/arm/boot/dts/moxart.dtsi
+@@ -91,8 +91,8 @@
+                       clocks = <&clk_apb>;
+               };
+ 
+-              sdhci: sdhci@98e00000 {
+-                      compatible = "moxa,moxart-sdhci";
++              mmc: mmc@98e00000 {
++                      compatible = "moxa,moxart-mmc";
+                       reg = <0x98e00000 0x5C>;
+                       interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk_apb>;
+diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
+index 135a5407f0154..d26d9a6f6ee76 100644
+--- a/arch/mips/bcm47xx/prom.c
++++ b/arch/mips/bcm47xx/prom.c
+@@ -85,7 +85,7 @@ static __init void prom_init_mem(void)
+                       pr_debug("Assume 128MB RAM\n");
+                       break;
+               }
+-              if (!memcmp(prom_init, prom_init + mem, 32))
++              if (!memcmp((void *)prom_init, (void *)prom_init + mem, 32))
+                       break;
+       }
+       lowmem = mem;
+@@ -162,7 +162,7 @@ void __init bcm47xx_prom_highmem_init(void)
+ 
+       off = EXTVBASE + __pa(off);
+       for (extmem = 128 << 20; extmem < 512 << 20; extmem <<= 1) {
+-              if (!memcmp(prom_init, (void *)(off + extmem), 16))
++              if (!memcmp((void *)prom_init, (void *)(off + extmem), 16))
+                       break;
+       }
+       extmem -= lowmem;
+diff --git a/arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi 
b/arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi
+new file mode 100644
+index 0000000000000..7e2a90cde72e5
+--- /dev/null
++++ b/arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi
+@@ -0,0 +1,51 @@
++/*
++ * e500v1 Power ISA Device Tree Source (include)
++ *
++ * Copyright 2012 Freescale Semiconductor Inc.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ *     * Redistributions of source code must retain the above copyright
++ *       notice, this list of conditions and the following disclaimer.
++ *     * Redistributions in binary form must reproduce the above copyright
++ *       notice, this list of conditions and the following disclaimer in the
++ *       documentation and/or other materials provided with the distribution.
++ *     * Neither the name of Freescale Semiconductor nor the
++ *       names of its contributors may be used to endorse or promote products
++ *       derived from this software without specific prior written permission.
++ *
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") as published by the Free Software
++ * Foundation, either version 2 of that License or (at your option) any
++ * later version.
++ *
++ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++/ {
++      cpus {
++              power-isa-version = "2.03";
++              power-isa-b;            // Base
++              power-isa-e;            // Embedded
++              power-isa-atb;          // Alternate Time Base
++              power-isa-cs;           // Cache Specification
++              power-isa-e.le;         // Embedded.Little-Endian
++              power-isa-e.pm;         // Embedded.Performance Monitor
++              power-isa-ecl;          // Embedded Cache Locking
++              power-isa-mmc;          // Memory Coherence
++              power-isa-sp;           // Signal Processing Engine
++              power-isa-sp.fs;        // SPE.Embedded Float Scalar Single
++              power-isa-sp.fv;        // SPE.Embedded Float Vector
++              mmu-type = "power-embedded";
++      };
++};
+diff --git a/arch/powerpc/boot/dts/fsl/mpc8540ads.dts 
b/arch/powerpc/boot/dts/fsl/mpc8540ads.dts
+index e6d0b166d68dc..b4314aa6769cd 100644
+--- a/arch/powerpc/boot/dts/fsl/mpc8540ads.dts
++++ b/arch/powerpc/boot/dts/fsl/mpc8540ads.dts
+@@ -11,7 +11,7 @@
+ 
+ /dts-v1/;
+ 
+-/include/ "e500v2_power_isa.dtsi"
++/include/ "e500v1_power_isa.dtsi"
+ 
+ / {
+       model = "MPC8540ADS";
+diff --git a/arch/powerpc/boot/dts/fsl/mpc8541cds.dts 
b/arch/powerpc/boot/dts/fsl/mpc8541cds.dts
+index 9fa2c734a988b..48492c621edfc 100644
+--- a/arch/powerpc/boot/dts/fsl/mpc8541cds.dts
++++ b/arch/powerpc/boot/dts/fsl/mpc8541cds.dts
+@@ -11,7 +11,7 @@
+ 
+ /dts-v1/;
+ 
+-/include/ "e500v2_power_isa.dtsi"
++/include/ "e500v1_power_isa.dtsi"
+ 
+ / {
+       model = "MPC8541CDS";
+diff --git a/arch/powerpc/boot/dts/fsl/mpc8555cds.dts 
b/arch/powerpc/boot/dts/fsl/mpc8555cds.dts
+index 272f08caea929..325c817dedeba 100644
+--- a/arch/powerpc/boot/dts/fsl/mpc8555cds.dts
++++ b/arch/powerpc/boot/dts/fsl/mpc8555cds.dts
+@@ -11,7 +11,7 @@
+ 
+ /dts-v1/;
+ 
+-/include/ "e500v2_power_isa.dtsi"
++/include/ "e500v1_power_isa.dtsi"
+ 
+ / {
+       model = "MPC8555CDS";
+diff --git a/arch/powerpc/boot/dts/fsl/mpc8560ads.dts 
b/arch/powerpc/boot/dts/fsl/mpc8560ads.dts
+index 7a822b08aa35d..b5fb5ae3ed682 100644
+--- a/arch/powerpc/boot/dts/fsl/mpc8560ads.dts
++++ b/arch/powerpc/boot/dts/fsl/mpc8560ads.dts
+@@ -11,7 +11,7 @@
+ 
+ /dts-v1/;
+ 
+-/include/ "e500v2_power_isa.dtsi"
++/include/ "e500v1_power_isa.dtsi"
+ 
+ / {
+       model = "MPC8560ADS";
+diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
+index c8f1b78fbd0e2..3954e3bb944b1 100644
+--- a/arch/powerpc/kernel/pci_dn.c
++++ b/arch/powerpc/kernel/pci_dn.c
+@@ -355,6 +355,7 @@ struct pci_dn *pci_add_device_node_info(struct 
pci_controller *hose,
+       INIT_LIST_HEAD(&pdn->list);
+       parent = of_get_parent(dn);
+       pdn->parent = parent ? PCI_DN(parent) : NULL;
++      of_node_put(parent);
+       if (pdn->parent)
+               list_add_tail(&pdn->list, &pdn->parent->child_list);
+ 
+diff --git a/arch/powerpc/math-emu/math_efp.c 
b/arch/powerpc/math-emu/math_efp.c
+index 28337c9709ae6..cc4bbc4f8169a 100644
+--- a/arch/powerpc/math-emu/math_efp.c
++++ b/arch/powerpc/math-emu/math_efp.c
+@@ -21,6 +21,7 @@
+ 
+ #include <linux/types.h>
+ #include <linux/prctl.h>
++#include <linux/module.h>
+ 
+ #include <asm/uaccess.h>
+ #include <asm/reg.h>
+diff --git a/arch/sh/include/asm/sections.h b/arch/sh/include/asm/sections.h
+index 7a99e6af63728..9ec764c4ffe90 100644
+--- a/arch/sh/include/asm/sections.h
++++ b/arch/sh/include/asm/sections.h
+@@ -3,7 +3,7 @@
+ 
+ #include <asm-generic/sections.h>
+ 
+-extern long __machvec_start, __machvec_end;
++extern char __machvec_start[], __machvec_end[];
+ extern char __uncached_start, __uncached_end;
+ extern char __start_eh_frame[], __stop_eh_frame[];
+ 
+diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c
+index ec05f491c3471..a9f797a76e7c1 100644
+--- a/arch/sh/kernel/machvec.c
++++ b/arch/sh/kernel/machvec.c
+@@ -22,8 +22,8 @@
+ #define MV_NAME_SIZE 32
+ 
+ #define for_each_mv(mv) \
+-      for ((mv) = (struct sh_machine_vector *)&__machvec_start; \
+-           (mv) && (unsigned long)(mv) < (unsigned long)&__machvec_end; \
++      for ((mv) = (struct sh_machine_vector *)__machvec_start; \
++           (mv) && (unsigned long)(mv) < (unsigned long)__machvec_end; \
+            (mv)++)
+ 
+ static struct sh_machine_vector * __init get_mv_byname(const char *name)
+@@ -89,8 +89,8 @@ void __init sh_mv_setup(void)
+       if (!machvec_selected) {
+               unsigned long machvec_size;
+ 
+-              machvec_size = ((unsigned long)&__machvec_end -
+-                              (unsigned long)&__machvec_start);
++              machvec_size = ((unsigned long)__machvec_end -
++                              (unsigned long)__machvec_start);
+ 
+               /*
+                * Sanity check for machvec section alignment. Ensure
+@@ -104,7 +104,7 @@ void __init sh_mv_setup(void)
+                * vector (usually the only one) from .machvec.init.
+                */
+               if (machvec_size >= sizeof(struct sh_machine_vector))
+-                      sh_mv = *(struct sh_machine_vector *)&__machvec_start;
++                      sh_mv = *(struct sh_machine_vector *)__machvec_start;
+       }
+ 
+       printk(KERN_NOTICE "Booting machvec: %s\n", get_system_type());
+diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
+index 26b47deca2a0f..bfce6fd08b509 100644
+--- a/arch/um/kernel/um_arch.c
++++ b/arch/um/kernel/um_arch.c
+@@ -81,7 +81,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
+ 
+ static void *c_start(struct seq_file *m, loff_t *pos)
+ {
+-      return *pos < NR_CPUS ? cpu_data + *pos : NULL;
++      return *pos < nr_cpu_ids ? cpu_data + *pos : NULL;
+ }
+ 
+ static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
+index 2a5a18ca88379..16e24085fc8b1 100644
+--- a/arch/x86/kvm/emulate.c
++++ b/arch/x86/kvm/emulate.c
+@@ -1980,7 +1980,7 @@ static int em_pop_sreg(struct x86_emulate_ctxt *ctxt)
+       if (rc != X86EMUL_CONTINUE)
+               return rc;
+ 
+-      if (ctxt->modrm_reg == VCPU_SREG_SS)
++      if (seg == VCPU_SREG_SS)
+               ctxt->interruptibility = KVM_X86_SHADOW_INT_MOV_SS;
+       if (ctxt->op_bytes > 2)
+               rsp_increment(ctxt, ctxt->op_bytes - 2);
+diff --git a/arch/x86/um/shared/sysdep/syscalls_32.h 
b/arch/x86/um/shared/sysdep/syscalls_32.h
+index 68fd2cf526fd7..f6e9f84397e79 100644
+--- a/arch/x86/um/shared/sysdep/syscalls_32.h
++++ b/arch/x86/um/shared/sysdep/syscalls_32.h
+@@ -6,10 +6,9 @@
+ #include <asm/unistd.h>
+ #include <sysdep/ptrace.h>
+ 
+-typedef long syscall_handler_t(struct pt_regs);
++typedef long syscall_handler_t(struct syscall_args);
+ 
+ extern syscall_handler_t *sys_call_table[];
+ 
+ #define EXECUTE_SYSCALL(syscall, regs) \
+-      ((long (*)(struct syscall_args)) \
+-       (*sys_call_table[syscall]))(SYSCALL_ARGS(&regs->regs))
++      ((*sys_call_table[syscall]))(SYSCALL_ARGS(&regs->regs))
+diff --git a/arch/x86/um/tls_32.c b/arch/x86/um/tls_32.c
+index 48e38584d5c1d..0a4dba5f0542b 100644
+--- a/arch/x86/um/tls_32.c
++++ b/arch/x86/um/tls_32.c
+@@ -65,9 +65,6 @@ static int get_free_idx(struct task_struct* task)
+       struct thread_struct *t = &task->thread;
+       int idx;
+ 
+-      if (!t->arch.tls_array)
+-              return GDT_ENTRY_TLS_MIN;
+-
+       for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++)
+               if (!t->arch.tls_array[idx].present)
+                       return idx + GDT_ENTRY_TLS_MIN;
+@@ -242,9 +239,6 @@ static int get_tls_entry(struct task_struct *task, struct 
user_desc *info,
+ {
+       struct thread_struct *t = &task->thread;
+ 
+-      if (!t->arch.tls_array)
+-              goto clear;
+-
+       if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
+               return -EINVAL;
+ 
+diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
+index ea05731768945..209903c2ee853 100644
+--- a/drivers/acpi/acpi_video.c
++++ b/drivers/acpi/acpi_video.c
+@@ -485,6 +485,22 @@ static struct dmi_system_id video_dmi_table[] = {
+               DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE R830"),
+               },
+       },
++      {
++       .callback = video_disable_backlight_sysfs_if,
++       .ident = "Toshiba Satellite Z830",
++       .matches = {
++              DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
++              DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE Z830"),
++              },
++      },
++      {
++       .callback = video_disable_backlight_sysfs_if,
++       .ident = "Toshiba Portege Z830",
++       .matches = {
++              DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
++              DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE Z830"),
++              },
++      },
+       /*
+        * Some machine's _DOD IDs don't have bit 31(Device ID Scheme) set
+        * but the IDs actually follow the Device ID Scheme.
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index 1cbc33ee5a5f2..4c93f62230549 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -891,10 +891,10 @@ void __init add_bootloader_randomness(const void *buf, 
size_t len)
+ }
+ 
+ struct fast_pool {
+-      struct work_struct mix;
+       unsigned long pool[4];
+       unsigned long last;
+       unsigned int count;
++      struct timer_list mix;
+ };
+ 
+ static DEFINE_PER_CPU(struct fast_pool, irq_randomness) = {
+@@ -946,9 +946,9 @@ int __cold random_online_cpu(unsigned int cpu)
+ }
+ #endif
+ 
+-static void mix_interrupt_randomness(struct work_struct *work)
++static void mix_interrupt_randomness(unsigned long data)
+ {
+-      struct fast_pool *fast_pool = container_of(work, struct fast_pool, mix);
++      struct fast_pool *fast_pool = (struct fast_pool *)data;
+       /*
+        * The size of the copied stack pool is explicitly 2 longs so that we
+        * only ever ingest half of the siphash output each time, retaining
+@@ -977,7 +977,7 @@ static void mix_interrupt_randomness(struct work_struct 
*work)
+       local_irq_enable();
+ 
+       mix_pool_bytes(pool, sizeof(pool));
+-      credit_init_bits(max(1u, (count & U16_MAX) / 64));
++      credit_init_bits(clamp_t(unsigned int, (count & U16_MAX) / 64, 1, 
sizeof(pool) * 8));
+ 
+       memzero_explicit(pool, sizeof(pool));
+ }
+@@ -1000,10 +1000,14 @@ void add_interrupt_randomness(int irq)
+       if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
+               return;
+ 
+-      if (unlikely(!fast_pool->mix.func))
+-              INIT_WORK(&fast_pool->mix, mix_interrupt_randomness);
++      if (unlikely(!fast_pool->mix.data))
++              setup_timer(&fast_pool->mix, mix_interrupt_randomness, 
(unsigned long)fast_pool);
++
+       fast_pool->count |= MIX_INFLIGHT;
+-      queue_work_on(raw_smp_processor_id(), system_highpri_wq, 
&fast_pool->mix);
++      if (!timer_pending(&fast_pool->mix)) {
++              fast_pool->mix.expires = jiffies;
++              add_timer_on(&fast_pool->mix, raw_smp_processor_id());
++      }
+ }
+ EXPORT_SYMBOL_GPL(add_interrupt_randomness);
+ 
+@@ -1295,6 +1299,10 @@ static ssize_t random_read_iter(struct kiocb *kiocb, 
struct iov_iter *iter)
+ {
+       int ret;
+ 
++      if (!crng_ready() &&
++          (kiocb->ki_filp->f_flags & O_NONBLOCK))
++              return -EAGAIN;
++
+       ret = wait_for_random_bytes();
+       if (ret != 0)
+               return ret;
+diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
+index 3f16b553982d1..87cd8fde3a02d 100644
+--- a/drivers/clk/bcm/clk-bcm2835.c
++++ b/drivers/clk/bcm/clk-bcm2835.c
+@@ -902,9 +902,9 @@ static u32 bcm2835_clock_choose_div(struct clk_hw *hw,
+       return div;
+ }
+ 
+-static long bcm2835_clock_rate_from_divisor(struct bcm2835_clock *clock,
+-                                          unsigned long parent_rate,
+-                                          u32 div)
++static unsigned long bcm2835_clock_rate_from_divisor(struct bcm2835_clock 
*clock,
++                                                   unsigned long parent_rate,
++                                                   u32 div)
+ {
+       const struct bcm2835_clock_data *data = clock->data;
+       u64 temp;
+diff --git a/drivers/clk/bcm/clk-iproc-pll.c b/drivers/clk/bcm/clk-iproc-pll.c
+index e04634c46395b..d52f2b810a4b5 100644
+--- a/drivers/clk/bcm/clk-iproc-pll.c
++++ b/drivers/clk/bcm/clk-iproc-pll.c
+@@ -69,16 +69,6 @@ enum vco_freq_range {
+       VCO_MAX       = 4000000000U,
+ };
+ 
+-struct iproc_pll;
+-
+-struct iproc_clk {
+-      struct clk_hw hw;
+-      const char *name;
+-      struct iproc_pll *pll;
+-      unsigned long rate;
+-      const struct iproc_clk_ctrl *ctrl;
+-};
+-
+ struct iproc_pll {
+       void __iomem *status_base;
+       void __iomem *control_base;
+@@ -88,9 +78,12 @@ struct iproc_pll {
+       const struct iproc_pll_ctrl *ctrl;
+       const struct iproc_pll_vco_param *vco_param;
+       unsigned int num_vco_entries;
++};
+ 
+-      struct clk_hw_onecell_data *clk_data;
+-      struct iproc_clk *clks;
++struct iproc_clk {
++      struct clk_hw hw;
++      struct iproc_pll *pll;
++      const struct iproc_clk_ctrl *ctrl;
+ };
+ 
+ #define to_iproc_clk(hw) container_of(hw, struct iproc_clk, hw)
+@@ -263,6 +256,7 @@ static int pll_set_rate(struct iproc_clk *clk, unsigned 
int rate_index,
+       u32 val;
+       enum kp_band kp_index;
+       unsigned long ref_freq;
++      const char *clk_name = clk_hw_get_name(&clk->hw);
+ 
+       /*
+        * reference frequency = parent frequency / PDIV
+@@ -285,19 +279,19 @@ static int pll_set_rate(struct iproc_clk *clk, unsigned 
int rate_index,
+               kp_index = KP_BAND_HIGH_HIGH;
+       } else {
+               pr_err("%s: pll: %s has invalid rate: %lu\n", __func__,
+-                              clk->name, rate);
++                              clk_name, rate);
+               return -EINVAL;
+       }
+ 
+       kp = get_kp(ref_freq, kp_index);
+       if (kp < 0) {
+-              pr_err("%s: pll: %s has invalid kp\n", __func__, clk->name);
++              pr_err("%s: pll: %s has invalid kp\n", __func__, clk_name);
+               return kp;
+       }
+ 
+       ret = __pll_enable(pll);
+       if (ret) {
+-              pr_err("%s: pll: %s fails to enable\n", __func__, clk->name);
++              pr_err("%s: pll: %s fails to enable\n", __func__, clk_name);
+               return ret;
+       }
+ 
+@@ -354,7 +348,7 @@ static int pll_set_rate(struct iproc_clk *clk, unsigned 
int rate_index,
+ 
+       ret = pll_wait_for_lock(pll);
+       if (ret < 0) {
+-              pr_err("%s: pll: %s failed to lock\n", __func__, clk->name);
++              pr_err("%s: pll: %s failed to lock\n", __func__, clk_name);
+               return ret;
+       }
+ 
+@@ -390,16 +384,15 @@ static unsigned long iproc_pll_recalc_rate(struct clk_hw 
*hw,
+       u32 val;
+       u64 ndiv, ndiv_int, ndiv_frac;
+       unsigned int pdiv;
++      unsigned long rate;
+ 
+       if (parent_rate == 0)
+               return 0;
+ 
+       /* PLL needs to be locked */
+       val = readl(pll->status_base + ctrl->status.offset);
+-      if ((val & (1 << ctrl->status.shift)) == 0) {
+-              clk->rate = 0;
++      if ((val & (1 << ctrl->status.shift)) == 0)
+               return 0;
+-      }
+ 
+       /*
+        * PLL output frequency =
+@@ -421,14 +414,14 @@ static unsigned long iproc_pll_recalc_rate(struct clk_hw 
*hw,
+       val = readl(pll->control_base + ctrl->pdiv.offset);
+       pdiv = (val >> ctrl->pdiv.shift) & bit_mask(ctrl->pdiv.width);
+ 
+-      clk->rate = (ndiv * parent_rate) >> 20;
++      rate = (ndiv * parent_rate) >> 20;
+ 
+       if (pdiv == 0)
+-              clk->rate *= 2;
++              rate *= 2;
+       else
+-              clk->rate /= pdiv;
++              rate /= pdiv;
+ 
+-      return clk->rate;
++      return rate;
+ }
+ 
+ static long iproc_pll_round_rate(struct clk_hw *hw, unsigned long rate,
+@@ -518,6 +511,7 @@ static unsigned long iproc_clk_recalc_rate(struct clk_hw 
*hw,
+       struct iproc_pll *pll = clk->pll;
+       u32 val;
+       unsigned int mdiv;
++      unsigned long rate;
+ 
+       if (parent_rate == 0)
+               return 0;
+@@ -528,11 +522,11 @@ static unsigned long iproc_clk_recalc_rate(struct clk_hw 
*hw,
+               mdiv = 256;
+ 
+       if (ctrl->flags & IPROC_CLK_MCLK_DIV_BY_2)
+-              clk->rate = parent_rate / (mdiv * 2);
++              rate = parent_rate / (mdiv * 2);
+       else
+-              clk->rate = parent_rate / mdiv;
++              rate = parent_rate / mdiv;
+ 
+-      return clk->rate;
++      return rate;
+ }
+ 
+ static long iproc_clk_round_rate(struct clk_hw *hw, unsigned long rate,
+@@ -583,10 +577,6 @@ static int iproc_clk_set_rate(struct clk_hw *hw, unsigned 
long rate,
+               val |= div << ctrl->mdiv.shift;
+       }
+       iproc_pll_write(pll, pll->control_base, ctrl->mdiv.offset, val);
+-      if (ctrl->flags & IPROC_CLK_MCLK_DIV_BY_2)
+-              clk->rate = parent_rate / (div * 2);
+-      else
+-              clk->rate = parent_rate / div;
+ 
+       return 0;
+ }
+@@ -629,6 +619,9 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+       struct iproc_clk *iclk;
+       struct clk_init_data init;
+       const char *parent_name;
++      struct iproc_clk *iclk_array;
++      struct clk_hw_onecell_data *clk_data;
++      const char *clk_name;
+ 
+       if (WARN_ON(!pll_ctrl) || WARN_ON(!clk_ctrl))
+               return;
+@@ -637,14 +630,14 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+       if (WARN_ON(!pll))
+               return;
+ 
+-      pll->clk_data = kzalloc(sizeof(*pll->clk_data->hws) * num_clks +
+-                              sizeof(*pll->clk_data), GFP_KERNEL);
+-      if (WARN_ON(!pll->clk_data))
++      clk_data = kzalloc(sizeof(*clk_data->hws) * num_clks +
++                              sizeof(*clk_data), GFP_KERNEL);
++      if (WARN_ON(!clk_data))
+               goto err_clk_data;
+-      pll->clk_data->num = num_clks;
++      clk_data->num = num_clks;
+ 
+-      pll->clks = kcalloc(num_clks, sizeof(*pll->clks), GFP_KERNEL);
+-      if (WARN_ON(!pll->clks))
++      iclk_array = kcalloc(num_clks, sizeof(struct iproc_clk), GFP_KERNEL);
++      if (WARN_ON(!iclk_array))
+               goto err_clks;
+ 
+       pll->control_base = of_iomap(node, 0);
+@@ -674,11 +667,15 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+       /* initialize and register the PLL itself */
+       pll->ctrl = pll_ctrl;
+ 
+-      iclk = &pll->clks[0];
++      iclk = &iclk_array[0];
+       iclk->pll = pll;
+-      iclk->name = node->name;
+ 
+-      init.name = node->name;
++      ret = of_property_read_string_index(node, "clock-output-names",
++                                          0, &clk_name);
++      if (WARN_ON(ret))
++              goto err_pll_register;
++
++      init.name = clk_name;
+       init.ops = &iproc_pll_ops;
+       init.flags = 0;
+       parent_name = of_clk_get_parent_name(node, 0);
+@@ -697,22 +694,19 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+       if (WARN_ON(ret))
+               goto err_pll_register;
+ 
+-      pll->clk_data->hws[0] = &iclk->hw;
++      clk_data->hws[0] = &iclk->hw;
++      parent_name = clk_name;
+ 
+       /* now initialize and register all leaf clocks */
+       for (i = 1; i < num_clks; i++) {
+-              const char *clk_name;
+-
+               memset(&init, 0, sizeof(init));
+-              parent_name = node->name;
+ 
+               ret = of_property_read_string_index(node, "clock-output-names",
+                                                   i, &clk_name);
+               if (WARN_ON(ret))
+                       goto err_clk_register;
+ 
+-              iclk = &pll->clks[i];
+-              iclk->name = clk_name;
++              iclk = &iclk_array[i];
+               iclk->pll = pll;
+               iclk->ctrl = &clk_ctrl[i];
+ 
+@@ -727,11 +721,10 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+               if (WARN_ON(ret))
+                       goto err_clk_register;
+ 
+-              pll->clk_data->hws[i] = &iclk->hw;
++              clk_data->hws[i] = &iclk->hw;
+       }
+ 
+-      ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
+-                                   pll->clk_data);
++      ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+       if (WARN_ON(ret))
+               goto err_clk_register;
+ 
+@@ -739,7 +732,7 @@ void __init iproc_pll_clk_setup(struct device_node *node,
+ 
+ err_clk_register:
+       while (--i >= 0)
+-              clk_hw_unregister(pll->clk_data->hws[i]);
++              clk_hw_unregister(clk_data->hws[i]);
+ 
+ err_pll_register:
+       if (pll->status_base != pll->control_base)
+@@ -756,10 +749,10 @@ err_asiu_iomap:
+       iounmap(pll->control_base);
+ 
+ err_pll_iomap:
+-      kfree(pll->clks);
++      kfree(iclk_array);
+ 
+ err_clks:
+-      kfree(pll->clk_data);
++      kfree(clk_data);
+ 
+ err_clk_data:
+       kfree(pll);
+diff --git a/drivers/clk/tegra/clk-tegra114.c 
b/drivers/clk/tegra/clk-tegra114.c
+index 933b5dd698b8c..c92d8f36a00a2 100644
+--- a/drivers/clk/tegra/clk-tegra114.c
++++ b/drivers/clk/tegra/clk-tegra114.c
+@@ -1342,6 +1342,7 @@ static void __init tegra114_clock_init(struct 
device_node *np)
+       }
+ 
+       pmc_base = of_iomap(node, 0);
++      of_node_put(node);
+       if (!pmc_base) {
+               pr_err("Can't map pmc registers\n");
+               WARN_ON(1);
+diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c
+index 837e5cbd60e9c..4c9038e738886 100644
+--- a/drivers/clk/tegra/clk-tegra20.c
++++ b/drivers/clk/tegra/clk-tegra20.c
+@@ -1101,6 +1101,7 @@ static void __init tegra20_clock_init(struct device_node 
*np)
+       }
+ 
+       pmc_base = of_iomap(node, 0);
++      of_node_put(node);
+       if (!pmc_base) {
+               pr_err("Can't map pmc registers\n");
+               BUG();
+diff --git a/drivers/clk/tegra/clk-tegra210.c 
b/drivers/clk/tegra/clk-tegra210.c
+index 2896d2e783cec..21b426d508aa9 100644
+--- a/drivers/clk/tegra/clk-tegra210.c
++++ b/drivers/clk/tegra/clk-tegra210.c
+@@ -2706,6 +2706,7 @@ static void __init tegra210_clock_init(struct 
device_node *np)
+       }
+ 
+       pmc_base = of_iomap(node, 0);
++      of_node_put(node);
+       if (!pmc_base) {
+               pr_err("Can't map pmc registers\n");
+               WARN_ON(1);
+diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c
+index 7d060ffe8975f..9b1f9af35a23c 100644
+--- a/drivers/clk/ti/clk-dra7-atl.c
++++ b/drivers/clk/ti/clk-dra7-atl.c
+@@ -249,14 +249,16 @@ static int of_dra7_atl_clk_probe(struct platform_device 
*pdev)
+               if (rc) {
+                       pr_err("%s: failed to lookup atl clock %d\n", __func__,
+                              i);
+-                      return -EINVAL;
++                      ret = -EINVAL;
++                      goto pm_put;
+               }
+ 
+               clk = of_clk_get_from_provider(&clkspec);
+               if (IS_ERR(clk)) {
+                       pr_err("%s: failed to get atl clock %d from provider\n",
+                              __func__, i);
+-                      return PTR_ERR(clk);
++                      ret = PTR_ERR(clk);
++                      goto pm_put;
+               }
+ 
+               cdesc = to_atl_desc(__clk_get_hw(clk));
+@@ -289,8 +291,9 @@ static int of_dra7_atl_clk_probe(struct platform_device 
*pdev)
+               if (cdesc->enabled)
+                       atl_clk_enable(__clk_get_hw(clk));
+       }
+-      pm_runtime_put_sync(cinfo->dev);
+ 
++pm_put:
++      pm_runtime_put_sync(cinfo->dev);
+       return ret;
+ }
+ 
+diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c
+index c5a45c57b8b8d..36189a3337b17 100644
+--- a/drivers/dma/ioat/dma.c
++++ b/drivers/dma/ioat/dma.c
+@@ -663,7 +663,7 @@ static void __cleanup(struct ioatdma_chan *ioat_chan, 
dma_addr_t phys_complete)
+       if (active - i == 0) {
+               dev_dbg(to_dev(ioat_chan), "%s: cancel completion timeout\n",
+                       __func__);
+-              mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
++              mod_timer_pending(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
+       }
+ 
+       /* 5 microsecond delay per pending descriptor */
+@@ -685,7 +685,7 @@ static void ioat_cleanup(struct ioatdma_chan *ioat_chan)
+ 
+               if (chanerr &
+                   (IOAT_CHANERR_HANDLE_MASK | IOAT_CHANERR_RECOVER_MASK)) {
+-                      mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
++                      mod_timer_pending(&ioat_chan->timer, jiffies + 
IDLE_TIMEOUT);
+                       ioat_eh(ioat_chan);
+               }
+       }
+@@ -877,7 +877,7 @@ static void check_active(struct ioatdma_chan *ioat_chan)
+       }
+ 
+       if (test_and_clear_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
+-              mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
++              mod_timer_pending(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
+ }
+ 
+ void ioat_timer_event(unsigned long data)
+diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
+index d88c53ff7bb69..12e26dd8d4427 100644
+--- a/drivers/dma/xilinx/xilinx_dma.c
++++ b/drivers/dma/xilinx/xilinx_dma.c
+@@ -2558,7 +2558,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)
+               if (err < 0) {
+                       dev_err(xdev->dev,
+                               "missing xlnx,num-fstores property\n");
+-                      return err;
++                      goto disable_clks;
+               }
+ 
+               err = of_property_read_u32(node, "xlnx,flush-fsync",
+@@ -2578,7 +2578,11 @@ static int xilinx_dma_probe(struct platform_device 
*pdev)
+               xdev->ext_addr = false;
+ 
+       /* Set the dma mask bits */
+-      dma_set_mask_and_coherent(xdev->dev, DMA_BIT_MASK(addr_width));
++      err = dma_set_mask_and_coherent(xdev->dev, DMA_BIT_MASK(addr_width));
++      if (err < 0) {
++              dev_err(xdev->dev, "DMA mask error %d\n", err);
++              goto disable_clks;
++      }
+ 
+       /* Initialize the DMA engine */
+       xdev->common.dev = &pdev->dev;
+diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c
+index 98cdfc2ee0dff..6fd5f67767358 100644
+--- a/drivers/firmware/google/gsmi.c
++++ b/drivers/firmware/google/gsmi.c
+@@ -661,6 +661,15 @@ static struct notifier_block gsmi_die_notifier = {
+ static int gsmi_panic_callback(struct notifier_block *nb,
+                              unsigned long reason, void *arg)
+ {
++
++      /*
++       * Panic callbacks are executed with all other CPUs stopped,
++       * so we must not attempt to spin waiting for gsmi_dev.lock
++       * to be released.
++       */
++      if (spin_is_locked(&gsmi_dev.lock))
++              return NOTIFY_DONE;
++
+       gsmi_shutdown_reason(GSMI_SHUTDOWN_PANIC);
+       return NOTIFY_DONE;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+index 7264169d5f2a7..7c266dbb88a14 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+@@ -1760,10 +1760,12 @@ amdgpu_connector_add(struct amdgpu_device *adev,
+                                                  
adev->mode_info.dither_property,
+                                                  AMDGPU_FMT_DITHER_DISABLE);
+ 
+-                      if (amdgpu_audio != 0)
++                      if (amdgpu_audio != 0) {
+                               
drm_object_attach_property(&amdgpu_connector->base.base,
+                                                          
adev->mode_info.audio_property,
+                                                          AMDGPU_AUDIO_AUTO);
++                              amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
++                      }
+ 
+                       subpixel_order = SubPixelHorizontalRGB;
+                       connector->interlace_allowed = true;
+@@ -1868,6 +1870,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
+                               
drm_object_attach_property(&amdgpu_connector->base.base,
+                                                          
adev->mode_info.audio_property,
+                                                          AMDGPU_AUDIO_AUTO);
++                              amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
+                       }
+                       drm_object_attach_property(&amdgpu_connector->base.base,
+                                                  
adev->mode_info.dither_property,
+@@ -1916,6 +1919,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
+                               
drm_object_attach_property(&amdgpu_connector->base.base,
+                                                          
adev->mode_info.audio_property,
+                                                          AMDGPU_AUDIO_AUTO);
++                              amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
+                       }
+                       drm_object_attach_property(&amdgpu_connector->base.base,
+                                                  
adev->mode_info.dither_property,
+@@ -1961,6 +1965,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
+                               
drm_object_attach_property(&amdgpu_connector->base.base,
+                                                          
adev->mode_info.audio_property,
+                                                          AMDGPU_AUDIO_AUTO);
++                              amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
+                       }
+                       drm_object_attach_property(&amdgpu_connector->base.base,
+                                                  
adev->mode_info.dither_property,
+diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c 
b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+index d1077a342f38d..7c683245bdc01 100644
+--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
++++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+@@ -1463,12 +1463,6 @@ int analogix_dp_suspend(struct device *dev)
+       struct analogix_dp_device *dp = dev_get_drvdata(dev);
+ 
+       clk_disable_unprepare(dp->clock);
+-
+-      if (dp->plat_data->panel) {
+-              if (drm_panel_unprepare(dp->plat_data->panel))
+-                      DRM_ERROR("failed to turnoff the panel\n");
+-      }
+-
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(analogix_dp_suspend);
+@@ -1484,13 +1478,6 @@ int analogix_dp_resume(struct device *dev)
+               return ret;
+       }
+ 
+-      if (dp->plat_data->panel) {
+-              if (drm_panel_prepare(dp->plat_data->panel)) {
+-                      DRM_ERROR("failed to setup the panel\n");
+-                      return -EBUSY;
+-              }
+-      }
+-
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(analogix_dp_resume);
+diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
+index 04b26ca061800..ec505929cae7e 100644
+--- a/drivers/gpu/drm/drm_ioctl.c
++++ b/drivers/gpu/drm/drm_ioctl.c
+@@ -419,7 +419,13 @@ EXPORT_SYMBOL(drm_invalid_op);
+  */
+ static int drm_copy_field(char __user *buf, size_t *buf_len, const char 
*value)
+ {
+-      int len;
++      size_t len;
++
++      /* don't attempt to copy a NULL pointer */
++      if (WARN_ONCE(!value, "BUG: the value to copy was not set!")) {
++              *buf_len = 0;
++              return 0;
++      }
+ 
+       /* don't overflow userbuf */
+       len = strlen(value);
+diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
+index 99415808e9f91..af80cf8030b8f 100644
+--- a/drivers/gpu/drm/drm_mipi_dsi.c
++++ b/drivers/gpu/drm/drm_mipi_dsi.c
+@@ -305,6 +305,7 @@ static int mipi_dsi_remove_device_fn(struct device *dev, 
void *priv)
+ {
+       struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
+ 
++      mipi_dsi_detach(dsi);
+       mipi_dsi_device_unregister(dsi);
+ 
+       return 0;
+diff --git a/drivers/hid/hid-roccat.c b/drivers/hid/hid-roccat.c
+index 76d06cf87b2ac..36eee96639628 100644
+--- a/drivers/hid/hid-roccat.c
++++ b/drivers/hid/hid-roccat.c
+@@ -260,6 +260,8 @@ int roccat_report_event(int minor, u8 const *data)
+       if (!new_value)
+               return -ENOMEM;
+ 
++      mutex_lock(&device->cbuf_lock);
++
+       report = &device->cbuf[device->cbuf_end];
+ 
+       /* passing NULL is safe */
+@@ -279,6 +281,8 @@ int roccat_report_event(int minor, u8 const *data)
+                       reader->cbuf_start = (reader->cbuf_start + 1) % 
ROCCAT_CBUF_SIZE;
+       }
+ 
++      mutex_unlock(&device->cbuf_lock);
++
+       wake_up_interruptible(&device->wait);
+       return 0;
+ }
+diff --git a/drivers/hsi/controllers/omap_ssi_core.c 
b/drivers/hsi/controllers/omap_ssi_core.c
+index 22cd7169011d1..56de30c250630 100644
+--- a/drivers/hsi/controllers/omap_ssi_core.c
++++ b/drivers/hsi/controllers/omap_ssi_core.c
+@@ -562,6 +562,7 @@ static int ssi_probe(struct platform_device *pd)
+               if (!childpdev) {
+                       err = -ENODEV;
+                       dev_err(&pd->dev, "failed to create ssi controller 
port\n");
++                      of_node_put(child);
+                       goto out3;
+               }
+       }
+diff --git a/drivers/hsi/controllers/omap_ssi_port.c 
b/drivers/hsi/controllers/omap_ssi_port.c
+index 7765de2f1ef18..68619dd6dfc1d 100644
+--- a/drivers/hsi/controllers/omap_ssi_port.c
++++ b/drivers/hsi/controllers/omap_ssi_port.c
+@@ -252,10 +252,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
+       if (msg->ttype == HSI_MSG_READ) {
+               err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
+                                                       DMA_FROM_DEVICE);
+-              if (err < 0) {
++              if (!err) {
+                       dev_dbg(&ssi->device, "DMA map SG failed !\n");
+                       pm_runtime_put_autosuspend(omap_port->pdev);
+-                      return err;
++                      return -EIO;
+               }
+               csdp = SSI_DST_BURST_4x32_BIT | SSI_DST_MEMORY_PORT |
+                       SSI_SRC_SINGLE_ACCESS0 | SSI_SRC_PERIPHERAL_PORT |
+@@ -269,10 +269,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
+       } else {
+               err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
+                                                       DMA_TO_DEVICE);
+-              if (err < 0) {
++              if (!err) {
+                       dev_dbg(&ssi->device, "DMA map SG failed !\n");
+                       pm_runtime_put_autosuspend(omap_port->pdev);
+-                      return err;
++                      return -EIO;
+               }
+               csdp = SSI_SRC_BURST_4x32_BIT | SSI_SRC_MEMORY_PORT |
+                       SSI_DST_SINGLE_ACCESS0 | SSI_DST_PERIPHERAL_PORT |
+diff --git a/drivers/iio/adc/at91-sama5d2_adc.c 
b/drivers/iio/adc/at91-sama5d2_adc.c
+index e10dca3ed74be..5a7f9120e13d1 100644
+--- a/drivers/iio/adc/at91-sama5d2_adc.c
++++ b/drivers/iio/adc/at91-sama5d2_adc.c
+@@ -74,7 +74,7 @@
+ #define       AT91_SAMA5D2_MR_ANACH           BIT(23)
+ /* Tracking Time */
+ #define       AT91_SAMA5D2_MR_TRACKTIM(v)     ((v) << 24)
+-#define       AT91_SAMA5D2_MR_TRACKTIM_MAX    0xff
++#define       AT91_SAMA5D2_MR_TRACKTIM_MAX    0xf
+ /* Transfer Time */
+ #define       AT91_SAMA5D2_MR_TRANSFER(v)     ((v) << 28)
+ #define       AT91_SAMA5D2_MR_TRANSFER_MAX    0x3
+diff --git a/drivers/iio/dac/ad5593r.c b/drivers/iio/dac/ad5593r.c
+index dca158a88f47c..3edeb677996dd 100644
+--- a/drivers/iio/dac/ad5593r.c
++++ b/drivers/iio/dac/ad5593r.c
+@@ -14,6 +14,8 @@
+ #include <linux/module.h>
+ #include <linux/of.h>
+ 
++#include <asm/unaligned.h>
++
+ #define AD5593R_MODE_CONF             (0 << 4)
+ #define AD5593R_MODE_DAC_WRITE                (1 << 4)
+ #define AD5593R_MODE_ADC_READBACK     (4 << 4)
+@@ -21,6 +23,24 @@
+ #define AD5593R_MODE_GPIO_READBACK    (6 << 4)
+ #define AD5593R_MODE_REG_READBACK     (7 << 4)
+ 
++static int ad5593r_read_word(struct i2c_client *i2c, u8 reg, u16 *value)
++{
++      int ret;
++      u8 buf[2];
++
++      ret = i2c_smbus_write_byte(i2c, reg);
++      if (ret < 0)
++              return ret;
++
++      ret = i2c_master_recv(i2c, buf, sizeof(buf));
++      if (ret < 0)
++              return ret;
++
++      *value = get_unaligned_be16(buf);
++
++      return 0;
++}
++
+ static int ad5593r_write_dac(struct ad5592r_state *st, unsigned chan, u16 
value)
+ {
+       struct i2c_client *i2c = to_i2c_client(st->dev);
+@@ -39,13 +59,7 @@ static int ad5593r_read_adc(struct ad5592r_state *st, 
unsigned chan, u16 *value)
+       if (val < 0)
+               return (int) val;
+ 
+-      val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_ADC_READBACK);
+-      if (val < 0)
+-              return (int) val;
+-
+-      *value = (u16) val;
+-
+-      return 0;
++      return ad5593r_read_word(i2c, AD5593R_MODE_ADC_READBACK, value);
+ }
+ 
+ static int ad5593r_reg_write(struct ad5592r_state *st, u8 reg, u16 value)
+@@ -59,25 +73,19 @@ static int ad5593r_reg_write(struct ad5592r_state *st, u8 
reg, u16 value)
+ static int ad5593r_reg_read(struct ad5592r_state *st, u8 reg, u16 *value)
+ {
+       struct i2c_client *i2c = to_i2c_client(st->dev);
+-      s32 val;
+-
+-      val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_REG_READBACK | reg);
+-      if (val < 0)
+-              return (int) val;
+ 
+-      *value = (u16) val;
+-
+-      return 0;
++      return ad5593r_read_word(i2c, AD5593R_MODE_REG_READBACK | reg, value);
+ }
+ 
+ static int ad5593r_gpio_read(struct ad5592r_state *st, u8 *value)
+ {
+       struct i2c_client *i2c = to_i2c_client(st->dev);
+-      s32 val;
++      u16 val;
++      int ret;
+ 
+-      val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_GPIO_READBACK);
+-      if (val < 0)
+-              return (int) val;
++      ret = ad5593r_read_word(i2c, AD5593R_MODE_GPIO_READBACK, &val);
++      if (ret)
++              return ret;
+ 
+       *value = (u8) val;
+ 
+diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
+index 218cf4567ab58..13be4c8d7fd36 100644
+--- a/drivers/iio/inkern.c
++++ b/drivers/iio/inkern.c
+@@ -139,9 +139,10 @@ static int __of_iio_channel_get(struct iio_channel 
*channel,
+ 
+       idev = bus_find_device(&iio_bus_type, NULL, iiospec.np,
+                              iio_dev_node_match);
+-      of_node_put(iiospec.np);
+-      if (idev == NULL)
++      if (idev == NULL) {
++              of_node_put(iiospec.np);
+               return -EPROBE_DEFER;
++      }
+ 
+       indio_dev = dev_to_iio_dev(idev);
+       channel->indio_dev = indio_dev;
+@@ -149,6 +150,7 @@ static int __of_iio_channel_get(struct iio_channel 
*channel,
+               index = indio_dev->info->of_xlate(indio_dev, &iiospec);
+       else
+               index = __of_iio_simple_xlate(indio_dev, &iiospec);
++      of_node_put(iiospec.np);
+       if (index < 0)
+               goto err_put;
+       channel->channel = &indio_dev->channels[index];
+diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c 
b/drivers/infiniband/sw/rxe/rxe_qp.c
+index 5fa1442fd4f11..4c91062ff2477 100644
+--- a/drivers/infiniband/sw/rxe/rxe_qp.c
++++ b/drivers/infiniband/sw/rxe/rxe_qp.c
+@@ -825,7 +825,9 @@ void rxe_qp_destroy(struct rxe_qp *qp)
+       rxe_cleanup_task(&qp->comp.task);
+ 
+       /* flush out any receive wr's or pending requests */
+-      __rxe_do_task(&qp->req.task);
++      if (qp->req.task.func)
++              __rxe_do_task(&qp->req.task);
++
+       if (qp->sq.queue) {
+               __rxe_do_task(&qp->comp.task);
+               __rxe_do_task(&qp->req.task);
+@@ -862,6 +864,8 @@ void rxe_qp_cleanup(void *arg)
+ 
+       free_rd_atomic_resources(qp);
+ 
+-      kernel_sock_shutdown(qp->sk, SHUT_RDWR);
+-      sock_release(qp->sk);
++      if (qp->sk) {
++              kernel_sock_shutdown(qp->sk, SHUT_RDWR);
++              sock_release(qp->sk);
++      }
+ }
+diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
+index f8f6bd92e314c..1a12f95227301 100644
+--- a/drivers/input/joystick/xpad.c
++++ b/drivers/input/joystick/xpad.c
+@@ -129,6 +129,8 @@ static const struct xpad_device {
+       u8 xtype;
+ } xpad_device[] = {
+       { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
++      { 0x03eb, 0xff01, "Wooting One (Legacy)", 0, XTYPE_XBOX360 },
++      { 0x03eb, 0xff02, "Wooting Two (Legacy)", 0, XTYPE_XBOX360 },
+       { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
+       { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
+       { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
+@@ -259,6 +261,7 @@ static const struct xpad_device {
+       { 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
+       { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
+       { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
++      { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
+       { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
+       { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
+       { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
+@@ -275,6 +278,7 @@ static const struct xpad_device {
+       { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", 
MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
+       { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 },
+       { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, 
XTYPE_XBOX360 },
++      { 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
+       { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 },
+       { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, 
XTYPE_XBOXONE },
+       { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
+@@ -339,6 +343,7 @@ static const struct xpad_device {
+       { 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
+       { 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, 
XTYPE_XBOX360 },
+       { 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 },
++      { 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
+       { 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 },
+       { 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", 
MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
+       { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
+@@ -348,6 +353,14 @@ static const struct xpad_device {
+       { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, 
XTYPE_XBOX360 },
+       { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
+       { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
++      { 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 },
++      { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, 
XTYPE_XBOXONE },
++      { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 },
++      { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 },
++      { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 },
++      { 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 },
++      { 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 },
++      { 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 },
+       { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
+       { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX 
},
+       { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
+@@ -433,6 +446,7 @@ static const signed short xpad_abs_triggers[] = {
+ static const struct usb_device_id xpad_table[] = {
+       { USB_INTERFACE_INFO('X', 'B', 0) },    /* X-Box USB-IF not approved 
class */
+       XPAD_XBOX360_VENDOR(0x0079),            /* GPD Win 2 Controller */
++      XPAD_XBOX360_VENDOR(0x03eb),            /* Wooting Keyboards (Legacy) */
+       XPAD_XBOX360_VENDOR(0x044f),            /* Thrustmaster X-Box 360 
controllers */
+       XPAD_XBOX360_VENDOR(0x045e),            /* Microsoft X-Box 360 
controllers */
+       XPAD_XBOXONE_VENDOR(0x045e),            /* Microsoft X-Box One 
controllers */
+@@ -443,6 +457,7 @@ static const struct usb_device_id xpad_table[] = {
+       { USB_DEVICE(0x0738, 0x4540) },         /* Mad Catz Beat Pad */
+       XPAD_XBOXONE_VENDOR(0x0738),            /* Mad Catz FightStick TE 2 */
+       XPAD_XBOX360_VENDOR(0x07ff),            /* Mad Catz GamePad */
++      XPAD_XBOX360_VENDOR(0x0c12),            /* Zeroplus X-Box 360 
controllers */
+       XPAD_XBOX360_VENDOR(0x0e6f),            /* 0x0e6f X-Box 360 controllers 
*/
+       XPAD_XBOXONE_VENDOR(0x0e6f),            /* 0x0e6f X-Box One controllers 
*/
+       XPAD_XBOX360_VENDOR(0x0f0d),            /* Hori Controllers */
+@@ -463,8 +478,12 @@ static const struct usb_device_id xpad_table[] = {
+       XPAD_XBOXONE_VENDOR(0x20d6),            /* PowerA Controllers */
+       XPAD_XBOX360_VENDOR(0x24c6),            /* PowerA Controllers */
+       XPAD_XBOXONE_VENDOR(0x24c6),            /* PowerA Controllers */
++      XPAD_XBOX360_VENDOR(0x2563),            /* OneXPlayer Gamepad */
++      XPAD_XBOX360_VENDOR(0x260d),            /* Dareu H101 */
++      XPAD_XBOXONE_VENDOR(0x2dc8),            /* 8BitDo Pro 2 Wired 
Controller for Xbox */
+       XPAD_XBOXONE_VENDOR(0x2e24),            /* Hyperkin Duke X-Box One pad 
*/
+       XPAD_XBOX360_VENDOR(0x2f24),            /* GameSir Controllers */
++      XPAD_XBOX360_VENDOR(0x31e3),            /* Wooting Keyboards */
+       XPAD_XBOX360_VENDOR(0x3285),            /* Nacon GC-100 */
+       { }
+ };
+@@ -1981,7 +2000,6 @@ static struct usb_driver xpad_driver = {
+       .disconnect     = xpad_disconnect,
+       .suspend        = xpad_suspend,
+       .resume         = xpad_resume,
+-      .reset_resume   = xpad_resume,
+       .id_table       = xpad_table,
+ };
+ 
+diff --git a/drivers/input/touchscreen/melfas_mip4.c 
b/drivers/input/touchscreen/melfas_mip4.c
+index 552a3773f79d0..cec2df449f894 100644
+--- a/drivers/input/touchscreen/melfas_mip4.c
++++ b/drivers/input/touchscreen/melfas_mip4.c
+@@ -1416,7 +1416,7 @@ static int mip4_probe(struct i2c_client *client, const 
struct i2c_device_id *id)
+                                             "ce", GPIOD_OUT_LOW);
+       if (IS_ERR(ts->gpio_ce)) {
+               error = PTR_ERR(ts->gpio_ce);
+-              if (error != EPROBE_DEFER)
++              if (error != -EPROBE_DEFER)
+                       dev_err(&client->dev,
+                               "Failed to get gpio: %d\n", error);
+               return error;
+diff --git a/drivers/iommu/omap-iommu-debug.c 
b/drivers/iommu/omap-iommu-debug.c
+index cec33e90e3998..a15c4d99b8887 100644
+--- a/drivers/iommu/omap-iommu-debug.c
++++ b/drivers/iommu/omap-iommu-debug.c
+@@ -35,12 +35,12 @@ static inline bool is_omap_iommu_detached(struct 
omap_iommu *obj)
+               ssize_t bytes;                                          \
+               const char *str = "%20s: %08x\n";                       \
+               const int maxcol = 32;                                  \
+-              bytes = snprintf(p, maxcol, str, __stringify(name),     \
++              if (len < maxcol)                                       \
++                      goto out;                                       \
++              bytes = scnprintf(p, maxcol, str, __stringify(name),    \
+                                iommu_read_reg(obj, MMU_##name));      \
+               p += bytes;                                             \
+               len -= bytes;                                           \
+-              if (len < maxcol)                                       \
+-                      goto out;                                       \
+       } while (0)
+ 
+ static ssize_t
+diff --git a/drivers/isdn/mISDN/l1oip.h b/drivers/isdn/mISDN/l1oip.h
+index 661c060ada49f..67d1a4762d56d 100644
+--- a/drivers/isdn/mISDN/l1oip.h
++++ b/drivers/isdn/mISDN/l1oip.h
+@@ -58,6 +58,7 @@ struct l1oip {
+       int                     bundle;         /* bundle channels in one frm */
+       int                     codec;          /* codec to use for transmis. */
+       int                     limit;          /* limit number of bchannels */
++      bool                    shutdown;       /* if card is released */
+ 
+       /* timer */
+       struct timer_list       keep_tl;
+diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c
+index 67c21876c35f1..b77ae00a95a39 100644
+--- a/drivers/isdn/mISDN/l1oip_core.c
++++ b/drivers/isdn/mISDN/l1oip_core.c
+@@ -287,7 +287,7 @@ l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 
channel, u32 chanmask,
+       p = frame;
+ 
+       /* restart timer */
+-      if (time_before(hc->keep_tl.expires, jiffies + 5 * HZ))
++      if (time_before(hc->keep_tl.expires, jiffies + 5 * HZ) && !hc->shutdown)
+               mod_timer(&hc->keep_tl, jiffies + L1OIP_KEEPALIVE * HZ);
+       else
+               hc->keep_tl.expires = jiffies + L1OIP_KEEPALIVE * HZ;
+@@ -619,7 +619,9 @@ multiframe:
+               goto multiframe;
+ 
+       /* restart timer */
+-      if (time_before(hc->timeout_tl.expires, jiffies + 5 * HZ) || 
!hc->timeout_on) {
++      if ((time_before(hc->timeout_tl.expires, jiffies + 5 * HZ) ||
++           !hc->timeout_on) &&
++          !hc->shutdown) {
+               hc->timeout_on = 1;
+               mod_timer(&hc->timeout_tl, jiffies + L1OIP_TIMEOUT * HZ);
+       } else /* only adjust timer */
+@@ -1246,11 +1248,10 @@ release_card(struct l1oip *hc)
+ {
+       int     ch;
+ 
+-      if (timer_pending(&hc->keep_tl))
+-              del_timer(&hc->keep_tl);
++      hc->shutdown = true;
+ 
+-      if (timer_pending(&hc->timeout_tl))
+-              del_timer(&hc->timeout_tl);
++      del_timer_sync(&hc->keep_tl);
++      del_timer_sync(&hc->timeout_tl);
+ 
+       cancel_work_sync(&hc->workq);
+ 
+diff --git a/drivers/media/pci/cx88/cx88-vbi.c 
b/drivers/media/pci/cx88/cx88-vbi.c
+index d3237cf8ffa31..78d78b7c974c4 100644
+--- a/drivers/media/pci/cx88/cx88-vbi.c
++++ b/drivers/media/pci/cx88/cx88-vbi.c
+@@ -140,11 +140,10 @@ static int buffer_prepare(struct vb2_buffer *vb)
+               return -EINVAL;
+       vb2_set_plane_payload(vb, 0, size);
+ 
+-      cx88_risc_buffer(dev->pci, &buf->risc, sgt->sgl,
+-                       0, VBI_LINE_LENGTH * lines,
+-                       VBI_LINE_LENGTH, 0,
+-                       lines);
+-      return 0;
++      return cx88_risc_buffer(dev->pci, &buf->risc, sgt->sgl,
++                              0, VBI_LINE_LENGTH * lines,
++                              VBI_LINE_LENGTH, 0,
++                              lines);
+ }
+ 
+ static void buffer_finish(struct vb2_buffer *vb)
+diff --git a/drivers/media/pci/cx88/cx88-video.c 
b/drivers/media/pci/cx88/cx88-video.c
+index 3b140ad598de2..0ad0f4ab6c4bf 100644
+--- a/drivers/media/pci/cx88/cx88-video.c
++++ b/drivers/media/pci/cx88/cx88-video.c
+@@ -443,6 +443,7 @@ static int queue_setup(struct vb2_queue *q,
+ 
+ static int buffer_prepare(struct vb2_buffer *vb)
+ {
++      int ret;
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+       struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
+       struct cx88_core *core = dev->core;
+@@ -457,42 +458,42 @@ static int buffer_prepare(struct vb2_buffer *vb)
+ 
+       switch (core->field) {
+       case V4L2_FIELD_TOP:
+-              cx88_risc_buffer(dev->pci, &buf->risc,
+-                               sgt->sgl, 0, UNSET,
+-                               buf->bpl, 0, core->height);
++              ret = cx88_risc_buffer(dev->pci, &buf->risc,
++                                     sgt->sgl, 0, UNSET,
++                                     buf->bpl, 0, core->height);
+               break;
+       case V4L2_FIELD_BOTTOM:
+-              cx88_risc_buffer(dev->pci, &buf->risc,
+-                               sgt->sgl, UNSET, 0,
+-                               buf->bpl, 0, core->height);
++              ret = cx88_risc_buffer(dev->pci, &buf->risc,
++                                     sgt->sgl, UNSET, 0,
++                                     buf->bpl, 0, core->height);
+               break;
+       case V4L2_FIELD_SEQ_TB:
+-              cx88_risc_buffer(dev->pci, &buf->risc,
+-                               sgt->sgl,
+-                               0, buf->bpl * (core->height >> 1),
+-                               buf->bpl, 0,
+-                               core->height >> 1);
++              ret = cx88_risc_buffer(dev->pci, &buf->risc,
++                                     sgt->sgl,
++                                     0, buf->bpl * (core->height >> 1),
++                                     buf->bpl, 0,
++                                     core->height >> 1);
+               break;
+       case V4L2_FIELD_SEQ_BT:
+-              cx88_risc_buffer(dev->pci, &buf->risc,
+-                               sgt->sgl,
+-                               buf->bpl * (core->height >> 1), 0,
+-                               buf->bpl, 0,
+-                               core->height >> 1);
++              ret = cx88_risc_buffer(dev->pci, &buf->risc,
++                                     sgt->sgl,
++                                     buf->bpl * (core->height >> 1), 0,
++                                     buf->bpl, 0,
++                                     core->height >> 1);
+               break;
+       case V4L2_FIELD_INTERLACED:
+       default:
+-              cx88_risc_buffer(dev->pci, &buf->risc,
+-                               sgt->sgl, 0, buf->bpl,
+-                               buf->bpl, buf->bpl,
+-                               core->height >> 1);
++              ret = cx88_risc_buffer(dev->pci, &buf->risc,
++                                     sgt->sgl, 0, buf->bpl,
++                                     buf->bpl, buf->bpl,
++                                     core->height >> 1);
+               break;
+       }
+       dprintk(2,"[%p/%d] buffer_prepare - %dx%d %dbpp \"%s\" - dma=0x%08lx\n",
+               buf, buf->vb.vb2_buf.index,
+               core->width, core->height, dev->fmt->depth, dev->fmt->name,
+               (unsigned long)buf->risc.dma);
+-      return 0;
++      return ret;
+ }
+ 
+ static void buffer_finish(struct vb2_buffer *vb)
+diff --git a/drivers/media/platform/exynos4-is/fimc-is.c 
b/drivers/media/platform/exynos4-is/fimc-is.c
+index 590ec04de827b..3a1311d572c23 100644
+--- a/drivers/media/platform/exynos4-is/fimc-is.c
++++ b/drivers/media/platform/exynos4-is/fimc-is.c
+@@ -217,6 +217,7 @@ static int fimc_is_register_subdevs(struct fimc_is *is)
+ 
+                       if (ret < 0 || index >= FIMC_IS_SENSORS_NUM) {
+                               of_node_put(child);
++                              of_node_put(i2c_bus);
+                               return ret;
+                       }
+                       index++;
+diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c 
b/drivers/media/platform/xilinx/xilinx-vipp.c
+index feb3b2f1d874c..df21646ef9fa6 100644
+--- a/drivers/media/platform/xilinx/xilinx-vipp.c
++++ b/drivers/media/platform/xilinx/xilinx-vipp.c
+@@ -462,7 +462,7 @@ static int xvip_graph_dma_init(struct 
xvip_composite_device *xdev)
+ {
+       struct device_node *ports;
+       struct device_node *port;
+-      int ret;
++      int ret = 0;
+ 
+       ports = of_get_child_by_name(xdev->dev->of_node, "ports");
+       if (ports == NULL) {
+@@ -472,13 +472,14 @@ static int xvip_graph_dma_init(struct 
xvip_composite_device *xdev)
+ 
+       for_each_child_of_node(ports, port) {
+               ret = xvip_graph_dma_init_one(xdev, port);
+-              if (ret < 0) {
++              if (ret) {
+                       of_node_put(port);
+-                      return ret;
++                      break;
+               }
+       }
+ 
+-      return 0;
++      of_node_put(ports);
++      return ret;
+ }
+ 
+ static void xvip_graph_cleanup(struct xvip_composite_device *xdev)
+diff --git a/drivers/memory/of_memory.c b/drivers/memory/of_memory.c
+index 568f05ed961a8..36517b7d093e7 100644
+--- a/drivers/memory/of_memory.c
++++ b/drivers/memory/of_memory.c
+@@ -135,6 +135,7 @@ const struct lpddr2_timings *of_get_ddr_timings(struct 
device_node *np_ddr,
+       for_each_child_of_node(np_ddr, np_tim) {
+               if (of_device_is_compatible(np_tim, tim_compat)) {
+                       if (of_do_get_timings(np_tim, &timings[i])) {
++                              of_node_put(np_tim);
+                               devm_kfree(dev, timings);
+                               goto default_timings;
+                       }
+diff --git a/drivers/mfd/intel_soc_pmic_core.c 
b/drivers/mfd/intel_soc_pmic_core.c
+index 12d6ebb4ae5d5..e233585645b9b 100644
+--- a/drivers/mfd/intel_soc_pmic_core.c
++++ b/drivers/mfd/intel_soc_pmic_core.c
+@@ -118,6 +118,7 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c,
+       return 0;
+ 
+ err_del_irq_chip:
++      pwm_remove_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
+       regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data);
+       return ret;
+ }
+diff --git a/drivers/mfd/lp8788-irq.c b/drivers/mfd/lp8788-irq.c
+index 792d51bae20f5..ae65928f35f09 100644
+--- a/drivers/mfd/lp8788-irq.c
++++ b/drivers/mfd/lp8788-irq.c
+@@ -179,6 +179,7 @@ int lp8788_irq_init(struct lp8788 *lp, int irq)
+                               IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+                               "lp8788-irq", irqd);
+       if (ret) {
++              irq_domain_remove(lp->irqdm);
+               dev_err(lp->dev, "failed to create a thread for IRQ_N\n");
+               return ret;
+       }
+@@ -192,4 +193,6 @@ void lp8788_irq_exit(struct lp8788 *lp)
+ {
+       if (lp->irq)
+               free_irq(lp->irq, lp->irqdm);
++      if (lp->irqdm)
++              irq_domain_remove(lp->irqdm);
+ }
+diff --git a/drivers/mfd/lp8788.c b/drivers/mfd/lp8788.c
+index acf616559512e..e47150cdf7477 100644
+--- a/drivers/mfd/lp8788.c
++++ b/drivers/mfd/lp8788.c
+@@ -199,8 +199,16 @@ static int lp8788_probe(struct i2c_client *cl, const 
struct i2c_device_id *id)
+       if (ret)
+               return ret;
+ 
+-      return mfd_add_devices(lp->dev, -1, lp8788_devs,
+-                             ARRAY_SIZE(lp8788_devs), NULL, 0, NULL);
++      ret = mfd_add_devices(lp->dev, -1, lp8788_devs,
++                            ARRAY_SIZE(lp8788_devs), NULL, 0, NULL);
++      if (ret)
++              goto err_exit_irq;
++
++      return 0;
++
++err_exit_irq:
++      lp8788_irq_exit(lp);
++      return ret;
+ }
+ 
+ static int lp8788_remove(struct i2c_client *cl)
+diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c
+index 4ca245518a199..d64bd28cc6b8a 100644
+--- a/drivers/mfd/sm501.c
++++ b/drivers/mfd/sm501.c
+@@ -1736,7 +1736,12 @@ static struct platform_driver sm501_plat_driver = {
+ 
+ static int __init sm501_base_init(void)
+ {
+-      platform_driver_register(&sm501_plat_driver);
++      int ret;
++
++      ret = platform_driver_register(&sm501_plat_driver);
++      if (ret < 0)
++              return ret;
++
+       return pci_register_driver(&sm501_pci_driver);
+ }
+ 
+diff --git a/drivers/mmc/host/au1xmmc.c b/drivers/mmc/host/au1xmmc.c
+index ed77fbfa47740..a1667339e21d1 100644
+--- a/drivers/mmc/host/au1xmmc.c
++++ b/drivers/mmc/host/au1xmmc.c
+@@ -1114,8 +1114,9 @@ out5:
+       if (host->platdata && host->platdata->cd_setup &&
+           !(mmc->caps & MMC_CAP_NEEDS_POLL))
+               host->platdata->cd_setup(mmc, 0);
+-out_clk:
++
+       clk_disable_unprepare(host->clk);
++out_clk:
+       clk_put(host->clk);
+ out_irq:
+       free_irq(host->irq, host);
+diff --git a/drivers/mmc/host/moxart-mmc.c b/drivers/mmc/host/moxart-mmc.c
+index a5b03fb7656d1..4f8588c3bf537 100644
+--- a/drivers/mmc/host/moxart-mmc.c
++++ b/drivers/mmc/host/moxart-mmc.c
+@@ -111,8 +111,8 @@
+ #define CLK_DIV_MASK          0x7f
+ 
+ /* REG_BUS_WIDTH */
+-#define BUS_WIDTH_8           BIT(2)
+-#define BUS_WIDTH_4           BIT(1)
++#define BUS_WIDTH_4_SUPPORT   BIT(3)
++#define BUS_WIDTH_4           BIT(2)
+ #define BUS_WIDTH_1           BIT(0)
+ 
+ #define MMC_VDD_360           23
+@@ -529,9 +529,6 @@ static void moxart_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
+       case MMC_BUS_WIDTH_4:
+               writel(BUS_WIDTH_4, host->base + REG_BUS_WIDTH);
+               break;
+-      case MMC_BUS_WIDTH_8:
+-              writel(BUS_WIDTH_8, host->base + REG_BUS_WIDTH);
+-              break;
+       default:
+               writel(BUS_WIDTH_1, host->base + REG_BUS_WIDTH);
+               break;
+@@ -648,16 +645,8 @@ static int moxart_probe(struct platform_device *pdev)
+               dmaengine_slave_config(host->dma_chan_rx, &cfg);
+       }
+ 
+-      switch ((readl(host->base + REG_BUS_WIDTH) >> 3) & 3) {
+-      case 1:
++      if (readl(host->base + REG_BUS_WIDTH) & BUS_WIDTH_4_SUPPORT)
+               mmc->caps |= MMC_CAP_4_BIT_DATA;
+-              break;
+-      case 2:
+-              mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
+-              break;
+-      default:
+-              break;
+-      }
+ 
+       writel(0, host->base + REG_INTERRUPT_MASK);
+ 
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 
b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+index 9d7f491931cef..36108b26d804f 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+@@ -792,6 +792,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct 
bnx2x_fastpath *fp,
+                       BNX2X_ERR("skb_put is about to fail...  pad %d  len %d  
rx_buf_size %d\n",
+                                 pad, len, fp->rx_buf_size);
+                       bnx2x_panic();
++                      bnx2x_frag_free(fp, new_data);
+                       return;
+               }
+ #endif
+diff --git a/drivers/net/ethernet/freescale/fs_enet/mac-fec.c 
b/drivers/net/ethernet/freescale/fs_enet/mac-fec.c
+index 777beffa1e1e9..7861a5025dfb7 100644
+--- a/drivers/net/ethernet/freescale/fs_enet/mac-fec.c
++++ b/drivers/net/ethernet/freescale/fs_enet/mac-fec.c
+@@ -103,7 +103,7 @@ static int do_pd_setup(struct fs_enet_private *fep)
+               return -EINVAL;
+ 
+       fep->fec.fecp = of_iomap(ofdev->dev.of_node, 0);
+-      if (!fep->fcc.fccp)
++      if (!fep->fec.fecp)
+               return -EINVAL;
+ 
+       return 0;
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index db37cf9281e1b..547693118606d 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -966,6 +966,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x413c, 0x81b3, 8)},    /* Dell Wireless 5809e Gobi(TM) 
4G LTE Mobile Broadband Card (rev3) */
+       {QMI_FIXED_INTF(0x413c, 0x81b6, 8)},    /* Dell Wireless 5811e */
+       {QMI_FIXED_INTF(0x413c, 0x81b6, 10)},   /* Dell Wireless 5811e */
++      {QMI_FIXED_INTF(0x413c, 0x81c2, 8)},    /* Dell Wireless 5811e */
+       {QMI_FIXED_INTF(0x413c, 0x81cc, 8)},    /* Dell Wireless 5816e */
+       {QMI_FIXED_INTF(0x413c, 0x81d7, 0)},    /* Dell Wireless 5821e */
+       {QMI_FIXED_INTF(0x413c, 0x81d7, 1)},    /* Dell Wireless 5821e 
preproduction config */
+diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
+index 96f6edcb00627..a354695a22a93 100644
+--- a/drivers/net/usb/r8152.c
++++ b/drivers/net/usb/r8152.c
+@@ -1282,7 +1282,9 @@ static void intr_callback(struct urb *urb)
+                          "Stop submitting intr, status %d\n", status);
+               return;
+       case -EOVERFLOW:
+-              netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n");
++              if (net_ratelimit())
++                      netif_info(tp, intr, tp->netdev,
++                                 "intr status -EOVERFLOW\n");
+               goto resubmit;
+       /* -EPIPE:  should clear the halt */
+       default:
+diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
+index f1cb512c55ac7..810e4e65e2a31 100644
+--- a/drivers/net/usb/usbnet.c
++++ b/drivers/net/usb/usbnet.c
+@@ -1559,6 +1559,7 @@ void usbnet_disconnect (struct usb_interface *intf)
+       struct usbnet           *dev;
+       struct usb_device       *xdev;
+       struct net_device       *net;
++      struct urb              *urb;
+ 
+       dev = usb_get_intfdata(intf);
+       usb_set_intfdata(intf, NULL);
+@@ -1575,7 +1576,11 @@ void usbnet_disconnect (struct usb_interface *intf)
+       net = dev->net;
+       unregister_netdev (net);
+ 
+-      usb_scuttle_anchored_urbs(&dev->deferred);
++      while ((urb = usb_get_from_anchor(&dev->deferred))) {
++              dev_kfree_skb(urb->context);
++              kfree(urb->sg);
++              usb_free_urb(urb);
++      }
+ 
+       if (dev->driver_info->unbind)
+               dev->driver_info->unbind (dev, intf);
+diff --git a/drivers/net/wireless/ath/ath10k/mac.c 
b/drivers/net/wireless/ath/ath10k/mac.c
+index 41fb17cece622..1ac24507b4e53 100644
+--- a/drivers/net/wireless/ath/ath10k/mac.c
++++ b/drivers/net/wireless/ath/ath10k/mac.c
+@@ -798,11 +798,36 @@ static int ath10k_peer_delete(struct ath10k *ar, u32 
vdev_id, const u8 *addr)
+       return 0;
+ }
+ 
++static void ath10k_peer_map_cleanup(struct ath10k *ar, struct ath10k_peer 
*peer)
++{
++      int peer_id, i;
++
++      lockdep_assert_held(&ar->conf_mutex);
++
++      for_each_set_bit(peer_id, peer->peer_ids,
++                       ATH10K_MAX_NUM_PEER_IDS) {
++              ar->peer_map[peer_id] = NULL;
++      }
++
++      /* Double check that peer is properly un-referenced from
++       * the peer_map
++       */
++      for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
++              if (ar->peer_map[i] == peer) {
++                      ath10k_warn(ar, "removing stale peer_map entry for %pM 
(ptr %pK idx %d)\n",
++                                  peer->addr, peer, i);
++                      ar->peer_map[i] = NULL;
++              }
++      }
++
++      list_del(&peer->list);
++      kfree(peer);
++      ar->num_peers--;
++}
++
+ static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
+ {
+       struct ath10k_peer *peer, *tmp;
+-      int peer_id;
+-      int i;
+ 
+       lockdep_assert_held(&ar->conf_mutex);
+ 
+@@ -814,25 +839,7 @@ static void ath10k_peer_cleanup(struct ath10k *ar, u32 
vdev_id)
+               ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
+                           peer->addr, vdev_id);
+ 
+-              for_each_set_bit(peer_id, peer->peer_ids,
+-                               ATH10K_MAX_NUM_PEER_IDS) {
+-                      ar->peer_map[peer_id] = NULL;
+-              }
+-
+-              /* Double check that peer is properly un-referenced from
+-               * the peer_map
+-               */
+-              for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) {
+-                      if (ar->peer_map[i] == peer) {
+-                              ath10k_warn(ar, "removing stale peer_map entry 
for %pM (ptr %pK idx %d)\n",
+-                                          peer->addr, peer, i);
+-                              ar->peer_map[i] = NULL;
+-                      }
+-              }
+-
+-              list_del(&peer->list);
+-              kfree(peer);
+-              ar->num_peers--;
++              ath10k_peer_map_cleanup(ar, peer);
+       }
+       spin_unlock_bh(&ar->data_lock);
+ }
+@@ -6095,10 +6102,7 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
+                               /* Clean up the peer object as well since we
+                                * must have failed to do this above.
+                                */
+-                              list_del(&peer->list);
+-                              ar->peer_map[i] = NULL;
+-                              kfree(peer);
+-                              ar->num_peers--;
++                              ath10k_peer_map_cleanup(ar, peer);
+                       }
+               }
+               spin_unlock_bh(&ar->data_lock);
+diff --git a/drivers/net/wireless/mac80211_hwsim.c 
b/drivers/net/wireless/mac80211_hwsim.c
+index 2cd1b3cfcc09a..70251c703c9ea 100644
+--- a/drivers/net/wireless/mac80211_hwsim.c
++++ b/drivers/net/wireless/mac80211_hwsim.c
+@@ -3011,6 +3011,8 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff 
*skb_2,
+ 
+       rx_status.band = data2->channel->band;
+       rx_status.rate_idx = nla_get_u32(info->attrs[HWSIM_ATTR_RX_RATE]);
++      if (rx_status.rate_idx >= 
data2->hw->wiphy->bands[rx_status.band]->n_bitrates)
++              goto out;
+       rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
+ 
+       memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c 
b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+index 9fc6f16153437..079611ff8defb 100644
+--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+@@ -3386,7 +3386,8 @@ static void rt2800_config_channel(struct rt2x00_dev 
*rt2x00dev,
+               reg = (rf->channel <= 14 ? 0x1c : 0x24) + 2 * 
rt2x00dev->lna_gain;
+               rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
+ 
+-              rt2800_iq_calibrate(rt2x00dev, rf->channel);
++              if (rt2x00_rt(rt2x00dev, RT5592))
++                      rt2800_iq_calibrate(rt2x00dev, rf->channel);
+       }
+ 
+       rt2800_bbp_read(rt2x00dev, 4, &bbp);
+diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c 
b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+index e73613b9f2f59..6875ec7290bf8 100644
+--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
++++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+@@ -1879,13 +1879,6 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv 
*priv)
+ 
+               /* We have 8 bits to indicate validity */
+               map_addr = offset * 8;
+-              if (map_addr >= EFUSE_MAP_LEN) {
+-                      dev_warn(dev, "%s: Illegal map_addr (%04x), "
+-                               "efuse corrupt!\n",
+-                               __func__, map_addr);
+-                      ret = -EINVAL;
+-                      goto exit;
+-              }
+               for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
+                       /* Check word enable condition in the section */
+                       if (word_mask & BIT(i)) {
+@@ -1896,6 +1889,13 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv 
*priv)
+                       ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &val8);
+                       if (ret)
+                               goto exit;
++                      if (map_addr >= EFUSE_MAP_LEN - 1) {
++                              dev_warn(dev, "%s: Illegal map_addr (%04x), "
++                                       "efuse corrupt!\n",
++                                       __func__, map_addr);
++                              ret = -EINVAL;
++                              goto exit;
++                      }
+                       priv->efuse_wifi.raw[map_addr++] = val8;
+ 
+                       ret = rtl8xxxu_read_efuse8(priv, efuse_addr++, &val8);
+@@ -2930,12 +2930,12 @@ bool rtl8xxxu_gen2_simularity_compare(struct 
rtl8xxxu_priv *priv,
+               }
+ 
+               if (!(simubitmap & 0x30) && priv->tx_paths > 1) {
+-                      /* path B RX OK */
++                      /* path B TX OK */
+                       for (i = 4; i < 6; i++)
+                               result[3][i] = result[c1][i];
+               }
+ 
+-              if (!(simubitmap & 0x30) && priv->tx_paths > 1) {
++              if (!(simubitmap & 0xc0) && priv->tx_paths > 1) {
+                       /* path B RX OK */
+                       for (i = 6; i < 8; i++)
+                               result[3][i] = result[c1][i];
+diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
+index 9561a247d0dc7..f260ef59dda2e 100644
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -1044,18 +1044,21 @@ static int nvme_pr_preempt(struct block_device *bdev, 
u64 old, u64 new,
+               enum pr_type type, bool abort)
+ {
+       u32 cdw10 = nvme_pr_type(type) << 8 | (abort ? 2 : 1);
++
+       return nvme_pr_command(bdev, cdw10, old, new, nvme_cmd_resv_acquire);
+ }
+ 
+ static int nvme_pr_clear(struct block_device *bdev, u64 key)
+ {
+-      u32 cdw10 = 1 | (key ? 1 << 3 : 0);
+-      return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_register);
++      u32 cdw10 = 1 | (key ? 0 : 1 << 3);
++
++      return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_release);
+ }
+ 
+ static int nvme_pr_release(struct block_device *bdev, u64 key, enum pr_type 
type)
+ {
+-      u32 cdw10 = nvme_pr_type(type) << 8 | (key ? 1 << 3 : 0);
++      u32 cdw10 = nvme_pr_type(type) << 8 | (key ? 0 : 1 << 3);
++
+       return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_release);
+ }
+ 
+diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
+index 85774b7a316aa..7818cfeea53a9 100644
+--- a/drivers/pci/setup-res.c
++++ b/drivers/pci/setup-res.c
+@@ -214,6 +214,17 @@ static int pci_revert_fw_address(struct resource *res, 
struct pci_dev *dev,
+ 
+       root = pci_find_parent_resource(dev, res);
+       if (!root) {
++              /*
++               * If dev is behind a bridge, accesses will only reach it
++               * if res is inside the relevant bridge window.
++               */
++              if (pci_upstream_bridge(dev))
++                      return -ENXIO;
++
++              /*
++               * On the root bus, assume the host bridge will forward
++               * everything.
++               */
+               if (res->flags & IORESOURCE_IO)
+                       root = &ioport_resource;
+               else
+diff --git a/drivers/platform/x86/msi-laptop.c 
b/drivers/platform/x86/msi-laptop.c
+index 42317704629db..4ae2287ce2625 100644
+--- a/drivers/platform/x86/msi-laptop.c
++++ b/drivers/platform/x86/msi-laptop.c
+@@ -609,11 +609,10 @@ static struct dmi_system_id __initdata msi_dmi_table[] = 
{
+       {
+               .ident = "MSI S270",
+               .matches = {
+-                      DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT'L CO.,LTD"),
++                      DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "MS-1013"),
+                       DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+-                      DMI_MATCH(DMI_CHASSIS_VENDOR,
+-                                "MICRO-STAR INT'L CO.,LTD")
++                      DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT")
+               },
+               .driver_data = &quirk_old_ec_model,
+               .callback = dmi_check_cb
+@@ -646,8 +645,7 @@ static struct dmi_system_id __initdata msi_dmi_table[] = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "NOTEBOOK"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "SAM2000"),
+                       DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+-                      DMI_MATCH(DMI_CHASSIS_VENDOR,
+-                                "MICRO-STAR INT'L CO.,LTD")
++                      DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT")
+               },
+               .driver_data = &quirk_old_ec_model,
+               .callback = dmi_check_cb
+@@ -1069,8 +1067,7 @@ static int __init msi_init(void)
+               return -EINVAL;
+ 
+       /* Register backlight stuff */
+-
+-      if (quirks->old_ec_model ||
++      if (quirks->old_ec_model &&
+           acpi_video_get_backlight_type() == acpi_backlight_vendor) {
+               struct backlight_properties props;
+               memset(&props, 0, sizeof(struct backlight_properties));
+diff --git a/drivers/powercap/intel_rapl.c b/drivers/powercap/intel_rapl.c
+index 8809c1a20bed0..5f31606e1982e 100644
+--- a/drivers/powercap/intel_rapl.c
++++ b/drivers/powercap/intel_rapl.c
+@@ -1080,6 +1080,9 @@ static u64 rapl_compute_time_window_core(struct 
rapl_package *rp, u64 value,
+               y = value & 0x1f;
+               value = (1 << y) * (4 + f) * rp->time_unit / 4;
+       } else {
++              if (value < rp->time_unit)
++                      return 0;
++
+               do_div(value, rp->time_unit);
+               y = ilog2(value);
+               f = div64_u64(4 * (value - (1 << y)), 1 << y);
+diff --git a/drivers/regulator/qcom_rpm-regulator.c 
b/drivers/regulator/qcom_rpm-regulator.c
+index 1b2acc43fea16..4f2c8be0c923f 100644
+--- a/drivers/regulator/qcom_rpm-regulator.c
++++ b/drivers/regulator/qcom_rpm-regulator.c
+@@ -820,6 +820,12 @@ static const struct rpm_regulator_data 
rpm_pm8018_regulators[] = {
+ };
+ 
+ static const struct rpm_regulator_data rpm_pm8058_regulators[] = {
++      { "s0",   QCOM_RPM_PM8058_SMPS0,  &pm8058_smps, "vdd_s0" },
++      { "s1",   QCOM_RPM_PM8058_SMPS1,  &pm8058_smps, "vdd_s1" },
++      { "s2",   QCOM_RPM_PM8058_SMPS2,  &pm8058_smps, "vdd_s2" },
++      { "s3",   QCOM_RPM_PM8058_SMPS3,  &pm8058_smps, "vdd_s3" },
++      { "s4",   QCOM_RPM_PM8058_SMPS4,  &pm8058_smps, "vdd_s4" },
++
+       { "l0",   QCOM_RPM_PM8058_LDO0,   &pm8058_nldo, "vdd_l0_l1_lvs" },
+       { "l1",   QCOM_RPM_PM8058_LDO1,   &pm8058_nldo, "vdd_l0_l1_lvs" },
+       { "l2",   QCOM_RPM_PM8058_LDO2,   &pm8058_pldo, "vdd_l2_l11_l12" },
+@@ -847,12 +853,6 @@ static const struct rpm_regulator_data 
rpm_pm8058_regulators[] = {
+       { "l24",  QCOM_RPM_PM8058_LDO24,  &pm8058_nldo, "vdd_l23_l24_l25" },
+       { "l25",  QCOM_RPM_PM8058_LDO25,  &pm8058_nldo, "vdd_l23_l24_l25" },
+ 
+-      { "s0",   QCOM_RPM_PM8058_SMPS0,  &pm8058_smps, "vdd_s0" },
+-      { "s1",   QCOM_RPM_PM8058_SMPS1,  &pm8058_smps, "vdd_s1" },
+-      { "s2",   QCOM_RPM_PM8058_SMPS2,  &pm8058_smps, "vdd_s2" },
+-      { "s3",   QCOM_RPM_PM8058_SMPS3,  &pm8058_smps, "vdd_s3" },
+-      { "s4",   QCOM_RPM_PM8058_SMPS4,  &pm8058_smps, "vdd_s4" },
+-
+       { "lvs0", QCOM_RPM_PM8058_LVS0, &pm8058_switch, "vdd_l0_l1_lvs" },
+       { "lvs1", QCOM_RPM_PM8058_LVS1, &pm8058_switch, "vdd_l0_l1_lvs" },
+ 
+@@ -861,6 +861,12 @@ static const struct rpm_regulator_data 
rpm_pm8058_regulators[] = {
+ };
+ 
+ static const struct rpm_regulator_data rpm_pm8901_regulators[] = {
++      { "s0",   QCOM_RPM_PM8901_SMPS0, &pm8901_ftsmps, "vdd_s0" },
++      { "s1",   QCOM_RPM_PM8901_SMPS1, &pm8901_ftsmps, "vdd_s1" },
++      { "s2",   QCOM_RPM_PM8901_SMPS2, &pm8901_ftsmps, "vdd_s2" },
++      { "s3",   QCOM_RPM_PM8901_SMPS3, &pm8901_ftsmps, "vdd_s3" },
++      { "s4",   QCOM_RPM_PM8901_SMPS4, &pm8901_ftsmps, "vdd_s4" },
++
+       { "l0",   QCOM_RPM_PM8901_LDO0, &pm8901_nldo, "vdd_l0" },
+       { "l1",   QCOM_RPM_PM8901_LDO1, &pm8901_pldo, "vdd_l1" },
+       { "l2",   QCOM_RPM_PM8901_LDO2, &pm8901_pldo, "vdd_l2" },
+@@ -869,12 +875,6 @@ static const struct rpm_regulator_data 
rpm_pm8901_regulators[] = {
+       { "l5",   QCOM_RPM_PM8901_LDO5, &pm8901_pldo, "vdd_l5" },
+       { "l6",   QCOM_RPM_PM8901_LDO6, &pm8901_pldo, "vdd_l6" },
+ 
+-      { "s0",   QCOM_RPM_PM8901_SMPS0, &pm8901_ftsmps, "vdd_s0" },
+-      { "s1",   QCOM_RPM_PM8901_SMPS1, &pm8901_ftsmps, "vdd_s1" },
+-      { "s2",   QCOM_RPM_PM8901_SMPS2, &pm8901_ftsmps, "vdd_s2" },
+-      { "s3",   QCOM_RPM_PM8901_SMPS3, &pm8901_ftsmps, "vdd_s3" },
+-      { "s4",   QCOM_RPM_PM8901_SMPS4, &pm8901_ftsmps, "vdd_s4" },
+-
+       { "lvs0", QCOM_RPM_PM8901_LVS0, &pm8901_switch, "lvs0_in" },
+       { "lvs1", QCOM_RPM_PM8901_LVS1, &pm8901_switch, "lvs1_in" },
+       { "lvs2", QCOM_RPM_PM8901_LVS2, &pm8901_switch, "lvs2_in" },
+diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
+index b78a2f3745f2f..9c2edd9b66d1b 100644
+--- a/drivers/scsi/3w-9xxx.c
++++ b/drivers/scsi/3w-9xxx.c
+@@ -2016,7 +2016,7 @@ static int twa_probe(struct pci_dev *pdev, const struct 
pci_device_id *dev_id)
+       retval = pci_enable_device(pdev);
+       if (retval) {
+               TW_PRINTK(host, TW_DRIVER, 0x34, "Failed to enable pci device");
+-              goto out_disable_device;
++              return -ENODEV;
+       }
+ 
+       pci_set_master(pdev);
+diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
+index 5b23175a584cc..23f90ca344ad3 100644
+--- a/drivers/scsi/stex.c
++++ b/drivers/scsi/stex.c
+@@ -653,16 +653,17 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void 
(*done)(struct scsi_cmnd *))
+               return 0;
+       case PASSTHRU_CMD:
+               if (cmd->cmnd[1] == PASSTHRU_GET_DRVVER) {
+-                      struct st_drvver ver;
++                      const struct st_drvver ver = {
++                              .major = ST_VER_MAJOR,
++                              .minor = ST_VER_MINOR,
++                              .oem = ST_OEM,
++                              .build = ST_BUILD_VER,
++                              .signature[0] = PASSTHRU_SIGNATURE,
++                              .console_id = host->max_id - 1,
++                              .host_no = hba->host->host_no,
++                      };
+                       size_t cp_len = sizeof(ver);
+ 
+-                      ver.major = ST_VER_MAJOR;
+-                      ver.minor = ST_VER_MINOR;
+-                      ver.oem = ST_OEM;
+-                      ver.build = ST_BUILD_VER;
+-                      ver.signature[0] = PASSTHRU_SIGNATURE;
+-                      ver.console_id = host->max_id - 1;
+-                      ver.host_no = hba->host->host_no;
+                       cp_len = scsi_sg_copy_from_buffer(cmd, &ver, cp_len);
+                       cmd->result = sizeof(ver) == cp_len ?
+                               DID_OK << 16 | COMMAND_COMPLETE << 8 :
+diff --git a/drivers/soc/qcom/smem_state.c b/drivers/soc/qcom/smem_state.c
+index d5437ca76ed92..1502cf037a6ba 100644
+--- a/drivers/soc/qcom/smem_state.c
++++ b/drivers/soc/qcom/smem_state.c
+@@ -144,6 +144,7 @@ static void qcom_smem_state_release(struct kref *ref)
+       struct qcom_smem_state *state = container_of(ref, struct 
qcom_smem_state, refcount);
+ 
+       list_del(&state->list);
++      of_node_put(state->of_node);
+       kfree(state);
+ }
+ 
+@@ -177,7 +178,7 @@ struct qcom_smem_state *qcom_smem_state_register(struct 
device_node *of_node,
+ 
+       kref_init(&state->refcount);
+ 
+-      state->of_node = of_node;
++      state->of_node = of_node_get(of_node);
+       state->ops = *ops;
+       state->priv = priv;
+ 
+diff --git a/drivers/soc/qcom/smsm.c b/drivers/soc/qcom/smsm.c
+index 01bc8528f24d5..87ab37807e3f8 100644
+--- a/drivers/soc/qcom/smsm.c
++++ b/drivers/soc/qcom/smsm.c
+@@ -515,7 +515,7 @@ static int qcom_smsm_probe(struct platform_device *pdev)
+       for (id = 0; id < smsm->num_hosts; id++) {
+               ret = smsm_parse_ipc(smsm, id);
+               if (ret < 0)
+-                      return ret;
++                      goto out_put;
+       }
+ 
+       /* Acquire the main SMSM state vector */
+@@ -523,13 +523,14 @@ static int qcom_smsm_probe(struct platform_device *pdev)
+                             smsm->num_entries * sizeof(u32));
+       if (ret < 0 && ret != -EEXIST) {
+               dev_err(&pdev->dev, "unable to allocate shared state entry\n");
+-              return ret;
++              goto out_put;
+       }
+ 
+       states = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_SMSM_SHARED_STATE, 
NULL);
+       if (IS_ERR(states)) {
+               dev_err(&pdev->dev, "Unable to acquire shared state entry\n");
+-              return PTR_ERR(states);
++              ret = PTR_ERR(states);
++              goto out_put;
+       }
+ 
+       /* Acquire the list of interrupt mask vectors */
+@@ -537,13 +538,14 @@ static int qcom_smsm_probe(struct platform_device *pdev)
+       ret = qcom_smem_alloc(QCOM_SMEM_HOST_ANY, SMEM_SMSM_CPU_INTR_MASK, 
size);
+       if (ret < 0 && ret != -EEXIST) {
+               dev_err(&pdev->dev, "unable to allocate smsm interrupt mask\n");
+-              return ret;
++              goto out_put;
+       }
+ 
+       intr_mask = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_SMSM_CPU_INTR_MASK, 
NULL);
+       if (IS_ERR(intr_mask)) {
+               dev_err(&pdev->dev, "unable to acquire shared memory interrupt 
mask\n");
+-              return PTR_ERR(intr_mask);
++              ret = PTR_ERR(intr_mask);
++              goto out_put;
+       }
+ 
+       /* Setup the reference to the local state bits */
+@@ -554,7 +556,8 @@ static int qcom_smsm_probe(struct platform_device *pdev)
+       smsm->state = qcom_smem_state_register(local_node, &smsm_state_ops, 
smsm);
+       if (IS_ERR(smsm->state)) {
+               dev_err(smsm->dev, "failed to register qcom_smem_state\n");
+-              return PTR_ERR(smsm->state);
++              ret = PTR_ERR(smsm->state);
++              goto out_put;
+       }
+ 
+       /* Register handlers for remote processor entries of interest. */
+@@ -584,16 +587,19 @@ static int qcom_smsm_probe(struct platform_device *pdev)
+       }
+ 
+       platform_set_drvdata(pdev, smsm);
++      of_node_put(local_node);
+ 
+       return 0;
+ 
+ unwind_interfaces:
++      of_node_put(node);
+       for (id = 0; id < smsm->num_entries; id++)
+               if (smsm->entries[id].domain)
+                       irq_domain_remove(smsm->entries[id].domain);
+ 
+       qcom_smem_state_unregister(smsm->state);
+-
++out_put:
++      of_node_put(local_node);
+       return ret;
+ }
+ 
+diff --git a/drivers/spi/spi-omap-100k.c b/drivers/spi/spi-omap-100k.c
+index 2eeb0fe2eed28..022f5bccef815 100644
+--- a/drivers/spi/spi-omap-100k.c
++++ b/drivers/spi/spi-omap-100k.c
+@@ -425,6 +425,7 @@ static int omap1_spi100k_probe(struct platform_device 
*pdev)
+       return status;
+ 
+ err_fck:
++      pm_runtime_disable(&pdev->dev);
+       clk_disable_unprepare(spi100k->fck);
+ err_ick:
+       clk_disable_unprepare(spi100k->ick);
+diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
+index 88b108e1c85fe..bfca5f38d7b78 100644
+--- a/drivers/spi/spi-qup.c
++++ b/drivers/spi/spi-qup.c
+@@ -956,8 +956,10 @@ static int spi_qup_pm_resume_runtime(struct device 
*device)
+               return ret;
+ 
+       ret = clk_prepare_enable(controller->cclk);
+-      if (ret)
++      if (ret) {
++              clk_disable_unprepare(controller->iclk);
+               return ret;
++      }
+ 
+       /* Disable clocks auto gaiting */
+       config = readl_relaxed(controller->base + QUP_CONFIG);
+@@ -1003,14 +1005,25 @@ static int spi_qup_resume(struct device *device)
+               return ret;
+ 
+       ret = clk_prepare_enable(controller->cclk);
+-      if (ret)
++      if (ret) {
++              clk_disable_unprepare(controller->iclk);
+               return ret;
++      }
+ 
+       ret = spi_qup_set_state(controller, QUP_STATE_RESET);
+       if (ret)
+-              return ret;
++              goto disable_clk;
+ 
+-      return spi_master_resume(master);
++      ret = spi_master_resume(master);
++      if (ret)
++              goto disable_clk;
++
++      return 0;
++
++disable_clk:
++      clk_disable_unprepare(controller->cclk);
++      clk_disable_unprepare(controller->iclk);
++      return ret;
+ }
+ #endif /* CONFIG_PM_SLEEP */
+ 
+diff --git a/drivers/thermal/intel_powerclamp.c 
b/drivers/thermal/intel_powerclamp.c
+index afada655f8619..3ad68402ff96d 100644
+--- a/drivers/thermal/intel_powerclamp.c
++++ b/drivers/thermal/intel_powerclamp.c
+@@ -518,9 +518,7 @@ static int start_power_clamp(void)
+       get_online_cpus();
+ 
+       /* prefer BSP */
+-      control_cpu = 0;
+-      if (!cpu_online(control_cpu))
+-              control_cpu = smp_processor_id();
++      control_cpu = cpumask_first(cpu_online_mask);
+ 
+       clamping = true;
+       schedule_delayed_work(&poll_pkg_cstate_work, 0);
+diff --git a/drivers/tty/serial/8250/8250_port.c 
b/drivers/tty/serial/8250/8250_port.c
+index d337a6d022825..b461cf2cc2cae 100644
+--- a/drivers/tty/serial/8250/8250_port.c
++++ b/drivers/tty/serial/8250/8250_port.c
+@@ -3146,8 +3146,13 @@ static void serial8250_console_restore(struct 
uart_8250_port *up)
+       unsigned int baud, quot, frac = 0;
+ 
+       termios.c_cflag = port->cons->cflag;
+-      if (port->state->port.tty && termios.c_cflag == 0)
++      termios.c_ispeed = port->cons->ispeed;
++      termios.c_ospeed = port->cons->ospeed;
++      if (port->state->port.tty && termios.c_cflag == 0) {
+               termios.c_cflag = port->state->port.tty->termios.c_cflag;
++              termios.c_ispeed = port->state->port.tty->termios.c_ispeed;
++              termios.c_ospeed = port->state->port.tty->termios.c_ospeed;
++      }
+ 
+       baud = serial8250_get_baud_rate(port, &termios, NULL);
+       quot = serial8250_get_divisor(up, baud, &frac);
+diff --git a/drivers/tty/serial/jsm/jsm_driver.c 
b/drivers/tty/serial/jsm/jsm_driver.c
+index a119f11bf2f41..3971abb0963c6 100644
+--- a/drivers/tty/serial/jsm/jsm_driver.c
++++ b/drivers/tty/serial/jsm/jsm_driver.c
+@@ -221,7 +221,8 @@ static int jsm_probe_one(struct pci_dev *pdev, const 
struct pci_device_id *ent)
+ 
+               break;
+       default:
+-              return -ENXIO;
++              rc = -ENXIO;
++              goto out_kfree_brd;
+       }
+ 
+       rc = request_irq(brd->irq, brd->bd_ops->intr, IRQF_SHARED, "JSM", brd);
+diff --git a/drivers/tty/serial/xilinx_uartps.c 
b/drivers/tty/serial/xilinx_uartps.c
+index b92700fdfd512..4fb0405691948 100644
+--- a/drivers/tty/serial/xilinx_uartps.c
++++ b/drivers/tty/serial/xilinx_uartps.c
+@@ -363,6 +363,8 @@ static irqreturn_t cdns_uart_isr(int irq, void *dev_id)
+               isrstatus &= ~CDNS_UART_IXR_TXEMPTY;
+       }
+ 
++      isrstatus &= port->read_status_mask;
++      isrstatus &= ~port->ignore_status_mask;
+       /*
+        * Skip RX processing if RX is disabled as RXEMPTY will never be set
+        * as read bytes will not be removed from the FIFO.
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index 9b30936904da7..0850d587683ac 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -703,7 +703,7 @@ struct xhci_stream_info *xhci_alloc_stream_info(struct 
xhci_hcd *xhci,
+                       num_stream_ctxs, &stream_info->ctx_array_dma,
+                       mem_flags);
+       if (!stream_info->stream_ctx_array)
+-              goto cleanup_ctx;
++              goto cleanup_ring_array;
+       memset(stream_info->stream_ctx_array, 0,
+                       sizeof(struct xhci_stream_ctx)*num_stream_ctxs);
+ 
+@@ -764,6 +764,11 @@ cleanup_rings:
+       }
+       xhci_free_command(xhci, stream_info->free_streams_command);
+ cleanup_ctx:
++      xhci_free_stream_ctx(xhci,
++              stream_info->num_stream_ctxs,
++              stream_info->stream_ctx_array,
++              stream_info->ctx_array_dma);
++cleanup_ring_array:
+       kfree(stream_info->stream_rings);
+ cleanup_info:
+       kfree(stream_info);
+diff --git a/drivers/usb/misc/idmouse.c b/drivers/usb/misc/idmouse.c
+index 9cf8a9b163361..51f5cee880b21 100644
+--- a/drivers/usb/misc/idmouse.c
++++ b/drivers/usb/misc/idmouse.c
+@@ -183,10 +183,6 @@ static int idmouse_create_image(struct usb_idmouse *dev)
+               bytes_read += bulk_read;
+       }
+ 
+-      /* reset the device */
+-reset:
+-      ftip_command(dev, FTIP_RELEASE, 0, 0);
+-
+       /* check for valid image */
+       /* right border should be black (0x00) */
+       for (bytes_read = sizeof(HEADER)-1 + WIDTH-1; bytes_read < IMGSIZE; 
bytes_read += WIDTH)
+@@ -198,6 +194,10 @@ reset:
+               if (dev->bulk_in_buffer[bytes_read] != 0xFF)
+                       return -EAGAIN;
+ 
++      /* reset the device */
++reset:
++      ftip_command(dev, FTIP_RELEASE, 0, 0);
++
+       /* should be IMGSIZE == 65040 */
+       dev_dbg(&dev->interface->dev, "read %d bytes fingerprint data\n",
+               bytes_read);
+diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
+index bd1a8dc285f5f..c10b6bbd6b1a0 100644
+--- a/drivers/usb/mon/mon_bin.c
++++ b/drivers/usb/mon/mon_bin.c
+@@ -1265,6 +1265,11 @@ static int mon_bin_mmap(struct file *filp, struct 
vm_area_struct *vma)
+ {
+       /* don't do anything here: "fault" will set up page table entries */
+       vma->vm_ops = &mon_bin_vm_ops;
++
++      if (vma->vm_flags & VM_WRITE)
++              return -EPERM;
++
++      vma->vm_flags &= ~VM_MAYWRITE;
+       vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
+       vma->vm_private_data = filp->private_data;
+       mon_bin_vma_open(vma);
+diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
+index 8eb3a291ca9d8..02ec84ce5ab9c 100644
+--- a/drivers/usb/musb/musb_gadget.c
++++ b/drivers/usb/musb/musb_gadget.c
+@@ -785,6 +785,9 @@ static void rxstate(struct musb *musb, struct musb_request 
*req)
+                       musb_writew(epio, MUSB_RXCSR, csr);
+ 
+ buffer_aint_mapped:
++                      fifo_count = min_t(unsigned int,
++                                      request->length - request->actual,
++                                      (unsigned int)fifo_count);
+                       musb_read_fifo(musb_ep->hw_ep, fifo_count, (u8 *)
+                                       (request->buf + request->actual));
+                       request->actual += fifo_count;
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
+index eceb6f27fec8b..7b854f4e25f5a 100644
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -1340,8 +1340,7 @@ static __u32 get_ftdi_divisor(struct tty_struct *tty,
+               case 38400: div_value = ftdi_sio_b38400; break;
+               case 57600: div_value = ftdi_sio_b57600;  break;
+               case 115200: div_value = ftdi_sio_b115200; break;
+-              } /* baud */
+-              if (div_value == 0) {
++              default:
+                       dev_dbg(dev, "%s - Baudrate (%d) requested is not 
supported\n",
+                               __func__,  baud);
+                       div_value = ftdi_sio_b9600;
+diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
+index d14e0bc93c61b..ad3554de077e4 100644
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -181,6 +181,7 @@ static const struct usb_device_id id_table[] = {
+       {DEVICE_SWI(0x413c, 0x81b3)},   /* Dell Wireless 5809e Gobi(TM) 4G LTE 
Mobile Broadband Card (rev3) */
+       {DEVICE_SWI(0x413c, 0x81b5)},   /* Dell Wireless 5811e QDL */
+       {DEVICE_SWI(0x413c, 0x81b6)},   /* Dell Wireless 5811e QDL */
++      {DEVICE_SWI(0x413c, 0x81c2)},   /* Dell Wireless 5811e */
+       {DEVICE_SWI(0x413c, 0x81cb)},   /* Dell Wireless 5816e QDL */
+       {DEVICE_SWI(0x413c, 0x81cc)},   /* Dell Wireless 5816e */
+       {DEVICE_SWI(0x413c, 0x81cf)},   /* Dell Wireless 5819 */
+diff --git a/drivers/usb/storage/unusual_devs.h 
b/drivers/usb/storage/unusual_devs.h
+index 5a6ca14607113..8c51bb66f16f2 100644
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1294,12 +1294,6 @@ UNUSUAL_DEV( 0x090a, 0x1200, 0x0000, 0x9999,
+               USB_SC_RBC, USB_PR_BULK, NULL,
+               0 ),
+ 
+-UNUSUAL_DEV(0x090c, 0x1000, 0x1100, 0x1100,
+-              "Samsung",
+-              "Flash Drive FIT",
+-              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+-              US_FL_MAX_SECTORS_64),
+-
+ /* aeb */
+ UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff,
+               "Feiya",
+diff --git a/drivers/usb/storage/unusual_uas.h 
b/drivers/usb/storage/unusual_uas.h
+index cdff7dc63f9cd..156e89c6fada4 100644
+--- a/drivers/usb/storage/unusual_uas.h
++++ b/drivers/usb/storage/unusual_uas.h
+@@ -62,6 +62,13 @@ UNUSUAL_DEV(0x059f, 0x1061, 0x0000, 0x9999,
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_IGNORE_UAS),
+ 
++/* Reported-by: Hongling Zeng <[email protected]> */
++UNUSUAL_DEV(0x090c, 0x2000, 0x0000, 0x9999,
++              "Hiksemi",
++              "External HDD",
++              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++              US_FL_IGNORE_UAS),
++
+ /*
+  * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
+  * commands in UAS mode.  Observed with the 1.28 firmware; are there others?
+@@ -142,6 +149,13 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x9999,
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_NO_ATA_1X),
+ 
++/* Reported-by: Hongling Zeng <[email protected]> */
++UNUSUAL_DEV(0x0bda, 0x9210, 0x0000, 0x9999,
++              "Hiksemi",
++              "External HDD",
++              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++              US_FL_IGNORE_UAS),
++
+ /* Reported-by: Benjamin Tissoires <[email protected]> */
+ UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999,
+               "Initio Corporation",
+@@ -184,6 +198,13 @@ UNUSUAL_DEV(0x154b, 0xf00d, 0x0000, 0x9999,
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_NO_ATA_1X),
+ 
++/* Reported-by: Hongling Zeng <[email protected]> */
++UNUSUAL_DEV(0x17ef, 0x3899, 0x0000, 0x9999,
++              "Thinkplus",
++              "External HDD",
++              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++              US_FL_IGNORE_UAS),
++
+ /* Reported-by: Hans de Goede <[email protected]> */
+ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
+               "VIA",
+diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
+index aa387c5188e76..f24eda5a6023e 100644
+--- a/drivers/video/fbdev/smscufx.c
++++ b/drivers/video/fbdev/smscufx.c
+@@ -140,6 +140,8 @@ static int ufx_submit_urb(struct ufx_data *dev, struct urb 
* urb, size_t len);
+ static int ufx_alloc_urb_list(struct ufx_data *dev, int count, size_t size);
+ static void ufx_free_urb_list(struct ufx_data *dev);
+ 
++static DEFINE_MUTEX(disconnect_mutex);
++
+ /* reads a control register */
+ static int ufx_reg_read(struct ufx_data *dev, u32 index, u32 *data)
+ {
+@@ -1073,9 +1075,13 @@ static int ufx_ops_open(struct fb_info *info, int user)
+       if (user == 0 && !console)
+               return -EBUSY;
+ 
++      mutex_lock(&disconnect_mutex);
++
+       /* If the USB device is gone, we don't accept new opens */
+-      if (dev->virtualized)
++      if (dev->virtualized) {
++              mutex_unlock(&disconnect_mutex);
+               return -ENODEV;
++      }
+ 
+       dev->fb_count++;
+ 
+@@ -1100,6 +1106,8 @@ static int ufx_ops_open(struct fb_info *info, int user)
+       pr_debug("open /dev/fb%d user=%d fb_info=%p count=%d",
+               info->node, user, info, dev->fb_count);
+ 
++      mutex_unlock(&disconnect_mutex);
++
+       return 0;
+ }
+ 
+@@ -1761,6 +1769,8 @@ static void ufx_usb_disconnect(struct usb_interface 
*interface)
+ {
+       struct ufx_data *dev;
+ 
++      mutex_lock(&disconnect_mutex);
++
+       dev = usb_get_intfdata(interface);
+ 
+       pr_debug("USB disconnect starting\n");
+@@ -1781,6 +1791,8 @@ static void ufx_usb_disconnect(struct usb_interface 
*interface)
+       kref_put(&dev->kref, ufx_free);
+ 
+       /* consider ufx_data freed */
++
++      mutex_unlock(&disconnect_mutex);
+ }
+ 
+ static struct usb_driver ufx_driver = {
+diff --git a/drivers/video/fbdev/stifb.c b/drivers/video/fbdev/stifb.c
+index 7df4228e25f05..ab828645b091b 100644
+--- a/drivers/video/fbdev/stifb.c
++++ b/drivers/video/fbdev/stifb.c
+@@ -1259,7 +1259,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, 
int bpp_pref)
+       
+       /* limit fbsize to max visible screen size */
+       if (fix->smem_len > yres*fix->line_length)
+-              fix->smem_len = yres*fix->line_length;
++              fix->smem_len = ALIGN(yres*fix->line_length, 4*1024*1024);
+       
+       fix->accel = FB_ACCEL_NONE;
+ 
+diff --git a/fs/ceph/file.c b/fs/ceph/file.c
+index e818344a052cb..e6bf3cd8fae0d 100644
+--- a/fs/ceph/file.c
++++ b/fs/ceph/file.c
+@@ -354,6 +354,11 @@ int ceph_atomic_open(struct inode *dir, struct dentry 
*dentry,
+       err = ceph_init_dentry(dentry);
+       if (err < 0)
+               return err;
++      /*
++       * Do not truncate the file, since atomic_open is called before the
++       * permission check. The caller will do the truncation afterward.
++       */
++      flags &= ~O_TRUNC;
+ 
+       if (flags & O_CREAT) {
+               err = ceph_pre_init_acls(dir, &mode, &acls);
+@@ -384,9 +389,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry 
*dentry,
+        req->r_args.open.mask = cpu_to_le32(mask);
+ 
+       req->r_locked_dir = dir;           /* caller holds dir->i_mutex */
+-      err = ceph_mdsc_do_request(mdsc,
+-                                 (flags & (O_CREAT|O_TRUNC)) ? dir : NULL,
+-                                 req);
++      err = ceph_mdsc_do_request(mdsc, (flags & O_CREAT) ? dir : NULL, req);
+       err = ceph_handle_snapdir(req, dentry, err);
+       if (err)
+               goto out_req;
+diff --git a/fs/dlm/ast.c b/fs/dlm/ast.c
+index f18619bc2e094..37142d15a390c 100644
+--- a/fs/dlm/ast.c
++++ b/fs/dlm/ast.c
+@@ -198,13 +198,13 @@ void dlm_add_cb(struct dlm_lkb *lkb, uint32_t flags, int 
mode, int status,
+       if (!prev_seq) {
+               kref_get(&lkb->lkb_ref);
+ 
++              mutex_lock(&ls->ls_cb_mutex);
+               if (test_bit(LSFL_CB_DELAY, &ls->ls_flags)) {
+-                      mutex_lock(&ls->ls_cb_mutex);
+                       list_add(&lkb->lkb_cb_list, &ls->ls_cb_delay);
+-                      mutex_unlock(&ls->ls_cb_mutex);
+               } else {
+                       queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);
+               }
++              mutex_unlock(&ls->ls_cb_mutex);
+       }
+  out:
+       mutex_unlock(&lkb->lkb_cb_mutex);
+@@ -284,7 +284,9 @@ void dlm_callback_stop(struct dlm_ls *ls)
+ 
+ void dlm_callback_suspend(struct dlm_ls *ls)
+ {
++      mutex_lock(&ls->ls_cb_mutex);
+       set_bit(LSFL_CB_DELAY, &ls->ls_flags);
++      mutex_unlock(&ls->ls_cb_mutex);
+ 
+       if (ls->ls_callback_wq)
+               flush_workqueue(ls->ls_callback_wq);
+diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
+index a1f5982f0b519..415e52102ff0d 100644
+--- a/fs/dlm/lock.c
++++ b/fs/dlm/lock.c
+@@ -2888,24 +2888,24 @@ static int set_unlock_args(uint32_t flags, void 
*astarg, struct dlm_args *args)
+ static int validate_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
+                             struct dlm_args *args)
+ {
+-      int rv = -EINVAL;
++      int rv = -EBUSY;
+ 
+       if (args->flags & DLM_LKF_CONVERT) {
+-              if (lkb->lkb_flags & DLM_IFL_MSTCPY)
++              if (lkb->lkb_status != DLM_LKSTS_GRANTED)
+                       goto out;
+ 
+-              if (args->flags & DLM_LKF_QUECVT &&
+-                  !__quecvt_compat_matrix[lkb->lkb_grmode+1][args->mode+1])
++              if (lkb->lkb_wait_type)
+                       goto out;
+ 
+-              rv = -EBUSY;
+-              if (lkb->lkb_status != DLM_LKSTS_GRANTED)
++              if (is_overlap(lkb))
+                       goto out;
+ 
+-              if (lkb->lkb_wait_type)
++              rv = -EINVAL;
++              if (lkb->lkb_flags & DLM_IFL_MSTCPY)
+                       goto out;
+ 
+-              if (is_overlap(lkb))
++              if (args->flags & DLM_LKF_QUECVT &&
++                  !__quecvt_compat_matrix[lkb->lkb_grmode+1][args->mode+1])
+                       goto out;
+       }
+ 
+diff --git a/fs/ext4/file.c b/fs/ext4/file.c
+index 59d3ea7094a0b..8d056f105c26d 100644
+--- a/fs/ext4/file.c
++++ b/fs/ext4/file.c
+@@ -538,6 +538,12 @@ static loff_t ext4_seek_data(struct file *file, loff_t 
offset, loff_t maxsize)
+               inode_unlock(inode);
+               return -ENXIO;
+       }
++      /*
++       * Make sure inline data cannot be created anymore since we are going
++       * to allocate blocks for DIO. We know the inode does not have any
++       * inline data now because ext4_dio_supported() checked for that.
++       */
++      ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
+ 
+       blkbits = inode->i_sb->s_blocksize_bits;
+       start = offset >> blkbits;
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index b32fc7e45ba13..f1bcf89e1ae6c 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -1215,6 +1215,13 @@ retry_grab:
+       page = grab_cache_page_write_begin(mapping, index, flags);
+       if (!page)
+               return -ENOMEM;
++      /*
++       * The same as page allocation, we prealloc buffer heads before
++       * starting the handle.
++       */
++      if (!page_has_buffers(page))
++              create_empty_buffers(page, inode->i_sb->s_blocksize, 0);
++
+       unlock_page(page);
+ 
+ retry_journal:
+diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
+index e4f02572f69df..b57ad93a0ba60 100644
+--- a/fs/ext4/resize.c
++++ b/fs/ext4/resize.c
+@@ -2052,7 +2052,7 @@ retry:
+                       goto out;
+       }
+ 
+-      if (ext4_blocks_count(es) == n_blocks_count)
++      if (ext4_blocks_count(es) == n_blocks_count && n_blocks_count_retry == 
0)
+               goto out;
+ 
+       err = ext4_alloc_flex_bg_array(sb, n_group + 1);
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index c50ba683a570a..0dea697d8df62 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -2911,6 +2911,7 @@ static int ext4_lazyinit_thread(void *arg)
+       unsigned long next_wakeup, cur;
+ 
+       BUG_ON(NULL == eli);
++      set_freezable();
+ 
+ cont_thread:
+       while (true) {
+@@ -5381,7 +5382,7 @@ static int ext4_write_info(struct super_block *sb, int 
type)
+       handle_t *handle;
+ 
+       /* Data block + inode block */
+-      handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2);
++      handle = ext4_journal_start_sb(sb, EXT4_HT_QUOTA, 2);
+       if (IS_ERR(handle))
+               return PTR_ERR(handle);
+       ret = dquot_commit_info(sb, type);
+diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
+index d7b8c8b5fc390..3f872145a9889 100644
+--- a/fs/f2fs/extent_cache.c
++++ b/fs/f2fs/extent_cache.c
+@@ -650,9 +650,8 @@ void f2fs_drop_extent_tree(struct inode *inode)
+       if (!f2fs_may_extent_tree(inode))
+               return;
+ 
+-      set_inode_flag(inode, FI_NO_EXTENT);
+-
+       write_lock(&et->lock);
++      set_inode_flag(inode, FI_NO_EXTENT);
+       __free_extent_tree(sbi, et);
+       __drop_largest_extent(inode, 0, UINT_MAX);
+       write_unlock(&et->lock);
+diff --git a/fs/inode.c b/fs/inode.c
+index 0d993ce7a940c..966fd9dd6dfad 100644
+--- a/fs/inode.c
++++ b/fs/inode.c
+@@ -164,8 +164,6 @@ int inode_init_always(struct super_block *sb, struct inode 
*inode)
+       inode->i_wb_frn_history = 0;
+ #endif
+ 
+-      if (security_inode_alloc(inode))
+-              goto out;
+       spin_lock_init(&inode->i_lock);
+       lockdep_set_class(&inode->i_lock, &sb->s_type->i_lock_key);
+ 
+@@ -192,11 +190,12 @@ int inode_init_always(struct super_block *sb, struct 
inode *inode)
+       inode->i_fsnotify_mask = 0;
+ #endif
+       inode->i_flctx = NULL;
++
++      if (unlikely(security_inode_alloc(inode)))
++              return -ENOMEM;
+       this_cpu_inc(nr_inodes);
+ 
+       return 0;
+-out:
+-      return -ENOMEM;
+ }
+ EXPORT_SYMBOL(inode_init_always);
+ 
+diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
+index 7ffe71a8dfb9b..3c9cd12dad912 100644
+--- a/fs/nilfs2/inode.c
++++ b/fs/nilfs2/inode.c
+@@ -344,6 +344,7 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t 
mode)
+       struct inode *inode;
+       struct nilfs_inode_info *ii;
+       struct nilfs_root *root;
++      struct buffer_head *bh;
+       int err = -ENOMEM;
+       ino_t ino;
+ 
+@@ -359,11 +360,26 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t 
mode)
+       ii->i_state = BIT(NILFS_I_NEW);
+       ii->i_root = root;
+ 
+-      err = nilfs_ifile_create_inode(root->ifile, &ino, &ii->i_bh);
++      err = nilfs_ifile_create_inode(root->ifile, &ino, &bh);
+       if (unlikely(err))
+               goto failed_ifile_create_inode;
+       /* reference count of i_bh inherits from nilfs_mdt_read_block() */
+ 
++      if (unlikely(ino < NILFS_USER_INO)) {
++              nilfs_msg(sb, KERN_WARNING,
++                        "inode bitmap is inconsistent for reserved inodes");
++              do {
++                      brelse(bh);
++                      err = nilfs_ifile_create_inode(root->ifile, &ino, &bh);
++                      if (unlikely(err))
++                              goto failed_ifile_create_inode;
++              } while (ino < NILFS_USER_INO);
++
++              nilfs_msg(sb, KERN_INFO,
++                        "repaired inode bitmap for reserved inodes");
++      }
++      ii->i_bh = bh;
++
+       atomic64_inc(&root->inodes_count);
+       inode_init_owner(inode, dir, mode);
+       inode->i_ino = ino;
+@@ -455,6 +471,8 @@ int nilfs_read_inode_common(struct inode *inode,
+       inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
+       inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec);
+       inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
++      if (nilfs_is_metadata_file_inode(inode) && !S_ISREG(inode->i_mode))
++              return -EIO; /* this inode is for metadata and corrupted */
+       if (inode->i_nlink == 0)
+               return -ESTALE; /* this inode is deleted */
+ 
+diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
+index a92af0ed0e28f..450bfdee513bd 100644
+--- a/fs/nilfs2/segment.c
++++ b/fs/nilfs2/segment.c
+@@ -888,9 +888,11 @@ static int nilfs_segctor_create_checkpoint(struct 
nilfs_sc_info *sci)
+               nilfs_mdt_mark_dirty(nilfs->ns_cpfile);
+               nilfs_cpfile_put_checkpoint(
+                       nilfs->ns_cpfile, nilfs->ns_cno, bh_cp);
+-      } else
+-              WARN_ON(err == -EINVAL || err == -ENOENT);
+-
++      } else if (err == -EINVAL || err == -ENOENT) {
++              nilfs_error(sci->sc_super,
++                          "checkpoint creation failed due to metadata 
corruption.");
++              err = -EIO;
++      }
+       return err;
+ }
+ 
+@@ -904,7 +906,11 @@ static int nilfs_segctor_fill_in_checkpoint(struct 
nilfs_sc_info *sci)
+       err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 0,
+                                         &raw_cp, &bh_cp);
+       if (unlikely(err)) {
+-              WARN_ON(err == -EINVAL || err == -ENOENT);
++              if (err == -EINVAL || err == -ENOENT) {
++                      nilfs_error(sci->sc_super,
++                                  "checkpoint finalization failed due to 
metadata corruption.");
++                      err = -EIO;
++              }
+               goto failed_ibh;
+       }
+       raw_cp->cp_snapshot_list.ssl_next = 0;
+@@ -2796,10 +2802,9 @@ int nilfs_attach_log_writer(struct super_block *sb, 
struct nilfs_root *root)
+       inode_attach_wb(nilfs->ns_bdev->bd_inode, NULL);
+ 
+       err = nilfs_segctor_start_thread(nilfs->ns_writer);
+-      if (err) {
+-              kfree(nilfs->ns_writer);
+-              nilfs->ns_writer = NULL;
+-      }
++      if (unlikely(err))
++              nilfs_detach_log_writer(sb);
++
+       return err;
+ }
+ 
+diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
+index ecb49870a680c..1f3ae09fe00b5 100644
+--- a/fs/ntfs/super.c
++++ b/fs/ntfs/super.c
+@@ -2108,7 +2108,8 @@ get_ctx_vol_failed:
+       // TODO: Initialize security.
+       /* Get the extended system files' directory inode. */
+       vol->extend_ino = ntfs_iget(sb, FILE_Extend);
+-      if (IS_ERR(vol->extend_ino) || is_bad_inode(vol->extend_ino)) {
++      if (IS_ERR(vol->extend_ino) || is_bad_inode(vol->extend_ino) ||
++          !S_ISDIR(vol->extend_ino->i_mode)) {
+               if (!IS_ERR(vol->extend_ino))
+                       iput(vol->extend_ino);
+               ntfs_error(sb, "Failed to load $Extend.");
+diff --git a/fs/quota/quota_tree.c b/fs/quota/quota_tree.c
+index 8c7705b50e5dd..39afa984570ac 100644
+--- a/fs/quota/quota_tree.c
++++ b/fs/quota/quota_tree.c
+@@ -79,6 +79,35 @@ static ssize_t write_blk(struct qtree_mem_dqinfo *info, 
uint blk, char *buf)
+       return ret;
+ }
+ 
++static inline int do_check_range(struct super_block *sb, const char *val_name,
++                               uint val, uint min_val, uint max_val)
++{
++      if (val < min_val || val > max_val) {
++              quota_error(sb, "Getting %s %u out of range %u-%u",
++                          val_name, val, min_val, max_val);
++              return -EUCLEAN;
++      }
++
++      return 0;
++}
++
++static int check_dquot_block_header(struct qtree_mem_dqinfo *info,
++                                  struct qt_disk_dqdbheader *dh)
++{
++      int err = 0;
++
++      err = do_check_range(info->dqi_sb, "dqdh_next_free",
++                           le32_to_cpu(dh->dqdh_next_free), 0,
++                           info->dqi_blocks - 1);
++      if (err)
++              return err;
++      err = do_check_range(info->dqi_sb, "dqdh_prev_free",
++                           le32_to_cpu(dh->dqdh_prev_free), 0,
++                           info->dqi_blocks - 1);
++
++      return err;
++}
++
+ /* Remove empty block from list and return it */
+ static int get_free_dqblk(struct qtree_mem_dqinfo *info)
+ {
+@@ -93,6 +122,9 @@ static int get_free_dqblk(struct qtree_mem_dqinfo *info)
+               ret = read_blk(info, blk, buf);
+               if (ret < 0)
+                       goto out_buf;
++              ret = check_dquot_block_header(info, dh);
++              if (ret)
++                      goto out_buf;
+               info->dqi_free_blk = le32_to_cpu(dh->dqdh_next_free);
+       }
+       else {
+@@ -240,6 +272,9 @@ static uint find_free_dqentry(struct qtree_mem_dqinfo 
*info,
+               *err = read_blk(info, blk, buf);
+               if (*err < 0)
+                       goto out_buf;
++              *err = check_dquot_block_header(info, dh);
++              if (*err)
++                      goto out_buf;
+       } else {
+               blk = get_free_dqblk(info);
+               if ((int)blk < 0) {
+@@ -432,6 +467,9 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, 
struct dquot *dquot,
+               goto out_buf;
+       }
+       dh = (struct qt_disk_dqdbheader *)buf;
++      ret = check_dquot_block_header(info, dh);
++      if (ret)
++              goto out_buf;
+       le16_add_cpu(&dh->dqdh_entries, -1);
+       if (!le16_to_cpu(dh->dqdh_entries)) {   /* Block got free? */
+               ret = remove_free_dqentry(info, buf, blk);
+diff --git a/include/linux/ata.h b/include/linux/ata.h
+index fdb180367ba13..33bee000ddab2 100644
+--- a/include/linux/ata.h
++++ b/include/linux/ata.h
+@@ -572,6 +572,18 @@ struct ata_bmdma_prd {
+       ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
+         ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
+        ((id)[ATA_ID_FEATURE_SUPP] & (1 << 2)))
++#define ata_id_has_devslp(id) \
++      ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
++        ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
++       ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8)))
++#define ata_id_has_ncq_autosense(id) \
++      ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
++        ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
++       ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7)))
++#define ata_id_has_dipm(id)   \
++      ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
++        ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
++       ((id)[ATA_ID_FEATURE_SUPP] & (1 << 3)))
+ #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10))
+ #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11))
+ #define ata_id_u32(id,n)      \
+@@ -584,9 +596,6 @@ struct ata_bmdma_prd {
+ 
+ #define ata_id_cdb_intr(id)   (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
+ #define ata_id_has_da(id)     ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))
+-#define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8))
+-#define ata_id_has_ncq_autosense(id) \
+-                              ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7))
+ 
+ static inline bool ata_id_has_hipm(const u16 *id)
+ {
+@@ -598,17 +607,6 @@ static inline bool ata_id_has_hipm(const u16 *id)
+       return val & (1 << 9);
+ }
+ 
+-static inline bool ata_id_has_dipm(const u16 *id)
+-{
+-      u16 val = id[ATA_ID_FEATURE_SUPP];
+-
+-      if (val == 0 || val == 0xffff)
+-              return false;
+-
+-      return val & (1 << 3);
+-}
+-
+-
+ static inline bool ata_id_has_fua(const u16 *id)
+ {
+       if ((id[ATA_ID_CFSSE] & 0xC000) != 0x4000)
+@@ -777,16 +775,21 @@ static inline bool ata_id_has_read_log_dma_ext(const u16 
*id)
+ 
+ static inline bool ata_id_has_sense_reporting(const u16 *id)
+ {
+-      if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
++      if (!(id[ATA_ID_CFS_ENABLE_2] & BIT(15)))
++              return false;
++      if ((id[ATA_ID_COMMAND_SET_3] & (BIT(15) | BIT(14))) != BIT(14))
+               return false;
+-      return id[ATA_ID_COMMAND_SET_3] & (1 << 6);
++      return id[ATA_ID_COMMAND_SET_3] & BIT(6);
+ }
+ 
+ static inline bool ata_id_sense_reporting_enabled(const u16 *id)
+ {
+-      if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
++      if (!ata_id_has_sense_reporting(id))
++              return false;
++      /* ata_id_has_sense_reporting() == true, word 86 must have bit 15 set */
++      if ((id[ATA_ID_COMMAND_SET_4] & (BIT(15) | BIT(14))) != BIT(14))
+               return false;
+-      return id[ATA_ID_COMMAND_SET_4] & (1 << 6);
++      return id[ATA_ID_COMMAND_SET_4] & BIT(6);
+ }
+ 
+ /**
+diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
+index 546d68057e3b7..d8981b34d1426 100644
+--- a/include/linux/dynamic_debug.h
++++ b/include/linux/dynamic_debug.h
+@@ -167,7 +167,7 @@ static inline int ddebug_remove_module(const char *mod)
+ static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
+                                               const char *modname)
+ {
+-      if (strstr(param, "dyndbg")) {
++      if (!strcmp(param, "dyndbg")) {
+               /* avoid pr_warn(), which wants pr_fmt() fully defined */
+               printk(KERN_WARNING "dyndbg param is supported only in "
+                       "CONFIG_DYNAMIC_DEBUG builds\n");
+diff --git a/include/linux/tcp.h b/include/linux/tcp.h
+index 53eb9fecd2634..e3e59a0ee16fc 100644
+--- a/include/linux/tcp.h
++++ b/include/linux/tcp.h
+@@ -249,7 +249,7 @@ struct tcp_sock {
+       u32     packets_out;    /* Packets which are "in flight"        */
+       u32     retrans_out;    /* Retransmitted packets out            */
+       u32     max_packets_out;  /* max packets_out in last window */
+-      u32     max_packets_seq;  /* right edge of max_packets_out flight */
++      u32     cwnd_usage_seq;  /* right edge of cwnd usage tracking flight */
+ 
+       u16     urg_data;       /* Saved octet of OOB data and control flags */
+       u8      ecn_flags;      /* ECN status bits.                     */
+diff --git a/include/net/ieee802154_netdev.h b/include/net/ieee802154_netdev.h
+index c4b31601cd536..588c86f677960 100644
+--- a/include/net/ieee802154_netdev.h
++++ b/include/net/ieee802154_netdev.h
+@@ -23,6 +23,22 @@
+ #ifndef IEEE802154_NETDEVICE_H
+ #define IEEE802154_NETDEVICE_H
+ 
++#define IEEE802154_REQUIRED_SIZE(struct_type, member) \
++      (offsetof(typeof(struct_type), member) + \
++      sizeof(((typeof(struct_type) *)(NULL))->member))
++
++#define IEEE802154_ADDR_OFFSET \
++      offsetof(typeof(struct sockaddr_ieee802154), addr)
++
++#define IEEE802154_MIN_NAMELEN (IEEE802154_ADDR_OFFSET + \
++      IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, addr_type))
++
++#define IEEE802154_NAMELEN_SHORT (IEEE802154_ADDR_OFFSET + \
++      IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, short_addr))
++
++#define IEEE802154_NAMELEN_LONG (IEEE802154_ADDR_OFFSET + \
++      IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, hwaddr))
++
+ #include <net/af_ieee802154.h>
+ #include <linux/netdevice.h>
+ #include <linux/skbuff.h>
+@@ -173,6 +189,33 @@ static inline void ieee802154_devaddr_to_raw(void *raw, 
__le64 addr)
+       memcpy(raw, &temp, IEEE802154_ADDR_LEN);
+ }
+ 
++static inline int
++ieee802154_sockaddr_check_size(struct sockaddr_ieee802154 *daddr, int len)
++{
++      struct ieee802154_addr_sa *sa;
++      int ret = 0;
++
++      sa = &daddr->addr;
++      if (len < IEEE802154_MIN_NAMELEN)
++              return -EINVAL;
++      switch (sa->addr_type) {
++      case IEEE802154_ADDR_NONE:
++              break;
++      case IEEE802154_ADDR_SHORT:
++              if (len < IEEE802154_NAMELEN_SHORT)
++                      ret = -EINVAL;
++              break;
++      case IEEE802154_ADDR_LONG:
++              if (len < IEEE802154_NAMELEN_LONG)
++                      ret = -EINVAL;
++              break;
++      default:
++              ret = -EINVAL;
++              break;
++      }
++      return ret;
++}
++
+ static inline void ieee802154_addr_from_sa(struct ieee802154_addr *a,
+                                          const struct ieee802154_addr_sa *sa)
+ {
+diff --git a/include/net/sock.h b/include/net/sock.h
+index 78c292f15ffc1..efb7c0ff30d8a 100644
+--- a/include/net/sock.h
++++ b/include/net/sock.h
+@@ -378,7 +378,7 @@ struct sock {
+ #ifdef CONFIG_XFRM
+       struct xfrm_policy __rcu *sk_policy[2];
+ #endif
+-      struct dst_entry        *sk_rx_dst;
++      struct dst_entry __rcu  *sk_rx_dst;
+       struct dst_entry __rcu  *sk_dst_cache;
+       /* Note: 32bit hole on 64bit arches */
+       atomic_t                sk_wmem_alloc;
+diff --git a/include/net/tcp.h b/include/net/tcp.h
+index 164dc4f04d0f1..80ef46dd49309 100644
+--- a/include/net/tcp.h
++++ b/include/net/tcp.h
+@@ -1155,11 +1155,14 @@ static inline bool tcp_is_cwnd_limited(const struct 
sock *sk)
+ {
+       const struct tcp_sock *tp = tcp_sk(sk);
+ 
++      if (tp->is_cwnd_limited)
++              return true;
++
+       /* If in slow start, ensure cwnd grows to twice what was ACKed. */
+       if (tcp_in_slow_start(tp))
+               return tp->snd_cwnd < 2 * tp->max_packets_out;
+ 
+-      return tp->is_cwnd_limited;
++      return false;
+ }
+ 
+ /* Something is really bad, we could not queue an additional packet,
+diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
+index 9fc1aecfc8136..e7489fba2918b 100644
+--- a/include/scsi/scsi_cmnd.h
++++ b/include/scsi/scsi_cmnd.h
+@@ -214,7 +214,7 @@ static inline struct scsi_data_buffer *scsi_out(struct 
scsi_cmnd *cmd)
+ }
+ 
+ static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd,
+-                                         void *buf, int buflen)
++                                         const void *buf, int buflen)
+ {
+       return sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
+                                  buf, buflen);
+diff --git a/kernel/gcov/gcc_4_7.c b/kernel/gcov/gcc_4_7.c
+index 6d5ef6220afe7..a221c118f3817 100644
+--- a/kernel/gcov/gcc_4_7.c
++++ b/kernel/gcov/gcc_4_7.c
+@@ -32,6 +32,13 @@
+ 
+ #define GCOV_TAG_FUNCTION_LENGTH      3
+ 
++/* Since GCC 12.1 sizes are in BYTES and not in WORDS (4B). */
++#if (__GNUC__ >= 12)
++#define GCOV_UNIT_SIZE                                4
++#else
++#define GCOV_UNIT_SIZE                                1
++#endif
++
+ static struct gcov_info *gcov_info_head;
+ 
+ /**
+@@ -438,12 +445,18 @@ static size_t convert_to_gcda(char *buffer, struct 
gcov_info *info)
+       pos += store_gcov_u32(buffer, pos, info->version);
+       pos += store_gcov_u32(buffer, pos, info->stamp);
+ 
++#if (__GNUC__ >= 12)
++      /* Use zero as checksum of the compilation unit. */
++      pos += store_gcov_u32(buffer, pos, 0);
++#endif
++
+       for (fi_idx = 0; fi_idx < info->n_functions; fi_idx++) {
+               fi_ptr = info->functions[fi_idx];
+ 
+               /* Function record. */
+               pos += store_gcov_u32(buffer, pos, GCOV_TAG_FUNCTION);
+-              pos += store_gcov_u32(buffer, pos, GCOV_TAG_FUNCTION_LENGTH);
++              pos += store_gcov_u32(buffer, pos,
++                      GCOV_TAG_FUNCTION_LENGTH * GCOV_UNIT_SIZE);
+               pos += store_gcov_u32(buffer, pos, fi_ptr->ident);
+               pos += store_gcov_u32(buffer, pos, fi_ptr->lineno_checksum);
+               pos += store_gcov_u32(buffer, pos, fi_ptr->cfg_checksum);
+@@ -457,7 +470,8 @@ static size_t convert_to_gcda(char *buffer, struct 
gcov_info *info)
+                       /* Counter record. */
+                       pos += store_gcov_u32(buffer, pos,
+                                             GCOV_TAG_FOR_COUNTER(ct_idx));
+-                      pos += store_gcov_u32(buffer, pos, ci_ptr->num * 2);
++                      pos += store_gcov_u32(buffer, pos,
++                              ci_ptr->num * 2 * GCOV_UNIT_SIZE);
+ 
+                       for (cv_idx = 0; cv_idx < ci_ptr->num; cv_idx++) {
+                               pos += store_gcov_u64(buffer, pos,
+diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
+index c30a70ab0e7ae..8199b15b5cd37 100644
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -513,8 +513,9 @@ static void rb_wake_up_waiters(struct irq_work *work)
+       struct rb_irq_work *rbwork = container_of(work, struct rb_irq_work, 
work);
+ 
+       wake_up_all(&rbwork->waiters);
+-      if (rbwork->wakeup_full) {
++      if (rbwork->full_waiters_pending || rbwork->wakeup_full) {
+               rbwork->wakeup_full = false;
++              rbwork->full_waiters_pending = false;
+               wake_up_all(&rbwork->full_waiters);
+       }
+ }
+@@ -2121,6 +2122,9 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
+               /* Mark the rest of the page with padding */
+               rb_event_set_padding(event);
+ 
++              /* Make sure the padding is visible before the write update */
++              smp_wmb();
++
+               /* Set the write back to the previous setting */
+               local_sub(length, &tail_page->write);
+               return;
+@@ -2132,6 +2136,9 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
+       /* time delta must be non zero */
+       event->time_delta = 1;
+ 
++      /* Make sure the padding is visible before the tail_page->write update 
*/
++      smp_wmb();
++
+       /* Set write to end of buffer */
+       length = (tail + length) - BUF_PAGE_SIZE;
+       local_sub(length, &tail_page->write);
+@@ -3723,6 +3730,33 @@ rb_get_reader_page(struct ring_buffer_per_cpu 
*cpu_buffer)
+       arch_spin_unlock(&cpu_buffer->lock);
+       local_irq_restore(flags);
+ 
++      /*
++       * The writer has preempt disable, wait for it. But not forever
++       * Although, 1 second is pretty much "forever"
++       */
++#define USECS_WAIT    1000000
++        for (nr_loops = 0; nr_loops < USECS_WAIT; nr_loops++) {
++              /* If the write is past the end of page, a writer is still 
updating it */
++              if (likely(!reader || rb_page_write(reader) <= BUF_PAGE_SIZE))
++                      break;
++
++              udelay(1);
++
++              /* Get the latest version of the reader write value */
++              smp_rmb();
++      }
++
++      /* The writer is not moving forward? Something is wrong */
++      if (RB_WARN_ON(cpu_buffer, nr_loops == USECS_WAIT))
++              reader = NULL;
++
++      /*
++       * Make sure we see any padding after the write update
++       * (see rb_reset_tail())
++       */
++      smp_rmb();
++
++
+       return reader;
+ }
+ 
+@@ -4623,7 +4657,15 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
+               unsigned int pos = 0;
+               unsigned int size;
+ 
+-              if (full)
++              /*
++               * If a full page is expected, this can still be returned
++               * if there's been a previous partial read and the
++               * rest of the page can be read and the commit page is off
++               * the reader page.
++               */
++              if (full &&
++                  (!read || (len < (commit - read)) ||
++                   cpu_buffer->reader_page == cpu_buffer->commit_page))
+                       goto out_unlock;
+ 
+               if (len > (commit - read))
+diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
+index 91c451e0f4741..01591a7b151f2 100644
+--- a/lib/dynamic_debug.c
++++ b/lib/dynamic_debug.c
+@@ -327,10 +327,6 @@ static int ddebug_parse_query(char *words[], int nwords,
+       }
+       memset(query, 0, sizeof(*query));
+ 
+-      if (modname)
+-              /* support $modname.dyndbg=<multiple queries> */
+-              query->module = modname;
+-
+       for (i = 0; i < nwords; i += 2) {
+               if (!strcmp(words[i], "func")) {
+                       rc = check_set(&query->function, words[i+1], "func");
+@@ -379,6 +375,13 @@ static int ddebug_parse_query(char *words[], int nwords,
+               if (rc)
+                       return rc;
+       }
++      if (!query->module && modname)
++              /*
++               * support $modname.dyndbg=<multiple queries>, when
++               * not given in the query itself
++               */
++              query->module = modname;
++
+       vpr_info_dq(query, "parsed");
+       return 0;
+ }
+diff --git a/mm/page_alloc.c b/mm/page_alloc.c
+index a6e682569e5b9..6bd523d2d79b1 100644
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -3987,6 +3987,18 @@ refill:
+               /* reset page count bias and offset to start of new frag */
+               nc->pagecnt_bias = PAGE_FRAG_CACHE_MAX_SIZE + 1;
+               offset = size - fragsz;
++              if (unlikely(offset < 0)) {
++                      /*
++                       * The caller is trying to allocate a fragment
++                       * with fragsz > PAGE_SIZE but the cache isn't big
++                       * enough to satisfy the request, this may
++                       * happen in low memory conditions.
++                       * We don't release the cache page because
++                       * it could make memory pressure worse
++                       * so we simply return NULL here.
++                       */
++                      return NULL;
++              }
+       }
+ 
+       nc->pagecnt_bias--;
+diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
+index cb7d06bb0243c..37ec675b7bee2 100644
+--- a/net/bluetooth/hci_sysfs.c
++++ b/net/bluetooth/hci_sysfs.c
+@@ -47,6 +47,9 @@ void hci_conn_add_sysfs(struct hci_conn *conn)
+ 
+       BT_DBG("conn %p", conn);
+ 
++      if (device_is_registered(&conn->dev))
++              return;
++
+       dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle);
+ 
+       if (device_add(&conn->dev) < 0) {
+diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
+index 474c12d4f8bae..ec04a7ea55377 100644
+--- a/net/bluetooth/l2cap_core.c
++++ b/net/bluetooth/l2cap_core.c
+@@ -63,6 +63,9 @@ static void l2cap_send_disconn_req(struct l2cap_chan *chan, 
int err);
+ 
+ static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
+                    struct sk_buff_head *skbs, u8 event);
++static void l2cap_retrans_timeout(struct work_struct *work);
++static void l2cap_monitor_timeout(struct work_struct *work);
++static void l2cap_ack_timeout(struct work_struct *work);
+ 
+ static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)
+ {
+@@ -470,6 +473,9 @@ struct l2cap_chan *l2cap_chan_create(void)
+       write_unlock(&chan_list_lock);
+ 
+       INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
++      INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
++      INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
++      INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
+ 
+       chan->state = BT_OPEN;
+ 
+@@ -3144,10 +3150,6 @@ int l2cap_ertm_init(struct l2cap_chan *chan)
+       chan->rx_state = L2CAP_RX_STATE_RECV;
+       chan->tx_state = L2CAP_TX_STATE_XMIT;
+ 
+-      INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
+-      INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
+-      INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
+-
+       skb_queue_head_init(&chan->srej_q);
+ 
+       err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
+@@ -4037,6 +4039,12 @@ static int l2cap_connect_create_rsp(struct l2cap_conn 
*conn,
+               }
+       }
+ 
++      chan = l2cap_chan_hold_unless_zero(chan);
++      if (!chan) {
++              err = -EBADSLT;
++              goto unlock;
++      }
++
+       err = 0;
+ 
+       l2cap_chan_lock(chan);
+@@ -4066,6 +4074,7 @@ static int l2cap_connect_create_rsp(struct l2cap_conn 
*conn,
+       }
+ 
+       l2cap_chan_unlock(chan);
++      l2cap_chan_put(chan);
+ 
+ unlock:
+       mutex_unlock(&conn->chan_lock);
+diff --git a/net/can/bcm.c b/net/can/bcm.c
+index bfb5072234687..ece04ad503482 100644
+--- a/net/can/bcm.c
++++ b/net/can/bcm.c
+@@ -285,6 +285,7 @@ static void bcm_can_tx(struct bcm_op *op)
+       struct sk_buff *skb;
+       struct net_device *dev;
+       struct canfd_frame *cf = op->frames + op->cfsiz * op->currframe;
++      int err;
+ 
+       /* no target device? => exit */
+       if (!op->ifindex)
+@@ -309,11 +310,11 @@ static void bcm_can_tx(struct bcm_op *op)
+       /* send with loopback */
+       skb->dev = dev;
+       can_skb_set_owner(skb, op->sk);
+-      can_send(skb, 1);
++      err = can_send(skb, 1);
++      if (!err)
++              op->frames_abs++;
+ 
+-      /* update statistics */
+       op->currframe++;
+-      op->frames_abs++;
+ 
+       /* reached last frame? */
+       if (op->currframe >= op->nframes)
+diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
+index 6383627b783e0..aadd445ea88ac 100644
+--- a/net/ieee802154/socket.c
++++ b/net/ieee802154/socket.c
+@@ -212,8 +212,9 @@ static int raw_bind(struct sock *sk, struct sockaddr 
*_uaddr, int len)
+       int err = 0;
+       struct net_device *dev = NULL;
+ 
+-      if (len < sizeof(*uaddr))
+-              return -EINVAL;
++      err = ieee802154_sockaddr_check_size(uaddr, len);
++      if (err < 0)
++              return err;
+ 
+       uaddr = (struct sockaddr_ieee802154 *)_uaddr;
+       if (uaddr->family != AF_IEEE802154)
+@@ -283,6 +284,10 @@ static int raw_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t size)
+               err = -EMSGSIZE;
+               goto out_dev;
+       }
++      if (!size) {
++              err = 0;
++              goto out_dev;
++      }
+ 
+       hlen = LL_RESERVED_SPACE(dev);
+       tlen = dev->needed_tailroom;
+@@ -507,7 +512,8 @@ static int dgram_bind(struct sock *sk, struct sockaddr 
*uaddr, int len)
+ 
+       ro->bound = 0;
+ 
+-      if (len < sizeof(*addr))
++      err = ieee802154_sockaddr_check_size(addr, len);
++      if (err < 0)
+               goto out;
+ 
+       if (addr->family != AF_IEEE802154)
+@@ -578,8 +584,9 @@ static int dgram_connect(struct sock *sk, struct sockaddr 
*uaddr,
+       struct dgram_sock *ro = dgram_sk(sk);
+       int err = 0;
+ 
+-      if (len < sizeof(*addr))
+-              return -EINVAL;
++      err = ieee802154_sockaddr_check_size(addr, len);
++      if (err < 0)
++              return err;
+ 
+       if (addr->family != AF_IEEE802154)
+               return -EINVAL;
+@@ -618,6 +625,7 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t size)
+       struct ieee802154_mac_cb *cb;
+       struct dgram_sock *ro = dgram_sk(sk);
+       struct ieee802154_addr dst_addr;
++      DECLARE_SOCKADDR(struct sockaddr_ieee802154*, daddr, msg->msg_name);
+       int hlen, tlen;
+       int err;
+ 
+@@ -626,10 +634,20 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t size)
+               return -EOPNOTSUPP;
+       }
+ 
+-      if (!ro->connected && !msg->msg_name)
+-              return -EDESTADDRREQ;
+-      else if (ro->connected && msg->msg_name)
+-              return -EISCONN;
++      if (msg->msg_name) {
++              if (ro->connected)
++                      return -EISCONN;
++              if (msg->msg_namelen < IEEE802154_MIN_NAMELEN)
++                      return -EINVAL;
++              err = ieee802154_sockaddr_check_size(daddr, msg->msg_namelen);
++              if (err < 0)
++                      return err;
++              ieee802154_addr_from_sa(&dst_addr, &daddr->addr);
++      } else {
++              if (!ro->connected)
++                      return -EDESTADDRREQ;
++              dst_addr = ro->dst_addr;
++      }
+ 
+       if (!ro->bound)
+               dev = dev_getfirstbyhwtype(sock_net(sk), ARPHRD_IEEE802154);
+@@ -665,16 +683,6 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t size)
+       cb = mac_cb_init(skb);
+       cb->type = IEEE802154_FC_TYPE_DATA;
+       cb->ackreq = ro->want_ack;
+-
+-      if (msg->msg_name) {
+-              DECLARE_SOCKADDR(struct sockaddr_ieee802154*,
+-                               daddr, msg->msg_name);
+-
+-              ieee802154_addr_from_sa(&dst_addr, &daddr->addr);
+-      } else {
+-              dst_addr = ro->dst_addr;
+-      }
+-
+       cb->secen = ro->secen;
+       cb->secen_override = ro->secen_override;
+       cb->seclevel = ro->seclevel;
+diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
+index 970a498c11666..c897d3fd457e6 100644
+--- a/net/ipv4/af_inet.c
++++ b/net/ipv4/af_inet.c
+@@ -156,7 +156,7 @@ void inet_sock_destruct(struct sock *sk)
+ 
+       kfree(rcu_dereference_protected(inet->inet_opt, 1));
+       dst_release(rcu_dereference_check(sk->sk_dst_cache, 1));
+-      dst_release(sk->sk_rx_dst);
++      dst_release(rcu_dereference_protected(sk->sk_rx_dst, 1));
+       sk_refcnt_debug_dec(sk);
+ }
+ EXPORT_SYMBOL(inet_sock_destruct);
+diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
+index 6dfb964e1ad8f..29b45910fafe1 100644
+--- a/net/ipv4/tcp.c
++++ b/net/ipv4/tcp.c
+@@ -2299,6 +2299,8 @@ int tcp_disconnect(struct sock *sk, int flags)
+       tp->packets_out = 0;
+       tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
+       tp->snd_cwnd_cnt = 0;
++      tp->is_cwnd_limited = 0;
++      tp->max_packets_out = 0;
+       tp->window_clamp = 0;
+       tp->delivered = 0;
+       if (icsk->icsk_ca_ops->release)
+@@ -2316,8 +2318,7 @@ int tcp_disconnect(struct sock *sk, int flags)
+       tcp_init_send_head(sk);
+       memset(&tp->rx_opt, 0, sizeof(tp->rx_opt));
+       __sk_dst_reset(sk);
+-      dst_release(sk->sk_rx_dst);
+-      sk->sk_rx_dst = NULL;
++      dst_release(xchg((__force struct dst_entry **)&sk->sk_rx_dst, NULL));
+       tcp_saved_syn_free(tp);
+       tp->segs_in = 0;
+       tp->segs_out = 0;
+@@ -3129,12 +3130,16 @@ static void __tcp_alloc_md5sig_pool(void)
+        * to memory. See smp_rmb() in tcp_get_md5sig_pool()
+        */
+       smp_wmb();
+-      tcp_md5sig_pool_populated = true;
++      /* Paired with READ_ONCE() from tcp_alloc_md5sig_pool()
++       * and tcp_get_md5sig_pool().
++      */
++      WRITE_ONCE(tcp_md5sig_pool_populated, true);
+ }
+ 
+ bool tcp_alloc_md5sig_pool(void)
+ {
+-      if (unlikely(!tcp_md5sig_pool_populated)) {
++      /* Paired with WRITE_ONCE() from __tcp_alloc_md5sig_pool() */
++      if (unlikely(!READ_ONCE(tcp_md5sig_pool_populated))) {
+               mutex_lock(&tcp_md5sig_mutex);
+ 
+               if (!tcp_md5sig_pool_populated)
+@@ -3142,7 +3147,8 @@ bool tcp_alloc_md5sig_pool(void)
+ 
+               mutex_unlock(&tcp_md5sig_mutex);
+       }
+-      return tcp_md5sig_pool_populated;
++      /* Paired with WRITE_ONCE() from __tcp_alloc_md5sig_pool() */
++      return READ_ONCE(tcp_md5sig_pool_populated);
+ }
+ EXPORT_SYMBOL(tcp_alloc_md5sig_pool);
+ 
+@@ -3158,7 +3164,8 @@ struct tcp_md5sig_pool *tcp_get_md5sig_pool(void)
+ {
+       local_bh_disable();
+ 
+-      if (tcp_md5sig_pool_populated) {
++      /* Paired with WRITE_ONCE() from __tcp_alloc_md5sig_pool() */
++      if (READ_ONCE(tcp_md5sig_pool_populated)) {
+               /* coupled with smp_wmb() in __tcp_alloc_md5sig_pool() */
+               smp_rmb();
+               return this_cpu_ptr(&tcp_md5sig_pool);
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+index 2029e7a36cbb4..9c7f716aab441 100644
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -5481,7 +5481,7 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff 
*skb,
+ {
+       struct tcp_sock *tp = tcp_sk(sk);
+ 
+-      if (unlikely(!sk->sk_rx_dst))
++      if (unlikely(!rcu_access_pointer(sk->sk_rx_dst)))
+               inet_csk(sk)->icsk_af_ops->sk_rx_dst_set(sk, skb);
+       /*
+        *      Header prediction.
+diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
+index 6f895694cca1c..1fd1d590fa2b4 100644
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -1404,15 +1404,18 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
+       struct sock *rsk;
+ 
+       if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
+-              struct dst_entry *dst = sk->sk_rx_dst;
++              struct dst_entry *dst;
++
++              dst = rcu_dereference_protected(sk->sk_rx_dst,
++                                              lockdep_sock_is_held(sk));
+ 
+               sock_rps_save_rxhash(sk, skb);
+               sk_mark_napi_id(sk, skb);
+               if (dst) {
+                       if (inet_sk(sk)->rx_dst_ifindex != skb->skb_iif ||
+                           !dst->ops->check(dst, 0)) {
++                              RCU_INIT_POINTER(sk->sk_rx_dst, NULL);
+                               dst_release(dst);
+-                              sk->sk_rx_dst = NULL;
+                       }
+               }
+               tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len);
+@@ -1489,7 +1492,7 @@ void tcp_v4_early_demux(struct sk_buff *skb)
+               skb->sk = sk;
+               skb->destructor = sock_edemux;
+               if (sk_fullsock(sk)) {
+-                      struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
++                      struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst);
+ 
+                       if (dst)
+                               dst = dst_check(dst, 0);
+@@ -1524,7 +1527,7 @@ bool tcp_prequeue(struct sock *sk, struct sk_buff *skb)
+        * Instead of doing full sk_rx_dst validity here, let's perform
+        * an optimistic check.
+        */
+-      if (likely(sk->sk_rx_dst))
++      if (likely(rcu_access_pointer(sk->sk_rx_dst)))
+               skb_dst_drop(skb);
+       else
+               skb_dst_force_safe(skb);
+@@ -1818,7 +1821,7 @@ void inet_sk_rx_dst_set(struct sock *sk, const struct 
sk_buff *skb)
+       struct dst_entry *dst = skb_dst(skb);
+ 
+       if (dst && dst_hold_safe(dst)) {
+-              sk->sk_rx_dst = dst;
++              rcu_assign_pointer(sk->sk_rx_dst, dst);
+               inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
+       }
+ }
+diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
+index 49061c3fc2183..1acf67f0d3cf7 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -1530,15 +1530,20 @@ static void tcp_cwnd_validate(struct sock *sk, bool 
is_cwnd_limited)
+ {
+       struct tcp_sock *tp = tcp_sk(sk);
+ 
+-      /* Track the maximum number of outstanding packets in each
+-       * window, and remember whether we were cwnd-limited then.
++      /* Track the strongest available signal of the degree to which the cwnd
++       * is fully utilized. If cwnd-limited then remember that fact for the
++       * current window. If not cwnd-limited then track the maximum number of
++       * outstanding packets in the current window. (If cwnd-limited then we
++       * chose to not update tp->max_packets_out to avoid an extra else
++       * clause with no functional impact.)
+        */
+-      if (!before(tp->snd_una, tp->max_packets_seq) ||
+-          tp->packets_out > tp->max_packets_out ||
+-          is_cwnd_limited) {
+-              tp->max_packets_out = tp->packets_out;
+-              tp->max_packets_seq = tp->snd_nxt;
++      if (!before(tp->snd_una, tp->cwnd_usage_seq) ||
++          is_cwnd_limited ||
++          (!tp->is_cwnd_limited &&
++           tp->packets_out > tp->max_packets_out)) {
+               tp->is_cwnd_limited = is_cwnd_limited;
++              tp->max_packets_out = tp->packets_out;
++              tp->cwnd_usage_seq = tp->snd_nxt;
+       }
+ 
+       if (tcp_is_cwnd_limited(sk)) {
+diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
+index 8770966a564b5..888c6eb8f0a09 100644
+--- a/net/ipv4/udp.c
++++ b/net/ipv4/udp.c
+@@ -1630,7 +1630,7 @@ static void udp_sk_rx_dst_set(struct sock *sk, struct 
dst_entry *dst)
+       struct dst_entry *old;
+ 
+       dst_hold(dst);
+-      old = xchg(&sk->sk_rx_dst, dst);
++      old = xchg((__force struct dst_entry **)&sk->sk_rx_dst, dst);
+       dst_release(old);
+ }
+ 
+@@ -1815,7 +1815,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table 
*udptable,
+               struct dst_entry *dst = skb_dst(skb);
+               int ret;
+ 
+-              if (unlikely(sk->sk_rx_dst != dst))
++              if (unlikely(rcu_dereference(sk->sk_rx_dst) != dst))
+                       udp_sk_rx_dst_set(sk, dst);
+ 
+               ret = udp_unicast_rcv_skb(sk, skb, uh);
+@@ -1974,7 +1974,7 @@ void udp_v4_early_demux(struct sk_buff *skb)
+ 
+       skb->sk = sk;
+       skb->destructor = sock_efree;
+-      dst = READ_ONCE(sk->sk_rx_dst);
++      dst = rcu_dereference(sk->sk_rx_dst);
+ 
+       if (dst)
+               dst = dst_check(dst, 0);
+diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
+index 6b8da8d4d1ccf..d8b907910cc9f 100644
+--- a/net/ipv6/tcp_ipv6.c
++++ b/net/ipv6/tcp_ipv6.c
+@@ -95,7 +95,7 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const 
struct sk_buff *skb)
+       if (dst && dst_hold_safe(dst)) {
+               const struct rt6_info *rt = (const struct rt6_info *)dst;
+ 
+-              sk->sk_rx_dst = dst;
++              rcu_assign_pointer(sk->sk_rx_dst, dst);
+               inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
+               inet6_sk(sk)->rx_dst_cookie = rt6_get_cookie(rt);
+       }
+@@ -1285,15 +1285,18 @@ static int tcp_v6_do_rcv(struct sock *sk, struct 
sk_buff *skb)
+               opt_skb = skb_clone(skb, sk_gfp_mask(sk, GFP_ATOMIC));
+ 
+       if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
+-              struct dst_entry *dst = sk->sk_rx_dst;
++              struct dst_entry *dst;
++
++              dst = rcu_dereference_protected(sk->sk_rx_dst,
++                                              lockdep_sock_is_held(sk));
+ 
+               sock_rps_save_rxhash(sk, skb);
+               sk_mark_napi_id(sk, skb);
+               if (dst) {
+                       if (inet_sk(sk)->rx_dst_ifindex != skb->skb_iif ||
+                           dst->ops->check(dst, np->rx_dst_cookie) == NULL) {
++                              RCU_INIT_POINTER(sk->sk_rx_dst, NULL);
+                               dst_release(dst);
+-                              sk->sk_rx_dst = NULL;
+                       }
+               }
+ 
+@@ -1621,7 +1624,7 @@ static void tcp_v6_early_demux(struct sk_buff *skb)
+               skb->sk = sk;
+               skb->destructor = sock_edemux;
+               if (sk_fullsock(sk)) {
+-                      struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
++                      struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst);
+ 
+                       if (dst)
+                               dst = dst_check(dst, 
inet6_sk(sk)->rx_dst_cookie);
+diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
+index 091ac3a7b186f..85beeb32f59f8 100644
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -3016,9 +3016,6 @@ static int ieee80211_set_csa_beacon(struct 
ieee80211_sub_if_data *sdata,
+       case NL80211_IFTYPE_MESH_POINT: {
+               struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
+ 
+-              if (params->chandef.width != sdata->vif.bss_conf.chandef.width)
+-                      return -EINVAL;
+-
+               /* changes into another band are not supported */
+               if (sdata->vif.bss_conf.chandef.chan->band !=
+                   params->chandef.chan->band)
+diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
+index c28f0e2a7c3ce..10423757e781b 100644
+--- a/net/openvswitch/datapath.c
++++ b/net/openvswitch/datapath.c
+@@ -278,10 +278,17 @@ void ovs_dp_process_packet(struct sk_buff *skb, struct 
sw_flow_key *key)
+               upcall.portid = ovs_vport_find_upcall_portid(p, skb);
+               upcall.mru = OVS_CB(skb)->mru;
+               error = ovs_dp_upcall(dp, skb, key, &upcall, 0);
+-              if (unlikely(error))
+-                      kfree_skb(skb);
+-              else
++              switch (error) {
++              case 0:
++              case -EAGAIN:
++              case -ERESTARTSYS:
++              case -EINTR:
+                       consume_skb(skb);
++                      break;
++              default:
++                      kfree_skb(skb);
++                      break;
++              }
+               stats_counter = &stats->n_missed;
+               goto out;
+       }
+@@ -548,8 +555,9 @@ static int queue_userspace_packet(struct datapath *dp, 
struct sk_buff *skb,
+ out:
+       if (err)
+               skb_tx_error(skb);
+-      kfree_skb(user_skb);
+-      kfree_skb(nskb);
++      consume_skb(user_skb);
++      consume_skb(nskb);
++
+       return err;
+ }
+ 
+diff --git a/net/rds/tcp.c b/net/rds/tcp.c
+index 192f932bce0dd..d7c9576a1148a 100644
+--- a/net/rds/tcp.c
++++ b/net/rds/tcp.c
+@@ -165,10 +165,10 @@ void rds_tcp_reset_callbacks(struct socket *sock,
+        */
+       atomic_set(&cp->cp_state, RDS_CONN_RESETTING);
+       wait_event(cp->cp_waitq, !test_bit(RDS_IN_XMIT, &cp->cp_flags));
+-      lock_sock(osock->sk);
+       /* reset receive side state for rds_tcp_data_recv() for osock  */
+       cancel_delayed_work_sync(&cp->cp_send_w);
+       cancel_delayed_work_sync(&cp->cp_recv_w);
++      lock_sock(osock->sk);
+       if (tc->t_tinc) {
+               rds_inc_put(&tc->t_tinc->ti_inc);
+               tc->t_tinc = NULL;
+diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c
+index a00ec715aa468..32aed1d0f6ee6 100644
+--- a/net/xfrm/xfrm_ipcomp.c
++++ b/net/xfrm/xfrm_ipcomp.c
+@@ -216,6 +216,7 @@ static void ipcomp_free_scratches(void)
+               vfree(*per_cpu_ptr(scratches, i));
+ 
+       free_percpu(scratches);
++      ipcomp_scratches = NULL;
+ }
+ 
+ static void * __percpu *ipcomp_alloc_scratches(void)
+diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
+index e823bf6a413cb..e78a3a73df3c5 100644
+--- a/scripts/Makefile.extrawarn
++++ b/scripts/Makefile.extrawarn
+@@ -72,5 +72,6 @@ KBUILD_CFLAGS += $(call cc-disable-warning, 
format-zero-length)
+ KBUILD_CFLAGS += $(call cc-disable-warning, uninitialized)
+ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
+ KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access)
++KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict)
+ endif
+ endif
+diff --git a/scripts/selinux/install_policy.sh 
b/scripts/selinux/install_policy.sh
+index f6a0ce71015fa..537004b26d836 100755
+--- a/scripts/selinux/install_policy.sh
++++ b/scripts/selinux/install_policy.sh
+@@ -56,7 +56,7 @@ fi
+ cd /etc/selinux/dummy/contexts/files
+ $SF file_contexts /
+ 
+-mounts=`cat /proc/$$/mounts | egrep "ext2|ext3|xfs|jfs|ext4|ext4dev|gfs2" | 
awk '{ print $2 '}`
++mounts=`cat /proc/$$/mounts | grep -E "ext2|ext3|xfs|jfs|ext4|ext4dev|gfs2" | 
awk '{ print $2 '}`
+ $SF file_contexts $mounts
+ 
+ 
+diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c
+index 8eb58c709b141..6f6da1128edc2 100644
+--- a/sound/core/pcm_dmaengine.c
++++ b/sound/core/pcm_dmaengine.c
+@@ -139,12 +139,14 @@ 
EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_set_config_from_dai_data);
+ 
+ static void dmaengine_pcm_dma_complete(void *arg)
+ {
++      unsigned int new_pos;
+       struct snd_pcm_substream *substream = arg;
+       struct dmaengine_pcm_runtime_data *prtd = substream_to_prtd(substream);
+ 
+-      prtd->pos += snd_pcm_lib_period_bytes(substream);
+-      if (prtd->pos >= snd_pcm_lib_buffer_bytes(substream))
+-              prtd->pos = 0;
++      new_pos = prtd->pos + snd_pcm_lib_period_bytes(substream);
++      if (new_pos >= snd_pcm_lib_buffer_bytes(substream))
++              new_pos = 0;
++      prtd->pos = new_pos;
+ 
+       snd_pcm_period_elapsed(substream);
+ }
+diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
+index 481c1ad1db576..db283e5d9a418 100644
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -1633,10 +1633,8 @@ static int snd_rawmidi_free(struct snd_rawmidi *rmidi)
+ 
+       snd_info_free_entry(rmidi->proc_entry);
+       rmidi->proc_entry = NULL;
+-      mutex_lock(&register_mutex);
+       if (rmidi->ops && rmidi->ops->dev_unregister)
+               rmidi->ops->dev_unregister(rmidi);
+-      mutex_unlock(&register_mutex);
+ 
+       
snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]);
+       
snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]);
+diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c
+index 0ca9d72b22732..6c3dca831fd03 100644
+--- a/sound/core/sound_oss.c
++++ b/sound/core/sound_oss.c
+@@ -179,7 +179,6 @@ int snd_unregister_oss_device(int type, struct snd_card 
*card, int dev)
+               mutex_unlock(&sound_oss_mutex);
+               return -ENOENT;
+       }
+-      unregister_sound_special(minor);
+       switch (SNDRV_MINOR_OSS_DEVICE(minor)) {
+       case SNDRV_MINOR_OSS_PCM:
+               track2 = SNDRV_MINOR_OSS(cidx, SNDRV_MINOR_OSS_AUDIO);
+@@ -191,12 +190,18 @@ int snd_unregister_oss_device(int type, struct snd_card 
*card, int dev)
+               track2 = SNDRV_MINOR_OSS(cidx, SNDRV_MINOR_OSS_DMMIDI1);
+               break;
+       }
+-      if (track2 >= 0) {
+-              unregister_sound_special(track2);
++      if (track2 >= 0)
+               snd_oss_minors[track2] = NULL;
+-      }
+       snd_oss_minors[minor] = NULL;
+       mutex_unlock(&sound_oss_mutex);
++
++      /* call unregister_sound_special() outside sound_oss_mutex;
++       * otherwise may deadlock, as it can trigger the release of a card
++       */
++      unregister_sound_special(minor);
++      if (track2 >= 0)
++              unregister_sound_special(track2);
++
+       kfree(mptr);
+       return 0;
+ }
+diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
+index ac49c9eb16546..91885b677488f 100644
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2320,7 +2320,8 @@ static const struct pci_device_id azx_ids[] = {
+         .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
+       /* Poulsbo */
+       { PCI_DEVICE(0x8086, 0x811b),
+-        .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE },
++        .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE |
++        AZX_DCAPS_POSFIX_LPIB },
+       /* Oaktrail */
+       { PCI_DEVICE(0x8086, 0x080a),
+         .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE },
+diff --git a/sound/soc/fsl/eukrea-tlv320.c b/sound/soc/fsl/eukrea-tlv320.c
+index 38132143b7d5e..10da7fd2d054e 100644
+--- a/sound/soc/fsl/eukrea-tlv320.c
++++ b/sound/soc/fsl/eukrea-tlv320.c
+@@ -88,7 +88,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev)
+       int ret;
+       int int_port = 0, ext_port;
+       struct device_node *np = pdev->dev.of_node;
+-      struct device_node *ssi_np = NULL, *codec_np = NULL;
++      struct device_node *ssi_np = NULL, *codec_np = NULL, *tmp_np = NULL;
+ 
+       eukrea_tlv320.dev = &pdev->dev;
+       if (np) {
+@@ -145,7 +145,7 @@ static int eukrea_tlv320_probe(struct platform_device 
*pdev)
+       }
+ 
+       if (machine_is_eukrea_cpuimx27() ||
+-          of_find_compatible_node(NULL, NULL, "fsl,imx21-audmux")) {
++          (tmp_np = of_find_compatible_node(NULL, NULL, "fsl,imx21-audmux"))) 
{
+               imx_audmux_v1_configure_port(MX27_AUDMUX_HPCR1_SSI0,
+                       IMX_AUDMUX_V1_PCR_SYN |
+                       IMX_AUDMUX_V1_PCR_TFSDIR |
+@@ -160,10 +160,11 @@ static int eukrea_tlv320_probe(struct platform_device 
*pdev)
+                       IMX_AUDMUX_V1_PCR_SYN |
+                       IMX_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR1_SSI0)
+               );
++              of_node_put(tmp_np);
+       } else if (machine_is_eukrea_cpuimx25sd() ||
+                  machine_is_eukrea_cpuimx35sd() ||
+                  machine_is_eukrea_cpuimx51sd() ||
+-                 of_find_compatible_node(NULL, NULL, "fsl,imx31-audmux")) {
++                 (tmp_np = of_find_compatible_node(NULL, NULL, 
"fsl,imx31-audmux"))) {
+               if (!np)
+                       ext_port = machine_is_eukrea_cpuimx25sd() ?
+                               4 : 3;
+@@ -180,6 +181,7 @@ static int eukrea_tlv320_probe(struct platform_device 
*pdev)
+                       IMX_AUDMUX_V2_PTCR_SYN,
+                       IMX_AUDMUX_V2_PDCR_RXDSEL(int_port)
+               );
++              of_node_put(tmp_np);
+       } else {
+               if (np) {
+                       /* The eukrea,asoc-tlv320 driver was explicitly
+diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
+index 30aa5f2df6da5..f81e74daacb7f 100644
+--- a/sound/usb/endpoint.c
++++ b/sound/usb/endpoint.c
+@@ -86,12 +86,13 @@ static inline unsigned get_usb_high_speed_rate(unsigned 
int rate)
+  */
+ static void release_urb_ctx(struct snd_urb_ctx *u)
+ {
+-      if (u->buffer_size)
++      if (u->urb && u->buffer_size)
+               usb_free_coherent(u->ep->chip->dev, u->buffer_size,
+                                 u->urb->transfer_buffer,
+                                 u->urb->transfer_dma);
+       usb_free_urb(u->urb);
+       u->urb = NULL;
++      u->buffer_size = 0;
+ }
+ 
+ static const char *usb_error_string(int err)
+@@ -804,6 +805,7 @@ static int sync_ep_set_params(struct snd_usb_endpoint *ep)
+       if (!ep->syncbuf)
+               return -ENOMEM;
+ 
++      ep->nurbs = SYNC_URBS;
+       for (i = 0; i < SYNC_URBS; i++) {
+               struct snd_urb_ctx *u = &ep->urb[i];
+               u->index = i;
+@@ -823,8 +825,6 @@ static int sync_ep_set_params(struct snd_usb_endpoint *ep)
+               u->urb->complete = snd_complete_urb;
+       }
+ 
+-      ep->nurbs = SYNC_URBS;
+-
+       return 0;
+ 
+ out_of_memory:
+diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
+index 54790a09d1582..5b2f6b2bc7cb3 100644
+--- a/tools/perf/util/intel-pt.c
++++ b/tools/perf/util/intel-pt.c
+@@ -2124,6 +2124,7 @@ static const char * const intel_pt_info_fmts[] = {
+       [INTEL_PT_SNAPSHOT_MODE]        = "  Snapshot mode       %"PRId64"\n",
+       [INTEL_PT_PER_CPU_MMAPS]        = "  Per-cpu maps        %"PRId64"\n",
+       [INTEL_PT_MTC_BIT]              = "  MTC bit             %#"PRIx64"\n",
++      [INTEL_PT_MTC_FREQ_BITS]        = "  MTC freq bits       %#"PRIx64"\n",
+       [INTEL_PT_TSC_CTC_N]            = "  TSC:CTC numerator   %"PRIu64"\n",
+       [INTEL_PT_TSC_CTC_D]            = "  TSC:CTC denominator %"PRIu64"\n",
+       [INTEL_PT_CYC_BIT]              = "  CYC bit             %#"PRIx64"\n",
+@@ -2138,8 +2139,12 @@ static void intel_pt_print_info(u64 *arr, int start, 
int finish)
+       if (!dump_trace)
+               return;
+ 
+-      for (i = start; i <= finish; i++)
+-              fprintf(stdout, intel_pt_info_fmts[i], arr[i]);
++      for (i = start; i <= finish; i++) {
++              const char *fmt = intel_pt_info_fmts[i];
++
++              if (fmt)
++                      fprintf(stdout, fmt, arr[i]);
++      }
+ }
+ 
+ static void intel_pt_print_info_str(const char *name, const char *str)
+diff --git a/tools/testing/selftests/net/reuseport_bpf.c 
b/tools/testing/selftests/net/reuseport_bpf.c
+index b5277106df1fd..b0cc082fbb84f 100644
+--- a/tools/testing/selftests/net/reuseport_bpf.c
++++ b/tools/testing/selftests/net/reuseport_bpf.c
+@@ -330,7 +330,7 @@ static void test_extra_filter(const struct test_params p)
+       if (bind(fd1, addr, sockaddr_size()))
+               error(1, errno, "failed to bind recv socket 1");
+ 
+-      if (!bind(fd2, addr, sockaddr_size()) && errno != EADDRINUSE)
++      if (!bind(fd2, addr, sockaddr_size()) || errno != EADDRINUSE)
+               error(1, errno, "bind socket 2 should fail with EADDRINUSE");
+ 
+       free(addr);

Reply via email to