commit:     e7624253fc20d1a3c8a401d5ded9d59708c45bfa
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 23 11:05:24 2020 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Thu Jan 23 11:05:24 2020 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e7624253

Linux patch 4.14.167

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

 0000_README               |    4 +
 1166_linux-4.14.167.patch | 2219 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2223 insertions(+)

diff --git a/0000_README b/0000_README
index 9d49814..89f313a 100644
--- a/0000_README
+++ b/0000_README
@@ -707,6 +707,10 @@ Patch:  1165_linux-4.14.166.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.166
 
+Patch:  1166_linux-4.14.167.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.167
+
 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/1166_linux-4.14.167.patch b/1166_linux-4.14.167.patch
new file mode 100644
index 0000000..179628e
--- /dev/null
+++ b/1166_linux-4.14.167.patch
@@ -0,0 +1,2219 @@
+diff --git a/Makefile b/Makefile
+index 7c62b4078c1b..3e8eaabf2bcb 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 166
++SUBLEVEL = 167
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+diff --git a/arch/arm/boot/dts/am571x-idk.dts 
b/arch/arm/boot/dts/am571x-idk.dts
+index debf9464403e..96a4df4109d7 100644
+--- a/arch/arm/boot/dts/am571x-idk.dts
++++ b/arch/arm/boot/dts/am571x-idk.dts
+@@ -93,7 +93,7 @@
+ 
+ &pcie1_rc {
+       status = "okay";
+-      gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
++      gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
+ };
+ 
+ &pcie1_ep {
+diff --git a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi 
b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
+index e79f3defe002..c2ad4f97cef0 100644
+--- a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
++++ b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
+@@ -56,10 +56,10 @@
+ 
+       pmu {
+               compatible = "arm,armv8-pmuv3";
+-              interrupts = <0 120 8>,
+-                           <0 121 8>,
+-                           <0 122 8>,
+-                           <0 123 8>;
++              interrupts = <0 170 4>,
++                           <0 171 4>,
++                           <0 172 4>,
++                           <0 173 4>;
+               interrupt-affinity = <&cpu0>,
+                                    <&cpu1>,
+                                    <&cpu2>,
+diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts 
b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
+index fb5db5f33e8c..ce4a116382bf 100644
+--- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
++++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
+@@ -33,11 +33,9 @@
+ 
+       gpio-keys-polled {
+               compatible = "gpio-keys-polled";
+-              #address-cells = <1>;
+-              #size-cells = <0>;
+               poll-interval = <100>;
+ 
+-              button@0 {
++              power-button {
+                       label = "power";
+                       linux,code = <KEY_POWER>;
+                       gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
+diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi 
b/arch/arm64/boot/dts/arm/juno-base.dtsi
+index f165f04db0c9..13ee8ffa9bbf 100644
+--- a/arch/arm64/boot/dts/arm/juno-base.dtsi
++++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
+@@ -5,7 +5,6 @@
+       /*
+        *  Devices shared by all Juno boards
+        */
+-      dma-ranges = <0 0 0 0 0x100 0>;
+ 
+       memtimer: timer@2a810000 {
+               compatible = "arm,armv7-timer-mem";
+diff --git a/arch/x86/boot/compressed/head_64.S 
b/arch/x86/boot/compressed/head_64.S
+index 4b3d92a37c80..39fdede523f2 100644
+--- a/arch/x86/boot/compressed/head_64.S
++++ b/arch/x86/boot/compressed/head_64.S
+@@ -227,6 +227,11 @@ ENTRY(efi32_stub_entry)
+       leal    efi32_config(%ebp), %eax
+       movl    %eax, efi_config(%ebp)
+ 
++      /* Disable paging */
++      movl    %cr0, %eax
++      btrl    $X86_CR0_PG_BIT, %eax
++      movl    %eax, %cr0
++
+       jmp     startup_32
+ ENDPROC(efi32_stub_entry)
+ #endif
+diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
+index 665d0f6cd62f..3f731d7f04bf 100644
+--- a/arch/x86/kernel/cpu/intel_rdt.c
++++ b/arch/x86/kernel/cpu/intel_rdt.c
+@@ -526,7 +526,7 @@ static void domain_remove_cpu(int cpu, struct rdt_resource 
*r)
+               if (static_branch_unlikely(&rdt_mon_enable_key))
+                       rmdir_mondata_subdir_allrdtgrp(r, d->id);
+               list_del(&d->list);
+-              if (is_mbm_enabled())
++              if (r->mon_capable && is_mbm_enabled())
+                       cancel_delayed_work(&d->mbm_over);
+               if (is_llc_occupancy_enabled() &&  has_busy_rmid(r, d)) {
+                       /*
+diff --git a/block/blk-settings.c b/block/blk-settings.c
+index 474b0b95fcd1..6c2faaa38cc1 100644
+--- a/block/blk-settings.c
++++ b/block/blk-settings.c
+@@ -379,7 +379,7 @@ EXPORT_SYMBOL(blk_queue_max_segment_size);
+  *   storage device can address.  The default of 512 covers most
+  *   hardware.
+  **/
+-void blk_queue_logical_block_size(struct request_queue *q, unsigned short 
size)
++void blk_queue_logical_block_size(struct request_queue *q, unsigned int size)
+ {
+       q->limits.logical_block_size = size;
+ 
+diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
+index 32ac5f551e55..e6887714fe0a 100644
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -1115,8 +1115,8 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
+       if (!VDEV_IS_EXTENDED(info->vdevice)) {
+               err = xen_translate_vdev(info->vdevice, &minor, &offset);
+               if (err)
+-                      return err;             
+-              nr_parts = PARTS_PER_DISK;
++                      return err;
++              nr_parts = PARTS_PER_DISK;
+       } else {
+               minor = BLKIF_MINOR_EXT(info->vdevice);
+               nr_parts = PARTS_PER_EXT_DISK;
+diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
+index a3f52f678211..8341a128dab1 100644
+--- a/drivers/clk/clk.c
++++ b/drivers/clk/clk.c
+@@ -2482,11 +2482,17 @@ static int __clk_core_init(struct clk_core *core)
+       if (core->flags & CLK_IS_CRITICAL) {
+               unsigned long flags;
+ 
+-              clk_core_prepare(core);
++              ret = clk_core_prepare(core);
++              if (ret)
++                      goto out;
+ 
+               flags = clk_enable_lock();
+-              clk_core_enable(core);
++              ret = clk_core_enable(core);
+               clk_enable_unlock(flags);
++              if (ret) {
++                      clk_core_unprepare(core);
++                      goto out;
++              }
+       }
+ 
+       /*
+diff --git a/drivers/iio/industrialio-buffer.c 
b/drivers/iio/industrialio-buffer.c
+index d50125766093..c3badf634378 100644
+--- a/drivers/iio/industrialio-buffer.c
++++ b/drivers/iio/industrialio-buffer.c
+@@ -570,7 +570,7 @@ static int iio_compute_scan_bytes(struct iio_dev 
*indio_dev,
+                               const unsigned long *mask, bool timestamp)
+ {
+       unsigned bytes = 0;
+-      int length, i;
++      int length, i, largest = 0;
+ 
+       /* How much space will the demuxed element take? */
+       for_each_set_bit(i, mask,
+@@ -578,13 +578,17 @@ static int iio_compute_scan_bytes(struct iio_dev 
*indio_dev,
+               length = iio_storage_bytes_for_si(indio_dev, i);
+               bytes = ALIGN(bytes, length);
+               bytes += length;
++              largest = max(largest, length);
+       }
+ 
+       if (timestamp) {
+               length = iio_storage_bytes_for_timestamp(indio_dev);
+               bytes = ALIGN(bytes, length);
+               bytes += length;
++              largest = max(largest, length);
+       }
++
++      bytes = ALIGN(bytes, largest);
+       return bytes;
+ }
+ 
+diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
+index c5534d294773..00025569e807 100644
+--- a/drivers/md/dm-snap-persistent.c
++++ b/drivers/md/dm-snap-persistent.c
+@@ -17,7 +17,7 @@
+ #include "dm-bufio.h"
+ 
+ #define DM_MSG_PREFIX "persistent snapshot"
+-#define DM_CHUNK_SIZE_DEFAULT_SECTORS 32      /* 16KB */
++#define DM_CHUNK_SIZE_DEFAULT_SECTORS 32U     /* 16KB */
+ 
+ #define DM_PREFETCH_CHUNKS            12
+ 
+diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
+index 204adde004a3..cdafa5e0ea6d 100644
+--- a/drivers/md/raid0.c
++++ b/drivers/md/raid0.c
+@@ -94,7 +94,7 @@ static int create_strip_zones(struct mddev *mddev, struct 
r0conf **private_conf)
+       char b[BDEVNAME_SIZE];
+       char b2[BDEVNAME_SIZE];
+       struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
+-      unsigned short blksize = 512;
++      unsigned blksize = 512;
+ 
+       *private_conf = ERR_PTR(-ENOMEM);
+       if (!conf)
+diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c
+index cf6ce9f600ca..f9b2e652c399 100644
+--- a/drivers/message/fusion/mptctl.c
++++ b/drivers/message/fusion/mptctl.c
+@@ -100,19 +100,19 @@ struct buflist {
+  * Function prototypes. Called from OS entry point mptctl_ioctl.
+  * arg contents specific to function.
+  */
+-static int mptctl_fw_download(unsigned long arg);
+-static int mptctl_getiocinfo(unsigned long arg, unsigned int cmd);
+-static int mptctl_gettargetinfo(unsigned long arg);
+-static int mptctl_readtest(unsigned long arg);
+-static int mptctl_mpt_command(unsigned long arg);
+-static int mptctl_eventquery(unsigned long arg);
+-static int mptctl_eventenable(unsigned long arg);
+-static int mptctl_eventreport(unsigned long arg);
+-static int mptctl_replace_fw(unsigned long arg);
+-
+-static int mptctl_do_reset(unsigned long arg);
+-static int mptctl_hp_hostinfo(unsigned long arg, unsigned int cmd);
+-static int mptctl_hp_targetinfo(unsigned long arg);
++static int mptctl_fw_download(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_getiocinfo(MPT_ADAPTER *iocp, unsigned long arg, unsigned 
int cmd);
++static int mptctl_gettargetinfo(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_readtest(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_mpt_command(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_eventquery(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_eventenable(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_eventreport(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_replace_fw(MPT_ADAPTER *iocp, unsigned long arg);
++
++static int mptctl_do_reset(MPT_ADAPTER *iocp, unsigned long arg);
++static int mptctl_hp_hostinfo(MPT_ADAPTER *iocp, unsigned long arg, unsigned 
int cmd);
++static int mptctl_hp_targetinfo(MPT_ADAPTER *iocp, unsigned long arg);
+ 
+ static int  mptctl_probe(struct pci_dev *, const struct pci_device_id *);
+ static void mptctl_remove(struct pci_dev *);
+@@ -123,8 +123,8 @@ static long compat_mpctl_ioctl(struct file *f, unsigned 
cmd, unsigned long arg);
+ /*
+  * Private function calls.
+  */
+-static int mptctl_do_mpt_command(struct mpt_ioctl_command karg, void __user 
*mfPtr);
+-static int mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen);
++static int mptctl_do_mpt_command(MPT_ADAPTER *iocp, struct mpt_ioctl_command 
karg, void __user *mfPtr);
++static int mptctl_do_fw_download(MPT_ADAPTER *iocp, char __user *ufwbuf, 
size_t fwlen);
+ static MptSge_t *kbuf_alloc_2_sgl(int bytes, u32 dir, int sge_offset, int 
*frags,
+               struct buflist **blp, dma_addr_t *sglbuf_dma, MPT_ADAPTER *ioc);
+ static void kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma,
+@@ -656,19 +656,19 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, 
unsigned long arg)
+        * by TM and FW reloads.
+        */
+       if ((cmd & ~IOCSIZE_MASK) == (MPTIOCINFO & ~IOCSIZE_MASK)) {
+-              return mptctl_getiocinfo(arg, _IOC_SIZE(cmd));
++              return mptctl_getiocinfo(iocp, arg, _IOC_SIZE(cmd));
+       } else if (cmd == MPTTARGETINFO) {
+-              return mptctl_gettargetinfo(arg);
++              return mptctl_gettargetinfo(iocp, arg);
+       } else if (cmd == MPTTEST) {
+-              return mptctl_readtest(arg);
++              return mptctl_readtest(iocp, arg);
+       } else if (cmd == MPTEVENTQUERY) {
+-              return mptctl_eventquery(arg);
++              return mptctl_eventquery(iocp, arg);
+       } else if (cmd == MPTEVENTENABLE) {
+-              return mptctl_eventenable(arg);
++              return mptctl_eventenable(iocp, arg);
+       } else if (cmd == MPTEVENTREPORT) {
+-              return mptctl_eventreport(arg);
++              return mptctl_eventreport(iocp, arg);
+       } else if (cmd == MPTFWREPLACE) {
+-              return mptctl_replace_fw(arg);
++              return mptctl_replace_fw(iocp, arg);
+       }
+ 
+       /* All of these commands require an interrupt or
+@@ -678,15 +678,15 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, 
unsigned long arg)
+               return ret;
+ 
+       if (cmd == MPTFWDOWNLOAD)
+-              ret = mptctl_fw_download(arg);
++              ret = mptctl_fw_download(iocp, arg);
+       else if (cmd == MPTCOMMAND)
+-              ret = mptctl_mpt_command(arg);
++              ret = mptctl_mpt_command(iocp, arg);
+       else if (cmd == MPTHARDRESET)
+-              ret = mptctl_do_reset(arg);
++              ret = mptctl_do_reset(iocp, arg);
+       else if ((cmd & ~IOCSIZE_MASK) == (HP_GETHOSTINFO & ~IOCSIZE_MASK))
+-              ret = mptctl_hp_hostinfo(arg, _IOC_SIZE(cmd));
++              ret = mptctl_hp_hostinfo(iocp, arg, _IOC_SIZE(cmd));
+       else if (cmd == HP_GETTARGETINFO)
+-              ret = mptctl_hp_targetinfo(arg);
++              ret = mptctl_hp_targetinfo(iocp, arg);
+       else
+               ret = -EINVAL;
+ 
+@@ -705,11 +705,10 @@ mptctl_ioctl(struct file *file, unsigned int cmd, 
unsigned long arg)
+       return ret;
+ }
+ 
+-static int mptctl_do_reset(unsigned long arg)
++static int mptctl_do_reset(MPT_ADAPTER *iocp, unsigned long arg)
+ {
+       struct mpt_ioctl_diag_reset __user *urinfo = (void __user *) arg;
+       struct mpt_ioctl_diag_reset krinfo;
+-      MPT_ADAPTER             *iocp;
+ 
+       if (copy_from_user(&krinfo, urinfo, sizeof(struct 
mpt_ioctl_diag_reset))) {
+               printk(KERN_ERR MYNAM "%s@%d::mptctl_do_reset - "
+@@ -718,12 +717,6 @@ static int mptctl_do_reset(unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (mpt_verify_adapter(krinfo.hdr.iocnum, &iocp) < 0) {
+-              printk(KERN_DEBUG MYNAM "%s@%d::mptctl_do_reset - ioc%d not 
found!\n",
+-                              __FILE__, __LINE__, krinfo.hdr.iocnum);
+-              return -ENODEV; /* (-6) No such device or address */
+-      }
+-
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "mptctl_do_reset called.\n",
+           iocp->name));
+ 
+@@ -754,7 +747,7 @@ static int mptctl_do_reset(unsigned long arg)
+  *            -ENOMSG if FW upload returned bad status
+  */
+ static int
+-mptctl_fw_download(unsigned long arg)
++mptctl_fw_download(MPT_ADAPTER *iocp, unsigned long arg)
+ {
+       struct mpt_fw_xfer __user *ufwdl = (void __user *) arg;
+       struct mpt_fw_xfer       kfwdl;
+@@ -766,7 +759,7 @@ mptctl_fw_download(unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      return mptctl_do_fw_download(kfwdl.iocnum, kfwdl.bufp, kfwdl.fwlen);
++      return mptctl_do_fw_download(iocp, kfwdl.bufp, kfwdl.fwlen);
+ }
+ 
+ 
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+@@ -784,11 +777,10 @@ mptctl_fw_download(unsigned long arg)
+  *            -ENOMSG if FW upload returned bad status
+  */
+ static int
+-mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
++mptctl_do_fw_download(MPT_ADAPTER *iocp, char __user *ufwbuf, size_t fwlen)
+ {
+       FWDownload_t            *dlmsg;
+       MPT_FRAME_HDR           *mf;
+-      MPT_ADAPTER             *iocp;
+       FWDownloadTCSGE_t       *ptsge;
+       MptSge_t                *sgl, *sgIn;
+       char                    *sgOut;
+@@ -808,17 +800,10 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, 
size_t fwlen)
+       pFWDownloadReply_t       ReplyMsg = NULL;
+       unsigned long            timeleft;
+ 
+-      if (mpt_verify_adapter(ioc, &iocp) < 0) {
+-              printk(KERN_DEBUG MYNAM "ioctl_fwdl - ioc%d not found!\n",
+-                               ioc);
+-              return -ENODEV; /* (-6) No such device or address */
+-      } else {
+-
+-              /*  Valid device. Get a message frame and construct the FW 
download message.
+-              */
+-              if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL)
+-                      return -EAGAIN;
+-      }
++      /*  Valid device. Get a message frame and construct the FW download 
message.
++      */
++      if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL)
++              return -EAGAIN;
+ 
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT
+           "mptctl_do_fwdl called. mptctl_id = %xh.\n", iocp->name, 
mptctl_id));
+@@ -826,8 +811,6 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t 
fwlen)
+           iocp->name, ufwbuf));
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.fwlen = %d\n",
+           iocp->name, (int)fwlen));
+-      dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.ioc   = %04xh\n",
+-          iocp->name, ioc));
+ 
+       dlmsg = (FWDownload_t*) mf;
+       ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL;
+@@ -1238,13 +1221,11 @@ kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma, struct 
buflist *buflist, MPT_ADAPTE
+  *            -ENODEV  if no such device/adapter
+  */
+ static int
+-mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
++mptctl_getiocinfo (MPT_ADAPTER *ioc, unsigned long arg, unsigned int 
data_size)
+ {
+       struct mpt_ioctl_iocinfo __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_iocinfo *karg;
+-      MPT_ADAPTER             *ioc;
+       struct pci_dev          *pdev;
+-      int                     iocnum;
+       unsigned int            port;
+       int                     cim_rev;
+       struct scsi_device      *sdev;
+@@ -1272,14 +1253,6 @@ mptctl_getiocinfo (unsigned long arg, unsigned int 
data_size)
+               return PTR_ERR(karg);
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_getiocinfo() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              kfree(karg);
+-              return -ENODEV;
+-      }
+-
+       /* Verify the data transfer size is correct. */
+       if (karg->hdr.maxDataSize != data_size) {
+               printk(MYIOC_s_ERR_FMT "%s@%d::mptctl_getiocinfo - "
+@@ -1385,15 +1358,13 @@ mptctl_getiocinfo (unsigned long arg, unsigned int 
data_size)
+  *            -ENODEV  if no such device/adapter
+  */
+ static int
+-mptctl_gettargetinfo (unsigned long arg)
++mptctl_gettargetinfo (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_targetinfo __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_targetinfo karg;
+-      MPT_ADAPTER             *ioc;
+       VirtDevice              *vdevice;
+       char                    *pmem;
+       int                     *pdata;
+-      int                     iocnum;
+       int                     numDevices = 0;
+       int                     lun;
+       int                     maxWordsLeft;
+@@ -1408,13 +1379,6 @@ mptctl_gettargetinfo (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_gettargetinfo() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_gettargetinfo 
called.\n",
+           ioc->name));
+       /* Get the port number and set the maximum number of bytes
+@@ -1510,12 +1474,10 @@ mptctl_gettargetinfo (unsigned long arg)
+  *            -ENODEV  if no such device/adapter
+  */
+ static int
+-mptctl_readtest (unsigned long arg)
++mptctl_readtest (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_test __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_test    karg;
+-      MPT_ADAPTER *ioc;
+-      int iocnum;
+ 
+       if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_test))) {
+               printk(KERN_ERR MYNAM "%s@%d::mptctl_readtest - "
+@@ -1524,13 +1486,6 @@ mptctl_readtest (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_readtest() @%d - ioc%d not 
found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_readtest called.\n",
+           ioc->name));
+       /* Fill in the data and return the structure to the calling
+@@ -1571,12 +1526,10 @@ mptctl_readtest (unsigned long arg)
+  *            -ENODEV  if no such device/adapter
+  */
+ static int
+-mptctl_eventquery (unsigned long arg)
++mptctl_eventquery (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_eventquery __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_eventquery      karg;
+-      MPT_ADAPTER *ioc;
+-      int iocnum;
+ 
+       if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventquery))) {
+               printk(KERN_ERR MYNAM "%s@%d::mptctl_eventquery - "
+@@ -1585,13 +1538,6 @@ mptctl_eventquery (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_eventquery() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventquery called.\n",
+           ioc->name));
+       karg.eventEntries = MPTCTL_EVENT_LOG_SIZE;
+@@ -1610,12 +1556,10 @@ mptctl_eventquery (unsigned long arg)
+ 
+ 
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+ static int
+-mptctl_eventenable (unsigned long arg)
++mptctl_eventenable (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_eventenable __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_eventenable     karg;
+-      MPT_ADAPTER *ioc;
+-      int iocnum;
+ 
+       if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventenable))) {
+               printk(KERN_ERR MYNAM "%s@%d::mptctl_eventenable - "
+@@ -1624,13 +1568,6 @@ mptctl_eventenable (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_eventenable() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventenable called.\n",
+           ioc->name));
+       if (ioc->events == NULL) {
+@@ -1658,12 +1595,10 @@ mptctl_eventenable (unsigned long arg)
+ 
+ 
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+ static int
+-mptctl_eventreport (unsigned long arg)
++mptctl_eventreport (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_eventreport __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_eventreport     karg;
+-      MPT_ADAPTER              *ioc;
+-      int                      iocnum;
+       int                      numBytes, maxEvents, max;
+ 
+       if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventreport))) {
+@@ -1673,12 +1608,6 @@ mptctl_eventreport (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_eventreport() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventreport called.\n",
+           ioc->name));
+ 
+@@ -1712,12 +1641,10 @@ mptctl_eventreport (unsigned long arg)
+ 
+ 
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+ static int
+-mptctl_replace_fw (unsigned long arg)
++mptctl_replace_fw (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_replace_fw __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_replace_fw      karg;
+-      MPT_ADAPTER              *ioc;
+-      int                      iocnum;
+       int                      newFwSize;
+ 
+       if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_replace_fw))) {
+@@ -1727,13 +1654,6 @@ mptctl_replace_fw (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_replace_fw() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_replace_fw called.\n",
+           ioc->name));
+       /* If caching FW, Free the old FW image
+@@ -1780,12 +1700,10 @@ mptctl_replace_fw (unsigned long arg)
+  *            -ENOMEM if memory allocation error
+  */
+ static int
+-mptctl_mpt_command (unsigned long arg)
++mptctl_mpt_command (MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       struct mpt_ioctl_command __user *uarg = (void __user *) arg;
+       struct mpt_ioctl_command  karg;
+-      MPT_ADAPTER     *ioc;
+-      int             iocnum;
+       int             rc;
+ 
+ 
+@@ -1796,14 +1714,7 @@ mptctl_mpt_command (unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_mpt_command() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+-      rc = mptctl_do_mpt_command (karg, &uarg->MF);
++      rc = mptctl_do_mpt_command (ioc, karg, &uarg->MF);
+ 
+       return rc;
+ }
+@@ -1821,9 +1732,8 @@ mptctl_mpt_command (unsigned long arg)
+  *            -EPERM if SCSI I/O and target is untagged
+  */
+ static int
+-mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
++mptctl_do_mpt_command (MPT_ADAPTER *ioc, struct mpt_ioctl_command karg, void 
__user *mfPtr)
+ {
+-      MPT_ADAPTER     *ioc;
+       MPT_FRAME_HDR   *mf = NULL;
+       MPIHeader_t     *hdr;
+       char            *psge;
+@@ -1832,7 +1742,7 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, 
void __user *mfPtr)
+       dma_addr_t      dma_addr_in;
+       dma_addr_t      dma_addr_out;
+       int             sgSize = 0;     /* Num SG elements */
+-      int             iocnum, flagsLength;
++      int             flagsLength;
+       int             sz, rc = 0;
+       int             msgContext;
+       u16             req_idx;
+@@ -1847,13 +1757,6 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, 
void __user *mfPtr)
+       bufIn.kptr = bufOut.kptr = NULL;
+       bufIn.len = bufOut.len = 0;
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_do_mpt_command() @%d - 
ioc%d not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+-
+       spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
+       if (ioc->ioc_reset_in_progress) {
+               spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
+@@ -2418,17 +2321,15 @@ done_free_mem:
+  *            -ENOMEM if memory allocation error
+  */
+ static int
+-mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
++mptctl_hp_hostinfo(MPT_ADAPTER *ioc, unsigned long arg, unsigned int 
data_size)
+ {
+       hp_host_info_t  __user *uarg = (void __user *) arg;
+-      MPT_ADAPTER             *ioc;
+       struct pci_dev          *pdev;
+       char                    *pbuf=NULL;
+       dma_addr_t              buf_dma;
+       hp_host_info_t          karg;
+       CONFIGPARMS             cfg;
+       ConfigPageHeader_t      hdr;
+-      int                     iocnum;
+       int                     rc, cim_rev;
+       ToolboxIstwiReadWriteRequest_t  *IstwiRWRequest;
+       MPT_FRAME_HDR           *mf = NULL;
+@@ -2452,12 +2353,6 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int 
data_size)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-          (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_hp_hostinfo() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_hostinfo 
called.\n",
+           ioc->name));
+ 
+@@ -2670,15 +2565,13 @@ retry_wait:
+  *            -ENOMEM if memory allocation error
+  */
+ static int
+-mptctl_hp_targetinfo(unsigned long arg)
++mptctl_hp_targetinfo(MPT_ADAPTER *ioc, unsigned long arg)
+ {
+       hp_target_info_t __user *uarg = (void __user *) arg;
+       SCSIDevicePage0_t       *pg0_alloc;
+       SCSIDevicePage3_t       *pg3_alloc;
+-      MPT_ADAPTER             *ioc;
+       MPT_SCSI_HOST           *hd = NULL;
+       hp_target_info_t        karg;
+-      int                     iocnum;
+       int                     data_sz;
+       dma_addr_t              page_dma;
+       CONFIGPARMS             cfg;
+@@ -2692,12 +2585,6 @@ mptctl_hp_targetinfo(unsigned long arg)
+               return -EFAULT;
+       }
+ 
+-      if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+-              (ioc == NULL)) {
+-              printk(KERN_DEBUG MYNAM "%s::mptctl_hp_targetinfo() @%d - ioc%d 
not found!\n",
+-                              __FILE__, __LINE__, iocnum);
+-              return -ENODEV;
+-      }
+       if (karg.hdr.id >= MPT_MAX_FC_DEVICES)
+               return -EINVAL;
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_hp_targetinfo 
called.\n",
+@@ -2865,7 +2752,7 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int 
cmd,
+       kfw.fwlen = kfw32.fwlen;
+       kfw.bufp = compat_ptr(kfw32.bufp);
+ 
+-      ret = mptctl_do_fw_download(kfw.iocnum, kfw.bufp, kfw.fwlen);
++      ret = mptctl_do_fw_download(iocp, kfw.bufp, kfw.fwlen);
+ 
+       mutex_unlock(&iocp->ioctl_cmds.mutex);
+ 
+@@ -2919,7 +2806,7 @@ compat_mpt_command(struct file *filp, unsigned int cmd,
+ 
+       /* Pass new structure to do_mpt_command
+        */
+-      ret = mptctl_do_mpt_command (karg, &uarg->MF);
++      ret = mptctl_do_mpt_command (iocp, karg, &uarg->MF);
+ 
+       mutex_unlock(&iocp->ioctl_cmds.mutex);
+ 
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c 
b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index b681c07b33fb..0733745f4be6 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -669,7 +669,6 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data 
*ring_data,
+       skb = *out_skb = napi_alloc_skb(&ring_data->napi,
+                                       HNS_RX_HEAD_SIZE);
+       if (unlikely(!skb)) {
+-              netdev_err(ndev, "alloc rx skb fail\n");
+               ring->stats.sw_err_cnt++;
+               return -ENOMEM;
+       }
+@@ -1180,7 +1179,6 @@ static int hns_nic_common_poll(struct napi_struct *napi, 
int budget)
+               container_of(napi, struct hns_nic_ring_data, napi);
+       struct hnae_ring *ring = ring_data->ring;
+ 
+-try_again:
+       clean_complete += ring_data->poll_one(
+                               ring_data, budget - clean_complete,
+                               ring_data->ex_process);
+@@ -1190,7 +1188,7 @@ try_again:
+                       napi_complete(napi);
+                       ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
+               } else {
+-                      goto try_again;
++                      return budget;
+               }
+       }
+ 
+diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h 
b/drivers/net/ethernet/stmicro/stmmac/common.h
+index efc4a1a8343a..e51b50d94074 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/common.h
++++ b/drivers/net/ethernet/stmicro/stmmac/common.h
+@@ -338,9 +338,8 @@ struct dma_features {
+       unsigned int rx_fifo_size;
+ };
+ 
+-/* GMAC TX FIFO is 8K, Rx FIFO is 16K */
+-#define BUF_SIZE_16KiB 16384
+-/* RX Buffer size must be < 8191 and multiple of 4/8/16 bytes */
++/* RX Buffer size must be multiple of 4/8/16 bytes */
++#define BUF_SIZE_16KiB 16368
+ #define BUF_SIZE_8KiB 8188
+ #define BUF_SIZE_4KiB 4096
+ #define BUF_SIZE_2KiB 2048
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+index e89466bd432d..81d446469a35 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+@@ -1043,7 +1043,9 @@ static int stmmac_set_bfsize(int mtu, int bufsize)
+ {
+       int ret = bufsize;
+ 
+-      if (mtu >= BUF_SIZE_4KiB)
++      if (mtu >= BUF_SIZE_8KiB)
++              ret = BUF_SIZE_16KiB;
++      else if (mtu >= BUF_SIZE_4KiB)
+               ret = BUF_SIZE_8KiB;
+       else if (mtu >= BUF_SIZE_2KiB)
+               ret = BUF_SIZE_4KiB;
+diff --git a/drivers/net/hyperv/rndis_filter.c 
b/drivers/net/hyperv/rndis_filter.c
+index b19557c035f2..aa0bbffe4900 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -1331,8 +1331,6 @@ void rndis_filter_device_remove(struct hv_device *dev,
+       /* Halt and release the rndis device */
+       rndis_filter_halt_device(rndis_dev);
+ 
+-      net_dev->extension = NULL;
+-
+       netvsc_device_remove(dev);
+ }
+ 
+diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
+index 2b977655834c..ab539136d5bf 100644
+--- a/drivers/net/macvlan.c
++++ b/drivers/net/macvlan.c
+@@ -263,7 +263,7 @@ static void macvlan_broadcast(struct sk_buff *skb,
+                             struct net_device *src,
+                             enum macvlan_mode mode)
+ {
+-      const struct ethhdr *eth = skb_eth_hdr(skb);
++      const struct ethhdr *eth = eth_hdr(skb);
+       const struct macvlan_dev *vlan;
+       struct sk_buff *nskb;
+       unsigned int i;
+@@ -515,10 +515,11 @@ static int macvlan_queue_xmit(struct sk_buff *skb, 
struct net_device *dev)
+       const struct macvlan_dev *dest;
+ 
+       if (vlan->mode == MACVLAN_MODE_BRIDGE) {
+-              const struct ethhdr *eth = (void *)skb->data;
++              const struct ethhdr *eth = skb_eth_hdr(skb);
+ 
+               /* send to other bridge ports directly */
+               if (is_multicast_ether_addr(eth->h_dest)) {
++                      skb_reset_mac_header(skb);
+                       macvlan_broadcast(skb, port, dev, MACVLAN_MODE_BRIDGE);
+                       goto xmit_world;
+               }
+diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
+index c23f35dba718..ee7194a9e231 100644
+--- a/drivers/net/usb/lan78xx.c
++++ b/drivers/net/usb/lan78xx.c
+@@ -3612,6 +3612,7 @@ static int lan78xx_probe(struct usb_interface *intf,
+ 
+       /* MTU range: 68 - 9000 */
+       netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
++      netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);
+ 
+       dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
+       dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
+diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
+index 6a86a03c5e95..0083c60f5cdf 100644
+--- a/drivers/net/usb/r8152.c
++++ b/drivers/net/usb/r8152.c
+@@ -5158,6 +5158,9 @@ static int rtl8152_probe(struct usb_interface *intf,
+               return -ENODEV;
+       }
+ 
++      if (intf->cur_altsetting->desc.bNumEndpoints < 3)
++              return -ENODEV;
++
+       usb_reset_device(udev);
+       netdev = alloc_etherdev(sizeof(struct r8152));
+       if (!netdev) {
+diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
+index 289dff262948..571a1ff8f81f 100644
+--- a/drivers/net/wan/fsl_ucc_hdlc.c
++++ b/drivers/net/wan/fsl_ucc_hdlc.c
+@@ -76,7 +76,7 @@ static struct ucc_tdm_info utdm_primary_info = {
+       },
+ };
+ 
+-static struct ucc_tdm_info utdm_info[MAX_HDLC_NUM];
++static struct ucc_tdm_info utdm_info[UCC_MAX_NUM];
+ 
+ static int uhdlc_init(struct ucc_hdlc_private *priv)
+ {
+diff --git a/drivers/net/wireless/st/cw1200/fwio.c 
b/drivers/net/wireless/st/cw1200/fwio.c
+index 30e7646d04af..16be7fa82a23 100644
+--- a/drivers/net/wireless/st/cw1200/fwio.c
++++ b/drivers/net/wireless/st/cw1200/fwio.c
+@@ -323,12 +323,12 @@ int cw1200_load_firmware(struct cw1200_common *priv)
+               goto out;
+       }
+ 
+-      priv->hw_type = cw1200_get_hw_type(val32, &major_revision);
+-      if (priv->hw_type < 0) {
++      ret = cw1200_get_hw_type(val32, &major_revision);
++      if (ret < 0) {
+               pr_err("Can't deduce hardware type.\n");
+-              ret = -ENOTSUPP;
+               goto out;
+       }
++      priv->hw_type = ret;
+ 
+       /* Set DPLL Reg value, and read back to confirm writes work */
+       ret = cw1200_reg_write_32(priv, ST90TDS_TSET_GEN_R_W_REG_ID,
+diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c
+index fcb57d64d97e..a2c9b3f3bc23 100644
+--- a/drivers/nfc/pn533/usb.c
++++ b/drivers/nfc/pn533/usb.c
+@@ -403,7 +403,7 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy 
*phy)
+                      cmd, sizeof(cmd), false);
+ 
+       rc = usb_bulk_msg(phy->udev, phy->out_urb->pipe, buffer, sizeof(cmd),
+-                        &transferred, 0);
++                        &transferred, 5000);
+       kfree(buffer);
+       if (rc || (transferred != sizeof(cmd))) {
+               nfc_err(&phy->udev->dev,
+diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
+index b818f65480c1..e232233beb8f 100644
+--- a/drivers/ptp/ptp_clock.c
++++ b/drivers/ptp/ptp_clock.c
+@@ -179,6 +179,7 @@ static void ptp_clock_release(struct device *dev)
+ {
+       struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
+ 
++      ptp_cleanup_pin_groups(ptp);
+       mutex_destroy(&ptp->tsevq_mux);
+       mutex_destroy(&ptp->pincfg_mux);
+       ida_simple_remove(&ptp_clocks_map, ptp->index);
+@@ -315,9 +316,8 @@ int ptp_clock_unregister(struct ptp_clock *ptp)
+       if (ptp->pps_source)
+               pps_unregister_source(ptp->pps_source);
+ 
+-      ptp_cleanup_pin_groups(ptp);
+-
+       posix_clock_unregister(&ptp->clock);
++
+       return 0;
+ }
+ EXPORT_SYMBOL(ptp_clock_unregister);
+diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c 
b/drivers/scsi/bnx2i/bnx2i_iscsi.c
+index 03c104b47f31..b832bd0ce202 100644
+--- a/drivers/scsi/bnx2i/bnx2i_iscsi.c
++++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c
+@@ -915,12 +915,12 @@ void bnx2i_free_hba(struct bnx2i_hba *hba)
+       INIT_LIST_HEAD(&hba->ep_ofld_list);
+       INIT_LIST_HEAD(&hba->ep_active_list);
+       INIT_LIST_HEAD(&hba->ep_destroy_list);
+-      pci_dev_put(hba->pcidev);
+ 
+       if (hba->regview) {
+               pci_iounmap(hba->pcidev, hba->regview);
+               hba->regview = NULL;
+       }
++      pci_dev_put(hba->pcidev);
+       bnx2i_free_mp_bdt(hba);
+       bnx2i_release_free_cid_que(hba);
+       iscsi_host_free(shost);
+diff --git a/drivers/scsi/esas2r/esas2r_flash.c 
b/drivers/scsi/esas2r/esas2r_flash.c
+index 7bd376d95ed5..b02ac389e6c6 100644
+--- a/drivers/scsi/esas2r/esas2r_flash.c
++++ b/drivers/scsi/esas2r/esas2r_flash.c
+@@ -1197,6 +1197,7 @@ bool esas2r_nvram_read_direct(struct esas2r_adapter *a)
+       if (!esas2r_read_flash_block(a, a->nvram, FLS_OFFSET_NVR,
+                                    sizeof(struct esas2r_sas_nvram))) {
+               esas2r_hdebug("NVRAM read failed, using defaults");
++              up(&a->nvram_semaphore);
+               return false;
+       }
+ 
+diff --git a/drivers/scsi/fnic/vnic_dev.c b/drivers/scsi/fnic/vnic_dev.c
+index ba69d6112fa1..c5b89a003d2a 100644
+--- a/drivers/scsi/fnic/vnic_dev.c
++++ b/drivers/scsi/fnic/vnic_dev.c
+@@ -445,26 +445,26 @@ int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int 
*done)
+ 
+ int vnic_dev_hang_notify(struct vnic_dev *vdev)
+ {
+-      u64 a0, a1;
++      u64 a0 = 0, a1 = 0;
+       int wait = 1000;
+       return vnic_dev_cmd(vdev, CMD_HANG_NOTIFY, &a0, &a1, wait);
+ }
+ 
+ int vnic_dev_mac_addr(struct vnic_dev *vdev, u8 *mac_addr)
+ {
+-      u64 a0, a1;
++      u64 a[2] = {};
+       int wait = 1000;
+       int err, i;
+ 
+       for (i = 0; i < ETH_ALEN; i++)
+               mac_addr[i] = 0;
+ 
+-      err = vnic_dev_cmd(vdev, CMD_MAC_ADDR, &a0, &a1, wait);
++      err = vnic_dev_cmd(vdev, CMD_MAC_ADDR, &a[0], &a[1], wait);
+       if (err)
+               return err;
+ 
+       for (i = 0; i < ETH_ALEN; i++)
+-              mac_addr[i] = ((u8 *)&a0)[i];
++              mac_addr[i] = ((u8 *)&a)[i];
+ 
+       return 0;
+ }
+@@ -489,30 +489,30 @@ void vnic_dev_packet_filter(struct vnic_dev *vdev, int 
directed, int multicast,
+ 
+ void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr)
+ {
+-      u64 a0 = 0, a1 = 0;
++      u64 a[2] = {};
+       int wait = 1000;
+       int err;
+       int i;
+ 
+       for (i = 0; i < ETH_ALEN; i++)
+-              ((u8 *)&a0)[i] = addr[i];
++              ((u8 *)&a)[i] = addr[i];
+ 
+-      err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait);
++      err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a[0], &a[1], wait);
+       if (err)
+               pr_err("Can't add addr [%pM], %d\n", addr, err);
+ }
+ 
+ void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
+ {
+-      u64 a0 = 0, a1 = 0;
++      u64 a[2] = {};
+       int wait = 1000;
+       int err;
+       int i;
+ 
+       for (i = 0; i < ETH_ALEN; i++)
+-              ((u8 *)&a0)[i] = addr[i];
++              ((u8 *)&a)[i] = addr[i];
+ 
+-      err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait);
++      err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a[0], &a[1], wait);
+       if (err)
+               pr_err("Can't del addr [%pM], %d\n", addr, err);
+ }
+diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
+index bd2421863510..a66f7cec797c 100644
+--- a/drivers/scsi/qla2xxx/qla_init.c
++++ b/drivers/scsi/qla2xxx/qla_init.c
+@@ -5145,8 +5145,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
+               if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
+                       break;
+ 
+-              if ((fcport->flags & FCF_FABRIC_DEVICE) == 0 ||
+-                  (fcport->flags & FCF_LOGIN_NEEDED) == 0)
++              if ((fcport->flags & FCF_FABRIC_DEVICE) == 0)
+                       continue;
+ 
+               if (fcport->scan_state == QLA_FCPORT_SCAN) {
+@@ -5171,7 +5170,8 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
+                       }
+               }
+ 
+-              if (fcport->scan_state == QLA_FCPORT_FOUND)
++              if (fcport->scan_state == QLA_FCPORT_FOUND &&
++                  (fcport->flags & FCF_LOGIN_NEEDED) != 0)
+                       qla24xx_fcport_handle_login(vha, fcport);
+       }
+       return (rval);
+diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
+index 7f2da56274bd..648916a9082c 100644
+--- a/drivers/scsi/qla2xxx/qla_isr.c
++++ b/drivers/scsi/qla2xxx/qla_isr.c
+@@ -3519,7 +3519,7 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct 
rsp_que *rsp)
+ skip_msix:
+ 
+       ql_log(ql_log_info, vha, 0x0037,
+-          "Falling back-to MSI mode -%d.\n", ret);
++          "Falling back-to MSI mode -- ret=%d.\n", ret);
+ 
+       if (!IS_QLA24XX(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) &&
+           !IS_QLA8001(ha) && !IS_P3P_TYPE(ha) && !IS_QLAFX00(ha) &&
+@@ -3527,13 +3527,13 @@ skip_msix:
+               goto skip_msi;
+ 
+       ret = pci_alloc_irq_vectors(ha->pdev, 1, 1, PCI_IRQ_MSI);
+-      if (!ret) {
++      if (ret > 0) {
+               ql_dbg(ql_dbg_init, vha, 0x0038,
+                   "MSI: Enabled.\n");
+               ha->flags.msi_enabled = 1;
+       } else
+               ql_log(ql_log_warn, vha, 0x0039,
+-                  "Falling back-to INTa mode -- %d.\n", ret);
++                  "Falling back-to INTa mode -- ret=%d.\n", ret);
+ skip_msi:
+ 
+       /* Skip INTx on ISP82xx. */
+diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
+index 1da04f323d38..c402fc583da3 100644
+--- a/drivers/scsi/qla4xxx/ql4_mbx.c
++++ b/drivers/scsi/qla4xxx/ql4_mbx.c
+@@ -641,9 +641,6 @@ int qla4xxx_initialize_fw_cb(struct scsi_qla_host * ha)
+ 
+       if (qla4xxx_get_ifcb(ha, &mbox_cmd[0], &mbox_sts[0], init_fw_cb_dma) !=
+           QLA_SUCCESS) {
+-              dma_free_coherent(&ha->pdev->dev,
+-                                sizeof(struct addr_ctrl_blk),
+-                                init_fw_cb, init_fw_cb_dma);
+               goto exit_init_fw_cb;
+       }
+ 
+diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c
+index 617a60737590..22472d140ef7 100644
+--- a/drivers/scsi/scsi_trace.c
++++ b/drivers/scsi/scsi_trace.c
+@@ -21,7 +21,7 @@
+ #include <trace/events/scsi.h>
+ 
+ #define SERVICE_ACTION16(cdb) (cdb[1] & 0x1f)
+-#define SERVICE_ACTION32(cdb) ((cdb[8] << 8) | cdb[9])
++#define SERVICE_ACTION32(cdb) (get_unaligned_be16(&cdb[8]))
+ 
+ static const char *
+ scsi_trace_misc(struct trace_seq *, unsigned char *, int);
+@@ -51,17 +51,12 @@ static const char *
+ scsi_trace_rw10(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p);
+-      sector_t lba = 0, txlen = 0;
++      u32 lba, txlen;
+ 
+-      lba |= (cdb[2] << 24);
+-      lba |= (cdb[3] << 16);
+-      lba |= (cdb[4] << 8);
+-      lba |=  cdb[5];
+-      txlen |= (cdb[7] << 8);
+-      txlen |=  cdb[8];
++      lba = get_unaligned_be32(&cdb[2]);
++      txlen = get_unaligned_be16(&cdb[7]);
+ 
+-      trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
+-                       (unsigned long long)lba, (unsigned long long)txlen,
++      trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen,
+                        cdb[1] >> 5);
+ 
+       if (cdb[0] == WRITE_SAME)
+@@ -76,19 +71,12 @@ static const char *
+ scsi_trace_rw12(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p);
+-      sector_t lba = 0, txlen = 0;
+-
+-      lba |= (cdb[2] << 24);
+-      lba |= (cdb[3] << 16);
+-      lba |= (cdb[4] << 8);
+-      lba |=  cdb[5];
+-      txlen |= (cdb[6] << 24);
+-      txlen |= (cdb[7] << 16);
+-      txlen |= (cdb[8] << 8);
+-      txlen |=  cdb[9];
+-
+-      trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
+-                       (unsigned long long)lba, (unsigned long long)txlen,
++      u32 lba, txlen;
++
++      lba = get_unaligned_be32(&cdb[2]);
++      txlen = get_unaligned_be32(&cdb[6]);
++
++      trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen,
+                        cdb[1] >> 5);
+       trace_seq_putc(p, 0);
+ 
+@@ -99,23 +87,13 @@ static const char *
+ scsi_trace_rw16(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p);
+-      sector_t lba = 0, txlen = 0;
+-
+-      lba |= ((u64)cdb[2] << 56);
+-      lba |= ((u64)cdb[3] << 48);
+-      lba |= ((u64)cdb[4] << 40);
+-      lba |= ((u64)cdb[5] << 32);
+-      lba |= (cdb[6] << 24);
+-      lba |= (cdb[7] << 16);
+-      lba |= (cdb[8] << 8);
+-      lba |=  cdb[9];
+-      txlen |= (cdb[10] << 24);
+-      txlen |= (cdb[11] << 16);
+-      txlen |= (cdb[12] << 8);
+-      txlen |=  cdb[13];
+-
+-      trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
+-                       (unsigned long long)lba, (unsigned long long)txlen,
++      u64 lba;
++      u32 txlen;
++
++      lba = get_unaligned_be64(&cdb[2]);
++      txlen = get_unaligned_be32(&cdb[10]);
++
++      trace_seq_printf(p, "lba=%llu txlen=%u protect=%u", lba, txlen,
+                        cdb[1] >> 5);
+ 
+       if (cdb[0] == WRITE_SAME_16)
+@@ -130,8 +108,8 @@ static const char *
+ scsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p), *cmd;
+-      sector_t lba = 0, txlen = 0;
+-      u32 ei_lbrt = 0;
++      u64 lba;
++      u32 ei_lbrt, txlen;
+ 
+       switch (SERVICE_ACTION32(cdb)) {
+       case READ_32:
+@@ -151,26 +129,12 @@ scsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, 
int len)
+               goto out;
+       }
+ 
+-      lba |= ((u64)cdb[12] << 56);
+-      lba |= ((u64)cdb[13] << 48);
+-      lba |= ((u64)cdb[14] << 40);
+-      lba |= ((u64)cdb[15] << 32);
+-      lba |= (cdb[16] << 24);
+-      lba |= (cdb[17] << 16);
+-      lba |= (cdb[18] << 8);
+-      lba |=  cdb[19];
+-      ei_lbrt |= (cdb[20] << 24);
+-      ei_lbrt |= (cdb[21] << 16);
+-      ei_lbrt |= (cdb[22] << 8);
+-      ei_lbrt |=  cdb[23];
+-      txlen |= (cdb[28] << 24);
+-      txlen |= (cdb[29] << 16);
+-      txlen |= (cdb[30] << 8);
+-      txlen |=  cdb[31];
+-
+-      trace_seq_printf(p, "%s_32 lba=%llu txlen=%llu protect=%u ei_lbrt=%u",
+-                       cmd, (unsigned long long)lba,
+-                       (unsigned long long)txlen, cdb[10] >> 5, ei_lbrt);
++      lba = get_unaligned_be64(&cdb[12]);
++      ei_lbrt = get_unaligned_be32(&cdb[20]);
++      txlen = get_unaligned_be32(&cdb[28]);
++
++      trace_seq_printf(p, "%s_32 lba=%llu txlen=%u protect=%u ei_lbrt=%u",
++                       cmd, lba, txlen, cdb[10] >> 5, ei_lbrt);
+ 
+       if (SERVICE_ACTION32(cdb) == WRITE_SAME_32)
+               trace_seq_printf(p, " unmap=%u", cdb[10] >> 3 & 1);
+@@ -185,7 +149,7 @@ static const char *
+ scsi_trace_unmap(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p);
+-      unsigned int regions = cdb[7] << 8 | cdb[8];
++      unsigned int regions = get_unaligned_be16(&cdb[7]);
+ 
+       trace_seq_printf(p, "regions=%u", (regions - 8) / 16);
+       trace_seq_putc(p, 0);
+@@ -197,8 +161,8 @@ static const char *
+ scsi_trace_service_action_in(struct trace_seq *p, unsigned char *cdb, int len)
+ {
+       const char *ret = trace_seq_buffer_ptr(p), *cmd;
+-      sector_t lba = 0;
+-      u32 alloc_len = 0;
++      u64 lba;
++      u32 alloc_len;
+ 
+       switch (SERVICE_ACTION16(cdb)) {
+       case SAI_READ_CAPACITY_16:
+@@ -212,21 +176,10 @@ scsi_trace_service_action_in(struct trace_seq *p, 
unsigned char *cdb, int len)
+               goto out;
+       }
+ 
+-      lba |= ((u64)cdb[2] << 56);
+-      lba |= ((u64)cdb[3] << 48);
+-      lba |= ((u64)cdb[4] << 40);
+-      lba |= ((u64)cdb[5] << 32);
+-      lba |= (cdb[6] << 24);
+-      lba |= (cdb[7] << 16);
+-      lba |= (cdb[8] << 8);
+-      lba |=  cdb[9];
+-      alloc_len |= (cdb[10] << 24);
+-      alloc_len |= (cdb[11] << 16);
+-      alloc_len |= (cdb[12] << 8);
+-      alloc_len |=  cdb[13];
+-
+-      trace_seq_printf(p, "%s lba=%llu alloc_len=%u", cmd,
+-                       (unsigned long long)lba, alloc_len);
++      lba = get_unaligned_be64(&cdb[2]);
++      alloc_len = get_unaligned_be32(&cdb[10]);
++
++      trace_seq_printf(p, "%s lba=%llu alloc_len=%u", cmd, lba, alloc_len);
+ 
+ out:
+       trace_seq_putc(p, 0);
+diff --git a/drivers/target/target_core_fabric_lib.c 
b/drivers/target/target_core_fabric_lib.c
+index 508da345b73f..95aa47ac4dcd 100644
+--- a/drivers/target/target_core_fabric_lib.c
++++ b/drivers/target/target_core_fabric_lib.c
+@@ -131,7 +131,7 @@ static int srp_get_pr_transport_id(
+       memset(buf + 8, 0, leading_zero_bytes);
+       rc = hex2bin(buf + 8 + leading_zero_bytes, p, count);
+       if (rc < 0) {
+-              pr_debug("hex2bin failed for %s: %d\n", __func__, rc);
++              pr_debug("hex2bin failed for %s: %d\n", p, rc);
+               return rc;
+       }
+ 
+diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
+index 4efccf8bf99f..7d5ecf36a33c 100644
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -1164,6 +1164,7 @@ static void hub_activate(struct usb_hub *hub, enum 
hub_activation_type type)
+                        * PORT_OVER_CURRENT is not. So check for any of them.
+                        */
+                       if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
++                          (portchange & USB_PORT_STAT_C_CONNECTION) ||
+                           (portstatus & USB_PORT_STAT_OVERCURRENT) ||
+                           (portchange & USB_PORT_STAT_C_OVERCURRENT))
+                               set_bit(port1, hub->change_bits);
+diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
+index 578596d301b8..31cd798d2dac 100644
+--- a/drivers/usb/serial/ch341.c
++++ b/drivers/usb/serial/ch341.c
+@@ -592,9 +592,13 @@ static int ch341_tiocmget(struct tty_struct *tty)
+ static int ch341_reset_resume(struct usb_serial *serial)
+ {
+       struct usb_serial_port *port = serial->port[0];
+-      struct ch341_private *priv = usb_get_serial_port_data(port);
++      struct ch341_private *priv;
+       int ret;
+ 
++      priv = usb_get_serial_port_data(port);
++      if (!priv)
++              return 0;
++
+       /* reconfigure ch341 serial port after bus-reset */
+       ch341_configure(serial->dev, priv);
+ 
+diff --git a/drivers/usb/serial/io_edgeport.c 
b/drivers/usb/serial/io_edgeport.c
+index 51b61545ccf2..3705b64ab948 100644
+--- a/drivers/usb/serial/io_edgeport.c
++++ b/drivers/usb/serial/io_edgeport.c
+@@ -652,6 +652,7 @@ static void edge_interrupt_callback(struct urb *urb)
+       struct usb_serial_port *port;
+       unsigned char *data = urb->transfer_buffer;
+       int length = urb->actual_length;
++      unsigned long flags;
+       int bytes_avail;
+       int position;
+       int txCredits;
+@@ -683,7 +684,7 @@ static void edge_interrupt_callback(struct urb *urb)
+               if (length > 1) {
+                       bytes_avail = data[0] | (data[1] << 8);
+                       if (bytes_avail) {
+-                              spin_lock(&edge_serial->es_lock);
++                              spin_lock_irqsave(&edge_serial->es_lock, flags);
+                               edge_serial->rxBytesAvail += bytes_avail;
+                               dev_dbg(dev,
+                                       "%s - bytes_avail=%d, rxBytesAvail=%d, 
read_in_progress=%d\n",
+@@ -706,7 +707,8 @@ static void edge_interrupt_callback(struct urb *urb)
+                                               edge_serial->read_in_progress = 
false;
+                                       }
+                               }
+-                              spin_unlock(&edge_serial->es_lock);
++                              spin_unlock_irqrestore(&edge_serial->es_lock,
++                                                     flags);
+                       }
+               }
+               /* grab the txcredits for the ports if available */
+@@ -718,10 +720,12 @@ static void edge_interrupt_callback(struct urb *urb)
+                       if (txCredits) {
+                               port = edge_serial->serial->port[portNumber];
+                               edge_port = usb_get_serial_port_data(port);
+-                              if (edge_port->open) {
+-                                      spin_lock(&edge_port->ep_lock);
++                              if (edge_port && edge_port->open) {
++                                      spin_lock_irqsave(&edge_port->ep_lock,
++                                                        flags);
+                                       edge_port->txCredits += txCredits;
+-                                      spin_unlock(&edge_port->ep_lock);
++                                      
spin_unlock_irqrestore(&edge_port->ep_lock,
++                                                             flags);
+                                       dev_dbg(dev, "%s - txcredits for port%d 
= %d\n",
+                                               __func__, portNumber,
+                                               edge_port->txCredits);
+@@ -762,6 +766,7 @@ static void edge_bulk_in_callback(struct urb *urb)
+       int                     retval;
+       __u16                   raw_data_length;
+       int status = urb->status;
++      unsigned long flags;
+ 
+       if (status) {
+               dev_dbg(&urb->dev->dev, "%s - nonzero read bulk status 
received: %d\n",
+@@ -781,7 +786,7 @@ static void edge_bulk_in_callback(struct urb *urb)
+ 
+       usb_serial_debug_data(dev, __func__, raw_data_length, data);
+ 
+-      spin_lock(&edge_serial->es_lock);
++      spin_lock_irqsave(&edge_serial->es_lock, flags);
+ 
+       /* decrement our rxBytes available by the number that we just got */
+       edge_serial->rxBytesAvail -= raw_data_length;
+@@ -805,7 +810,7 @@ static void edge_bulk_in_callback(struct urb *urb)
+               edge_serial->read_in_progress = false;
+       }
+ 
+-      spin_unlock(&edge_serial->es_lock);
++      spin_unlock_irqrestore(&edge_serial->es_lock, flags);
+ }
+ 
+ 
+@@ -1733,7 +1738,8 @@ static void edge_break(struct tty_struct *tty, int 
break_state)
+ static void process_rcvd_data(struct edgeport_serial *edge_serial,
+                               unsigned char *buffer, __u16 bufferLength)
+ {
+-      struct device *dev = &edge_serial->serial->dev->dev;
++      struct usb_serial *serial = edge_serial->serial;
++      struct device *dev = &serial->dev->dev;
+       struct usb_serial_port *port;
+       struct edgeport_port *edge_port;
+       __u16 lastBufferLength;
+@@ -1838,11 +1844,10 @@ static void process_rcvd_data(struct edgeport_serial 
*edge_serial,
+ 
+                       /* spit this data back into the tty driver if this
+                          port is open */
+-                      if (rxLen) {
+-                              port = edge_serial->serial->port[
+-                                                      edge_serial->rxPort];
++                      if (rxLen && edge_serial->rxPort < serial->num_ports) {
++                              port = serial->port[edge_serial->rxPort];
+                               edge_port = usb_get_serial_port_data(port);
+-                              if (edge_port->open) {
++                              if (edge_port && edge_port->open) {
+                                       dev_dbg(dev, "%s - Sending %d bytes to 
TTY for port %d\n",
+                                               __func__, rxLen,
+                                               edge_serial->rxPort);
+@@ -1850,8 +1855,8 @@ static void process_rcvd_data(struct edgeport_serial 
*edge_serial,
+                                                       rxLen);
+                                       edge_port->port->icount.rx += rxLen;
+                               }
+-                              buffer += rxLen;
+                       }
++                      buffer += rxLen;
+                       break;
+ 
+               case EXPECT_HDR3:       /* Expect 3rd byte of status header */
+@@ -1886,6 +1891,8 @@ static void process_rcvd_status(struct edgeport_serial 
*edge_serial,
+       __u8 code = edge_serial->rxStatusCode;
+ 
+       /* switch the port pointer to the one being currently talked about */
++      if (edge_serial->rxPort >= edge_serial->serial->num_ports)
++              return;
+       port = edge_serial->serial->port[edge_serial->rxPort];
+       edge_port = usb_get_serial_port_data(port);
+       if (edge_port == NULL) {
+diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
+index 2c5a53bdccd4..55a768487990 100644
+--- a/drivers/usb/serial/keyspan.c
++++ b/drivers/usb/serial/keyspan.c
+@@ -1062,6 +1062,8 @@ static void      usa49_glocont_callback(struct urb *urb)
+       for (i = 0; i < serial->num_ports; ++i) {
+               port = serial->port[i];
+               p_priv = usb_get_serial_port_data(port);
++              if (!p_priv)
++                      continue;
+ 
+               if (p_priv->resend_cont) {
+                       dev_dbg(&port->dev, "%s - sending setup\n", __func__);
+@@ -1463,6 +1465,8 @@ static void usa67_glocont_callback(struct urb *urb)
+       for (i = 0; i < serial->num_ports; ++i) {
+               port = serial->port[i];
+               p_priv = usb_get_serial_port_data(port);
++              if (!p_priv)
++                      continue;
+ 
+               if (p_priv->resend_cont) {
+                       dev_dbg(&port->dev, "%s - sending setup\n", __func__);
+diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
+index 58657d64678b..c37572a8bb06 100644
+--- a/drivers/usb/serial/opticon.c
++++ b/drivers/usb/serial/opticon.c
+@@ -116,7 +116,7 @@ static int send_control_msg(struct usb_serial_port *port, 
u8 requesttype,
+       retval = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+                               requesttype,
+                               USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
+-                              0, 0, buffer, 1, 0);
++                              0, 0, buffer, 1, USB_CTRL_SET_TIMEOUT);
+       kfree(buffer);
+ 
+       if (retval < 0)
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index e69e31539914..eff353de47cd 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -251,6 +251,7 @@ static void option_instat_callback(struct urb *urb);
+ #define QUECTEL_PRODUCT_BG96                  0x0296
+ #define QUECTEL_PRODUCT_EP06                  0x0306
+ #define QUECTEL_PRODUCT_EM12                  0x0512
++#define QUECTEL_PRODUCT_RM500Q                        0x0800
+ 
+ #define CMOTECH_VENDOR_ID                     0x16d8
+ #define CMOTECH_PRODUCT_6001                  0x6001
+@@ -1107,6 +1108,11 @@ static const struct usb_device_id option_ids[] = {
+       { 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) },
++      { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
++      { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
++      { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
++        .driver_info = ZLP },
++
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
+diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
+index 60e17d1444c3..f16e0b8c1ed4 100644
+--- a/drivers/usb/serial/quatech2.c
++++ b/drivers/usb/serial/quatech2.c
+@@ -867,7 +867,10 @@ static void qt2_update_msr(struct usb_serial_port *port, 
unsigned char *ch)
+       u8 newMSR = (u8) *ch;
+       unsigned long flags;
+ 
++      /* May be called from qt2_process_read_urb() for an unbound port. */
+       port_priv = usb_get_serial_port_data(port);
++      if (!port_priv)
++              return;
+ 
+       spin_lock_irqsave(&port_priv->lock, flags);
+       port_priv->shadowMSR = newMSR;
+@@ -895,7 +898,10 @@ static void qt2_update_lsr(struct usb_serial_port *port, 
unsigned char *ch)
+       unsigned long flags;
+       u8 newLSR = (u8) *ch;
+ 
++      /* May be called from qt2_process_read_urb() for an unbound port. */
+       port_priv = usb_get_serial_port_data(port);
++      if (!port_priv)
++              return;
+ 
+       if (newLSR & UART_LSR_BI)
+               newLSR &= (u8) (UART_LSR_OE | UART_LSR_BI);
+diff --git a/drivers/usb/serial/usb-serial-simple.c 
b/drivers/usb/serial/usb-serial-simple.c
+index 511242111403..15e05ebf37ac 100644
+--- a/drivers/usb/serial/usb-serial-simple.c
++++ b/drivers/usb/serial/usb-serial-simple.c
+@@ -89,6 +89,8 @@ DEVICE(moto_modem, MOTO_IDS);
+ #define MOTOROLA_TETRA_IDS()                  \
+       { USB_DEVICE(0x0cad, 0x9011) }, /* Motorola Solutions TETRA PEI */ \
+       { USB_DEVICE(0x0cad, 0x9012) }, /* MTP6550 */ \
++      { USB_DEVICE(0x0cad, 0x9013) }, /* MTP3xxx */ \
++      { USB_DEVICE(0x0cad, 0x9015) }, /* MTP85xx */ \
+       { USB_DEVICE(0x0cad, 0x9016) }  /* TPG2200 */
+ DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS);
+ 
+diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
+index 8115b7cccf1a..3dc3464626fb 100644
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -1332,6 +1332,9 @@ static int usb_serial_register(struct usb_serial_driver 
*driver)
+               return -EINVAL;
+       }
+ 
++      /* Prevent individual ports from being unbound. */
++      driver->driver.suppress_bind_attrs = true;
++
+       usb_serial_operations_init(driver);
+ 
+       /* Add this device to our list of devices */
+diff --git a/firmware/Makefile b/firmware/Makefile
+index 168094a3fae7..30e6b738839e 100644
+--- a/firmware/Makefile
++++ b/firmware/Makefile
+@@ -19,7 +19,7 @@ quiet_cmd_fwbin = MK_FW   $@
+                 PROGBITS=$(if $(CONFIG_ARM),%,@)progbits;                  \
+                 echo "/* Generated by firmware/Makefile */"           > $@;\
+                 echo "    .section .rodata"                           >>$@;\
+-                echo "    .p2align $${ASM_ALIGN}"                     >>$@;\
++                echo "    .p2align 4"                                 >>$@;\
+                 echo "_fw_$${FWSTR}_bin:"                             >>$@;\
+                 echo "    .incbin \"$(2)\""                           >>$@;\
+                 echo "_fw_end:"                                       >>$@;\
+diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
+index cb6e8cb0de94..39a00b57ff01 100644
+--- a/fs/btrfs/qgroup.c
++++ b/fs/btrfs/qgroup.c
+@@ -1928,8 +1928,12 @@ btrfs_qgroup_account_extent(struct btrfs_trans_handle 
*trans,
+       u64 nr_old_roots = 0;
+       int ret = 0;
+ 
++      /*
++       * If quotas get disabled meanwhile, the resouces need to be freed and
++       * we can't just exit here.
++       */
+       if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags))
+-              return 0;
++              goto out_free;
+ 
+       if (new_roots) {
+               if (!maybe_fs_roots(new_roots))
+diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
+index 29a0c0969e91..28f6daf371d3 100644
+--- a/fs/reiserfs/xattr.c
++++ b/fs/reiserfs/xattr.c
+@@ -319,8 +319,12 @@ static int reiserfs_for_each_xattr(struct inode *inode,
+ out_dir:
+       dput(dir);
+ out:
+-      /* -ENODATA isn't an error */
+-      if (err == -ENODATA)
++      /*
++       * -ENODATA: this object doesn't have any xattrs
++       * -EOPNOTSUPP: this file system doesn't have xattrs enabled on disk.
++       * Neither are errors
++       */
++      if (err == -ENODATA || err == -EOPNOTSUPP)
+               err = 0;
+       return err;
+ }
+diff --git a/include/dt-bindings/reset/amlogic,meson8b-reset.h 
b/include/dt-bindings/reset/amlogic,meson8b-reset.h
+index 614aff2c7aff..a03e86fe2c57 100644
+--- a/include/dt-bindings/reset/amlogic,meson8b-reset.h
++++ b/include/dt-bindings/reset/amlogic,meson8b-reset.h
+@@ -95,9 +95,9 @@
+ #define RESET_VD_RMEM                 64
+ #define RESET_AUDIN                   65
+ #define RESET_DBLK                    66
+-#define RESET_PIC_DC                  66
+-#define RESET_PSC                     66
+-#define RESET_NAND                    66
++#define RESET_PIC_DC                  67
++#define RESET_PSC                     68
++#define RESET_NAND                    69
+ #define RESET_GE2D                    70
+ #define RESET_PARSER_REG              71
+ #define RESET_PARSER_FETCH            72
+diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
+index 4d4af0e94059..ad940102451c 100644
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -343,6 +343,7 @@ struct queue_limits {
+       unsigned int            max_sectors;
+       unsigned int            max_segment_size;
+       unsigned int            physical_block_size;
++      unsigned int            logical_block_size;
+       unsigned int            alignment_offset;
+       unsigned int            io_min;
+       unsigned int            io_opt;
+@@ -353,7 +354,6 @@ struct queue_limits {
+       unsigned int            discard_granularity;
+       unsigned int            discard_alignment;
+ 
+-      unsigned short          logical_block_size;
+       unsigned short          max_segments;
+       unsigned short          max_integrity_segments;
+       unsigned short          max_discard_segments;
+@@ -1178,7 +1178,7 @@ extern void blk_queue_max_write_same_sectors(struct 
request_queue *q,
+               unsigned int max_write_same_sectors);
+ extern void blk_queue_max_write_zeroes_sectors(struct request_queue *q,
+               unsigned int max_write_same_sectors);
+-extern void blk_queue_logical_block_size(struct request_queue *, unsigned 
short);
++extern void blk_queue_logical_block_size(struct request_queue *, unsigned 
int);
+ extern void blk_queue_physical_block_size(struct request_queue *, unsigned 
int);
+ extern void blk_queue_alignment_offset(struct request_queue *q,
+                                      unsigned int alignment);
+@@ -1436,7 +1436,7 @@ static inline unsigned int queue_max_segment_size(struct 
request_queue *q)
+       return q->limits.max_segment_size;
+ }
+ 
+-static inline unsigned short queue_logical_block_size(struct request_queue *q)
++static inline unsigned queue_logical_block_size(struct request_queue *q)
+ {
+       int retval = 512;
+ 
+@@ -1446,7 +1446,7 @@ static inline unsigned short 
queue_logical_block_size(struct request_queue *q)
+       return retval;
+ }
+ 
+-static inline unsigned short bdev_logical_block_size(struct block_device 
*bdev)
++static inline unsigned int bdev_logical_block_size(struct block_device *bdev)
+ {
+       return queue_logical_block_size(bdev_get_queue(bdev));
+ }
+diff --git a/include/linux/regulator/ab8500.h 
b/include/linux/regulator/ab8500.h
+index 260c4aa1d976..3f6b8b9ef49d 100644
+--- a/include/linux/regulator/ab8500.h
++++ b/include/linux/regulator/ab8500.h
+@@ -43,8 +43,6 @@ enum ab8505_regulator_id {
+       AB8505_LDO_ANAMIC2,
+       AB8505_LDO_AUX8,
+       AB8505_LDO_ANA,
+-      AB8505_SYSCLKREQ_2,
+-      AB8505_SYSCLKREQ_4,
+       AB8505_NUM_REGULATORS,
+ };
+ 
+diff --git a/kernel/ptrace.c b/kernel/ptrace.c
+index 09fb3f58a838..43a283041296 100644
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -258,12 +258,17 @@ static int ptrace_check_attach(struct task_struct 
*child, bool ignore_state)
+       return ret;
+ }
+ 
+-static int ptrace_has_cap(struct user_namespace *ns, unsigned int mode)
++static bool ptrace_has_cap(const struct cred *cred, struct user_namespace *ns,
++                         unsigned int mode)
+ {
++      int ret;
++
+       if (mode & PTRACE_MODE_NOAUDIT)
+-              return has_ns_capability_noaudit(current, ns, CAP_SYS_PTRACE);
++              ret = security_capable(cred, ns, CAP_SYS_PTRACE);
+       else
+-              return has_ns_capability(current, ns, CAP_SYS_PTRACE);
++              ret = security_capable(cred, ns, CAP_SYS_PTRACE);
++
++      return ret == 0;
+ }
+ 
+ /* Returns 0 on success, -errno on denial. */
+@@ -315,7 +320,7 @@ static int __ptrace_may_access(struct task_struct *task, 
unsigned int mode)
+           gid_eq(caller_gid, tcred->sgid) &&
+           gid_eq(caller_gid, tcred->gid))
+               goto ok;
+-      if (ptrace_has_cap(tcred->user_ns, mode))
++      if (ptrace_has_cap(cred, tcred->user_ns, mode))
+               goto ok;
+       rcu_read_unlock();
+       return -EPERM;
+@@ -334,7 +339,7 @@ ok:
+       mm = task->mm;
+       if (mm &&
+           ((get_dumpable(mm) != SUID_DUMP_USER) &&
+-           !ptrace_has_cap(mm->user_ns, mode)))
++           !ptrace_has_cap(cred, mm->user_ns, mode)))
+           return -EPERM;
+ 
+       return security_ptrace_access_check(task, mode);
+diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
+index a8fa0a896b78..3c7b400512eb 100644
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -60,8 +60,9 @@ static void tick_do_update_jiffies64(ktime_t now)
+ 
+       /*
+        * Do a quick check without holding jiffies_lock:
++       * The READ_ONCE() pairs with two updates done later in this function.
+        */
+-      delta = ktime_sub(now, last_jiffies_update);
++      delta = ktime_sub(now, READ_ONCE(last_jiffies_update));
+       if (delta < tick_period)
+               return;
+ 
+@@ -72,8 +73,9 @@ static void tick_do_update_jiffies64(ktime_t now)
+       if (delta >= tick_period) {
+ 
+               delta = ktime_sub(delta, tick_period);
+-              last_jiffies_update = ktime_add(last_jiffies_update,
+-                                              tick_period);
++              /* Pairs with the lockless read in this function. */
++              WRITE_ONCE(last_jiffies_update,
++                         ktime_add(last_jiffies_update, tick_period));
+ 
+               /* Slow path for long timeouts */
+               if (unlikely(delta >= tick_period)) {
+@@ -81,8 +83,10 @@ static void tick_do_update_jiffies64(ktime_t now)
+ 
+                       ticks = ktime_divns(delta, incr);
+ 
+-                      last_jiffies_update = ktime_add_ns(last_jiffies_update,
+-                                                         incr * ticks);
++                      /* Pairs with the lockless read in this function. */
++                      WRITE_ONCE(last_jiffies_update,
++                                 ktime_add_ns(last_jiffies_update,
++                                              incr * ticks));
+               }
+               do_timer(++ticks);
+ 
+diff --git a/mm/huge_memory.c b/mm/huge_memory.c
+index 1adc2e6c50f9..92915cc87549 100644
+--- a/mm/huge_memory.c
++++ b/mm/huge_memory.c
+@@ -502,13 +502,13 @@ void prep_transhuge_page(struct page *page)
+       set_compound_page_dtor(page, TRANSHUGE_PAGE_DTOR);
+ }
+ 
+-unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long len,
++static unsigned long __thp_get_unmapped_area(struct file *filp,
++              unsigned long addr, unsigned long len,
+               loff_t off, unsigned long flags, unsigned long size)
+ {
+-      unsigned long addr;
+       loff_t off_end = off + len;
+       loff_t off_align = round_up(off, size);
+-      unsigned long len_pad;
++      unsigned long len_pad, ret;
+ 
+       if (off_end <= off_align || (off_end - off_align) < size)
+               return 0;
+@@ -517,30 +517,40 @@ unsigned long __thp_get_unmapped_area(struct file *filp, 
unsigned long len,
+       if (len_pad < len || (off + len_pad) < off)
+               return 0;
+ 
+-      addr = current->mm->get_unmapped_area(filp, 0, len_pad,
++      ret = current->mm->get_unmapped_area(filp, addr, len_pad,
+                                             off >> PAGE_SHIFT, flags);
+-      if (IS_ERR_VALUE(addr))
++
++      /*
++       * The failure might be due to length padding. The caller will retry
++       * without the padding.
++       */
++      if (IS_ERR_VALUE(ret))
+               return 0;
+ 
+-      addr += (off - addr) & (size - 1);
+-      return addr;
++      /*
++       * Do not try to align to THP boundary if allocation at the address
++       * hint succeeds.
++       */
++      if (ret == addr)
++              return addr;
++
++      ret += (off - ret) & (size - 1);
++      return ret;
+ }
+ 
+ unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr,
+               unsigned long len, unsigned long pgoff, unsigned long flags)
+ {
++      unsigned long ret;
+       loff_t off = (loff_t)pgoff << PAGE_SHIFT;
+ 
+-      if (addr)
+-              goto out;
+       if (!IS_DAX(filp->f_mapping->host) || !IS_ENABLED(CONFIG_FS_DAX_PMD))
+               goto out;
+ 
+-      addr = __thp_get_unmapped_area(filp, len, off, flags, PMD_SIZE);
+-      if (addr)
+-              return addr;
+-
+- out:
++      ret = __thp_get_unmapped_area(filp, addr, len, off, flags, PMD_SIZE);
++      if (ret)
++              return ret;
++out:
+       return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
+ }
+ EXPORT_SYMBOL_GPL(thp_get_unmapped_area);
+diff --git a/mm/page-writeback.c b/mm/page-writeback.c
+index a40c075fd8f1..29f9980c13ac 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -201,11 +201,11 @@ static void wb_min_max_ratio(struct bdi_writeback *wb,
+       if (this_bw < tot_bw) {
+               if (min) {
+                       min *= this_bw;
+-                      do_div(min, tot_bw);
++                      min = div64_ul(min, tot_bw);
+               }
+               if (max < 100) {
+                       max *= this_bw;
+-                      do_div(max, tot_bw);
++                      max = div64_ul(max, tot_bw);
+               }
+       }
+ 
+diff --git a/mm/shmem.c b/mm/shmem.c
+index 69106c600692..0b6db162083c 100644
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -2052,9 +2052,10 @@ unsigned long shmem_get_unmapped_area(struct file *file,
+       /*
+        * Our priority is to support MAP_SHARED mapped hugely;
+        * and support MAP_PRIVATE mapped hugely too, until it is COWed.
+-       * But if caller specified an address hint, respect that as before.
++       * But if caller specified an address hint and we allocated area there
++       * successfully, respect that as before.
+        */
+-      if (uaddr)
++      if (uaddr == addr)
+               return addr;
+ 
+       if (shmem_huge != SHMEM_HUGE_FORCE) {
+@@ -2088,7 +2089,7 @@ unsigned long shmem_get_unmapped_area(struct file *file,
+       if (inflated_len < len)
+               return addr;
+ 
+-      inflated_addr = get_area(NULL, 0, inflated_len, 0, flags);
++      inflated_addr = get_area(NULL, uaddr, inflated_len, 0, flags);
+       if (IS_ERR_VALUE(inflated_addr))
+               return addr;
+       if (inflated_addr & ~PAGE_MASK)
+diff --git a/net/batman-adv/distributed-arp-table.c 
b/net/batman-adv/distributed-arp-table.c
+index 8d1d0fdb157e..1519cbf70150 100644
+--- a/net/batman-adv/distributed-arp-table.c
++++ b/net/batman-adv/distributed-arp-table.c
+@@ -243,6 +243,7 @@ static u32 batadv_hash_dat(const void *data, u32 size)
+       u32 hash = 0;
+       const struct batadv_dat_entry *dat = data;
+       const unsigned char *key;
++      __be16 vid;
+       u32 i;
+ 
+       key = (const unsigned char *)&dat->ip;
+@@ -252,7 +253,8 @@ static u32 batadv_hash_dat(const void *data, u32 size)
+               hash ^= (hash >> 6);
+       }
+ 
+-      key = (const unsigned char *)&dat->vid;
++      vid = htons(dat->vid);
++      key = (__force const unsigned char *)&vid;
+       for (i = 0; i < sizeof(dat->vid); i++) {
+               hash += key[i];
+               hash += (hash << 10);
+diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c
+index b8c05f1cf47d..af3a12a36d88 100644
+--- a/net/dsa/tag_qca.c
++++ b/net/dsa/tag_qca.c
+@@ -41,9 +41,6 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, 
struct net_device *dev)
+       struct dsa_slave_priv *p = netdev_priv(dev);
+       u16 *phdr, hdr;
+ 
+-      dev->stats.tx_packets++;
+-      dev->stats.tx_bytes += skb->len;
+-
+       if (skb_cow_head(skb, 0) < 0)
+               return NULL;
+ 
+diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
+index e288489ae3d5..6dd727e0a72f 100644
+--- a/net/ipv4/netfilter/arp_tables.c
++++ b/net/ipv4/netfilter/arp_tables.c
+@@ -506,12 +506,13 @@ static inline int check_entry_size_and_hooks(struct 
arpt_entry *e,
+       return 0;
+ }
+ 
+-static inline void cleanup_entry(struct arpt_entry *e)
++static void cleanup_entry(struct arpt_entry *e, struct net *net)
+ {
+       struct xt_tgdtor_param par;
+       struct xt_entry_target *t;
+ 
+       t = arpt_get_target(e);
++      par.net      = net;
+       par.target   = t->u.kernel.target;
+       par.targinfo = t->data;
+       par.family   = NFPROTO_ARP;
+@@ -601,7 +602,7 @@ static int translate_table(struct net *net,
+               xt_entry_foreach(iter, entry0, newinfo->size) {
+                       if (i-- == 0)
+                               break;
+-                      cleanup_entry(iter);
++                      cleanup_entry(iter, net);
+               }
+               return ret;
+       }
+@@ -926,7 +927,7 @@ static int __do_replace(struct net *net, const char *name,
+       /* Decrease module usage counts and free resource */
+       loc_cpu_old_entry = oldinfo->entries;
+       xt_entry_foreach(iter, loc_cpu_old_entry, oldinfo->size)
+-              cleanup_entry(iter);
++              cleanup_entry(iter, net);
+ 
+       xt_free_table_info(oldinfo);
+       if (copy_to_user(counters_ptr, counters,
+@@ -990,7 +991,7 @@ static int do_replace(struct net *net, const void __user 
*user,
+ 
+  free_newinfo_untrans:
+       xt_entry_foreach(iter, loc_cpu_entry, newinfo->size)
+-              cleanup_entry(iter);
++              cleanup_entry(iter, net);
+  free_newinfo:
+       xt_free_table_info(newinfo);
+       return ret;
+@@ -1287,7 +1288,7 @@ static int compat_do_replace(struct net *net, void 
__user *user,
+ 
+  free_newinfo_untrans:
+       xt_entry_foreach(iter, loc_cpu_entry, newinfo->size)
+-              cleanup_entry(iter);
++              cleanup_entry(iter, net);
+  free_newinfo:
+       xt_free_table_info(newinfo);
+       return ret;
+@@ -1514,7 +1515,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, 
void __user *user, int *len
+       return ret;
+ }
+ 
+-static void __arpt_unregister_table(struct xt_table *table)
++static void __arpt_unregister_table(struct net *net, struct xt_table *table)
+ {
+       struct xt_table_info *private;
+       void *loc_cpu_entry;
+@@ -1526,7 +1527,7 @@ static void __arpt_unregister_table(struct xt_table 
*table)
+       /* Decrease module usage counts and free resources */
+       loc_cpu_entry = private->entries;
+       xt_entry_foreach(iter, loc_cpu_entry, private->size)
+-              cleanup_entry(iter);
++              cleanup_entry(iter, net);
+       if (private->number > private->initial_entries)
+               module_put(table_owner);
+       xt_free_table_info(private);
+@@ -1566,7 +1567,7 @@ int arpt_register_table(struct net *net,
+ 
+       ret = nf_register_net_hooks(net, ops, hweight32(table->valid_hooks));
+       if (ret != 0) {
+-              __arpt_unregister_table(new_table);
++              __arpt_unregister_table(net, new_table);
+               *res = NULL;
+       }
+ 
+@@ -1581,7 +1582,7 @@ void arpt_unregister_table(struct net *net, struct 
xt_table *table,
+                          const struct nf_hook_ops *ops)
+ {
+       nf_unregister_net_hooks(net, ops, hweight32(table->valid_hooks));
+-      __arpt_unregister_table(table);
++      __arpt_unregister_table(net, table);
+ }
+ 
+ /* The built-in targets: standard (NULL) and error. */
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+index d2b1c39c4223..29f3df4ddd1f 100644
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -932,9 +932,10 @@ static void tcp_update_reordering(struct sock *sk, const 
int metric,
+ /* This must be called before lost_out is incremented */
+ static void tcp_verify_retransmit_hint(struct tcp_sock *tp, struct sk_buff 
*skb)
+ {
+-      if (!tp->retransmit_skb_hint ||
+-          before(TCP_SKB_CB(skb)->seq,
+-                 TCP_SKB_CB(tp->retransmit_skb_hint)->seq))
++      if ((!tp->retransmit_skb_hint && tp->retrans_out >= tp->lost_out) ||
++          (tp->retransmit_skb_hint &&
++           before(TCP_SKB_CB(skb)->seq,
++                  TCP_SKB_CB(tp->retransmit_skb_hint)->seq)))
+               tp->retransmit_skb_hint = skb;
+ }
+ 
+diff --git a/net/netfilter/ipset/ip_set_bitmap_gen.h 
b/net/netfilter/ipset/ip_set_bitmap_gen.h
+index 8ad2b52a0b32..b0701f6259cc 100644
+--- a/net/netfilter/ipset/ip_set_bitmap_gen.h
++++ b/net/netfilter/ipset/ip_set_bitmap_gen.h
+@@ -64,9 +64,9 @@ mtype_destroy(struct ip_set *set)
+       if (SET_WITH_TIMEOUT(set))
+               del_timer_sync(&map->gc);
+ 
+-      ip_set_free(map->members);
+       if (set->dsize && set->extensions & IPSET_EXT_DESTROY)
+               mtype_ext_cleanup(set);
++      ip_set_free(map->members);
+       ip_set_free(map);
+ 
+       set->data = NULL;
+diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
+index 0c06240d25af..249919bdfc64 100644
+--- a/net/wireless/rdev-ops.h
++++ b/net/wireless/rdev-ops.h
+@@ -537,6 +537,10 @@ static inline int
+ rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
+ {
+       int ret;
++
++      if (!rdev->ops->set_wiphy_params)
++              return -EOPNOTSUPP;
++
+       trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
+       ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
+       trace_rdev_return_int(&rdev->wiphy, ret);
+diff --git a/net/wireless/util.c b/net/wireless/util.c
+index 2234817f5dbb..935929b45411 100644
+--- a/net/wireless/util.c
++++ b/net/wireless/util.c
+@@ -652,7 +652,7 @@ __frame_add_frag(struct sk_buff *skb, struct page *page,
+       struct skb_shared_info *sh = skb_shinfo(skb);
+       int page_offset;
+ 
+-      page_ref_inc(page);
++      get_page(page);
+       page_offset = ptr - page_address(page);
+       skb_add_rx_frag(skb, sh->nr_frags, page, page_offset, len, size);
+ }
+diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
+index b80985fbc334..0e1feb597586 100644
+--- a/sound/core/seq/seq_timer.c
++++ b/sound/core/seq/seq_timer.c
+@@ -479,15 +479,19 @@ void snd_seq_info_timer_read(struct snd_info_entry 
*entry,
+               q = queueptr(idx);
+               if (q == NULL)
+                       continue;
+-              if ((tmr = q->timer) == NULL ||
+-                  (ti = tmr->timeri) == NULL) {
+-                      queuefree(q);
+-                      continue;
+-              }
++              mutex_lock(&q->timer_mutex);
++              tmr = q->timer;
++              if (!tmr)
++                      goto unlock;
++              ti = tmr->timeri;
++              if (!ti)
++                      goto unlock;
+               snd_iprintf(buffer, "Timer for queue %i : %s\n", q->queue, 
ti->timer->name);
+               resolution = snd_timer_resolution(ti) * tmr->ticks;
+               snd_iprintf(buffer, "  Period time : %lu.%09lu\n", resolution / 
1000000000, resolution % 1000000000);
+               snd_iprintf(buffer, "  Skew : %u / %u\n", tmr->skew, 
tmr->skew_base);
++unlock:
++              mutex_unlock(&q->timer_mutex);
+               queuefree(q);
+       }
+ }
+diff --git a/sound/soc/codecs/msm8916-wcd-analog.c 
b/sound/soc/codecs/msm8916-wcd-analog.c
+index 969283737787..3633eb30dd13 100644
+--- a/sound/soc/codecs/msm8916-wcd-analog.c
++++ b/sound/soc/codecs/msm8916-wcd-analog.c
+@@ -876,10 +876,10 @@ static const struct snd_soc_dapm_widget 
pm8916_wcd_analog_dapm_widgets[] = {
+ 
+       SND_SOC_DAPM_SUPPLY("MIC BIAS External1", CDC_A_MICB_1_EN, 7, 0,
+                           pm8916_wcd_analog_enable_micbias_ext1,
+-                          SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
++                          SND_SOC_DAPM_POST_PMU),
+       SND_SOC_DAPM_SUPPLY("MIC BIAS External2", CDC_A_MICB_2_EN, 7, 0,
+                           pm8916_wcd_analog_enable_micbias_ext2,
+-                          SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
++                          SND_SOC_DAPM_POST_PMU),
+ 
+       SND_SOC_DAPM_ADC_E("ADC1", NULL, CDC_A_TX_1_EN, 7, 0,
+                          pm8916_wcd_analog_enable_adc,
+diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
+index fd4dd12b8f9d..17b26661b2f6 100644
+--- a/tools/perf/builtin-report.c
++++ b/tools/perf/builtin-report.c
+@@ -742,6 +742,7 @@ int cmd_report(int argc, const char **argv)
+       struct stat st;
+       bool has_br_stack = false;
+       int branch_mode = -1;
++      int last_key = 0;
+       bool branch_call_mode = false;
+       char callchain_default_opt[] = CALLCHAIN_DEFAULT_OPT;
+       const char * const report_usage[] = {
+@@ -1048,7 +1049,8 @@ repeat:
+       else
+               use_browser = 0;
+ 
+-      if (setup_sorting(session->evlist) < 0) {
++      if ((last_key != K_SWITCH_INPUT_DATA) &&
++          (setup_sorting(session->evlist) < 0)) {
+               if (sort_order)
+                       parse_options_usage(report_usage, options, "s", 1);
+               if (field_order)
+@@ -1108,6 +1110,7 @@ repeat:
+       ret = __cmd_report(&report);
+       if (ret == K_SWITCH_INPUT_DATA) {
+               perf_session__delete(session);
++              last_key = K_SWITCH_INPUT_DATA;
+               goto repeat;
+       } else
+               ret = 0;
+diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
+index b99d68943f25..595f91f46811 100644
+--- a/tools/perf/util/hist.h
++++ b/tools/perf/util/hist.h
+@@ -317,10 +317,10 @@ static inline void perf_hpp__prepend_sort_field(struct 
perf_hpp_fmt *format)
+       list_for_each_entry_safe(format, tmp, &(_list)->sorts, sort_list)
+ 
+ #define hists__for_each_format(hists, format) \
+-      perf_hpp_list__for_each_format((hists)->hpp_list, fmt)
++      perf_hpp_list__for_each_format((hists)->hpp_list, format)
+ 
+ #define hists__for_each_sort_list(hists, format) \
+-      perf_hpp_list__for_each_sort_list((hists)->hpp_list, fmt)
++      perf_hpp_list__for_each_sort_list((hists)->hpp_list, format)
+ 
+ extern struct perf_hpp_fmt perf_hpp__format[];
+ 
+diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
+index 30a5e92b67bd..893193bd28c1 100644
+--- a/tools/perf/util/probe-finder.c
++++ b/tools/perf/util/probe-finder.c
+@@ -615,38 +615,26 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, 
Dwfl_Module *mod,
+                                 const char *function,
+                                 struct probe_trace_point *tp)
+ {
+-      Dwarf_Addr eaddr, highaddr;
++      Dwarf_Addr eaddr;
+       GElf_Sym sym;
+       const char *symbol;
+ 
+       /* Verify the address is correct */
+-      if (dwarf_entrypc(sp_die, &eaddr) != 0) {
+-              pr_warning("Failed to get entry address of %s\n",
+-                         dwarf_diename(sp_die));
+-              return -ENOENT;
+-      }
+-      if (dwarf_highpc(sp_die, &highaddr) != 0) {
+-              pr_warning("Failed to get end address of %s\n",
+-                         dwarf_diename(sp_die));
+-              return -ENOENT;
+-      }
+-      if (paddr > highaddr) {
+-              pr_warning("Offset specified is greater than size of %s\n",
++      if (!dwarf_haspc(sp_die, paddr)) {
++              pr_warning("Specified offset is out of %s\n",
+                          dwarf_diename(sp_die));
+               return -EINVAL;
+       }
+ 
+-      symbol = dwarf_diename(sp_die);
++      /* Try to get actual symbol name from symtab */
++      symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
+       if (!symbol) {
+-              /* Try to get the symbol name from symtab */
+-              symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
+-              if (!symbol) {
+-                      pr_warning("Failed to find symbol at 0x%lx\n",
+-                                 (unsigned long)paddr);
+-                      return -ENOENT;
+-              }
+-              eaddr = sym.st_value;
++              pr_warning("Failed to find symbol at 0x%lx\n",
++                         (unsigned long)paddr);
++              return -ENOENT;
+       }
++      eaddr = sym.st_value;
++
+       tp->offset = (unsigned long)(paddr - eaddr);
+       tp->address = (unsigned long)paddr;
+       tp->symbol = strdup(symbol);

Reply via email to