commit:     c8258137b5caa0382575d3826dc2d09bef79c928
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 29 11:09:18 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Jun 29 11:09:18 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=c8258137

Linux patch 5.4.202

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

 0000_README              |    4 +
 1201_linux-5.4.202.patch | 1638 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1642 insertions(+)

diff --git a/0000_README b/0000_README
index 7d5a5301..17c1b728 100644
--- a/0000_README
+++ b/0000_README
@@ -847,6 +847,10 @@ Patch:  1200_linux-5.4.201.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.4.201
 
+Patch:  1201_linux-5.4.202.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.4.202
+
 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/1201_linux-5.4.202.patch b/1201_linux-5.4.202.patch
new file mode 100644
index 00000000..9814f67a
--- /dev/null
+++ b/1201_linux-5.4.202.patch
@@ -0,0 +1,1638 @@
+diff --git a/Documentation/ABI/testing/sysfs-bus-iio-vf610 
b/Documentation/ABI/testing/sysfs-bus-iio-vf610
+index 308a6756d3bf3..491ead8044888 100644
+--- a/Documentation/ABI/testing/sysfs-bus-iio-vf610
++++ b/Documentation/ABI/testing/sysfs-bus-iio-vf610
+@@ -1,4 +1,4 @@
+-What:         /sys/bus/iio/devices/iio:deviceX/conversion_mode
++What:         /sys/bus/iio/devices/iio:deviceX/in_conversion_mode
+ KernelVersion:        4.2
+ Contact:      [email protected]
+ Description:
+diff --git a/Makefile b/Makefile
+index 75be5870cc55f..021878dc23f9b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 4
+-SUBLEVEL = 201
++SUBLEVEL = 202
+ EXTRAVERSION =
+ NAME = Kleptomaniac Octopus
+ 
+@@ -1073,7 +1073,7 @@ PHONY += autoksyms_recursive
+ ifdef CONFIG_TRIM_UNUSED_KSYMS
+ autoksyms_recursive: descend modules.order
+       $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
+-        "$(MAKE) -f $(srctree)/Makefile vmlinux"
++        "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
+ endif
+ 
+ # For the kernel to actually contain only the needed exported symbols,
+diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
+index bc488df315117..e9955ef12e02d 100644
+--- a/arch/arm/boot/dts/imx6qdl.dtsi
++++ b/arch/arm/boot/dts/imx6qdl.dtsi
+@@ -766,7 +766,7 @@
+                                       regulator-name = "vddpu";
+                                       regulator-min-microvolt = <725000>;
+                                       regulator-max-microvolt = <1450000>;
+-                                      regulator-enable-ramp-delay = <150>;
++                                      regulator-enable-ramp-delay = <380>;
+                                       anatop-reg-offset = <0x140>;
+                                       anatop-vol-bit-shift = <9>;
+                                       anatop-vol-bit-width = <5>;
+diff --git a/arch/arm/mach-axxia/platsmp.c b/arch/arm/mach-axxia/platsmp.c
+index 512943eae30a5..2e203626eda52 100644
+--- a/arch/arm/mach-axxia/platsmp.c
++++ b/arch/arm/mach-axxia/platsmp.c
+@@ -39,6 +39,7 @@ static int axxia_boot_secondary(unsigned int cpu, struct 
task_struct *idle)
+               return -ENOENT;
+ 
+       syscon = of_iomap(syscon_np, 0);
++      of_node_put(syscon_np);
+       if (!syscon)
+               return -ENOMEM;
+ 
+diff --git a/arch/arm/mach-cns3xxx/core.c b/arch/arm/mach-cns3xxx/core.c
+index 1d61a7701c11f..d7e63f57b426a 100644
+--- a/arch/arm/mach-cns3xxx/core.c
++++ b/arch/arm/mach-cns3xxx/core.c
+@@ -376,6 +376,7 @@ static void __init cns3xxx_init(void)
+               /* De-Asscer SATA Reset */
+               cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SATA));
+       }
++      of_node_put(dn);
+ 
+       dn = of_find_compatible_node(NULL, NULL, "cavium,cns3420-sdhci");
+       if (of_device_is_available(dn)) {
+@@ -389,6 +390,7 @@ static void __init cns3xxx_init(void)
+               cns3xxx_pwr_clk_en(CNS3XXX_PWR_CLK_EN(SDIO));
+               cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SDIO));
+       }
++      of_node_put(dn);
+ 
+       pm_power_off = cns3xxx_power_off;
+ 
+diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c
+index f226d4f57bf41..9025067ef6f57 100644
+--- a/arch/arm/mach-exynos/exynos.c
++++ b/arch/arm/mach-exynos/exynos.c
+@@ -136,6 +136,7 @@ static void exynos_map_pmu(void)
+       np = of_find_matching_node(NULL, exynos_dt_pmu_match);
+       if (np)
+               pmu_base_addr = of_iomap(np, 0);
++      of_node_put(np);
+ }
+ 
+ static void __init exynos_init_irq(void)
+diff --git a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c
+index 7b7f25b4b057e..9240bcdbe74e4 100644
+--- a/arch/mips/vr41xx/common/icu.c
++++ b/arch/mips/vr41xx/common/icu.c
+@@ -640,8 +640,6 @@ static int icu_get_irq(unsigned int irq)
+ 
+       printk(KERN_ERR "spurious ICU interrupt: %04x,%04x\n", pend1, pend2);
+ 
+-      atomic_inc(&irq_err_count);
+-
+       return -1;
+ }
+ 
+diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
+index 0c29d6cb2c8df..c97c01c755665 100644
+--- a/arch/parisc/Kconfig
++++ b/arch/parisc/Kconfig
+@@ -11,6 +11,7 @@ config PARISC
+       select ARCH_WANT_FRAME_POINTERS
+       select ARCH_HAS_ELF_RANDOMIZE
+       select ARCH_HAS_STRICT_KERNEL_RWX
++      select ARCH_HAS_STRICT_MODULE_RWX
+       select ARCH_HAS_UBSAN_SANITIZE_ALL
+       select ARCH_NO_SG_CHAIN
+       select ARCH_SUPPORTS_MEMORY_FAILURE
+diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
+index 832663f214226..cf87573e6e785 100644
+--- a/arch/powerpc/kernel/process.c
++++ b/arch/powerpc/kernel/process.c
+@@ -1719,7 +1719,7 @@ void start_thread(struct pt_regs *regs, unsigned long 
start, unsigned long sp)
+               tm_reclaim_current(0);
+ #endif
+ 
+-      memset(regs->gpr, 0, sizeof(regs->gpr));
++      memset(&regs->gpr[1], 0, sizeof(regs->gpr) - sizeof(regs->gpr[0]));
+       regs->ctr = 0;
+       regs->link = 0;
+       regs->xer = 0;
+diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
+index 9392661ac8a87..35e246e39705b 100644
+--- a/arch/powerpc/kernel/rtas.c
++++ b/arch/powerpc/kernel/rtas.c
+@@ -988,7 +988,7 @@ static struct rtas_filter rtas_filters[] __ro_after_init = 
{
+       { "get-time-of-day", -1, -1, -1, -1, -1 },
+       { "ibm,get-vpd", -1, 0, -1, 1, 2 },
+       { "ibm,lpar-perftools", -1, 2, 3, -1, -1 },
+-      { "ibm,platform-dump", -1, 4, 5, -1, -1 },
++      { "ibm,platform-dump", -1, 4, 5, -1, -1 },              /* Special 
cased */
+       { "ibm,read-slot-reset-state", -1, -1, -1, -1, -1 },
+       { "ibm,scan-log-dump", -1, 0, 1, -1, -1 },
+       { "ibm,set-dynamic-indicator", -1, 2, -1, -1, -1 },
+@@ -1035,6 +1035,15 @@ static bool block_rtas_call(int token, int nargs,
+                               size = 1;
+ 
+                       end = base + size - 1;
++
++                      /*
++                       * Special case for ibm,platform-dump - NULL buffer
++                       * address is used to indicate end of dump processing
++                       */
++                      if (!strcmp(f->name, "ibm,platform-dump") &&
++                          base == 0)
++                              return false;
++
+                       if (!in_rmo_buf(base, end))
+                               goto err;
+               }
+diff --git a/arch/powerpc/platforms/powernv/powernv.h 
b/arch/powerpc/platforms/powernv/powernv.h
+index 1aa51c4fa9045..4825e4cf4410d 100644
+--- a/arch/powerpc/platforms/powernv/powernv.h
++++ b/arch/powerpc/platforms/powernv/powernv.h
+@@ -35,4 +35,6 @@ ssize_t memcons_copy(struct memcons *mc, char *to, loff_t 
pos, size_t count);
+ u32 memcons_get_size(struct memcons *mc);
+ struct memcons *memcons_init(struct device_node *node, const char 
*mc_prop_name);
+ 
++void pnv_rng_init(void);
++
+ #endif /* _POWERNV_H */
+diff --git a/arch/powerpc/platforms/powernv/rng.c 
b/arch/powerpc/platforms/powernv/rng.c
+index 1c31863a9be6c..eba4142998b03 100644
+--- a/arch/powerpc/platforms/powernv/rng.c
++++ b/arch/powerpc/platforms/powernv/rng.c
+@@ -17,6 +17,7 @@
+ #include <asm/prom.h>
+ #include <asm/machdep.h>
+ #include <asm/smp.h>
++#include "powernv.h"
+ 
+ #define DARN_ERR 0xFFFFFFFFFFFFFFFFul
+ 
+@@ -28,7 +29,6 @@ struct powernv_rng {
+ 
+ static DEFINE_PER_CPU(struct powernv_rng *, powernv_rng);
+ 
+-
+ int powernv_hwrng_present(void)
+ {
+       struct powernv_rng *rng;
+@@ -98,9 +98,6 @@ static int initialise_darn(void)
+                       return 0;
+               }
+       }
+-
+-      pr_warn("Unable to use DARN for get_random_seed()\n");
+-
+       return -EIO;
+ }
+ 
+@@ -163,32 +160,55 @@ static __init int rng_create(struct device_node *dn)
+ 
+       rng_init_per_cpu(rng, dn);
+ 
+-      pr_info_once("Registering arch random hook.\n");
+-
+       ppc_md.get_random_seed = powernv_get_random_long;
+ 
+       return 0;
+ }
+ 
+-static __init int rng_init(void)
++static int __init pnv_get_random_long_early(unsigned long *v)
+ {
+       struct device_node *dn;
+-      int rc;
++
++      if (!slab_is_available())
++              return 0;
++
++      if (cmpxchg(&ppc_md.get_random_seed, pnv_get_random_long_early,
++                  NULL) != pnv_get_random_long_early)
++              return 0;
+ 
+       for_each_compatible_node(dn, NULL, "ibm,power-rng") {
+-              rc = rng_create(dn);
+-              if (rc) {
+-                      pr_err("Failed creating rng for %pOF (%d).\n",
+-                              dn, rc);
++              if (rng_create(dn))
+                       continue;
+-              }
+-
+               /* Create devices for hwrng driver */
+               of_platform_device_create(dn, NULL, NULL);
+       }
+ 
+-      initialise_darn();
++      if (!ppc_md.get_random_seed)
++              return 0;
++      return ppc_md.get_random_seed(v);
++}
++
++void __init pnv_rng_init(void)
++{
++      struct device_node *dn;
+ 
++      /* Prefer darn over the rest. */
++      if (!initialise_darn())
++              return;
++
++      dn = of_find_compatible_node(NULL, NULL, "ibm,power-rng");
++      if (dn)
++              ppc_md.get_random_seed = pnv_get_random_long_early;
++
++      of_node_put(dn);
++}
++
++static int __init pnv_rng_late_init(void)
++{
++      unsigned long v;
++      /* In case it wasn't called during init for some other reason. */
++      if (ppc_md.get_random_seed == pnv_get_random_long_early)
++              pnv_get_random_long_early(&v);
+       return 0;
+ }
+-machine_subsys_initcall(powernv, rng_init);
++machine_subsys_initcall(powernv, pnv_rng_late_init);
+diff --git a/arch/powerpc/platforms/powernv/setup.c 
b/arch/powerpc/platforms/powernv/setup.c
+index 1b7b0d0c3ebdd..d9e26614d7ed8 100644
+--- a/arch/powerpc/platforms/powernv/setup.c
++++ b/arch/powerpc/platforms/powernv/setup.c
+@@ -168,6 +168,8 @@ static void __init pnv_setup_arch(void)
+       powersave_nap = 1;
+ 
+       /* XXX PMCS */
++
++      pnv_rng_init();
+ }
+ 
+ static void __init pnv_init(void)
+diff --git a/arch/powerpc/platforms/pseries/pseries.h 
b/arch/powerpc/platforms/pseries/pseries.h
+index 13fa370a87e4e..5fd56230b01c5 100644
+--- a/arch/powerpc/platforms/pseries/pseries.h
++++ b/arch/powerpc/platforms/pseries/pseries.h
+@@ -114,4 +114,6 @@ int dlpar_workqueue_init(void);
+ void pseries_setup_rfi_flush(void);
+ void pseries_lpar_read_hblkrm_characteristics(void);
+ 
++void pseries_rng_init(void);
++
+ #endif /* _PSERIES_PSERIES_H */
+diff --git a/arch/powerpc/platforms/pseries/rng.c 
b/arch/powerpc/platforms/pseries/rng.c
+index 6268545947b83..6ddfdeaace9ef 100644
+--- a/arch/powerpc/platforms/pseries/rng.c
++++ b/arch/powerpc/platforms/pseries/rng.c
+@@ -10,6 +10,7 @@
+ #include <asm/archrandom.h>
+ #include <asm/machdep.h>
+ #include <asm/plpar_wrappers.h>
++#include "pseries.h"
+ 
+ 
+ static int pseries_get_random_long(unsigned long *v)
+@@ -24,19 +25,13 @@ static int pseries_get_random_long(unsigned long *v)
+       return 0;
+ }
+ 
+-static __init int rng_init(void)
++void __init pseries_rng_init(void)
+ {
+       struct device_node *dn;
+ 
+       dn = of_find_compatible_node(NULL, NULL, "ibm,random");
+       if (!dn)
+-              return -ENODEV;
+-
+-      pr_info("Registering arch random hook.\n");
+-
++              return;
+       ppc_md.get_random_seed = pseries_get_random_long;
+-
+       of_node_put(dn);
+-      return 0;
+ }
+-machine_subsys_initcall(pseries, rng_init);
+diff --git a/arch/powerpc/platforms/pseries/setup.c 
b/arch/powerpc/platforms/pseries/setup.c
+index 16b744646ea94..d5abb25865e36 100644
+--- a/arch/powerpc/platforms/pseries/setup.c
++++ b/arch/powerpc/platforms/pseries/setup.c
+@@ -792,6 +792,8 @@ static void __init pSeries_setup_arch(void)
+ 
+       if (swiotlb_force == SWIOTLB_FORCE)
+               ppc_swiotlb_enable = 1;
++
++      pseries_rng_init();
+ }
+ 
+ static void pseries_panic(char *str)
+diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c
+index 0eb1d1cc53a88..dddb32e53db8b 100644
+--- a/arch/s390/kernel/perf_cpum_cf.c
++++ b/arch/s390/kernel/perf_cpum_cf.c
+@@ -292,6 +292,26 @@ static int __hw_perf_event_init(struct perf_event *event, 
unsigned int type)
+       return err;
+ }
+ 
++/* Events CPU_CYLCES and INSTRUCTIONS can be submitted with two different
++ * attribute::type values:
++ * - PERF_TYPE_HARDWARE:
++ * - pmu->type:
++ * Handle both type of invocations identical. They address the same hardware.
++ * The result is different when event modifiers exclude_kernel and/or
++ * exclude_user are also set.
++ */
++static int cpumf_pmu_event_type(struct perf_event *event)
++{
++      u64 ev = event->attr.config;
++
++      if (cpumf_generic_events_basic[PERF_COUNT_HW_CPU_CYCLES] == ev ||
++          cpumf_generic_events_basic[PERF_COUNT_HW_INSTRUCTIONS] == ev ||
++          cpumf_generic_events_user[PERF_COUNT_HW_CPU_CYCLES] == ev ||
++          cpumf_generic_events_user[PERF_COUNT_HW_INSTRUCTIONS] == ev)
++              return PERF_TYPE_HARDWARE;
++      return PERF_TYPE_RAW;
++}
++
+ static int cpumf_pmu_event_init(struct perf_event *event)
+ {
+       unsigned int type = event->attr.type;
+@@ -301,7 +321,7 @@ static int cpumf_pmu_event_init(struct perf_event *event)
+               err = __hw_perf_event_init(event, type);
+       else if (event->pmu->type == type)
+               /* Registered as unknown PMU */
+-              err = __hw_perf_event_init(event, PERF_TYPE_RAW);
++              err = __hw_perf_event_init(event, cpumf_pmu_event_type(event));
+       else
+               return -ENOENT;
+ 
+diff --git a/arch/xtensa/kernel/time.c b/arch/xtensa/kernel/time.c
+index 69db8c93c1f99..9b87a9b98727b 100644
+--- a/arch/xtensa/kernel/time.c
++++ b/arch/xtensa/kernel/time.c
+@@ -160,6 +160,7 @@ static void __init calibrate_ccount(void)
+       cpu = of_find_compatible_node(NULL, NULL, "cdns,xtensa-cpu");
+       if (cpu) {
+               clk = of_clk_get(cpu, 0);
++              of_node_put(cpu);
+               if (!IS_ERR(clk)) {
+                       ccount_freq = clk_get_rate(clk);
+                       return;
+diff --git a/arch/xtensa/platforms/xtfpga/setup.c 
b/arch/xtensa/platforms/xtfpga/setup.c
+index 4edccb4d4a5ff..340479a328dc3 100644
+--- a/arch/xtensa/platforms/xtfpga/setup.c
++++ b/arch/xtensa/platforms/xtfpga/setup.c
+@@ -148,6 +148,7 @@ static int __init machine_setup(void)
+ 
+       if ((eth = of_find_compatible_node(eth, NULL, "opencores,ethoc")))
+               update_local_mac(eth);
++      of_node_put(eth);
+       return 0;
+ }
+ arch_initcall(machine_setup);
+diff --git a/drivers/base/regmap/regmap-irq.c 
b/drivers/base/regmap/regmap-irq.c
+index 3d64c9331a82a..3c1e554df4eb2 100644
+--- a/drivers/base/regmap/regmap-irq.c
++++ b/drivers/base/regmap/regmap-irq.c
+@@ -214,6 +214,7 @@ static void regmap_irq_enable(struct irq_data *data)
+       struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
+       struct regmap *map = d->map;
+       const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
++      unsigned int reg = irq_data->reg_offset / map->reg_stride;
+       unsigned int mask, type;
+ 
+       type = irq_data->type.type_falling_val | irq_data->type.type_rising_val;
+@@ -230,14 +231,14 @@ static void regmap_irq_enable(struct irq_data *data)
+        * at the corresponding offset in regmap_irq_set_type().
+        */
+       if (d->chip->type_in_mask && type)
+-              mask = d->type_buf[irq_data->reg_offset / map->reg_stride];
++              mask = d->type_buf[reg] & irq_data->mask;
+       else
+               mask = irq_data->mask;
+ 
+       if (d->chip->clear_on_unmask)
+               d->clear_status = true;
+ 
+-      d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~mask;
++      d->mask_buf[reg] &= ~mask;
+ }
+ 
+ static void regmap_irq_disable(struct irq_data *data)
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index 82f9ee4404069..1ef94d1125210 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -88,7 +88,7 @@ static RAW_NOTIFIER_HEAD(random_ready_chain);
+ 
+ /* Control how we warn userspace. */
+ static struct ratelimit_state urandom_warning =
+-      RATELIMIT_STATE_INIT("warn_urandom_randomness", HZ, 3);
++      RATELIMIT_STATE_INIT_FLAGS("urandom_warning", HZ, 3, 
RATELIMIT_MSG_ON_RELEASE);
+ static int ratelimit_disable __read_mostly =
+       IS_ENABLED(CONFIG_WARN_ALL_UNSEEDED_RANDOM);
+ module_param_named(ratelimit_disable, ratelimit_disable, int, 0644);
+@@ -450,7 +450,7 @@ static ssize_t get_random_bytes_user(struct iov_iter *iter)
+ 
+       /*
+        * Immediately overwrite the ChaCha key at index 4 with random
+-       * bytes, in case userspace causes copy_to_user() below to sleep
++       * bytes, in case userspace causes copy_to_iter() below to sleep
+        * forever, so that we still retain forward secrecy in that case.
+        */
+       crng_make_state(chacha_state, (u8 *)&chacha_state[4], CHACHA_KEY_SIZE);
+@@ -996,7 +996,7 @@ void add_interrupt_randomness(int irq)
+       if (new_count & MIX_INFLIGHT)
+               return;
+ 
+-      if (new_count < 64 && !time_is_before_jiffies(fast_pool->last + HZ))
++      if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
+               return;
+ 
+       if (unlikely(!fast_pool->mix.func))
+diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
+index e553c6a937f69..c6e9b7bd7618c 100644
+--- a/drivers/dma-buf/udmabuf.c
++++ b/drivers/dma-buf/udmabuf.c
+@@ -24,8 +24,11 @@ static vm_fault_t udmabuf_vm_fault(struct vm_fault *vmf)
+ {
+       struct vm_area_struct *vma = vmf->vma;
+       struct udmabuf *ubuf = vma->vm_private_data;
++      pgoff_t pgoff = vmf->pgoff;
+ 
+-      vmf->page = ubuf->pages[vmf->pgoff];
++      if (pgoff >= ubuf->pagecount)
++              return VM_FAULT_SIGBUS;
++      vmf->page = ubuf->pages[pgoff];
+       get_page(vmf->page);
+       return 0;
+ }
+diff --git a/drivers/gpio/gpio-vr41xx.c b/drivers/gpio/gpio-vr41xx.c
+index 98cd715ccc33c..8d09b619c1669 100644
+--- a/drivers/gpio/gpio-vr41xx.c
++++ b/drivers/gpio/gpio-vr41xx.c
+@@ -217,8 +217,6 @@ static int giu_get_irq(unsigned int irq)
+       printk(KERN_ERR "spurious GIU interrupt: %04x(%04x),%04x(%04x)\n",
+              maskl, pendl, maskh, pendh);
+ 
+-      atomic_inc(&irq_err_count);
+-
+       return -EINVAL;
+ }
+ 
+diff --git a/drivers/gpio/gpio-winbond.c b/drivers/gpio/gpio-winbond.c
+index 7f8f5b02e31d5..4b61d975cc0ec 100644
+--- a/drivers/gpio/gpio-winbond.c
++++ b/drivers/gpio/gpio-winbond.c
+@@ -385,12 +385,13 @@ static int winbond_gpio_get(struct gpio_chip *gc, 
unsigned int offset)
+       unsigned long *base = gpiochip_get_data(gc);
+       const struct winbond_gpio_info *info;
+       bool val;
++      int ret;
+ 
+       winbond_gpio_get_info(&offset, &info);
+ 
+-      val = winbond_sio_enter(*base);
+-      if (val)
+-              return val;
++      ret = winbond_sio_enter(*base);
++      if (ret)
++              return ret;
+ 
+       winbond_sio_select_logical(*base, info->dev);
+ 
+diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c 
b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+index 4f0c6d58e06fa..f0a5767b69f50 100644
+--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
++++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+@@ -245,6 +245,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms 
*mdp4_kms,
+               encoder = mdp4_lcdc_encoder_init(dev, panel_node);
+               if (IS_ERR(encoder)) {
+                       DRM_DEV_ERROR(dev->dev, "failed to construct LCDC 
encoder\n");
++                      of_node_put(panel_node);
+                       return PTR_ERR(encoder);
+               }
+ 
+@@ -254,6 +255,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms 
*mdp4_kms,
+               connector = mdp4_lvds_connector_init(dev, panel_node, encoder);
+               if (IS_ERR(connector)) {
+                       DRM_DEV_ERROR(dev->dev, "failed to initialize LVDS 
connector\n");
++                      of_node_put(panel_node);
+                       return PTR_ERR(connector);
+               }
+ 
+diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c
+index acf1cc2bee07b..014788ea493ac 100644
+--- a/drivers/iio/accel/bma180.c
++++ b/drivers/iio/accel/bma180.c
+@@ -793,11 +793,12 @@ static int bma180_probe(struct i2c_client *client,
+               data->trig->dev.parent = &client->dev;
+               data->trig->ops = &bma180_trigger_ops;
+               iio_trigger_set_drvdata(data->trig, indio_dev);
+-              indio_dev->trig = iio_trigger_get(data->trig);
+ 
+               ret = iio_trigger_register(data->trig);
+               if (ret)
+                       goto err_trigger_free;
++
++              indio_dev->trig = iio_trigger_get(data->trig);
+       }
+ 
+       ret = iio_triggered_buffer_setup(indio_dev, NULL,
+diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
+index eaaee6f2a978b..74942bfc676a1 100644
+--- a/drivers/iio/accel/mma8452.c
++++ b/drivers/iio/accel/mma8452.c
+@@ -1489,10 +1489,14 @@ static int mma8452_reset(struct i2c_client *client)
+       int i;
+       int ret;
+ 
+-      ret = i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG2,
++      /*
++       * Find on fxls8471, after config reset bit, it reset immediately,
++       * and will not give ACK, so here do not check the return value.
++       * The following code will read the reset register, and check whether
++       * this reset works.
++       */
++      i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG2,
+                                       MMA8452_CTRL_REG2_RST);
+-      if (ret < 0)
+-              return ret;
+ 
+       for (i = 0; i < 10; i++) {
+               usleep_range(100, 200);
+diff --git a/drivers/iio/accel/mxc4005.c b/drivers/iio/accel/mxc4005.c
+index d81b02642a0b3..110b7ea76ef2f 100644
+--- a/drivers/iio/accel/mxc4005.c
++++ b/drivers/iio/accel/mxc4005.c
+@@ -462,8 +462,6 @@ static int mxc4005_probe(struct i2c_client *client,
+               data->dready_trig->dev.parent = &client->dev;
+               data->dready_trig->ops = &mxc4005_trigger_ops;
+               iio_trigger_set_drvdata(data->dready_trig, indio_dev);
+-              indio_dev->trig = data->dready_trig;
+-              iio_trigger_get(indio_dev->trig);
+               ret = devm_iio_trigger_register(&client->dev,
+                                               data->dready_trig);
+               if (ret) {
+@@ -471,6 +469,8 @@ static int mxc4005_probe(struct i2c_client *client,
+                               "failed to register trigger\n");
+                       return ret;
+               }
++
++              indio_dev->trig = iio_trigger_get(data->dready_trig);
+       }
+ 
+       return devm_iio_device_register(&client->dev, indio_dev);
+diff --git a/drivers/iio/adc/axp288_adc.c b/drivers/iio/adc/axp288_adc.c
+index 8ea2aed6d6f5a..99ceaa09ef392 100644
+--- a/drivers/iio/adc/axp288_adc.c
++++ b/drivers/iio/adc/axp288_adc.c
+@@ -196,6 +196,14 @@ static const struct dmi_system_id 
axp288_adc_ts_bias_override[] = {
+               },
+               .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA,
+       },
++      {
++              /* Nuvision Solo 10 Draw */
++              .matches = {
++                DMI_MATCH(DMI_SYS_VENDOR, "TMAX"),
++                DMI_MATCH(DMI_PRODUCT_NAME, "TM101W610L"),
++              },
++              .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA,
++      },
+       {}
+ };
+ 
+diff --git a/drivers/iio/adc/stm32-adc-core.c 
b/drivers/iio/adc/stm32-adc-core.c
+index 14d6a537289cb..0ecec5a15fbf0 100644
+--- a/drivers/iio/adc/stm32-adc-core.c
++++ b/drivers/iio/adc/stm32-adc-core.c
+@@ -815,7 +815,7 @@ static const struct stm32_adc_priv_cfg 
stm32h7_adc_priv_cfg = {
+ static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
+       .regs = &stm32h7_adc_common_regs,
+       .clk_sel = stm32h7_adc_clk_sel,
+-      .max_clk_rate_hz = 40000000,
++      .max_clk_rate_hz = 36000000,
+       .has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD,
+       .num_irqs = 2,
+ };
+diff --git a/drivers/iio/chemical/ccs811.c b/drivers/iio/chemical/ccs811.c
+index 7bf4e9a16a6ae..a2ee6bbda7f4d 100644
+--- a/drivers/iio/chemical/ccs811.c
++++ b/drivers/iio/chemical/ccs811.c
+@@ -418,11 +418,11 @@ static int ccs811_probe(struct i2c_client *client,
+               data->drdy_trig->dev.parent = &client->dev;
+               data->drdy_trig->ops = &ccs811_trigger_ops;
+               iio_trigger_set_drvdata(data->drdy_trig, indio_dev);
+-              indio_dev->trig = data->drdy_trig;
+-              iio_trigger_get(indio_dev->trig);
+               ret = iio_trigger_register(data->drdy_trig);
+               if (ret)
+                       goto err_poweroff;
++
++              indio_dev->trig = iio_trigger_get(data->drdy_trig);
+       }
+ 
+       ret = iio_triggered_buffer_setup(indio_dev, NULL,
+diff --git a/drivers/iio/gyro/mpu3050-core.c b/drivers/iio/gyro/mpu3050-core.c
+index 75db410b5054e..0f5de4afe33f6 100644
+--- a/drivers/iio/gyro/mpu3050-core.c
++++ b/drivers/iio/gyro/mpu3050-core.c
+@@ -874,6 +874,7 @@ static int mpu3050_power_up(struct mpu3050 *mpu3050)
+       ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM,
+                                MPU3050_PWR_MGM_SLEEP, 0);
+       if (ret) {
++              regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), 
mpu3050->regs);
+               dev_err(mpu3050->dev, "error setting power mode\n");
+               return ret;
+       }
+diff --git a/drivers/iio/trigger/iio-trig-sysfs.c 
b/drivers/iio/trigger/iio-trig-sysfs.c
+index e09e58072872c..2277d6336ac06 100644
+--- a/drivers/iio/trigger/iio-trig-sysfs.c
++++ b/drivers/iio/trigger/iio-trig-sysfs.c
+@@ -196,6 +196,7 @@ static int iio_sysfs_trigger_remove(int id)
+       }
+ 
+       iio_trigger_unregister(t->trig);
++      irq_work_sync(&t->work);
+       iio_trigger_free(t->trig);
+ 
+       list_del(&t->l);
+diff --git a/drivers/md/dm-era-target.c b/drivers/md/dm-era-target.c
+index 6b0b3a13ab4a2..418f590b99b8d 100644
+--- a/drivers/md/dm-era-target.c
++++ b/drivers/md/dm-era-target.c
+@@ -1397,7 +1397,7 @@ static void start_worker(struct era *era)
+ static void stop_worker(struct era *era)
+ {
+       atomic_set(&era->suspended, 1);
+-      flush_workqueue(era->wq);
++      drain_workqueue(era->wq);
+ }
+ 
+ /*----------------------------------------------------------------
+@@ -1581,6 +1581,12 @@ static void era_postsuspend(struct dm_target *ti)
+       }
+ 
+       stop_worker(era);
++
++      r = metadata_commit(era->md);
++      if (r) {
++              DMERR("%s: metadata_commit failed", __func__);
++              /* FIXME: fail mode */
++      }
+ }
+ 
+ static int era_preresume(struct dm_target *ti)
+diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
+index 8b15f53cbdd95..fe3a9473f3387 100644
+--- a/drivers/md/dm-log.c
++++ b/drivers/md/dm-log.c
+@@ -615,7 +615,7 @@ static int disk_resume(struct dm_dirty_log *log)
+                       log_clear_bit(lc, lc->clean_bits, i);
+ 
+       /* clear any old bits -- device has shrunk */
+-      for (i = lc->region_count; i % (sizeof(*lc->clean_bits) << BYTE_SHIFT); 
i++)
++      for (i = lc->region_count; i % BITS_PER_LONG; i++)
+               log_clear_bit(lc, lc->clean_bits, i);
+ 
+       /* copy clean across to sync */
+diff --git a/drivers/mmc/host/sdhci-pci-o2micro.c 
b/drivers/mmc/host/sdhci-pci-o2micro.c
+index 41a2394313dd0..3170c19683c49 100644
+--- a/drivers/mmc/host/sdhci-pci-o2micro.c
++++ b/drivers/mmc/host/sdhci-pci-o2micro.c
+@@ -145,6 +145,8 @@ static int sdhci_o2_get_cd(struct mmc_host *mmc)
+ 
+       if (!(sdhci_readw(host, O2_PLL_DLL_WDT_CONTROL1) & O2_PLL_LOCK_STATUS))
+               sdhci_o2_enable_internal_clock(host);
++      else
++              sdhci_o2_wait_card_detect_stable(host);
+ 
+       return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
+ }
+diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c 
b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
+index 02218c3b548f9..41f7dd58bdcf8 100644
+--- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
++++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
+@@ -682,7 +682,7 @@ static void gpmi_nfc_compute_timings(struct gpmi_nand_data 
*this,
+       hw->timing0 = BF_GPMI_TIMING0_ADDRESS_SETUP(addr_setup_cycles) |
+                     BF_GPMI_TIMING0_DATA_HOLD(data_hold_cycles) |
+                     BF_GPMI_TIMING0_DATA_SETUP(data_setup_cycles);
+-      hw->timing1 = BF_GPMI_TIMING1_BUSY_TIMEOUT(busy_timeout_cycles * 4096);
++      hw->timing1 = 
BF_GPMI_TIMING1_BUSY_TIMEOUT(DIV_ROUND_UP(busy_timeout_cycles, 4096));
+ 
+       /*
+        * Derive NFC ideal delay from {3}:
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index d6ecd03b60452..246bcbd650b4b 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -3071,9 +3071,11 @@ re_arm:
+               if (!rtnl_trylock())
+                       return;
+ 
+-              if (should_notify_peers)
++              if (should_notify_peers) {
++                      bond->send_peer_notif--;
+                       call_netdevice_notifiers(NETDEV_NOTIFY_PEERS,
+                                                bond->dev);
++              }
+               if (should_notify_rtnl) {
+                       bond_slave_state_notify(bond);
+                       bond_slave_link_notify(bond);
+diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c 
b/drivers/net/ethernet/intel/ice/ice_ethtool.c
+index fc9ff985a62bd..b297a3ca22fc8 100644
+--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
++++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
+@@ -2337,6 +2337,42 @@ ice_setup_autoneg(struct ice_port_info *p, struct 
ethtool_link_ksettings *ks,
+       return err;
+ }
+ 
++/**
++ * ice_set_phy_type_from_speed - set phy_types based on speeds
++ * and advertised modes
++ * @ks: ethtool link ksettings struct
++ * @phy_type_low: pointer to the lower part of phy_type
++ * @phy_type_high: pointer to the higher part of phy_type
++ * @adv_link_speed: targeted link speeds bitmap
++ */
++static void
++ice_set_phy_type_from_speed(const struct ethtool_link_ksettings *ks,
++                          u64 *phy_type_low, u64 *phy_type_high,
++                          u16 adv_link_speed)
++{
++      /* Handle 1000M speed in a special way because ice_update_phy_type
++       * enables all link modes, but having mixed copper and optical
++       * standards is not supported.
++       */
++      adv_link_speed &= ~ICE_AQ_LINK_SPEED_1000MB;
++
++      if (ethtool_link_ksettings_test_link_mode(ks, advertising,
++                                                1000baseT_Full))
++              *phy_type_low |= ICE_PHY_TYPE_LOW_1000BASE_T |
++                               ICE_PHY_TYPE_LOW_1G_SGMII;
++
++      if (ethtool_link_ksettings_test_link_mode(ks, advertising,
++                                                1000baseKX_Full))
++              *phy_type_low |= ICE_PHY_TYPE_LOW_1000BASE_KX;
++
++      if (ethtool_link_ksettings_test_link_mode(ks, advertising,
++                                                1000baseX_Full))
++              *phy_type_low |= ICE_PHY_TYPE_LOW_1000BASE_SX |
++                               ICE_PHY_TYPE_LOW_1000BASE_LX;
++
++      ice_update_phy_type(phy_type_low, phy_type_high, adv_link_speed);
++}
++
+ /**
+  * ice_set_link_ksettings - Set Speed and Duplex
+  * @netdev: network interface device structure
+@@ -2472,7 +2508,8 @@ ice_set_link_ksettings(struct net_device *netdev,
+               adv_link_speed = curr_link_speed;
+ 
+       /* Convert the advertise link speeds to their corresponded PHY_TYPE */
+-      ice_update_phy_type(&phy_type_low, &phy_type_high, adv_link_speed);
++      ice_set_phy_type_from_speed(ks, &phy_type_low, &phy_type_high,
++                                  adv_link_speed);
+ 
+       if (!autoneg_changed && adv_link_speed == curr_link_speed) {
+               netdev_info(netdev, "Nothing changed, exiting without setting 
anything.\n");
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c 
b/drivers/net/ethernet/intel/igb/igb_main.c
+index 26c8d09ad4ddb..8734dfd001bbd 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -9404,11 +9404,10 @@ static void igb_init_dmac(struct igb_adapter *adapter, 
u32 pba)
+       struct e1000_hw *hw = &adapter->hw;
+       u32 dmac_thr;
+       u16 hwm;
++      u32 reg;
+ 
+       if (hw->mac.type > e1000_82580) {
+               if (adapter->flags & IGB_FLAG_DMAC) {
+-                      u32 reg;
+-
+                       /* force threshold to 0. */
+                       wr32(E1000_DMCTXTH, 0);
+ 
+@@ -9441,7 +9440,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, 
u32 pba)
+                       /* Disable BMC-to-OS Watchdog Enable */
+                       if (hw->mac.type != e1000_i354)
+                               reg &= ~E1000_DMACR_DC_BMC2OSW_EN;
+-
+                       wr32(E1000_DMACR, reg);
+ 
+                       /* no lower threshold to disable
+@@ -9458,12 +9456,12 @@ static void igb_init_dmac(struct igb_adapter *adapter, 
u32 pba)
+                        */
+                       wr32(E1000_DMCTXTH, (IGB_MIN_TXPBSIZE -
+                            (IGB_TX_BUF_4096 + adapter->max_frame_size)) >> 6);
++              }
+ 
+-                      /* make low power state decision controlled
+-                       * by DMA coal
+-                       */
++              if (hw->mac.type >= e1000_i210 ||
++                  (adapter->flags & IGB_FLAG_DMAC)) {
+                       reg = rd32(E1000_PCIEMISC);
+-                      reg &= ~E1000_PCIEMISC_LX_DECISION;
++                      reg |= E1000_PCIEMISC_LX_DECISION;
+                       wr32(E1000_PCIEMISC, reg);
+               } /* endif adapter->dmac is not disabled */
+       } else if (hw->mac.type == e1000_82580) {
+diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c
+index 975789d9349dc..75d8351ee2506 100644
+--- a/drivers/net/phy/aquantia_main.c
++++ b/drivers/net/phy/aquantia_main.c
+@@ -34,6 +34,8 @@
+ #define MDIO_AN_VEND_PROV                     0xc400
+ #define MDIO_AN_VEND_PROV_1000BASET_FULL      BIT(15)
+ #define MDIO_AN_VEND_PROV_1000BASET_HALF      BIT(14)
++#define MDIO_AN_VEND_PROV_5000BASET_FULL      BIT(11)
++#define MDIO_AN_VEND_PROV_2500BASET_FULL      BIT(10)
+ #define MDIO_AN_VEND_PROV_DOWNSHIFT_EN                BIT(4)
+ #define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK      GENMASK(3, 0)
+ #define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT      4
+@@ -230,9 +232,20 @@ static int aqr_config_aneg(struct phy_device *phydev)
+                             phydev->advertising))
+               reg |= MDIO_AN_VEND_PROV_1000BASET_HALF;
+ 
++      /* Handle the case when the 2.5G and 5G speeds are not advertised */
++      if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
++                            phydev->advertising))
++              reg |= MDIO_AN_VEND_PROV_2500BASET_FULL;
++
++      if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
++                            phydev->advertising))
++              reg |= MDIO_AN_VEND_PROV_5000BASET_FULL;
++
+       ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV,
+                                    MDIO_AN_VEND_PROV_1000BASET_HALF |
+-                                   MDIO_AN_VEND_PROV_1000BASET_FULL, reg);
++                                   MDIO_AN_VEND_PROV_1000BASET_FULL |
++                                   MDIO_AN_VEND_PROV_2500BASET_FULL |
++                                   MDIO_AN_VEND_PROV_5000BASET_FULL, reg);
+       if (ret < 0)
+               return ret;
+       if (ret > 0)
+diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
+index 37c2cecd1e503..f4c03518d7d23 100644
+--- a/drivers/net/virtio_net.c
++++ b/drivers/net/virtio_net.c
+@@ -2393,7 +2393,6 @@ static const struct ethtool_ops virtnet_ethtool_ops = {
+ static void virtnet_freeze_down(struct virtio_device *vdev)
+ {
+       struct virtnet_info *vi = vdev->priv;
+-      int i;
+ 
+       /* Make sure no work handler is accessing the device */
+       flush_work(&vi->config_work);
+@@ -2401,14 +2400,8 @@ static void virtnet_freeze_down(struct virtio_device 
*vdev)
+       netif_tx_lock_bh(vi->dev);
+       netif_device_detach(vi->dev);
+       netif_tx_unlock_bh(vi->dev);
+-      cancel_delayed_work_sync(&vi->refill);
+-
+-      if (netif_running(vi->dev)) {
+-              for (i = 0; i < vi->max_queue_pairs; i++) {
+-                      napi_disable(&vi->rq[i].napi);
+-                      virtnet_napi_tx_disable(&vi->sq[i].napi);
+-              }
+-      }
++      if (netif_running(vi->dev))
++              virtnet_close(vi->dev);
+ }
+ 
+ static int init_vqs(struct virtnet_info *vi);
+@@ -2416,7 +2409,7 @@ static int init_vqs(struct virtnet_info *vi);
+ static int virtnet_restore_up(struct virtio_device *vdev)
+ {
+       struct virtnet_info *vi = vdev->priv;
+-      int err, i;
++      int err;
+ 
+       err = init_vqs(vi);
+       if (err)
+@@ -2425,15 +2418,9 @@ static int virtnet_restore_up(struct virtio_device 
*vdev)
+       virtio_device_ready(vdev);
+ 
+       if (netif_running(vi->dev)) {
+-              for (i = 0; i < vi->curr_queue_pairs; i++)
+-                      if (!try_fill_recv(vi, &vi->rq[i], GFP_KERNEL))
+-                              schedule_delayed_work(&vi->refill, 0);
+-
+-              for (i = 0; i < vi->max_queue_pairs; i++) {
+-                      virtnet_napi_enable(vi->rq[i].vq, &vi->rq[i].napi);
+-                      virtnet_napi_tx_enable(vi, vi->sq[i].vq,
+-                                             &vi->sq[i].napi);
+-              }
++              err = virtnet_open(vi->dev);
++              if (err)
++                      return err;
+       }
+ 
+       netif_tx_lock_bh(vi->dev);
+diff --git a/drivers/soc/bcm/brcmstb/pm/pm-arm.c 
b/drivers/soc/bcm/brcmstb/pm/pm-arm.c
+index b1062334e6089..c6ec7d95bcfcc 100644
+--- a/drivers/soc/bcm/brcmstb/pm/pm-arm.c
++++ b/drivers/soc/bcm/brcmstb/pm/pm-arm.c
+@@ -780,6 +780,7 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
+       }
+ 
+       ret = brcmstb_init_sram(dn);
++      of_node_put(dn);
+       if (ret) {
+               pr_err("error setting up SRAM for PM\n");
+               return ret;
+diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
+index d1ab8561e2581..c3df1660cb5c5 100644
+--- a/drivers/tty/vt/vt.c
++++ b/drivers/tty/vt/vt.c
+@@ -4541,16 +4541,8 @@ static int con_font_get(struct vc_data *vc, struct 
console_font_op *op)
+ 
+       if (op->data && font.charcount > op->charcount)
+               rc = -ENOSPC;
+-      if (!(op->flags & KD_FONT_FLAG_OLD)) {
+-              if (font.width > op->width || font.height > op->height) 
+-                      rc = -ENOSPC;
+-      } else {
+-              if (font.width != 8)
+-                      rc = -EIO;
+-              else if ((op->height && font.height > op->height) ||
+-                       font.height > 32)
+-                      rc = -ENOSPC;
+-      }
++      if (font.width > op->width || font.height > op->height)
++              rc = -ENOSPC;
+       if (rc)
+               goto out;
+ 
+@@ -4578,7 +4570,7 @@ static int con_font_set(struct vc_data *vc, struct 
console_font_op *op)
+               return -EINVAL;
+       if (op->charcount > 512)
+               return -EINVAL;
+-      if (op->width <= 0 || op->width > 32 || op->height > 32)
++      if (op->width <= 0 || op->width > 32 || !op->height || op->height > 32)
+               return -EINVAL;
+       size = (op->width+7)/8 * 32 * op->charcount;
+       if (size > max_font_size)
+@@ -4588,31 +4580,6 @@ static int con_font_set(struct vc_data *vc, struct 
console_font_op *op)
+       if (IS_ERR(font.data))
+               return PTR_ERR(font.data);
+ 
+-      if (!op->height) {              /* Need to guess font height [compat] */
+-              int h, i;
+-              u8 *charmap = font.data;
+-
+-              /*
+-               * If from KDFONTOP ioctl, don't allow things which can be done
+-               * in userland,so that we can get rid of this soon
+-               */
+-              if (!(op->flags & KD_FONT_FLAG_OLD)) {
+-                      kfree(font.data);
+-                      return -EINVAL;
+-              }
+-
+-              for (h = 32; h > 0; h--)
+-                      for (i = 0; i < op->charcount; i++)
+-                              if (charmap[32*i+h-1])
+-                                      goto nonzero;
+-
+-              kfree(font.data);
+-              return -EINVAL;
+-
+-      nonzero:
+-              op->height = h;
+-      }
+-
+       font.charcount = op->charcount;
+       font.width = op->width;
+       font.height = op->height;
+diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c
+index 312857168dad3..f623b3859e980 100644
+--- a/drivers/tty/vt/vt_ioctl.c
++++ b/drivers/tty/vt/vt_ioctl.c
+@@ -241,48 +241,6 @@ int vt_waitactive(int n)
+ #define GPLAST 0x3df
+ #define GPNUM (GPLAST - GPFIRST + 1)
+ 
+-
+-
+-static inline int 
+-do_fontx_ioctl(struct vc_data *vc, int cmd, struct consolefontdesc __user 
*user_cfd, int perm, struct console_font_op *op)
+-{
+-      struct consolefontdesc cfdarg;
+-      int i;
+-
+-      if (copy_from_user(&cfdarg, user_cfd, sizeof(struct consolefontdesc))) 
+-              return -EFAULT;
+-      
+-      switch (cmd) {
+-      case PIO_FONTX:
+-              if (!perm)
+-                      return -EPERM;
+-              op->op = KD_FONT_OP_SET;
+-              op->flags = KD_FONT_FLAG_OLD;
+-              op->width = 8;
+-              op->height = cfdarg.charheight;
+-              op->charcount = cfdarg.charcount;
+-              op->data = cfdarg.chardata;
+-              return con_font_op(vc, op);
+-
+-      case GIO_FONTX:
+-              op->op = KD_FONT_OP_GET;
+-              op->flags = KD_FONT_FLAG_OLD;
+-              op->width = 8;
+-              op->height = cfdarg.charheight;
+-              op->charcount = cfdarg.charcount;
+-              op->data = cfdarg.chardata;
+-              i = con_font_op(vc, op);
+-              if (i)
+-                      return i;
+-              cfdarg.charheight = op->height;
+-              cfdarg.charcount = op->charcount;
+-              if (copy_to_user(user_cfd, &cfdarg, sizeof(struct 
consolefontdesc)))
+-                      return -EFAULT;
+-              return 0;
+-      }
+-      return -EINVAL;
+-}
+-
+ static inline int 
+ do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud, int perm, struct 
vc_data *vc)
+ {
+@@ -919,30 +877,6 @@ int vt_ioctl(struct tty_struct *tty,
+               break;
+       }
+ 
+-      case PIO_FONT: {
+-              if (!perm)
+-                      return -EPERM;
+-              op.op = KD_FONT_OP_SET;
+-              op.flags = KD_FONT_FLAG_OLD | KD_FONT_FLAG_DONT_RECALC; /* 
Compatibility */
+-              op.width = 8;
+-              op.height = 0;
+-              op.charcount = 256;
+-              op.data = up;
+-              ret = con_font_op(vc, &op);
+-              break;
+-      }
+-
+-      case GIO_FONT: {
+-              op.op = KD_FONT_OP_GET;
+-              op.flags = KD_FONT_FLAG_OLD;
+-              op.width = 8;
+-              op.height = 32;
+-              op.charcount = 256;
+-              op.data = up;
+-              ret = con_font_op(vc, &op);
+-              break;
+-      }
+-
+       case PIO_CMAP:
+                 if (!perm)
+                       ret = -EPERM;
+@@ -954,36 +888,6 @@ int vt_ioctl(struct tty_struct *tty,
+                 ret = con_get_cmap(up);
+               break;
+ 
+-      case PIO_FONTX:
+-      case GIO_FONTX:
+-              ret = do_fontx_ioctl(vc, cmd, up, perm, &op);
+-              break;
+-
+-      case PIO_FONTRESET:
+-      {
+-              if (!perm)
+-                      return -EPERM;
+-
+-#ifdef BROKEN_GRAPHICS_PROGRAMS
+-              /* With BROKEN_GRAPHICS_PROGRAMS defined, the default
+-                 font is not saved. */
+-              ret = -ENOSYS;
+-              break;
+-#else
+-              {
+-              op.op = KD_FONT_OP_SET_DEFAULT;
+-              op.data = NULL;
+-              ret = con_font_op(vc, &op);
+-              if (ret)
+-                      break;
+-              console_lock();
+-              con_set_default_unimap(vc);
+-              console_unlock();
+-              break;
+-              }
+-#endif
+-      }
+-
+       case KDFONTOP: {
+               if (copy_from_user(&op, up, sizeof(op))) {
+                       ret = -EFAULT;
+@@ -1097,54 +1001,6 @@ void vc_SAK(struct work_struct *work)
+ 
+ #ifdef CONFIG_COMPAT
+ 
+-struct compat_consolefontdesc {
+-      unsigned short charcount;       /* characters in font (256 or 512) */
+-      unsigned short charheight;      /* scan lines per character (1-32) */
+-      compat_caddr_t chardata;        /* font data in expanded form */
+-};
+-
+-static inline int
+-compat_fontx_ioctl(struct vc_data *vc, int cmd,
+-                 struct compat_consolefontdesc __user *user_cfd,
+-                 int perm, struct console_font_op *op)
+-{
+-      struct compat_consolefontdesc cfdarg;
+-      int i;
+-
+-      if (copy_from_user(&cfdarg, user_cfd, sizeof(struct 
compat_consolefontdesc)))
+-              return -EFAULT;
+-
+-      switch (cmd) {
+-      case PIO_FONTX:
+-              if (!perm)
+-                      return -EPERM;
+-              op->op = KD_FONT_OP_SET;
+-              op->flags = KD_FONT_FLAG_OLD;
+-              op->width = 8;
+-              op->height = cfdarg.charheight;
+-              op->charcount = cfdarg.charcount;
+-              op->data = compat_ptr(cfdarg.chardata);
+-              return con_font_op(vc, op);
+-
+-      case GIO_FONTX:
+-              op->op = KD_FONT_OP_GET;
+-              op->flags = KD_FONT_FLAG_OLD;
+-              op->width = 8;
+-              op->height = cfdarg.charheight;
+-              op->charcount = cfdarg.charcount;
+-              op->data = compat_ptr(cfdarg.chardata);
+-              i = con_font_op(vc, op);
+-              if (i)
+-                      return i;
+-              cfdarg.charheight = op->height;
+-              cfdarg.charcount = op->charcount;
+-              if (copy_to_user(user_cfd, &cfdarg, sizeof(struct 
compat_consolefontdesc)))
+-                      return -EFAULT;
+-              return 0;
+-      }
+-      return -EINVAL;
+-}
+-
+ struct compat_console_font_op {
+       compat_uint_t op;        /* operation code KD_FONT_OP_* */
+       compat_uint_t flags;     /* KD_FONT_FLAG_* */
+@@ -1221,9 +1077,6 @@ long vt_compat_ioctl(struct tty_struct *tty,
+       /*
+        * these need special handlers for incompatible data structures
+        */
+-      case PIO_FONTX:
+-      case GIO_FONTX:
+-              return compat_fontx_ioctl(vc, cmd, up, perm, &op);
+ 
+       case KDFONTOP:
+               return compat_kdfontop_ioctl(up, perm, &op, vc);
+diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
+index 8f18e7b6cadf4..21c299c85505d 100644
+--- a/drivers/usb/chipidea/udc.c
++++ b/drivers/usb/chipidea/udc.c
+@@ -921,6 +921,9 @@ isr_setup_status_complete(struct usb_ep *ep, struct 
usb_request *req)
+       struct ci_hdrc *ci = req->context;
+       unsigned long flags;
+ 
++      if (req->status < 0)
++              return;
++
+       if (ci->setaddr) {
+               hw_usb_set_address(ci, ci->address);
+               ci->setaddr = false;
+diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
+index dd46c15c4853f..9c066d1c512b1 100644
+--- a/drivers/usb/host/xhci-hub.c
++++ b/drivers/usb/host/xhci-hub.c
+@@ -566,7 +566,7 @@ struct xhci_hub *xhci_get_rhub(struct usb_hcd *hcd)
+  * It will release and re-aquire the lock while calling ACPI
+  * method.
+  */
+-static void xhci_set_port_power(struct xhci_hcd *xhci, struct usb_hcd *hcd,
++void xhci_set_port_power(struct xhci_hcd *xhci, struct usb_hcd *hcd,
+                               u16 index, bool on, unsigned long *flags)
+ {
+       struct xhci_hub *rhub;
+diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
+index 2f59d447411b5..9fe35bb67731e 100644
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -775,6 +775,8 @@ static void xhci_stop(struct usb_hcd *hcd)
+ void xhci_shutdown(struct usb_hcd *hcd)
+ {
+       struct xhci_hcd *xhci = hcd_to_xhci(hcd);
++      unsigned long flags;
++      int i;
+ 
+       if (xhci->quirks & XHCI_SPURIOUS_REBOOT)
+               usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev));
+@@ -790,12 +792,21 @@ void xhci_shutdown(struct usb_hcd *hcd)
+               del_timer_sync(&xhci->shared_hcd->rh_timer);
+       }
+ 
+-      spin_lock_irq(&xhci->lock);
++      spin_lock_irqsave(&xhci->lock, flags);
+       xhci_halt(xhci);
++
++      /* Power off USB2 ports*/
++      for (i = 0; i < xhci->usb2_rhub.num_ports; i++)
++              xhci_set_port_power(xhci, xhci->main_hcd, i, false, &flags);
++
++      /* Power off USB3 ports*/
++      for (i = 0; i < xhci->usb3_rhub.num_ports; i++)
++              xhci_set_port_power(xhci, xhci->shared_hcd, i, false, &flags);
++
+       /* Workaround for spurious wakeups at shutdown with HSW */
+       if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
+               xhci_reset(xhci, XHCI_RESET_SHORT_USEC);
+-      spin_unlock_irq(&xhci->lock);
++      spin_unlock_irqrestore(&xhci->lock, flags);
+ 
+       xhci_cleanup_msix(xhci);
+ 
+diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
+index 4b05d767e08f7..a9031f4949842 100644
+--- a/drivers/usb/host/xhci.h
++++ b/drivers/usb/host/xhci.h
+@@ -2155,6 +2155,8 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, 
u16 wValue, u16 wIndex,
+ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf);
+ int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1);
+ struct xhci_hub *xhci_get_rhub(struct usb_hcd *hcd);
++void xhci_set_port_power(struct xhci_hcd *xhci, struct usb_hcd *hcd, u16 
index,
++                       bool on, unsigned long *flags);
+ 
+ void xhci_hc_died(struct xhci_hcd *xhci);
+ 
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index ec4fdb8140917..2317ed357d8ef 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -252,10 +252,12 @@ static void option_instat_callback(struct urb *urb);
+ #define QUECTEL_PRODUCT_EG95                  0x0195
+ #define QUECTEL_PRODUCT_BG96                  0x0296
+ #define QUECTEL_PRODUCT_EP06                  0x0306
++#define QUECTEL_PRODUCT_EM05G                 0x030a
+ #define QUECTEL_PRODUCT_EM12                  0x0512
+ #define QUECTEL_PRODUCT_RM500Q                        0x0800
+ #define QUECTEL_PRODUCT_EC200S_CN             0x6002
+ #define QUECTEL_PRODUCT_EC200T                        0x6026
++#define QUECTEL_PRODUCT_RM500K                        0x7001
+ 
+ #define CMOTECH_VENDOR_ID                     0x16d8
+ #define CMOTECH_PRODUCT_6001                  0x6001
+@@ -1134,6 +1136,8 @@ static const struct usb_device_id option_ids[] = {
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
+         .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
++      { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 
0xff),
++        .driver_info = RSVD(6) | ZLP },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
+         .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
+@@ -1147,6 +1151,7 @@ static const struct usb_device_id option_ids[] = {
+         .driver_info = ZLP },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
++      { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
+ 
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
+@@ -1279,6 +1284,7 @@ static const struct usb_device_id option_ids[] = {
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
+       { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff),    /* 
Telit LE910Cx (RNDIS) */
+         .driver_info = NCTRL(2) | RSVD(3) },
++      { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x1250, 0xff, 0x00, 
0x00) },   /* Telit LE910Cx (rmnet) */
+       { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
+       { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
+diff --git a/drivers/xen/features.c b/drivers/xen/features.c
+index 25c053b096051..2c306de228db3 100644
+--- a/drivers/xen/features.c
++++ b/drivers/xen/features.c
+@@ -29,6 +29,6 @@ void xen_setup_features(void)
+               if (HYPERVISOR_xen_version(XENVER_get_features, &fi) < 0)
+                       break;
+               for (j = 0; j < 32; j++)
+-                      xen_features[i * 32 + j] = !!(fi.submap & 1<<j);
++                      xen_features[i * 32 + j] = !!(fi.submap & 1U << j);
+       }
+ }
+diff --git a/fs/afs/inode.c b/fs/afs/inode.c
+index 90eac3ec01cbc..622363af4c1bf 100644
+--- a/fs/afs/inode.c
++++ b/fs/afs/inode.c
+@@ -739,7 +739,8 @@ int afs_getattr(const struct path *path, struct kstat 
*stat,
+ 
+       _enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
+ 
+-      if (!(query_flags & AT_STATX_DONT_SYNC) &&
++      if (vnode->volume &&
++          !(query_flags & AT_STATX_DONT_SYNC) &&
+           !test_bit(AFS_VNODE_CB_PROMISED, &vnode->flags)) {
+               key = afs_request_key(vnode->volume->cell);
+               if (IS_ERR(key))
+diff --git a/include/linux/kd.h b/include/linux/kd.h
+deleted file mode 100644
+index b130a18f860f0..0000000000000
+--- a/include/linux/kd.h
++++ /dev/null
+@@ -1,8 +0,0 @@
+-/* SPDX-License-Identifier: GPL-2.0 */
+-#ifndef _LINUX_KD_H
+-#define _LINUX_KD_H
+-
+-#include <uapi/linux/kd.h>
+-
+-#define KD_FONT_FLAG_OLD              0x80000000      /* Invoked via old 
interface [compat] */
+-#endif /* _LINUX_KD_H */
+diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h
+index 8ddf79e9207a9..1df12e8dde6f6 100644
+--- a/include/linux/ratelimit.h
++++ b/include/linux/ratelimit.h
+@@ -23,12 +23,16 @@ struct ratelimit_state {
+       unsigned long   flags;
+ };
+ 
+-#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) {               
\
+-              .lock           = __RAW_SPIN_LOCK_UNLOCKED(name.lock),  \
+-              .interval       = interval_init,                        \
+-              .burst          = burst_init,                           \
++#define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 
flags_init) { \
++              .lock           = __RAW_SPIN_LOCK_UNLOCKED(name.lock),          
  \
++              .interval       = interval_init,                                
  \
++              .burst          = burst_init,                                   
  \
++              .flags          = flags_init,                                   
  \
+       }
+ 
++#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
++      RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0)
++
+ #define RATELIMIT_STATE_INIT_DISABLED                                 \
+       RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
+ 
+diff --git a/include/trace/events/libata.h b/include/trace/events/libata.h
+index ab69434e2329e..72e785a903b65 100644
+--- a/include/trace/events/libata.h
++++ b/include/trace/events/libata.h
+@@ -249,6 +249,7 @@ DECLARE_EVENT_CLASS(ata_qc_complete_template,
+               __entry->hob_feature    = qc->result_tf.hob_feature;
+               __entry->nsect          = qc->result_tf.nsect;
+               __entry->hob_nsect      = qc->result_tf.hob_nsect;
++              __entry->flags          = qc->flags;
+       ),
+ 
+       TP_printk("ata_port=%u ata_dev=%u tag=%d flags=%s status=%s " \
+diff --git a/net/core/filter.c b/net/core/filter.c
+index b0df4ddbe30c3..eba96343c7af9 100644
+--- a/net/core/filter.c
++++ b/net/core/filter.c
+@@ -5313,10 +5313,21 @@ __bpf_sk_lookup(struct sk_buff *skb, struct 
bpf_sock_tuple *tuple, u32 len,
+                                          ifindex, proto, netns_id, flags);
+ 
+       if (sk) {
+-              sk = sk_to_full_sk(sk);
+-              if (!sk_fullsock(sk)) {
++              struct sock *sk2 = sk_to_full_sk(sk);
++
++              /* sk_to_full_sk() may return (sk)->rsk_listener, so make sure 
the original sk
++               * sock refcnt is decremented to prevent a request_sock leak.
++               */
++              if (!sk_fullsock(sk2))
++                      sk2 = NULL;
++              if (sk2 != sk) {
+                       sock_gen_put(sk);
+-                      return NULL;
++                      /* Ensure there is no need to bump sk2 refcnt */
++                      if (unlikely(sk2 && !sock_flag(sk2, SOCK_RCU_FREE))) {
++                              WARN_ONCE(1, "Found non-RCU, unreferenced 
socket!");
++                              return NULL;
++                      }
++                      sk = sk2;
+               }
+       }
+ 
+@@ -5350,10 +5361,21 @@ bpf_sk_lookup(struct sk_buff *skb, struct 
bpf_sock_tuple *tuple, u32 len,
+                                        flags);
+ 
+       if (sk) {
+-              sk = sk_to_full_sk(sk);
+-              if (!sk_fullsock(sk)) {
++              struct sock *sk2 = sk_to_full_sk(sk);
++
++              /* sk_to_full_sk() may return (sk)->rsk_listener, so make sure 
the original sk
++               * sock refcnt is decremented to prevent a request_sock leak.
++               */
++              if (!sk_fullsock(sk2))
++                      sk2 = NULL;
++              if (sk2 != sk) {
+                       sock_gen_put(sk);
+-                      return NULL;
++                      /* Ensure there is no need to bump sk2 refcnt */
++                      if (unlikely(sk2 && !sock_flag(sk2, SOCK_RCU_FREE))) {
++                              WARN_ONCE(1, "Found non-RCU, unreferenced 
socket!");
++                              return NULL;
++                      }
++                      sk = sk2;
+               }
+       }
+ 
+diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
+index 614410a6db44b..52dbffb7bc2fd 100644
+--- a/net/ipv4/ip_gre.c
++++ b/net/ipv4/ip_gre.c
+@@ -497,7 +497,6 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct 
net_device *dev)
+       int tunnel_hlen;
+       int version;
+       int nhoff;
+-      int thoff;
+ 
+       tun_info = skb_tunnel_info(skb);
+       if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) ||
+@@ -531,10 +530,16 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct 
net_device *dev)
+           (ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff))
+               truncate = true;
+ 
+-      thoff = skb_transport_header(skb) - skb_mac_header(skb);
+-      if (skb->protocol == htons(ETH_P_IPV6) &&
+-          (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff))
+-              truncate = true;
++      if (skb->protocol == htons(ETH_P_IPV6)) {
++              int thoff;
++
++              if (skb_transport_header_was_set(skb))
++                      thoff = skb_transport_header(skb) - skb_mac_header(skb);
++              else
++                      thoff = nhoff + sizeof(struct ipv6hdr);
++              if (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff)
++                      truncate = true;
++      }
+ 
+       if (version == 1) {
+               erspan_build_header(skb, ntohl(tunnel_id_to_key32(key->tun_id)),
+diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
+index e550db28aabb5..4a6396d574a0d 100644
+--- a/net/ipv6/ip6_gre.c
++++ b/net/ipv6/ip6_gre.c
+@@ -927,7 +927,6 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff 
*skb,
+       __be16 proto;
+       __u32 mtu;
+       int nhoff;
+-      int thoff;
+ 
+       if (!pskb_inet_may_pull(skb))
+               goto tx_err;
+@@ -948,10 +947,16 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff 
*skb,
+           (ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff))
+               truncate = true;
+ 
+-      thoff = skb_transport_header(skb) - skb_mac_header(skb);
+-      if (skb->protocol == htons(ETH_P_IPV6) &&
+-          (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff))
+-              truncate = true;
++      if (skb->protocol == htons(ETH_P_IPV6)) {
++              int thoff;
++
++              if (skb_transport_header_was_set(skb))
++                      thoff = skb_transport_header(skb) - skb_mac_header(skb);
++              else
++                      thoff = nhoff + sizeof(struct ipv6hdr);
++              if (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff)
++                      truncate = true;
++      }
+ 
+       if (skb_cow_head(skb, dev->needed_headroom ?: t->hlen))
+               goto tx_err;
+diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
+index 38147e6a20f53..989175ce81d4d 100644
+--- a/net/openvswitch/flow.c
++++ b/net/openvswitch/flow.c
+@@ -265,7 +265,7 @@ static int parse_ipv6hdr(struct sk_buff *skb, struct 
sw_flow_key *key)
+       if (flags & IP6_FH_F_FRAG) {
+               if (frag_off) {
+                       key->ip.frag = OVS_FRAG_TYPE_LATER;
+-                      key->ip.proto = nexthdr;
++                      key->ip.proto = NEXTHDR_FRAGMENT;
+                       return 0;
+               }
+               key->ip.frag = OVS_FRAG_TYPE_FIRST;
+diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
+index f4101a920d1f9..1802f134aa407 100644
+--- a/net/sched/sch_netem.c
++++ b/net/sched/sch_netem.c
+@@ -1146,9 +1146,9 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff 
*skb)
+       struct tc_netem_rate rate;
+       struct tc_netem_slot slot;
+ 
+-      qopt.latency = min_t(psched_tdiff_t, PSCHED_NS2TICKS(q->latency),
++      qopt.latency = min_t(psched_time_t, PSCHED_NS2TICKS(q->latency),
+                            UINT_MAX);
+-      qopt.jitter = min_t(psched_tdiff_t, PSCHED_NS2TICKS(q->jitter),
++      qopt.jitter = min_t(psched_time_t, PSCHED_NS2TICKS(q->jitter),
+                           UINT_MAX);
+       qopt.limit = q->limit;
+       qopt.loss = q->loss;
+diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
+index 59011ddf8bb80..e5aeaf72dcdb8 100644
+--- a/scripts/mod/modpost.c
++++ b/scripts/mod/modpost.c
+@@ -1131,7 +1131,7 @@ static const struct sectioncheck sectioncheck[] = {
+ },
+ /* Do not export init/exit functions or data */
+ {
+-      .fromsec = { "__ksymtab*", NULL },
++      .fromsec = { "___ksymtab*", NULL },
+       .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
+       .mismatch = EXPORT_TO_INIT_EXIT,
+       .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
+diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
+index c0b6881b06729..b81b0a1bada56 100644
+--- a/sound/pci/hda/patch_conexant.c
++++ b/sound/pci/hda/patch_conexant.c
+@@ -1048,11 +1048,11 @@ static int patch_conexant_auto(struct hda_codec *codec)
+       if (err < 0)
+               goto error;
+ 
+-      err = snd_hda_gen_parse_auto_config(codec, &spec->gen.autocfg);
++      err = cx_auto_parse_beep(codec);
+       if (err < 0)
+               goto error;
+ 
+-      err = cx_auto_parse_beep(codec);
++      err = snd_hda_gen_parse_auto_config(codec, &spec->gen.autocfg);
+       if (err < 0)
+               goto error;
+ 
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 8c37de7793463..804fc0d331b4f 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -2585,6 +2585,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
+       SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
+       SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
+       SND_PCI_QUIRK(0x1558, 0x67f1, "Clevo PC70H[PRS]", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
++      SND_PCI_QUIRK(0x1558, 0x67f5, "Clevo PD70PN[NRT]", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
+       SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
+       SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170SM", 
ALC1220_FIXUP_CLEVO_PB51ED_PINS),
+       SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", 
ALC1220_FIXUP_CLEVO_PB51ED),
+@@ -9805,6 +9806,7 @@ enum {
+       ALC668_FIXUP_MIC_DET_COEF,
+       ALC897_FIXUP_LENOVO_HEADSET_MIC,
+       ALC897_FIXUP_HEADSET_MIC_PIN,
++      ALC897_FIXUP_HP_HSMIC_VERB,
+ };
+ 
+ static const struct hda_fixup alc662_fixups[] = {
+@@ -10224,6 +10226,13 @@ static const struct hda_fixup alc662_fixups[] = {
+               .chained = true,
+               .chain_id = ALC897_FIXUP_LENOVO_HEADSET_MIC
+       },
++      [ALC897_FIXUP_HP_HSMIC_VERB] = {
++              .type = HDA_FIXUP_PINS,
++              .v.pins = (const struct hda_pintbl[]) {
++                      { 0x19, 0x01a1913c }, /* use as headset mic, without 
its own jack detect */
++                      { }
++              },
++      },
+ };
+ 
+ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+@@ -10249,6 +10258,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = 
{
+       SND_PCI_QUIRK(0x1028, 0x0698, "Dell", 
ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x069f, "Dell", 
ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
++      SND_PCI_QUIRK(0x103c, 0x8719, "HP", ALC897_FIXUP_HP_HSMIC_VERB),
+       SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2),
+       SND_PCI_QUIRK(0x103c, 0x885f, "HP 288 Pro G8", 
ALC671_FIXUP_HP_HEADSET_MIC2),
+       SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", 
ALC668_FIXUP_HEADSET_MODE),
+diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
+index a5c1a2c4eae4e..3edb4e25797de 100644
+--- a/sound/pci/hda/patch_via.c
++++ b/sound/pci/hda/patch_via.c
+@@ -520,11 +520,11 @@ static int via_parse_auto_config(struct hda_codec *codec)
+       if (err < 0)
+               return err;
+ 
+-      err = snd_hda_gen_parse_auto_config(codec, &spec->gen.autocfg);
++      err = auto_parse_beep(codec);
+       if (err < 0)
+               return err;
+ 
+-      err = auto_parse_beep(codec);
++      err = snd_hda_gen_parse_auto_config(codec, &spec->gen.autocfg);
+       if (err < 0)
+               return err;
+ 

Reply via email to