commit:     b3195aaa3564dbf37052c690cd197a7d7719ed90
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 29 12:30:12 2020 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Jul 29 12:30:12 2020 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=b3195aaa

Linux patch 4.14.190

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

 0000_README               |    4 +
 1189_linux-4.14.190.patch | 1865 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1869 insertions(+)

diff --git a/0000_README b/0000_README
index efdaf30..d75f6b6 100644
--- a/0000_README
+++ b/0000_README
@@ -799,6 +799,10 @@ Patch:  1188_linux-4.14.189.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.189
 
+Patch:  1189_linux-4.14.190.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.190
+
 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/1189_linux-4.14.190.patch b/1189_linux-4.14.190.patch
new file mode 100644
index 0000000..a6b1281
--- /dev/null
+++ b/1189_linux-4.14.190.patch
@@ -0,0 +1,1865 @@
+diff --git a/Makefile b/Makefile
+index 01c1860b1316..4e5f6615fd98 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 189
++SUBLEVEL = 190
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+@@ -482,7 +482,7 @@ ifeq ($(cc-name),clang)
+ ifneq ($(CROSS_COMPILE),)
+ CLANG_FLAGS   += --target=$(notdir $(CROSS_COMPILE:%-=%))
+ GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
+-CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)
++CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
+ GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
+ endif
+ ifneq ($(GCC_TOOLCHAIN),)
+diff --git a/arch/arm64/kernel/debug-monitors.c 
b/arch/arm64/kernel/debug-monitors.c
+index db7ed460a547..2ccd0a99d8b3 100644
+--- a/arch/arm64/kernel/debug-monitors.c
++++ b/arch/arm64/kernel/debug-monitors.c
+@@ -389,14 +389,14 @@ void user_rewind_single_step(struct task_struct *task)
+        * If single step is active for this thread, then set SPSR.SS
+        * to 1 to avoid returning to the active-pending state.
+        */
+-      if (test_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP))
++      if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
+               set_regs_spsr_ss(task_pt_regs(task));
+ }
+ NOKPROBE_SYMBOL(user_rewind_single_step);
+ 
+ void user_fastforward_single_step(struct task_struct *task)
+ {
+-      if (test_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP))
++      if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
+               clear_regs_spsr_ss(task_pt_regs(task));
+ }
+ 
+diff --git a/arch/parisc/include/asm/atomic.h 
b/arch/parisc/include/asm/atomic.h
+index bc54addd589f..614bcc7673f5 100644
+--- a/arch/parisc/include/asm/atomic.h
++++ b/arch/parisc/include/asm/atomic.h
+@@ -258,6 +258,8 @@ atomic64_set(atomic64_t *v, s64 i)
+       _atomic_spin_unlock_irqrestore(v, flags);
+ }
+ 
++#define atomic64_set_release(v, i)    atomic64_set((v), (i))
++
+ static __inline__ s64
+ atomic64_read(const atomic64_t *v)
+ {
+diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
+index 2271adbc3c42..b5652233e674 100644
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -2233,12 +2233,12 @@ static int mp_irqdomain_create(int ioapic)
+       ip->irqdomain = irq_domain_create_linear(fn, hwirqs, cfg->ops,
+                                                (void *)(long)ioapic);
+ 
+-      /* Release fw handle if it was allocated above */
+-      if (!cfg->dev)
+-              irq_domain_free_fwnode(fn);
+-
+-      if (!ip->irqdomain)
++      if (!ip->irqdomain) {
++              /* Release fw handle if it was allocated above */
++              if (!cfg->dev)
++                      irq_domain_free_fwnode(fn);
+               return -ENOMEM;
++      }
+ 
+       ip->irqdomain->parent = parent;
+ 
+diff --git a/arch/x86/kernel/apic/msi.c b/arch/x86/kernel/apic/msi.c
+index f10e7f93b0e2..8c102d62b859 100644
+--- a/arch/x86/kernel/apic/msi.c
++++ b/arch/x86/kernel/apic/msi.c
+@@ -149,10 +149,11 @@ void __init arch_init_msi_domain(struct irq_domain 
*parent)
+               msi_default_domain =
+                       pci_msi_create_irq_domain(fn, &pci_msi_domain_info,
+                                                 parent);
+-              irq_domain_free_fwnode(fn);
+       }
+-      if (!msi_default_domain)
++      if (!msi_default_domain) {
++              irq_domain_free_fwnode(fn);
+               pr_warn("failed to initialize irqdomain for MSI/MSI-x.\n");
++      }
+ }
+ 
+ #ifdef CONFIG_IRQ_REMAP
+@@ -185,7 +186,8 @@ struct irq_domain *arch_create_remap_msi_irq_domain(struct 
irq_domain *parent,
+       if (!fn)
+               return NULL;
+       d = pci_msi_create_irq_domain(fn, &pci_msi_ir_domain_info, parent);
+-      irq_domain_free_fwnode(fn);
++      if (!d)
++              irq_domain_free_fwnode(fn);
+       return d;
+ }
+ #endif
+@@ -248,7 +250,8 @@ static struct irq_domain *dmar_get_irq_domain(void)
+       if (fn) {
+               dmar_domain = msi_create_irq_domain(fn, &dmar_msi_domain_info,
+                                                   x86_vector_domain);
+-              irq_domain_free_fwnode(fn);
++              if (!dmar_domain)
++                      irq_domain_free_fwnode(fn);
+       }
+ out:
+       mutex_unlock(&dmar_lock);
+@@ -373,7 +376,10 @@ struct irq_domain *hpet_create_irq_domain(int hpet_id)
+       }
+ 
+       d = msi_create_irq_domain(fn, domain_info, parent);
+-      irq_domain_free_fwnode(fn);
++      if (!d) {
++              irq_domain_free_fwnode(fn);
++              kfree(domain_info);
++      }
+       return d;
+ }
+ 
+diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
+index b958082c74a7..36cd34524ac1 100644
+--- a/arch/x86/kernel/apic/vector.c
++++ b/arch/x86/kernel/apic/vector.c
+@@ -457,7 +457,6 @@ int __init arch_early_irq_init(void)
+       x86_vector_domain = irq_domain_create_tree(fn, &x86_vector_domain_ops,
+                                                  NULL);
+       BUG_ON(x86_vector_domain == NULL);
+-      irq_domain_free_fwnode(fn);
+       irq_set_default_host(x86_vector_domain);
+ 
+       arch_init_msi_domain(x86_vector_domain);
+diff --git a/arch/x86/math-emu/wm_sqrt.S b/arch/x86/math-emu/wm_sqrt.S
+index f031c0e19356..515cdee90df7 100644
+--- a/arch/x86/math-emu/wm_sqrt.S
++++ b/arch/x86/math-emu/wm_sqrt.S
+@@ -209,7 +209,7 @@ sqrt_stage_2_finish:
+ 
+ #ifdef PARANOID
+ /* It should be possible to get here only if the arg is ffff....ffff */
+-      cmp     $0xffffffff,FPU_fsqrt_arg_1
++      cmpl    $0xffffffff,FPU_fsqrt_arg_1
+       jnz     sqrt_stage_2_error
+ #endif /* PARANOID */
+ 
+diff --git a/arch/x86/platform/uv/uv_irq.c b/arch/x86/platform/uv/uv_irq.c
+index 03fc397335b7..c9fc725a1dcf 100644
+--- a/arch/x86/platform/uv/uv_irq.c
++++ b/arch/x86/platform/uv/uv_irq.c
+@@ -171,9 +171,10 @@ static struct irq_domain *uv_get_irq_domain(void)
+               goto out;
+ 
+       uv_domain = irq_domain_create_tree(fn, &uv_domain_ops, NULL);
+-      irq_domain_free_fwnode(fn);
+       if (uv_domain)
+               uv_domain->parent = x86_vector_domain;
++      else
++              irq_domain_free_fwnode(fn);
+ out:
+       mutex_unlock(&uv_lock);
+ 
+diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c
+index 92fb20777bb0..a19c61b26142 100644
+--- a/arch/xtensa/kernel/setup.c
++++ b/arch/xtensa/kernel/setup.c
+@@ -711,7 +711,8 @@ c_start(struct seq_file *f, loff_t *pos)
+ static void *
+ c_next(struct seq_file *f, void *v, loff_t *pos)
+ {
+-      return NULL;
++      ++*pos;
++      return c_start(f, pos);
+ }
+ 
+ static void
+diff --git a/arch/xtensa/kernel/xtensa_ksyms.c 
b/arch/xtensa/kernel/xtensa_ksyms.c
+index dc7b470a423a..58b79e2ea569 100644
+--- a/arch/xtensa/kernel/xtensa_ksyms.c
++++ b/arch/xtensa/kernel/xtensa_ksyms.c
+@@ -82,13 +82,13 @@ void __xtensa_libgcc_window_spill(void)
+ }
+ EXPORT_SYMBOL(__xtensa_libgcc_window_spill);
+ 
+-unsigned long __sync_fetch_and_and_4(unsigned long *p, unsigned long v)
++unsigned int __sync_fetch_and_and_4(volatile void *p, unsigned int v)
+ {
+       BUG();
+ }
+ EXPORT_SYMBOL(__sync_fetch_and_and_4);
+ 
+-unsigned long __sync_fetch_and_or_4(unsigned long *p, unsigned long v)
++unsigned int __sync_fetch_and_or_4(volatile void *p, unsigned int v)
+ {
+       BUG();
+ }
+diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
+index 41474eec2181..f89ea0866892 100644
+--- a/drivers/android/binder_alloc.c
++++ b/drivers/android/binder_alloc.c
+@@ -968,7 +968,7 @@ enum lru_status binder_alloc_free_page(struct list_head 
*item,
+               trace_binder_unmap_user_end(alloc, index);
+       }
+       up_read(&mm->mmap_sem);
+-      mmput(mm);
++      mmput_async(mm);
+ 
+       trace_binder_unmap_kernel_start(alloc, index);
+ 
+diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
+index 013d0a2b3ba0..4e0cc40ad9ce 100644
+--- a/drivers/base/regmap/regmap.c
++++ b/drivers/base/regmap/regmap.c
+@@ -1242,7 +1242,7 @@ static int dev_get_regmap_match(struct device *dev, void 
*res, void *data)
+ 
+       /* If the user didn't specify a name match any */
+       if (data)
+-              return (*r)->name == data;
++              return !strcmp((*r)->name, data);
+       else
+               return 1;
+ }
+diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c
+index e3899ae429e0..4c2b41beaf63 100644
+--- a/drivers/dma/ioat/dma.c
++++ b/drivers/dma/ioat/dma.c
+@@ -38,6 +38,18 @@
+ 
+ #include "../dmaengine.h"
+ 
++int completion_timeout = 200;
++module_param(completion_timeout, int, 0644);
++MODULE_PARM_DESC(completion_timeout,
++              "set ioat completion timeout [msec] (default 200 [msec])");
++int idle_timeout = 2000;
++module_param(idle_timeout, int, 0644);
++MODULE_PARM_DESC(idle_timeout,
++              "set ioat idel timeout [msec] (default 2000 [msec])");
++
++#define IDLE_TIMEOUT msecs_to_jiffies(idle_timeout)
++#define COMPLETION_TIMEOUT msecs_to_jiffies(completion_timeout)
++
+ static char *chanerr_str[] = {
+       "DMA Transfer Source Address Error",
+       "DMA Transfer Destination Address Error",
+diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h
+index 56200eefcf5e..01f929957230 100644
+--- a/drivers/dma/ioat/dma.h
++++ b/drivers/dma/ioat/dma.h
+@@ -111,8 +111,6 @@ struct ioatdma_chan {
+       #define IOAT_RUN 5
+       #define IOAT_CHAN_ACTIVE 6
+       struct timer_list timer;
+-      #define COMPLETION_TIMEOUT msecs_to_jiffies(100)
+-      #define IDLE_TIMEOUT msecs_to_jiffies(2000)
+       #define RESET_DELAY msecs_to_jiffies(100)
+       struct ioatdma_device *ioat_dma;
+       dma_addr_t completion_dma;
+diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c
+index 045351f3549c..86b45198fb96 100644
+--- a/drivers/dma/tegra210-adma.c
++++ b/drivers/dma/tegra210-adma.c
+@@ -583,6 +583,7 @@ static int tegra_adma_alloc_chan_resources(struct dma_chan 
*dc)
+ 
+       ret = pm_runtime_get_sync(tdc2dev(tdc));
+       if (ret < 0) {
++              pm_runtime_put_noidle(tdc2dev(tdc));
+               free_irq(tdc->irq, tdc);
+               return ret;
+       }
+@@ -764,8 +765,10 @@ static int tegra_adma_probe(struct platform_device *pdev)
+       pm_runtime_enable(&pdev->dev);
+ 
+       ret = pm_runtime_get_sync(&pdev->dev);
+-      if (ret < 0)
++      if (ret < 0) {
++              pm_runtime_put_noidle(&pdev->dev);
+               goto rpm_disable;
++      }
+ 
+       ret = tegra_adma_init(tdma);
+       if (ret)
+diff --git a/drivers/gpio/gpio-arizona.c b/drivers/gpio/gpio-arizona.c
+index d4e6ba0301bc..694674dfbf82 100644
+--- a/drivers/gpio/gpio-arizona.c
++++ b/drivers/gpio/gpio-arizona.c
+@@ -69,6 +69,7 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned 
offset)
+               ret = pm_runtime_get_sync(chip->parent);
+               if (ret < 0) {
+                       dev_err(chip->parent, "Failed to resume: %d\n", ret);
++                      pm_runtime_put_autosuspend(chip->parent);
+                       return ret;
+               }
+ 
+@@ -77,12 +78,15 @@ static int arizona_gpio_get(struct gpio_chip *chip, 
unsigned offset)
+               if (ret < 0) {
+                       dev_err(chip->parent, "Failed to drop cache: %d\n",
+                               ret);
++                      pm_runtime_put_autosuspend(chip->parent);
+                       return ret;
+               }
+ 
+               ret = regmap_read(arizona->regmap, reg, &val);
+-              if (ret < 0)
++              if (ret < 0) {
++                      pm_runtime_put_autosuspend(chip->parent);
+                       return ret;
++              }
+ 
+               pm_runtime_mark_last_busy(chip->parent);
+               pm_runtime_put_autosuspend(chip->parent);
+@@ -111,6 +115,7 @@ static int arizona_gpio_direction_out(struct gpio_chip 
*chip,
+               ret = pm_runtime_get_sync(chip->parent);
+               if (ret < 0) {
+                       dev_err(chip->parent, "Failed to resume: %d\n", ret);
++                      pm_runtime_put(chip->parent);
+                       return ret;
+               }
+       }
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
+index c8ab1b5741a3..db7769cb33eb 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
+@@ -118,10 +118,10 @@ g94_i2c_aux_xfer(struct nvkm_i2c_aux *obj, bool retry,
+               if (retries)
+                       udelay(400);
+ 
+-              /* transaction request, wait up to 1ms for it to complete */
++              /* transaction request, wait up to 2ms for it to complete */
+               nvkm_wr32(device, 0x00e4e4 + base, 0x00010000 | ctrl);
+ 
+-              timeout = 1000;
++              timeout = 2000;
+               do {
+                       ctrl = nvkm_rd32(device, 0x00e4e4 + base);
+                       udelay(1);
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
+index 7ef60895f43a..edb6148cbca0 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
+@@ -118,10 +118,10 @@ gm200_i2c_aux_xfer(struct nvkm_i2c_aux *obj, bool retry,
+               if (retries)
+                       udelay(400);
+ 
+-              /* transaction request, wait up to 1ms for it to complete */
++              /* transaction request, wait up to 2ms for it to complete */
+               nvkm_wr32(device, 0x00d954 + base, 0x00010000 | ctrl);
+ 
+-              timeout = 1000;
++              timeout = 2000;
+               do {
+                       ctrl = nvkm_rd32(device, 0x00d954 + base);
+                       udelay(1);
+diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c 
b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+index 82cb93935188..c9f1a8cd5f2a 100644
+--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
++++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+@@ -215,7 +215,7 @@ sun4i_hdmi_connector_detect(struct drm_connector 
*connector, bool force)
+       unsigned long reg;
+ 
+       reg = readl(hdmi->base + SUN4I_HDMI_HPD_REG);
+-      if (reg & SUN4I_HDMI_HPD_HIGH) {
++      if (!(reg & SUN4I_HDMI_HPD_HIGH)) {
+               cec_phys_addr_invalidate(hdmi->cec_adap);
+               return connector_status_disconnected;
+       }
+diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
+index 8ab8f2350bbc..b58ab769aa7b 100644
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -57,6 +57,7 @@ MODULE_PARM_DESC(swap_opt_cmd, "Swap the Option (\"Alt\") 
and Command (\"Flag\")
+ struct apple_sc {
+       unsigned long quirks;
+       unsigned int fn_on;
++      unsigned int fn_found;
+       DECLARE_BITMAP(pressed_numlock, KEY_CNT);
+ };
+ 
+@@ -342,12 +343,15 @@ static int apple_input_mapping(struct hid_device *hdev, 
struct hid_input *hi,
+               struct hid_field *field, struct hid_usage *usage,
+               unsigned long **bit, int *max)
+ {
++      struct apple_sc *asc = hid_get_drvdata(hdev);
++
+       if (usage->hid == (HID_UP_CUSTOM | 0x0003) ||
+                       usage->hid == (HID_UP_MSVENDOR | 0x0003) ||
+                       usage->hid == (HID_UP_HPVENDOR2 | 0x0003)) {
+               /* The fn key on Apple USB keyboards */
+               set_bit(EV_REP, hi->input->evbit);
+               hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN);
++              asc->fn_found = true;
+               apple_setup_input(hi->input);
+               return 1;
+       }
+@@ -374,6 +378,19 @@ static int apple_input_mapped(struct hid_device *hdev, 
struct hid_input *hi,
+       return 0;
+ }
+ 
++static int apple_input_configured(struct hid_device *hdev,
++              struct hid_input *hidinput)
++{
++      struct apple_sc *asc = hid_get_drvdata(hdev);
++
++      if ((asc->quirks & APPLE_HAS_FN) && !asc->fn_found) {
++              hid_info(hdev, "Fn key not found (Apple Wireless Keyboard 
clone?), disabling Fn key handling\n");
++              asc->quirks = 0;
++      }
++
++      return 0;
++}
++
+ static int apple_probe(struct hid_device *hdev,
+               const struct hid_device_id *id)
+ {
+@@ -588,6 +605,7 @@ static struct hid_driver apple_driver = {
+       .event = apple_event,
+       .input_mapping = apple_input_mapping,
+       .input_mapped = apple_input_mapped,
++      .input_configured = apple_input_configured,
+ };
+ module_hid_driver(apple_driver);
+ 
+diff --git a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c 
b/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
+index 681ac9bc68b3..f98c1e1b1dbd 100644
+--- a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
++++ b/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
+@@ -373,6 +373,14 @@ static const struct dmi_system_id 
i2c_hid_dmi_desc_override_table[] = {
+               },
+               .driver_data = (void *)&sipodev_desc
+       },
++      {
++              .ident = "Mediacom FlexBook edge 13",
++              .matches = {
++                      DMI_EXACT_MATCH(DMI_SYS_VENDOR, "MEDIACOM"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, 
"FlexBook_edge13-M-FBE13"),
++              },
++              .driver_data = (void *)&sipodev_desc
++      },
+       {
+               .ident = "Odys Winbook 13",
+               .matches = {
+diff --git a/drivers/hwmon/aspeed-pwm-tacho.c 
b/drivers/hwmon/aspeed-pwm-tacho.c
+index 69b97d45e3cb..e4337e9dda44 100644
+--- a/drivers/hwmon/aspeed-pwm-tacho.c
++++ b/drivers/hwmon/aspeed-pwm-tacho.c
+@@ -878,6 +878,8 @@ static int aspeed_create_fan(struct device *dev,
+       ret = of_property_read_u32(child, "reg", &pwm_port);
+       if (ret)
+               return ret;
++      if (pwm_port >= ARRAY_SIZE(pwm_port_params))
++              return -EINVAL;
+       aspeed_create_pwm_port(priv, (u8)pwm_port);
+ 
+       ret = of_property_count_u8_elems(child, "cooling-levels");
+diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
+index 132c4a405bf8..db9ca8e926ca 100644
+--- a/drivers/i2c/busses/i2c-rcar.c
++++ b/drivers/i2c/busses/i2c-rcar.c
+@@ -817,6 +817,7 @@ static int rcar_unreg_slave(struct i2c_client *slave)
+       /* disable irqs and ensure none is running before clearing ptr */
+       rcar_i2c_write(priv, ICSIER, 0);
+       rcar_i2c_write(priv, ICSCR, 0);
++      rcar_i2c_write(priv, ICSAR, 0); /* Gen2: must be 0 if not using slave */
+ 
+       synchronize_irq(priv->irq);
+       priv->slave = NULL;
+@@ -914,6 +915,8 @@ static int rcar_i2c_probe(struct platform_device *pdev)
+       if (ret < 0)
+               goto out_pm_put;
+ 
++      rcar_i2c_write(priv, ICSAR, 0); /* Gen2: must be 0 if not using slave */
++
+       if (priv->devtype == I2C_RCAR_GEN3) {
+               priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
+               if (!IS_ERR(priv->rstc)) {
+diff --git a/drivers/infiniband/core/umem_odp.c 
b/drivers/infiniband/core/umem_odp.c
+index 57b41125b146..688ce1846911 100644
+--- a/drivers/infiniband/core/umem_odp.c
++++ b/drivers/infiniband/core/umem_odp.c
+@@ -306,7 +306,8 @@ int ib_umem_odp_get(struct ib_ucontext *context, struct 
ib_umem *umem,
+               vma = find_vma(mm, ib_umem_start(umem));
+               if (!vma || !is_vm_hugetlb_page(vma)) {
+                       up_read(&mm->mmap_sem);
+-                      return -EINVAL;
++                      ret_val = -EINVAL;
++                      goto out_mm;
+               }
+               h = hstate_vma(vma);
+               umem->page_shift = huge_page_shift(h);
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 85db184321f7..0714d572e49a 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -182,6 +182,7 @@ static const char * const smbus_pnp_ids[] = {
+       "LEN0093", /* T480 */
+       "LEN0096", /* X280 */
+       "LEN0097", /* X280 -> ALPS trackpoint */
++      "LEN0099", /* X1 Extreme 1st */
+       "LEN009b", /* T580 */
+       "LEN200f", /* T450s */
+       "LEN2044", /* L470  */
+diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
+index 778f167be2d3..494caaa265af 100644
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -4394,9 +4394,10 @@ int amd_iommu_create_irq_domain(struct amd_iommu *iommu)
+       if (!fn)
+               return -ENOMEM;
+       iommu->ir_domain = irq_domain_create_tree(fn, &amd_ir_domain_ops, 
iommu);
+-      irq_domain_free_fwnode(fn);
+-      if (!iommu->ir_domain)
++      if (!iommu->ir_domain) {
++              irq_domain_free_fwnode(fn);
+               return -ENOMEM;
++      }
+ 
+       iommu->ir_domain->parent = arch_get_ir_parent_domain();
+       iommu->msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain,
+diff --git a/drivers/iommu/intel_irq_remapping.c 
b/drivers/iommu/intel_irq_remapping.c
+index 25842b566c39..154949a499c2 100644
+--- a/drivers/iommu/intel_irq_remapping.c
++++ b/drivers/iommu/intel_irq_remapping.c
+@@ -536,8 +536,8 @@ static int intel_setup_irq_remapping(struct intel_iommu 
*iommu)
+                                           0, INTR_REMAP_TABLE_ENTRIES,
+                                           fn, &intel_ir_domain_ops,
+                                           iommu);
+-      irq_domain_free_fwnode(fn);
+       if (!iommu->ir_domain) {
++              irq_domain_free_fwnode(fn);
+               pr_err("IR%d: failed to allocate irqdomain\n", iommu->seq_id);
+               goto out_free_bitmap;
+       }
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index fef599eb822b..1f867e275408 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -4773,15 +4773,19 @@ int bond_create(struct net *net, const char *name)
+       bond_dev->rtnl_link_ops = &bond_link_ops;
+ 
+       res = register_netdevice(bond_dev);
++      if (res < 0) {
++              free_netdev(bond_dev);
++              rtnl_unlock();
++
++              return res;
++      }
+ 
+       netif_carrier_off(bond_dev);
+ 
+       bond_work_init_all(bond);
+ 
+       rtnl_unlock();
+-      if (res < 0)
+-              free_netdev(bond_dev);
+-      return res;
++      return 0;
+ }
+ 
+ static int __net_init bond_net_init(struct net *net)
+diff --git a/drivers/net/bonding/bond_netlink.c 
b/drivers/net/bonding/bond_netlink.c
+index 77babf1417a7..0e95eeb822ea 100644
+--- a/drivers/net/bonding/bond_netlink.c
++++ b/drivers/net/bonding/bond_netlink.c
+@@ -451,11 +451,10 @@ static int bond_newlink(struct net *src_net, struct 
net_device *bond_dev,
+               return err;
+ 
+       err = register_netdevice(bond_dev);
+-
+-      netif_carrier_off(bond_dev);
+       if (!err) {
+               struct bonding *bond = netdev_priv(bond_dev);
+ 
++              netif_carrier_off(bond_dev);
+               bond_work_init_all(bond);
+       }
+ 
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+index 3c78cd1cdd6f..6edbbfc1709a 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+@@ -1287,8 +1287,11 @@ static int bnxt_set_pauseparam(struct net_device *dev,
+       if (epause->tx_pause)
+               link_info->req_flow_ctrl |= BNXT_LINK_PAUSE_TX;
+ 
+-      if (netif_running(dev))
++      if (netif_running(dev)) {
++              mutex_lock(&bp->link_lock);
+               rc = bnxt_hwrm_set_pause(bp);
++              mutex_unlock(&bp->link_lock);
++      }
+       return rc;
+ }
+ 
+diff --git a/drivers/net/ethernet/marvell/sky2.c 
b/drivers/net/ethernet/marvell/sky2.c
+index 5046efdad539..34ae4bf6e716 100644
+--- a/drivers/net/ethernet/marvell/sky2.c
++++ b/drivers/net/ethernet/marvell/sky2.c
+@@ -215,7 +215,7 @@ io_error:
+ 
+ static inline u16 gm_phy_read(struct sky2_hw *hw, unsigned port, u16 reg)
+ {
+-      u16 v;
++      u16 v = 0;
+       __gm_phy_read(hw, port, reg, &v);
+       return v;
+ }
+diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c 
b/drivers/net/ethernet/mellanox/mlxsw/core.c
+index fad26046e159..96f9f267d16d 100644
+--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
+@@ -619,7 +619,7 @@ static int mlxsw_emad_init(struct mlxsw_core *mlxsw_core)
+       err = mlxsw_core_trap_register(mlxsw_core, &mlxsw_emad_rx_listener,
+                                      mlxsw_core);
+       if (err)
+-              return err;
++              goto err_trap_register;
+ 
+       err = mlxsw_core->driver->basic_trap_groups_set(mlxsw_core);
+       if (err)
+@@ -631,6 +631,7 @@ static int mlxsw_emad_init(struct mlxsw_core *mlxsw_core)
+ err_emad_trap_set:
+       mlxsw_core_trap_unregister(mlxsw_core, &mlxsw_emad_rx_listener,
+                                  mlxsw_core);
++err_trap_register:
+       destroy_workqueue(mlxsw_core->emad_wq);
+       return err;
+ }
+diff --git a/drivers/net/ethernet/smsc/smc91x.c 
b/drivers/net/ethernet/smsc/smc91x.c
+index 96ac0d3af6f5..f570a37c68c2 100644
+--- a/drivers/net/ethernet/smsc/smc91x.c
++++ b/drivers/net/ethernet/smsc/smc91x.c
+@@ -2294,7 +2294,7 @@ static int smc_drv_probe(struct platform_device *pdev)
+               ret = try_toggle_control_gpio(&pdev->dev, &lp->power_gpio,
+                                             "power", 0, 0, 100);
+               if (ret)
+-                      return ret;
++                      goto out_free_netdev;
+ 
+               /*
+                * Optional reset GPIO configured? Minimum 100 ns reset needed
+@@ -2303,7 +2303,7 @@ static int smc_drv_probe(struct platform_device *pdev)
+               ret = try_toggle_control_gpio(&pdev->dev, &lp->reset_gpio,
+                                             "reset", 0, 0, 100);
+               if (ret)
+-                      return ret;
++                      goto out_free_netdev;
+ 
+               /*
+                * Need to wait for optional EEPROM to load, max 750 us 
according
+diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
+index d7ba2b813eff..40ef4aeb0ef0 100644
+--- a/drivers/net/hippi/rrunner.c
++++ b/drivers/net/hippi/rrunner.c
+@@ -1250,7 +1250,7 @@ static int rr_open(struct net_device *dev)
+               rrpriv->info = NULL;
+       }
+       if (rrpriv->rx_ctrl) {
+-              pci_free_consistent(pdev, sizeof(struct ring_ctrl),
++              pci_free_consistent(pdev, 256 * sizeof(struct ring_ctrl),
+                                   rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
+               rrpriv->rx_ctrl = NULL;
+       }
+diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
+index c52c016676af..5752280fdb40 100644
+--- a/drivers/net/phy/dp83640.c
++++ b/drivers/net/phy/dp83640.c
+@@ -1339,6 +1339,7 @@ static int dp83640_hwtstamp(struct phy_device *phydev, 
struct ifreq *ifr)
+               dp83640->hwts_rx_en = 1;
+               dp83640->layer = PTP_CLASS_L4;
+               dp83640->version = PTP_CLASS_V1;
++              cfg.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
+               break;
+       case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
+@@ -1346,6 +1347,7 @@ static int dp83640_hwtstamp(struct phy_device *phydev, 
struct ifreq *ifr)
+               dp83640->hwts_rx_en = 1;
+               dp83640->layer = PTP_CLASS_L4;
+               dp83640->version = PTP_CLASS_V2;
++              cfg.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
+               break;
+       case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
+@@ -1353,6 +1355,7 @@ static int dp83640_hwtstamp(struct phy_device *phydev, 
struct ifreq *ifr)
+               dp83640->hwts_rx_en = 1;
+               dp83640->layer = PTP_CLASS_L2;
+               dp83640->version = PTP_CLASS_V2;
++              cfg.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
+               break;
+       case HWTSTAMP_FILTER_PTP_V2_EVENT:
+       case HWTSTAMP_FILTER_PTP_V2_SYNC:
+@@ -1360,6 +1363,7 @@ static int dp83640_hwtstamp(struct phy_device *phydev, 
struct ifreq *ifr)
+               dp83640->hwts_rx_en = 1;
+               dp83640->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
+               dp83640->version = PTP_CLASS_V2;
++              cfg.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
+               break;
+       default:
+               return -ERANGE;
+diff --git a/drivers/net/usb/ax88172a.c b/drivers/net/usb/ax88172a.c
+index 914cac55a7ae..909755ef71ac 100644
+--- a/drivers/net/usb/ax88172a.c
++++ b/drivers/net/usb/ax88172a.c
+@@ -210,6 +210,7 @@ static int ax88172a_bind(struct usbnet *dev, struct 
usb_interface *intf)
+       ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, buf, 0);
+       if (ret < ETH_ALEN) {
+               netdev_err(dev->net, "Failed to read MAC address: %d\n", ret);
++              ret = -EIO;
+               goto free;
+       }
+       memcpy(dev->net->dev_addr, buf, ETH_ALEN);
+diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
+index 0e3f8ed84660..ac34257e9f20 100644
+--- a/drivers/net/wan/lapbether.c
++++ b/drivers/net/wan/lapbether.c
+@@ -308,7 +308,6 @@ static void lapbeth_setup(struct net_device *dev)
+       dev->netdev_ops      = &lapbeth_netdev_ops;
+       dev->needs_free_netdev = true;
+       dev->type            = ARPHRD_X25;
+-      dev->hard_header_len = 3;
+       dev->mtu             = 1000;
+       dev->addr_len        = 0;
+ }
+@@ -329,6 +328,14 @@ static int lapbeth_new_device(struct net_device *dev)
+       if (!ndev)
+               goto out;
+ 
++      /* When transmitting data:
++       * first this driver removes a pseudo header of 1 byte,
++       * then the lapb module prepends an LAPB header of at most 3 bytes,
++       * then this driver prepends a length field of 2 bytes,
++       * then the underlying Ethernet device prepends its own header.
++       */
++      ndev->hard_header_len = -1 + 3 + 2 + dev->hard_header_len;
++
+       lapbeth = netdev_priv(ndev);
+       lapbeth->axdev = ndev;
+ 
+diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c 
b/drivers/net/wireless/ath/ath9k/hif_usb.c
+index 805d88ecc7ac..e80d509bc541 100644
+--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
++++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
+@@ -641,9 +641,9 @@ err:
+ 
+ static void ath9k_hif_usb_rx_cb(struct urb *urb)
+ {
+-      struct sk_buff *skb = (struct sk_buff *) urb->context;
+-      struct hif_device_usb *hif_dev =
+-              usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
++      struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
++      struct hif_device_usb *hif_dev = rx_buf->hif_dev;
++      struct sk_buff *skb = rx_buf->skb;
+       int ret;
+ 
+       if (!skb)
+@@ -683,14 +683,15 @@ resubmit:
+       return;
+ free:
+       kfree_skb(skb);
++      kfree(rx_buf);
+ }
+ 
+ static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
+ {
+-      struct sk_buff *skb = (struct sk_buff *) urb->context;
++      struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
++      struct hif_device_usb *hif_dev = rx_buf->hif_dev;
++      struct sk_buff *skb = rx_buf->skb;
+       struct sk_buff *nskb;
+-      struct hif_device_usb *hif_dev =
+-              usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
+       int ret;
+ 
+       if (!skb)
+@@ -730,11 +731,13 @@ static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
+                       return;
+               }
+ 
++              rx_buf->skb = nskb;
++
+               usb_fill_int_urb(urb, hif_dev->udev,
+                                usb_rcvintpipe(hif_dev->udev,
+                                                USB_REG_IN_PIPE),
+                                nskb->data, MAX_REG_IN_BUF_SIZE,
+-                               ath9k_hif_usb_reg_in_cb, nskb, 1);
++                               ath9k_hif_usb_reg_in_cb, rx_buf, 1);
+       }
+ 
+ resubmit:
+@@ -748,6 +751,7 @@ resubmit:
+       return;
+ free:
+       kfree_skb(skb);
++      kfree(rx_buf);
+       urb->context = NULL;
+ }
+ 
+@@ -793,7 +797,7 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct 
hif_device_usb *hif_dev)
+       init_usb_anchor(&hif_dev->mgmt_submitted);
+ 
+       for (i = 0; i < MAX_TX_URB_NUM; i++) {
+-              tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
++              tx_buf = kzalloc(sizeof(*tx_buf), GFP_KERNEL);
+               if (!tx_buf)
+                       goto err;
+ 
+@@ -830,8 +834,9 @@ static void ath9k_hif_usb_dealloc_rx_urbs(struct 
hif_device_usb *hif_dev)
+ 
+ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
+ {
+-      struct urb *urb = NULL;
++      struct rx_buf *rx_buf = NULL;
+       struct sk_buff *skb = NULL;
++      struct urb *urb = NULL;
+       int i, ret;
+ 
+       init_usb_anchor(&hif_dev->rx_submitted);
+@@ -839,6 +844,12 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct 
hif_device_usb *hif_dev)
+ 
+       for (i = 0; i < MAX_RX_URB_NUM; i++) {
+ 
++              rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
++              if (!rx_buf) {
++                      ret = -ENOMEM;
++                      goto err_rxb;
++              }
++
+               /* Allocate URB */
+               urb = usb_alloc_urb(0, GFP_KERNEL);
+               if (urb == NULL) {
+@@ -853,11 +864,14 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct 
hif_device_usb *hif_dev)
+                       goto err_skb;
+               }
+ 
++              rx_buf->hif_dev = hif_dev;
++              rx_buf->skb = skb;
++
+               usb_fill_bulk_urb(urb, hif_dev->udev,
+                                 usb_rcvbulkpipe(hif_dev->udev,
+                                                 USB_WLAN_RX_PIPE),
+                                 skb->data, MAX_RX_BUF_SIZE,
+-                                ath9k_hif_usb_rx_cb, skb);
++                                ath9k_hif_usb_rx_cb, rx_buf);
+ 
+               /* Anchor URB */
+               usb_anchor_urb(urb, &hif_dev->rx_submitted);
+@@ -883,6 +897,8 @@ err_submit:
+ err_skb:
+       usb_free_urb(urb);
+ err_urb:
++      kfree(rx_buf);
++err_rxb:
+       ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
+       return ret;
+ }
+@@ -894,14 +910,21 @@ static void ath9k_hif_usb_dealloc_reg_in_urbs(struct 
hif_device_usb *hif_dev)
+ 
+ static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
+ {
+-      struct urb *urb = NULL;
++      struct rx_buf *rx_buf = NULL;
+       struct sk_buff *skb = NULL;
++      struct urb *urb = NULL;
+       int i, ret;
+ 
+       init_usb_anchor(&hif_dev->reg_in_submitted);
+ 
+       for (i = 0; i < MAX_REG_IN_URB_NUM; i++) {
+ 
++              rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
++              if (!rx_buf) {
++                      ret = -ENOMEM;
++                      goto err_rxb;
++              }
++
+               /* Allocate URB */
+               urb = usb_alloc_urb(0, GFP_KERNEL);
+               if (urb == NULL) {
+@@ -916,11 +939,14 @@ static int ath9k_hif_usb_alloc_reg_in_urbs(struct 
hif_device_usb *hif_dev)
+                       goto err_skb;
+               }
+ 
++              rx_buf->hif_dev = hif_dev;
++              rx_buf->skb = skb;
++
+               usb_fill_int_urb(urb, hif_dev->udev,
+                                 usb_rcvintpipe(hif_dev->udev,
+                                                 USB_REG_IN_PIPE),
+                                 skb->data, MAX_REG_IN_BUF_SIZE,
+-                                ath9k_hif_usb_reg_in_cb, skb, 1);
++                                ath9k_hif_usb_reg_in_cb, rx_buf, 1);
+ 
+               /* Anchor URB */
+               usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
+@@ -946,6 +972,8 @@ err_submit:
+ err_skb:
+       usb_free_urb(urb);
+ err_urb:
++      kfree(rx_buf);
++err_rxb:
+       ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
+       return ret;
+ }
+diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h 
b/drivers/net/wireless/ath/ath9k/hif_usb.h
+index a94e7e1c86e9..5985aa15ca93 100644
+--- a/drivers/net/wireless/ath/ath9k/hif_usb.h
++++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
+@@ -86,6 +86,11 @@ struct tx_buf {
+       struct list_head list;
+ };
+ 
++struct rx_buf {
++      struct sk_buff *skb;
++      struct hif_device_usb *hif_dev;
++};
++
+ #define HIF_USB_TX_STOP  BIT(0)
+ #define HIF_USB_TX_FLUSH BIT(1)
+ 
+diff --git a/drivers/pci/host/vmd.c b/drivers/pci/host/vmd.c
+index af6d5da10ea5..05f191ae0ff1 100644
+--- a/drivers/pci/host/vmd.c
++++ b/drivers/pci/host/vmd.c
+@@ -638,9 +638,10 @@ static int vmd_enable_domain(struct vmd_dev *vmd)
+ 
+       vmd->irq_domain = pci_msi_create_irq_domain(fn, &vmd_msi_domain_info,
+                                                   x86_vector_domain);
+-      irq_domain_free_fwnode(fn);
+-      if (!vmd->irq_domain)
++      if (!vmd->irq_domain) {
++              irq_domain_free_fwnode(fn);
+               return -ENODEV;
++      }
+ 
+       pci_add_resource(&resources, &vmd->resources[0]);
+       pci_add_resource(&resources, &vmd->resources[1]);
+diff --git a/drivers/pinctrl/pinctrl-amd.h b/drivers/pinctrl/pinctrl-amd.h
+index 8fa453a59da5..884f48f7a6a3 100644
+--- a/drivers/pinctrl/pinctrl-amd.h
++++ b/drivers/pinctrl/pinctrl-amd.h
+@@ -252,7 +252,7 @@ static const struct amd_pingroup kerncz_groups[] = {
+       {
+               .name = "uart0",
+               .pins = uart0_pins,
+-              .npins = 9,
++              .npins = 5,
+       },
+       {
+               .name = "uart1",
+diff --git a/drivers/scsi/scsi_transport_spi.c 
b/drivers/scsi/scsi_transport_spi.c
+index d0219e36080c..e626fc2cc781 100644
+--- a/drivers/scsi/scsi_transport_spi.c
++++ b/drivers/scsi/scsi_transport_spi.c
+@@ -349,7 +349,7 @@ store_spi_transport_##field(struct device *dev,            
        \
+       struct spi_transport_attrs *tp                                  \
+               = (struct spi_transport_attrs *)&starget->starget_data; \
+                                                                       \
+-      if (i->f->set_##field)                                          \
++      if (!i->f->set_##field)                                         \
+               return -EINVAL;                                         \
+       val = simple_strtoul(buf, NULL, 0);                             \
+       if (val > tp->max_##field)                                      \
+diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
+index 6da70a62e196..befabddf897a 100644
+--- a/drivers/spi/spi-fsl-dspi.c
++++ b/drivers/spi/spi-fsl-dspi.c
+@@ -886,9 +886,11 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id)
+                                       trans_mode);
+                       }
+               }
++
++              return IRQ_HANDLED;
+       }
+ 
+-      return IRQ_HANDLED;
++      return IRQ_NONE;
+ }
+ 
+ static const struct of_device_id fsl_dspi_dt_ids[] = {
+diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
+index 0c2867deb36f..da28c52c9da1 100644
+--- a/drivers/spi/spi-mt65xx.c
++++ b/drivers/spi/spi-mt65xx.c
+@@ -41,7 +41,6 @@
+ #define SPI_CFG0_SCK_LOW_OFFSET           8
+ #define SPI_CFG0_CS_HOLD_OFFSET           16
+ #define SPI_CFG0_CS_SETUP_OFFSET          24
+-#define SPI_ADJUST_CFG0_SCK_LOW_OFFSET    16
+ #define SPI_ADJUST_CFG0_CS_HOLD_OFFSET    0
+ #define SPI_ADJUST_CFG0_CS_SETUP_OFFSET   16
+ 
+@@ -53,6 +52,8 @@
+ #define SPI_CFG1_CS_IDLE_MASK             0xff
+ #define SPI_CFG1_PACKET_LOOP_MASK         0xff00
+ #define SPI_CFG1_PACKET_LENGTH_MASK       0x3ff0000
++#define SPI_CFG2_SCK_HIGH_OFFSET          0
++#define SPI_CFG2_SCK_LOW_OFFSET           16
+ 
+ #define SPI_CMD_ACT                  BIT(0)
+ #define SPI_CMD_RESUME               BIT(1)
+@@ -259,7 +260,7 @@ static void mtk_spi_set_cs(struct spi_device *spi, bool 
enable)
+ static void mtk_spi_prepare_transfer(struct spi_master *master,
+                                    struct spi_transfer *xfer)
+ {
+-      u32 spi_clk_hz, div, sck_time, cs_time, reg_val = 0;
++      u32 spi_clk_hz, div, sck_time, cs_time, reg_val;
+       struct mtk_spi *mdata = spi_master_get_devdata(master);
+ 
+       spi_clk_hz = clk_get_rate(mdata->spi_clk);
+@@ -272,18 +273,18 @@ static void mtk_spi_prepare_transfer(struct spi_master 
*master,
+       cs_time = sck_time * 2;
+ 
+       if (mdata->dev_comp->enhance_timing) {
++              reg_val = (((sck_time - 1) & 0xffff)
++                         << SPI_CFG2_SCK_HIGH_OFFSET);
+               reg_val |= (((sck_time - 1) & 0xffff)
+-                         << SPI_CFG0_SCK_HIGH_OFFSET);
+-              reg_val |= (((sck_time - 1) & 0xffff)
+-                         << SPI_ADJUST_CFG0_SCK_LOW_OFFSET);
++                         << SPI_CFG2_SCK_LOW_OFFSET);
+               writel(reg_val, mdata->base + SPI_CFG2_REG);
+-              reg_val |= (((cs_time - 1) & 0xffff)
++              reg_val = (((cs_time - 1) & 0xffff)
+                          << SPI_ADJUST_CFG0_CS_HOLD_OFFSET);
+               reg_val |= (((cs_time - 1) & 0xffff)
+                          << SPI_ADJUST_CFG0_CS_SETUP_OFFSET);
+               writel(reg_val, mdata->base + SPI_CFG0_REG);
+       } else {
+-              reg_val |= (((sck_time - 1) & 0xff)
++              reg_val = (((sck_time - 1) & 0xff)
+                          << SPI_CFG0_SCK_HIGH_OFFSET);
+               reg_val |= (((sck_time - 1) & 0xff) << SPI_CFG0_SCK_LOW_OFFSET);
+               reg_val |= (((cs_time - 1) & 0xff) << SPI_CFG0_CS_HOLD_OFFSET);
+diff --git a/drivers/staging/comedi/drivers/addi_apci_1032.c 
b/drivers/staging/comedi/drivers/addi_apci_1032.c
+index ccd1a91290bf..536a135cd00b 100644
+--- a/drivers/staging/comedi/drivers/addi_apci_1032.c
++++ b/drivers/staging/comedi/drivers/addi_apci_1032.c
+@@ -115,14 +115,22 @@ static int apci1032_cos_insn_config(struct comedi_device 
*dev,
+                                   unsigned int *data)
+ {
+       struct apci1032_private *devpriv = dev->private;
+-      unsigned int shift, oldmask;
++      unsigned int shift, oldmask, himask, lomask;
+ 
+       switch (data[0]) {
+       case INSN_CONFIG_DIGITAL_TRIG:
+               if (data[1] != 0)
+                       return -EINVAL;
+               shift = data[3];
+-              oldmask = (1U << shift) - 1;
++              if (shift < 32) {
++                      oldmask = (1U << shift) - 1;
++                      himask = data[4] << shift;
++                      lomask = data[5] << shift;
++              } else {
++                      oldmask = 0xffffffffu;
++                      himask = 0;
++                      lomask = 0;
++              }
+               switch (data[2]) {
+               case COMEDI_DIGITAL_TRIG_DISABLE:
+                       devpriv->ctrl = 0;
+@@ -145,8 +153,8 @@ static int apci1032_cos_insn_config(struct comedi_device 
*dev,
+                               devpriv->mode2 &= oldmask;
+                       }
+                       /* configure specified channels */
+-                      devpriv->mode1 |= data[4] << shift;
+-                      devpriv->mode2 |= data[5] << shift;
++                      devpriv->mode1 |= himask;
++                      devpriv->mode2 |= lomask;
+                       break;
+               case COMEDI_DIGITAL_TRIG_ENABLE_LEVELS:
+                       if (devpriv->ctrl != (APCI1032_CTRL_INT_ENA |
+@@ -163,8 +171,8 @@ static int apci1032_cos_insn_config(struct comedi_device 
*dev,
+                               devpriv->mode2 &= oldmask;
+                       }
+                       /* configure specified channels */
+-                      devpriv->mode1 |= data[4] << shift;
+-                      devpriv->mode2 |= data[5] << shift;
++                      devpriv->mode1 |= himask;
++                      devpriv->mode2 |= lomask;
+                       break;
+               default:
+                       return -EINVAL;
+diff --git a/drivers/staging/comedi/drivers/addi_apci_1500.c 
b/drivers/staging/comedi/drivers/addi_apci_1500.c
+index 79a8799b1262..c4e36fb6df9d 100644
+--- a/drivers/staging/comedi/drivers/addi_apci_1500.c
++++ b/drivers/staging/comedi/drivers/addi_apci_1500.c
+@@ -461,13 +461,14 @@ static int apci1500_di_cfg_trig(struct comedi_device 
*dev,
+       struct apci1500_private *devpriv = dev->private;
+       unsigned int trig = data[1];
+       unsigned int shift = data[3];
+-      unsigned int hi_mask = data[4] << shift;
+-      unsigned int lo_mask = data[5] << shift;
+-      unsigned int chan_mask = hi_mask | lo_mask;
+-      unsigned int old_mask = (1 << shift) - 1;
++      unsigned int hi_mask;
++      unsigned int lo_mask;
++      unsigned int chan_mask;
++      unsigned int old_mask;
+       unsigned int pm;
+       unsigned int pt;
+       unsigned int pp;
++      unsigned int invalid_chan;
+ 
+       if (trig > 1) {
+               dev_dbg(dev->class_dev,
+@@ -475,7 +476,20 @@ static int apci1500_di_cfg_trig(struct comedi_device *dev,
+               return -EINVAL;
+       }
+ 
+-      if (chan_mask > 0xffff) {
++      if (shift <= 16) {
++              hi_mask = data[4] << shift;
++              lo_mask = data[5] << shift;
++              old_mask = (1U << shift) - 1;
++              invalid_chan = (data[4] | data[5]) >> (16 - shift);
++      } else {
++              hi_mask = 0;
++              lo_mask = 0;
++              old_mask = 0xffff;
++              invalid_chan = data[4] | data[5];
++      }
++      chan_mask = hi_mask | lo_mask;
++
++      if (invalid_chan) {
+               dev_dbg(dev->class_dev, "invalid digital trigger channel\n");
+               return -EINVAL;
+       }
+diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c 
b/drivers/staging/comedi/drivers/addi_apci_1564.c
+index 9bfb79c2e5c8..1b4ba19d599e 100644
+--- a/drivers/staging/comedi/drivers/addi_apci_1564.c
++++ b/drivers/staging/comedi/drivers/addi_apci_1564.c
+@@ -340,14 +340,22 @@ static int apci1564_cos_insn_config(struct comedi_device 
*dev,
+                                   unsigned int *data)
+ {
+       struct apci1564_private *devpriv = dev->private;
+-      unsigned int shift, oldmask;
++      unsigned int shift, oldmask, himask, lomask;
+ 
+       switch (data[0]) {
+       case INSN_CONFIG_DIGITAL_TRIG:
+               if (data[1] != 0)
+                       return -EINVAL;
+               shift = data[3];
+-              oldmask = (1U << shift) - 1;
++              if (shift < 32) {
++                      oldmask = (1U << shift) - 1;
++                      himask = data[4] << shift;
++                      lomask = data[5] << shift;
++              } else {
++                      oldmask = 0xffffffffu;
++                      himask = 0;
++                      lomask = 0;
++              }
+               switch (data[2]) {
+               case COMEDI_DIGITAL_TRIG_DISABLE:
+                       devpriv->ctrl = 0;
+@@ -371,8 +379,8 @@ static int apci1564_cos_insn_config(struct comedi_device 
*dev,
+                               devpriv->mode2 &= oldmask;
+                       }
+                       /* configure specified channels */
+-                      devpriv->mode1 |= data[4] << shift;
+-                      devpriv->mode2 |= data[5] << shift;
++                      devpriv->mode1 |= himask;
++                      devpriv->mode2 |= lomask;
+                       break;
+               case COMEDI_DIGITAL_TRIG_ENABLE_LEVELS:
+                       if (devpriv->ctrl != (APCI1564_DI_IRQ_ENA |
+@@ -389,8 +397,8 @@ static int apci1564_cos_insn_config(struct comedi_device 
*dev,
+                               devpriv->mode2 &= oldmask;
+                       }
+                       /* configure specified channels */
+-                      devpriv->mode1 |= data[4] << shift;
+-                      devpriv->mode2 |= data[5] << shift;
++                      devpriv->mode1 |= himask;
++                      devpriv->mode2 |= lomask;
+                       break;
+               default:
+                       return -EINVAL;
+diff --git a/drivers/staging/comedi/drivers/ni_6527.c 
b/drivers/staging/comedi/drivers/ni_6527.c
+index 84c62e256094..6e411b634015 100644
+--- a/drivers/staging/comedi/drivers/ni_6527.c
++++ b/drivers/staging/comedi/drivers/ni_6527.c
+@@ -341,7 +341,7 @@ static int ni6527_intr_insn_config(struct comedi_device 
*dev,
+               case COMEDI_DIGITAL_TRIG_ENABLE_EDGES:
+                       /* check shift amount */
+                       shift = data[3];
+-                      if (shift >= s->n_chan) {
++                      if (shift >= 32) {
+                               mask = 0;
+                               rising = 0;
+                               falling = 0;
+diff --git a/drivers/staging/wlan-ng/prism2usb.c 
b/drivers/staging/wlan-ng/prism2usb.c
+index d8d86761b790..8d32b1603d10 100644
+--- a/drivers/staging/wlan-ng/prism2usb.c
++++ b/drivers/staging/wlan-ng/prism2usb.c
+@@ -61,11 +61,25 @@ static int prism2sta_probe_usb(struct usb_interface 
*interface,
+                              const struct usb_device_id *id)
+ {
+       struct usb_device *dev;
+-
++      const struct usb_endpoint_descriptor *epd;
++      const struct usb_host_interface *iface_desc = interface->cur_altsetting;
+       struct wlandevice *wlandev = NULL;
+       struct hfa384x *hw = NULL;
+       int result = 0;
+ 
++      if (iface_desc->desc.bNumEndpoints != 2) {
++              result = -ENODEV;
++              goto failed;
++      }
++
++      result = -EINVAL;
++      epd = &iface_desc->endpoint[1].desc;
++      if (!usb_endpoint_is_bulk_in(epd))
++              goto failed;
++      epd = &iface_desc->endpoint[2].desc;
++      if (!usb_endpoint_is_bulk_out(epd))
++              goto failed;
++
+       dev = interface_to_usbdev(interface);
+       wlandev = create_wlan();
+       if (!wlandev) {
+diff --git a/drivers/tty/serial/8250/8250_core.c 
b/drivers/tty/serial/8250/8250_core.c
+index 5017a0f46b82..d6b790510c94 100644
+--- a/drivers/tty/serial/8250/8250_core.c
++++ b/drivers/tty/serial/8250/8250_core.c
+@@ -534,6 +534,7 @@ static void __init serial8250_isa_init_ports(void)
+                */
+               up->mcr_mask = ~ALPHA_KLUDGE_MCR;
+               up->mcr_force = ALPHA_KLUDGE_MCR;
++              serial8250_set_defaults(up);
+       }
+ 
+       /* chain base port ops to support Remote Supervisor Adapter */
+@@ -557,7 +558,6 @@ static void __init serial8250_isa_init_ports(void)
+               port->membase  = old_serial_port[i].iomem_base;
+               port->iotype   = old_serial_port[i].io_type;
+               port->regshift = old_serial_port[i].iomem_reg_shift;
+-              serial8250_set_defaults(up);
+ 
+               port->irqflags |= irqflag;
+               if (serial8250_isa_config != NULL)
+diff --git a/drivers/tty/serial/8250/8250_exar.c 
b/drivers/tty/serial/8250/8250_exar.c
+index 899f36b59af7..ed81128bb42e 100644
+--- a/drivers/tty/serial/8250/8250_exar.c
++++ b/drivers/tty/serial/8250/8250_exar.c
+@@ -229,7 +229,17 @@ static void setup_gpio(struct pci_dev *pcidev, u8 __iomem 
*p)
+        * devices will export them as GPIOs, so we pre-configure them safely
+        * as inputs.
+        */
+-      u8 dir = pcidev->vendor == PCI_VENDOR_ID_EXAR ? 0xff : 0x00;
++
++      u8 dir = 0x00;
++
++      if  ((pcidev->vendor == PCI_VENDOR_ID_EXAR) &&
++              (pcidev->subsystem_vendor != PCI_VENDOR_ID_SEALEVEL)) {
++              // Configure GPIO as inputs for Commtech adapters
++              dir = 0xff;
++      } else {
++              // Configure GPIO as outputs for SeaLevel adapters
++              dir = 0x00;
++      }
+ 
+       writeb(0x00, p + UART_EXAR_MPIOINT_7_0);
+       writeb(0x00, p + UART_EXAR_MPIOLVL_7_0);
+diff --git a/drivers/tty/serial/8250/8250_mtk.c 
b/drivers/tty/serial/8250/8250_mtk.c
+index fa909fa3c4cd..b1363114d538 100644
+--- a/drivers/tty/serial/8250/8250_mtk.c
++++ b/drivers/tty/serial/8250/8250_mtk.c
+@@ -45,8 +45,21 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios 
*termios,
+       unsigned long flags;
+       unsigned int baud, quot;
+ 
++      /*
++       * Store the requested baud rate before calling the generic 8250
++       * set_termios method. Standard 8250 port expects bauds to be
++       * no higher than (uartclk / 16) so the baud will be clamped if it
++       * gets out of that bound. Mediatek 8250 port supports speed
++       * higher than that, therefore we'll get original baud rate back
++       * after calling the generic set_termios method and recalculate
++       * the speed later in this method.
++       */
++      baud = tty_termios_baud_rate(termios);
++
+       serial8250_do_set_termios(port, termios, old);
+ 
++      tty_termios_encode_baud_rate(termios, baud, baud);
++
+       /*
+        * Mediatek UARTs use an extra highspeed register (UART_MTK_HIGHS)
+        *
+@@ -85,6 +98,11 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios 
*termios,
+        */
+       spin_lock_irqsave(&port->lock, flags);
+ 
++      /*
++       * Update the per-port timeout.
++       */
++      uart_update_timeout(port, termios->c_cflag, baud);
++
+       /* set DLAB we have cval saved in up->lcr from the call to the core */
+       serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB);
+       serial_dl_write(up, quot);
+diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
+index 8a4e7879a7a6..92267396ff40 100644
+--- a/drivers/tty/vt/vt.c
++++ b/drivers/tty/vt/vt.c
+@@ -762,10 +762,19 @@ static const struct tty_port_operations vc_port_ops = {
+       .destruct = vc_port_destruct,
+ };
+ 
++/*
++ * Change # of rows and columns (0 means unchanged/the size of fg_console)
++ * [this is to be used together with some user program
++ * like resize that changes the hardware videomode]
++ */
++#define VC_MAXCOL (32767)
++#define VC_MAXROW (32767)
++
+ int vc_allocate(unsigned int currcons)        /* return 0 on success */
+ {
+       struct vt_notifier_param param;
+       struct vc_data *vc;
++      int err;
+ 
+       WARN_CONSOLE_UNLOCKED();
+ 
+@@ -795,6 +804,11 @@ int vc_allocate(unsigned int currcons)    /* return 0 on 
success */
+       if (!*vc->vc_uni_pagedir_loc)
+               con_set_default_unimap(vc);
+ 
++      err = -EINVAL;
++      if (vc->vc_cols > VC_MAXCOL || vc->vc_rows > VC_MAXROW ||
++          vc->vc_screenbuf_size > KMALLOC_MAX_SIZE || !vc->vc_screenbuf_size)
++              goto err_free;
++      err = -ENOMEM;
+       vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_KERNEL);
+       if (!vc->vc_screenbuf)
+               goto err_free;
+@@ -812,7 +826,7 @@ int vc_allocate(unsigned int currcons)     /* return 0 on 
success */
+ err_free:
+       kfree(vc);
+       vc_cons[currcons].d = NULL;
+-      return -ENOMEM;
++      return err;
+ }
+ 
+ static inline int resize_screen(struct vc_data *vc, int width, int height,
+@@ -827,14 +841,6 @@ static inline int resize_screen(struct vc_data *vc, int 
width, int height,
+       return err;
+ }
+ 
+-/*
+- * Change # of rows and columns (0 means unchanged/the size of fg_console)
+- * [this is to be used together with some user program
+- * like resize that changes the hardware videomode]
+- */
+-#define VC_RESIZE_MAXCOL (32767)
+-#define VC_RESIZE_MAXROW (32767)
+-
+ /**
+  *    vc_do_resize    -       resizing method for the tty
+  *    @tty: tty being resized
+@@ -869,7 +875,7 @@ static int vc_do_resize(struct tty_struct *tty, struct 
vc_data *vc,
+       user = vc->vc_resize_user;
+       vc->vc_resize_user = 0;
+ 
+-      if (cols > VC_RESIZE_MAXCOL || lines > VC_RESIZE_MAXROW)
++      if (cols > VC_MAXCOL || lines > VC_MAXROW)
+               return -EINVAL;
+ 
+       new_cols = (cols ? cols : vc->vc_cols);
+@@ -880,7 +886,7 @@ static int vc_do_resize(struct tty_struct *tty, struct 
vc_data *vc,
+       if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
+               return 0;
+ 
+-      if (new_screen_size > KMALLOC_MAX_SIZE)
++      if (new_screen_size > KMALLOC_MAX_SIZE || !new_screen_size)
+               return -EINVAL;
+       newscreen = kzalloc(new_screen_size, GFP_USER);
+       if (!newscreen)
+@@ -3031,6 +3037,7 @@ static int __init con_init(void)
+               INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK);
+               tty_port_init(&vc->port);
+               visual_init(vc, currcons, 1);
++              /* Assuming vc->vc_{cols,rows,screenbuf_size} are sane here. */
+               vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_NOWAIT);
+               vc_init(vc, vc->vc_rows, vc->vc_cols,
+                       currcons || !vc->vc_sw->con_save_screen);
+diff --git a/drivers/usb/gadget/udc/gr_udc.c b/drivers/usb/gadget/udc/gr_udc.c
+index feb73a1c42ef..be094f4e116b 100644
+--- a/drivers/usb/gadget/udc/gr_udc.c
++++ b/drivers/usb/gadget/udc/gr_udc.c
+@@ -2000,9 +2000,12 @@ static int gr_ep_init(struct gr_udc *dev, int num, int 
is_in, u32 maxplimit)
+ 
+       if (num == 0) {
+               _req = gr_alloc_request(&ep->ep, GFP_ATOMIC);
++              if (!_req)
++                      return -ENOMEM;
++
+               buf = devm_kzalloc(dev->dev, PAGE_SIZE, GFP_DMA | GFP_ATOMIC);
+-              if (!_req || !buf) {
+-                      /* possible _req freed by gr_probe via gr_remove */
++              if (!buf) {
++                      gr_free_request(&ep->ep, _req);
+                       return -ENOMEM;
+               }
+ 
+diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c
+index defaf950e631..7120dbfaacab 100644
+--- a/drivers/usb/host/xhci-mtk-sch.c
++++ b/drivers/usb/host/xhci-mtk-sch.c
+@@ -284,6 +284,10 @@ static bool need_bw_sch(struct usb_host_endpoint *ep,
+       if (is_fs_or_ls(speed) && !has_tt)
+               return false;
+ 
++      /* skip endpoint with zero maxpkt */
++      if (usb_endpoint_maxp(&ep->desc) == 0)
++              return false;
++
+       return true;
+ }
+ 
+diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
+index c01a0d1e8b5c..d4e29039305b 100644
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -235,6 +235,9 @@ static void xhci_pci_quirks(struct device *dev, struct 
xhci_hcd *xhci)
+       if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
+                       pdev->device == 0x1142)
+               xhci->quirks |= XHCI_TRUST_TX_LENGTH;
++      if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
++                      pdev->device == 0x2142)
++              xhci->quirks |= XHCI_NO_64BIT_SUPPORT;
+ 
+       if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
+               pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
+diff --git a/drivers/video/fbdev/core/bitblit.c 
b/drivers/video/fbdev/core/bitblit.c
+index 790900d646c0..5dce2b10c09a 100644
+--- a/drivers/video/fbdev/core/bitblit.c
++++ b/drivers/video/fbdev/core/bitblit.c
+@@ -216,7 +216,7 @@ static void bit_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+       region.color = color;
+       region.rop = ROP_COPY;
+ 
+-      if (rw && !bottom_only) {
++      if ((int) rw > 0 && !bottom_only) {
+               region.dx = info->var.xoffset + rs;
+               region.dy = 0;
+               region.width = rw;
+@@ -224,7 +224,7 @@ static void bit_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+               info->fbops->fb_fillrect(info, &region);
+       }
+ 
+-      if (bh) {
++      if ((int) bh > 0) {
+               region.dx = info->var.xoffset;
+               region.dy = info->var.yoffset + bs;
+               region.width = rs;
+diff --git a/drivers/video/fbdev/core/fbcon_ccw.c 
b/drivers/video/fbdev/core/fbcon_ccw.c
+index 37a8b0b22566..e0b9fbe7ca9e 100644
+--- a/drivers/video/fbdev/core/fbcon_ccw.c
++++ b/drivers/video/fbdev/core/fbcon_ccw.c
+@@ -201,7 +201,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+       region.color = color;
+       region.rop = ROP_COPY;
+ 
+-      if (rw && !bottom_only) {
++      if ((int) rw > 0 && !bottom_only) {
+               region.dx = 0;
+               region.dy = info->var.yoffset;
+               region.height = rw;
+@@ -209,7 +209,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+               info->fbops->fb_fillrect(info, &region);
+       }
+ 
+-      if (bh) {
++      if ((int) bh > 0) {
+               region.dx = info->var.xoffset + bs;
+               region.dy = 0;
+                 region.height = info->var.yres_virtual;
+diff --git a/drivers/video/fbdev/core/fbcon_cw.c 
b/drivers/video/fbdev/core/fbcon_cw.c
+index 1888f8c866e8..158e6ea1c0f6 100644
+--- a/drivers/video/fbdev/core/fbcon_cw.c
++++ b/drivers/video/fbdev/core/fbcon_cw.c
+@@ -184,7 +184,7 @@ static void cw_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+       region.color = color;
+       region.rop = ROP_COPY;
+ 
+-      if (rw && !bottom_only) {
++      if ((int) rw > 0 && !bottom_only) {
+               region.dx = 0;
+               region.dy = info->var.yoffset + rs;
+               region.height = rw;
+@@ -192,7 +192,7 @@ static void cw_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+               info->fbops->fb_fillrect(info, &region);
+       }
+ 
+-      if (bh) {
++      if ((int) bh > 0) {
+               region.dx = info->var.xoffset;
+               region.dy = info->var.yoffset;
+                 region.height = info->var.yres;
+diff --git a/drivers/video/fbdev/core/fbcon_ud.c 
b/drivers/video/fbdev/core/fbcon_ud.c
+index f98eee263597..3df269638166 100644
+--- a/drivers/video/fbdev/core/fbcon_ud.c
++++ b/drivers/video/fbdev/core/fbcon_ud.c
+@@ -231,7 +231,7 @@ static void ud_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+       region.color = color;
+       region.rop = ROP_COPY;
+ 
+-      if (rw && !bottom_only) {
++      if ((int) rw > 0 && !bottom_only) {
+               region.dy = 0;
+               region.dx = info->var.xoffset;
+               region.width  = rw;
+@@ -239,7 +239,7 @@ static void ud_clear_margins(struct vc_data *vc, struct 
fb_info *info,
+               info->fbops->fb_fillrect(info, &region);
+       }
+ 
+-      if (bh) {
++      if ((int) bh > 0) {
+               region.dy = info->var.yoffset;
+               region.dx = info->var.xoffset;
+                 region.height  = bh;
+diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
+index e4d5e6eae409..1cf75d1032e1 100644
+--- a/fs/btrfs/backref.c
++++ b/fs/btrfs/backref.c
+@@ -1420,6 +1420,7 @@ static int btrfs_find_all_roots_safe(struct 
btrfs_trans_handle *trans,
+               if (ret < 0 && ret != -ENOENT) {
+                       ulist_free(tmp);
+                       ulist_free(*roots);
++                      *roots = NULL;
+                       return ret;
+               }
+               node = ulist_next(tmp, &uiter);
+diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
+index c55c2ae335ea..6d2bfbb63d9b 100644
+--- a/fs/btrfs/extent_io.c
++++ b/fs/btrfs/extent_io.c
+@@ -1721,7 +1721,8 @@ static int __process_pages_contig(struct address_space 
*mapping,
+                               if (!PageDirty(pages[i]) ||
+                                   pages[i]->mapping != mapping) {
+                                       unlock_page(pages[i]);
+-                                      put_page(pages[i]);
++                                      for (; i < ret; i++)
++                                              put_page(pages[i]);
+                                       err = -EAGAIN;
+                                       goto out;
+                               }
+diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
+index 6d34842912e8..4ff96e0aa26a 100644
+--- a/fs/btrfs/volumes.c
++++ b/fs/btrfs/volumes.c
+@@ -6901,6 +6901,14 @@ int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info)
+       mutex_lock(&uuid_mutex);
+       mutex_lock(&fs_info->chunk_mutex);
+ 
++      /*
++       * It is possible for mount and umount to race in such a way that
++       * we execute this code path, but open_fs_devices failed to clear
++       * total_rw_bytes. We certainly want it cleared before reading the
++       * device items, so clear it here.
++       */
++      fs_info->fs_devices->total_rw_bytes = 0;
++
+       /*
+        * Read all device items, and then all the chunk items. All
+        * device items are found before any chunk item (their object id
+diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
+index d0d295a28b6e..b76e73395299 100644
+--- a/fs/cifs/inode.c
++++ b/fs/cifs/inode.c
+@@ -1778,7 +1778,6 @@ cifs_rename2(struct inode *source_dir, struct dentry 
*source_dentry,
+       FILE_UNIX_BASIC_INFO *info_buf_target;
+       unsigned int xid;
+       int rc, tmprc;
+-      bool new_target = d_really_is_negative(target_dentry);
+ 
+       if (flags & ~RENAME_NOREPLACE)
+               return -EINVAL;
+@@ -1855,13 +1854,8 @@ cifs_rename2(struct inode *source_dir, struct dentry 
*source_dentry,
+        */
+ 
+ unlink_target:
+-      /*
+-       * If the target dentry was created during the rename, try
+-       * unlinking it if it's not negative
+-       */
+-      if (new_target &&
+-          d_really_is_positive(target_dentry) &&
+-          (rc == -EACCES || rc == -EEXIST)) {
++      /* Try unlinking the target dentry if it's not negative */
++      if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == 
-EEXIST)) {
+               if (d_is_dir(target_dentry))
+                       tmprc = cifs_rmdir(target_dir, target_dentry);
+               else
+diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
+index 3cef33b0f7e0..e6ea4511c41c 100644
+--- a/fs/nfs/direct.c
++++ b/fs/nfs/direct.c
+@@ -396,6 +396,8 @@ static void nfs_direct_complete(struct nfs_direct_req 
*dreq)
+ {
+       struct inode *inode = dreq->inode;
+ 
++      inode_dio_end(inode);
++
+       if (dreq->iocb) {
+               long res = (long) dreq->error;
+               if (dreq->count != 0) {
+@@ -407,10 +409,7 @@ static void nfs_direct_complete(struct nfs_direct_req 
*dreq)
+ 
+       complete(&dreq->completion);
+ 
+-      igrab(inode);
+       nfs_direct_req_release(dreq);
+-      inode_dio_end(inode);
+-      iput(inode);
+ }
+ 
+ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
+@@ -540,10 +539,8 @@ static ssize_t nfs_direct_read_schedule_iovec(struct 
nfs_direct_req *dreq,
+        * generic layer handle the completion.
+        */
+       if (requested_bytes == 0) {
+-              igrab(inode);
+-              nfs_direct_req_release(dreq);
+               inode_dio_end(inode);
+-              iput(inode);
++              nfs_direct_req_release(dreq);
+               return result < 0 ? result : -EIO;
+       }
+ 
+@@ -960,10 +957,8 @@ static ssize_t nfs_direct_write_schedule_iovec(struct 
nfs_direct_req *dreq,
+        * generic layer handle the completion.
+        */
+       if (requested_bytes == 0) {
+-              igrab(inode);
+-              nfs_direct_req_release(dreq);
+               inode_dio_end(inode);
+-              iput(inode);
++              nfs_direct_req_release(dreq);
+               return result < 0 ? result : -EIO;
+       }
+ 
+diff --git a/fs/nfs/file.c b/fs/nfs/file.c
+index 7da2cea1e7a0..81cca49a8375 100644
+--- a/fs/nfs/file.c
++++ b/fs/nfs/file.c
+@@ -82,7 +82,6 @@ nfs_file_release(struct inode *inode, struct file *filp)
+       dprintk("NFS: release(%pD2)\n", filp);
+ 
+       nfs_inc_stats(inode, NFSIOS_VFSRELEASE);
+-      inode_dio_wait(inode);
+       nfs_file_clear_open_context(filp);
+       return 0;
+ }
+diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h
+index 58df02bd93c9..fa46183b163b 100644
+--- a/include/linux/io-mapping.h
++++ b/include/linux/io-mapping.h
+@@ -120,9 +120,12 @@ io_mapping_init_wc(struct io_mapping *iomap,
+                  resource_size_t base,
+                  unsigned long size)
+ {
++      iomap->iomem = ioremap_wc(base, size);
++      if (!iomap->iomem)
++              return NULL;
++
+       iomap->base = base;
+       iomap->size = size;
+-      iomap->iomem = ioremap_wc(base, size);
+ #if defined(pgprot_noncached_wc) /* archs can't agree on a name ... */
+       iomap->prot = pgprot_noncached_wc(PAGE_KERNEL);
+ #elif defined(pgprot_writecombine)
+diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
+index eba777807fc0..6f8eb1238235 100644
+--- a/include/linux/mod_devicetable.h
++++ b/include/linux/mod_devicetable.h
+@@ -293,7 +293,7 @@ struct pcmcia_device_id {
+ #define INPUT_DEVICE_ID_LED_MAX               0x0f
+ #define INPUT_DEVICE_ID_SND_MAX               0x07
+ #define INPUT_DEVICE_ID_FF_MAX                0x7f
+-#define INPUT_DEVICE_ID_SW_MAX                0x0f
++#define INPUT_DEVICE_ID_SW_MAX                0x10
+ #define INPUT_DEVICE_ID_PROP_MAX      0x1f
+ 
+ #define INPUT_DEVICE_ID_MATCH_BUS     1
+diff --git a/include/uapi/linux/input-event-codes.h 
b/include/uapi/linux/input-event-codes.h
+index 61769d4b7dba..bce76e55a3c8 100644
+--- a/include/uapi/linux/input-event-codes.h
++++ b/include/uapi/linux/input-event-codes.h
+@@ -793,7 +793,8 @@
+ #define SW_LINEIN_INSERT      0x0d  /* set = inserted */
+ #define SW_MUTE_DEVICE                0x0e  /* set = device disabled */
+ #define SW_PEN_INSERTED               0x0f  /* set = pen inserted */
+-#define SW_MAX                        0x0f
++#define SW_MACHINE_COVER      0x10  /* set = cover closed */
++#define SW_MAX                        0x10
+ #define SW_CNT                        (SW_MAX+1)
+ 
+ /*
+diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
+index 82270a41acce..f08ba79ee5d1 100644
+--- a/kernel/events/uprobes.c
++++ b/kernel/events/uprobes.c
+@@ -1893,7 +1893,7 @@ static void handle_swbp(struct pt_regs *regs)
+       if (!uprobe) {
+               if (is_swbp > 0) {
+                       /* No matching uprobe; signal SIGTRAP. */
+-                      send_sig(SIGTRAP, current, 0);
++                      force_sig(SIGTRAP, current);
+               } else {
+                       /*
+                        * Either we raced with uprobe_unregister() or we can't
+diff --git a/mm/memcontrol.c b/mm/memcontrol.c
+index d8df500e0eea..5cbcd4b81bf8 100644
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -4883,7 +4883,6 @@ static void __mem_cgroup_clear_mc(void)
+               if (!mem_cgroup_is_root(mc.to))
+                       page_counter_uncharge(&mc.to->memory, mc.moved_swap);
+ 
+-              mem_cgroup_id_get_many(mc.to, mc.moved_swap);
+               css_put_many(&mc.to->css, mc.moved_swap);
+ 
+               mc.moved_swap = 0;
+@@ -5074,7 +5073,8 @@ put:                     /* get_mctgt_type() gets the 
page */
+                       ent = target.ent;
+                       if (!mem_cgroup_move_swap_account(ent, mc.from, mc.to)) 
{
+                               mc.precharge--;
+-                              /* we fixup refcnts and charges later. */
++                              mem_cgroup_id_get_many(mc.to, 1);
++                              /* we fixup other refcnts and charges later. */
+                               mc.moved_swap++;
+                       }
+                       break;
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 56d7a3dfa543..04ae9de55d74 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -2120,6 +2120,7 @@ static int ieee80211_802_1x_port_control(struct 
ieee80211_rx_data *rx)
+ 
+ static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
+ {
++      struct ieee80211_hdr *hdr = (void *)rx->skb->data;
+       struct sk_buff *skb = rx->skb;
+       struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
+ 
+@@ -2130,6 +2131,31 @@ static int ieee80211_drop_unencrypted(struct 
ieee80211_rx_data *rx, __le16 fc)
+       if (status->flag & RX_FLAG_DECRYPTED)
+               return 0;
+ 
++      /* check mesh EAPOL frames first */
++      if (unlikely(rx->sta && ieee80211_vif_is_mesh(&rx->sdata->vif) &&
++                   ieee80211_is_data(fc))) {
++              struct ieee80211s_hdr *mesh_hdr;
++              u16 hdr_len = ieee80211_hdrlen(fc);
++              u16 ethertype_offset;
++              __be16 ethertype;
++
++              if (!ether_addr_equal(hdr->addr1, rx->sdata->vif.addr))
++                      goto drop_check;
++
++              /* make sure fixed part of mesh header is there, also checks 
skb len */
++              if (!pskb_may_pull(rx->skb, hdr_len + 6))
++                      goto drop_check;
++
++              mesh_hdr = (struct ieee80211s_hdr *)(skb->data + hdr_len);
++              ethertype_offset = hdr_len + 
ieee80211_get_mesh_hdrlen(mesh_hdr) +
++                                 sizeof(rfc1042_header);
++
++              if (skb_copy_bits(rx->skb, ethertype_offset, &ethertype, 2) == 
0 &&
++                  ethertype == rx->sdata->control_port_protocol)
++                      return 0;
++      }
++
++drop_check:
+       /* Drop unencrypted frames if key is set. */
+       if (unlikely(!ieee80211_has_protected(fc) &&
+                    !ieee80211_is_any_nullfunc(fc) &&
+diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
+index b373e053ff9a..90261055062e 100644
+--- a/net/netfilter/ipvs/ip_vs_sync.c
++++ b/net/netfilter/ipvs/ip_vs_sync.c
+@@ -1726,6 +1726,8 @@ static int sync_thread_backup(void *data)
+ {
+       struct ip_vs_sync_thread_data *tinfo = data;
+       struct netns_ipvs *ipvs = tinfo->ipvs;
++      struct sock *sk = tinfo->sock->sk;
++      struct udp_sock *up = udp_sk(sk);
+       int len;
+ 
+       pr_info("sync thread started: state = BACKUP, mcast_ifn = %s, "
+@@ -1733,12 +1735,14 @@ static int sync_thread_backup(void *data)
+               ipvs->bcfg.mcast_ifn, ipvs->bcfg.syncid, tinfo->id);
+ 
+       while (!kthread_should_stop()) {
+-              wait_event_interruptible(*sk_sleep(tinfo->sock->sk),
+-                       !skb_queue_empty(&tinfo->sock->sk->sk_receive_queue)
+-                       || kthread_should_stop());
++              wait_event_interruptible(*sk_sleep(sk),
++                                       
!skb_queue_empty_lockless(&sk->sk_receive_queue) ||
++                                       
!skb_queue_empty_lockless(&up->reader_queue) ||
++                                       kthread_should_stop());
+ 
+               /* do we have data now? */
+-              while (!skb_queue_empty(&(tinfo->sock->sk->sk_receive_queue))) {
++              while (!skb_queue_empty_lockless(&sk->sk_receive_queue) ||
++                     !skb_queue_empty_lockless(&up->reader_queue)) {
+                       len = ip_vs_receive(tinfo->sock, tinfo->buf,
+                                       ipvs->bcfg.sync_maxlen);
+                       if (len <= 0) {
+diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
+index 5aa75a0a1ced..946735bd5a25 100755
+--- a/scripts/decode_stacktrace.sh
++++ b/scripts/decode_stacktrace.sh
+@@ -77,8 +77,8 @@ parse_symbol() {
+               return
+       fi
+ 
+-      # Strip out the base of the path
+-      code=${code#$basepath/}
++      # Strip out the base of the path on each line
++      code=$(while read -r line; do echo "${line#$basepath/}"; done <<< 
"$code")
+ 
+       # In the case of inlines, move everything to same line
+       code=${code//$'\n'/' '}
+diff --git a/sound/core/info.c b/sound/core/info.c
+index 5fb00437507b..f15569cd124d 100644
+--- a/sound/core/info.c
++++ b/sound/core/info.c
+@@ -634,7 +634,9 @@ int snd_info_get_line(struct snd_info_buffer *buffer, char 
*line, int len)
+ {
+       int c = -1;
+ 
+-      if (snd_BUG_ON(!buffer || !buffer->buffer))
++      if (snd_BUG_ON(!buffer))
++              return 1;
++      if (!buffer->buffer)
+               return 1;
+       if (len <= 0 || buffer->stop || buffer->error)
+               return 1;
+diff --git a/sound/soc/codecs/rt5670.h b/sound/soc/codecs/rt5670.h
+index 5ba485cae4e6..06d7c0aaeb61 100644
+--- a/sound/soc/codecs/rt5670.h
++++ b/sound/soc/codecs/rt5670.h
+@@ -760,7 +760,7 @@
+ #define RT5670_PWR_VREF2_BIT                  4
+ #define RT5670_PWR_FV2                                (0x1 << 3)
+ #define RT5670_PWR_FV2_BIT                    3
+-#define RT5670_LDO_SEL_MASK                   (0x3)
++#define RT5670_LDO_SEL_MASK                   (0x7)
+ #define RT5670_LDO_SEL_SFT                    0
+ 
+ /* Power Management for Analog 2 (0x64) */

Reply via email to