commit:     7b510ac39f9c900c4043c37a29c91f4c18e13e4c
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Apr  7 12:21:20 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Apr  7 12:21:20 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=7b510ac3

Linux patch 4.19.185

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

 0000_README               |    4 +
 1184_linux-4.19.185.patch | 1482 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1486 insertions(+)

diff --git a/0000_README b/0000_README
index 51936a2..8399430 100644
--- a/0000_README
+++ b/0000_README
@@ -775,6 +775,10 @@ Patch:  1183_linux-4.19.184.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.19.184
 
+Patch:  1184_linux-4.19.185.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.19.185
+
 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/1184_linux-4.19.185.patch b/1184_linux-4.19.185.patch
new file mode 100644
index 0000000..83cf418
--- /dev/null
+++ b/1184_linux-4.19.185.patch
@@ -0,0 +1,1482 @@
+diff --git a/Makefile b/Makefile
+index 8a3821f74b54e..e4f0127745732 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 19
+-SUBLEVEL = 184
++SUBLEVEL = 185
+ EXTRAVERSION =
+ NAME = "People's Front"
+ 
+diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
+index 2c99f93020bc9..eaae4adf9ce4b 100644
+--- a/drivers/base/power/runtime.c
++++ b/drivers/base/power/runtime.c
+@@ -1572,8 +1572,8 @@ void pm_runtime_get_suppliers(struct device *dev)
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
+               if (link->flags & DL_FLAG_PM_RUNTIME) {
+                       link->supplier_preactivated = true;
+-                      refcount_inc(&link->rpm_active);
+                       pm_runtime_get_sync(link->supplier);
++                      refcount_inc(&link->rpm_active);
+               }
+ 
+       device_links_read_unlock(idx);
+@@ -1586,6 +1586,8 @@ void pm_runtime_get_suppliers(struct device *dev)
+ void pm_runtime_put_suppliers(struct device *dev)
+ {
+       struct device_link *link;
++      unsigned long flags;
++      bool put;
+       int idx;
+ 
+       idx = device_links_read_lock();
+@@ -1593,7 +1595,11 @@ void pm_runtime_put_suppliers(struct device *dev)
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
+               if (link->supplier_preactivated) {
+                       link->supplier_preactivated = false;
+-                      if (refcount_dec_not_one(&link->rpm_active))
++                      spin_lock_irqsave(&dev->power.lock, flags);
++                      put = pm_runtime_status_suspended(dev) &&
++                            refcount_dec_not_one(&link->rpm_active);
++                      spin_unlock_irqrestore(&dev->power.lock, flags);
++                      if (put)
+                               pm_runtime_put(link->supplier);
+               }
+ 
+diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
+index b9d27c8fe57e6..e70f21ae85ffa 100644
+--- a/drivers/extcon/extcon.c
++++ b/drivers/extcon/extcon.c
+@@ -1256,6 +1256,7 @@ int extcon_dev_register(struct extcon_dev *edev)
+                               sizeof(*edev->nh), GFP_KERNEL);
+       if (!edev->nh) {
+               ret = -ENOMEM;
++              device_unregister(&edev->dev);
+               goto err_dev;
+       }
+ 
+diff --git a/drivers/firewire/nosy.c b/drivers/firewire/nosy.c
+index a128dd1126ae4..ac85e03e88e16 100644
+--- a/drivers/firewire/nosy.c
++++ b/drivers/firewire/nosy.c
+@@ -359,6 +359,7 @@ nosy_ioctl(struct file *file, unsigned int cmd, unsigned 
long arg)
+       struct client *client = file->private_data;
+       spinlock_t *client_list_lock = &client->lynx->client_list_lock;
+       struct nosy_stats stats;
++      int ret;
+ 
+       switch (cmd) {
+       case NOSY_IOC_GET_STATS:
+@@ -373,11 +374,15 @@ nosy_ioctl(struct file *file, unsigned int cmd, unsigned 
long arg)
+                       return 0;
+ 
+       case NOSY_IOC_START:
++              ret = -EBUSY;
+               spin_lock_irq(client_list_lock);
+-              list_add_tail(&client->link, &client->lynx->client_list);
++              if (list_empty(&client->link)) {
++                      list_add_tail(&client->link, 
&client->lynx->client_list);
++                      ret = 0;
++              }
+               spin_unlock_irq(client_list_lock);
+ 
+-              return 0;
++              return ret;
+ 
+       case NOSY_IOC_STOP:
+               spin_lock_irq(client_list_lock);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index f67c332b16a42..6a1f5df4bc07e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -2076,8 +2076,8 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
+       uint64_t eaddr;
+ 
+       /* validate the parameters */
+-      if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK ||
+-          size == 0 || size & AMDGPU_GPU_PAGE_MASK)
++      if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK ||
++          size == 0 || size & ~PAGE_MASK)
+               return -EINVAL;
+ 
+       /* make sure object fit at this offset */
+@@ -2141,8 +2141,8 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev,
+       int r;
+ 
+       /* validate the parameters */
+-      if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK ||
+-          size == 0 || size & AMDGPU_GPU_PAGE_MASK)
++      if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK ||
++          size == 0 || size & ~PAGE_MASK)
+               return -EINVAL;
+ 
+       /* make sure object fit at this offset */
+@@ -2286,7 +2286,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device 
*adev,
+                       after->start = eaddr + 1;
+                       after->last = tmp->last;
+                       after->offset = tmp->offset;
+-                      after->offset += after->start - tmp->start;
++                      after->offset += (after->start - tmp->start) << 
PAGE_SHIFT;
+                       after->flags = tmp->flags;
+                       after->bo_va = tmp->bo_va;
+                       list_add(&after->list, &tmp->bo_va->invalids);
+diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_main.c 
b/drivers/net/ethernet/aquantia/atlantic/aq_main.c
+index e3ae29e523f0e..daf841ae337d5 100644
+--- a/drivers/net/ethernet/aquantia/atlantic/aq_main.c
++++ b/drivers/net/ethernet/aquantia/atlantic/aq_main.c
+@@ -50,8 +50,10 @@ static int aq_ndev_open(struct net_device *ndev)
+       if (err < 0)
+               goto err_exit;
+       err = aq_nic_start(aq_nic);
+-      if (err < 0)
++      if (err < 0) {
++              aq_nic_stop(aq_nic);
+               goto err_exit;
++      }
+ 
+ err_exit:
+       if (err < 0)
+diff --git a/drivers/net/wan/lmc/lmc_main.c b/drivers/net/wan/lmc/lmc_main.c
+index 4907453f17f5e..937f56d0a31da 100644
+--- a/drivers/net/wan/lmc/lmc_main.c
++++ b/drivers/net/wan/lmc/lmc_main.c
+@@ -915,6 +915,8 @@ static int lmc_init_one(struct pci_dev *pdev, const struct 
pci_device_id *ent)
+         break;
+     default:
+       printk(KERN_WARNING "%s: LMC UNKNOWN CARD!\n", dev->name);
++      unregister_hdlc_device(dev);
++      return -EIO;
+         break;
+     }
+ 
+diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c 
b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+index a6f7bf28a8b2d..04dc5714aa725 100644
+--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
++++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+@@ -449,13 +449,13 @@ static void ath10k_wmi_event_tdls_peer(struct ath10k 
*ar, struct sk_buff *skb)
+       case WMI_TDLS_TEARDOWN_REASON_TX:
+       case WMI_TDLS_TEARDOWN_REASON_RSSI:
+       case WMI_TDLS_TEARDOWN_REASON_PTR_TIMEOUT:
++              rcu_read_lock();
+               station = ieee80211_find_sta_by_ifaddr(ar->hw,
+                                                      ev->peer_macaddr.addr,
+                                                      NULL);
+               if (!station) {
+                       ath10k_warn(ar, "did not find station from tdls peer 
event");
+-                      kfree(tb);
+-                      return;
++                      goto exit;
+               }
+               arvif = ath10k_get_arvif(ar, __le32_to_cpu(ev->vdev_id));
+               ieee80211_tdls_oper_request(
+@@ -466,6 +466,9 @@ static void ath10k_wmi_event_tdls_peer(struct ath10k *ar, 
struct sk_buff *skb)
+                                       );
+               break;
+       }
++
++exit:
++      rcu_read_unlock();
+       kfree(tb);
+ }
+ 
+diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+index bbdc6000afb9b..96dc9e5ab23f4 100644
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -5282,7 +5282,8 @@ static bool brcmf_is_linkup(struct brcmf_cfg80211_vif 
*vif,
+       return false;
+ }
+ 
+-static bool brcmf_is_linkdown(const struct brcmf_event_msg *e)
++static bool brcmf_is_linkdown(struct brcmf_cfg80211_vif *vif,
++                          const struct brcmf_event_msg *e)
+ {
+       u32 event = e->event_code;
+       u16 flags = e->flags;
+@@ -5291,6 +5292,8 @@ static bool brcmf_is_linkdown(const struct 
brcmf_event_msg *e)
+           (event == BRCMF_E_DISASSOC_IND) ||
+           ((event == BRCMF_E_LINK) && (!(flags & BRCMF_EVENT_MSG_LINK)))) {
+               brcmf_dbg(CONN, "Processing link down\n");
++              clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &vif->sme_state);
++              clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &vif->sme_state);
+               return true;
+       }
+       return false;
+@@ -5581,7 +5584,7 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
+               } else
+                       brcmf_bss_connect_done(cfg, ndev, e, true);
+               brcmf_net_setcarrier(ifp, true);
+-      } else if (brcmf_is_linkdown(e)) {
++      } else if (brcmf_is_linkdown(ifp->vif, e)) {
+               brcmf_dbg(CONN, "Linkdown\n");
+               if (!brcmf_is_ibssmode(ifp->vif)) {
+                       brcmf_bss_connect_done(cfg, ndev, e, false);
+diff --git a/drivers/pinctrl/pinctrl-rockchip.c 
b/drivers/pinctrl/pinctrl-rockchip.c
+index 4d3b62707524a..d0d5b8bdbc105 100644
+--- a/drivers/pinctrl/pinctrl-rockchip.c
++++ b/drivers/pinctrl/pinctrl-rockchip.c
+@@ -3353,12 +3353,15 @@ static int __maybe_unused 
rockchip_pinctrl_suspend(struct device *dev)
+ static int __maybe_unused rockchip_pinctrl_resume(struct device *dev)
+ {
+       struct rockchip_pinctrl *info = dev_get_drvdata(dev);
+-      int ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
+-                             rk3288_grf_gpio6c_iomux |
+-                             GPIO6C6_SEL_WRITE_ENABLE);
++      int ret;
+ 
+-      if (ret)
+-              return ret;
++      if (info->ctrl->type == RK3288) {
++              ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
++                                 rk3288_grf_gpio6c_iomux |
++                                 GPIO6C6_SEL_WRITE_ENABLE);
++              if (ret)
++                      return ret;
++      }
+ 
+       return pinctrl_force_default(info->pctl_dev);
+ }
+diff --git a/drivers/scsi/qla2xxx/qla_target.h 
b/drivers/scsi/qla2xxx/qla_target.h
+index 199d3ba1916d5..67a74720c02c3 100644
+--- a/drivers/scsi/qla2xxx/qla_target.h
++++ b/drivers/scsi/qla2xxx/qla_target.h
+@@ -124,7 +124,6 @@
+       (min(1270, ((ql) > 0) ? (QLA_TGT_DATASEGS_PER_CMD_24XX + \
+               QLA_TGT_DATASEGS_PER_CONT_24XX*((ql) - 1)) : 0))
+ #endif
+-#endif
+ 
+ #define GET_TARGET_ID(ha, iocb) ((HAS_EXTENDED_IDS(ha))                       
\
+                        ? le16_to_cpu((iocb)->u.isp2x.target.extended) \
+@@ -257,6 +256,7 @@ struct ctio_to_2xxx {
+ #ifndef CTIO_RET_TYPE
+ #define CTIO_RET_TYPE 0x17            /* CTIO return entry */
+ #define ATIO_TYPE7 0x06 /* Accept target I/O entry for 24xx */
++#endif
+ 
+ struct fcp_hdr {
+       uint8_t  r_ctl;
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index 307df2fa39a38..5078db7743cd0 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -1265,8 +1265,8 @@ static int st_open(struct inode *inode, struct file 
*filp)
+       spin_lock(&st_use_lock);
+       if (STp->in_use) {
+               spin_unlock(&st_use_lock);
+-              scsi_tape_put(STp);
+               DEBC_printk(STp, "Device already in use.\n");
++              scsi_tape_put(STp);
+               return (-EBUSY);
+       }
+ 
+diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c 
b/drivers/staging/comedi/drivers/cb_pcidas.c
+index 9b716c6964776..86cae5d0e9832 100644
+--- a/drivers/staging/comedi/drivers/cb_pcidas.c
++++ b/drivers/staging/comedi/drivers/cb_pcidas.c
+@@ -1281,7 +1281,7 @@ static int cb_pcidas_auto_attach(struct comedi_device 
*dev,
+            devpriv->amcc + AMCC_OP_REG_INTCSR);
+ 
+       ret = request_irq(pcidev->irq, cb_pcidas_interrupt, IRQF_SHARED,
+-                        dev->board_name, dev);
++                        "cb_pcidas", dev);
+       if (ret) {
+               dev_dbg(dev->class_dev, "unable to allocate irq %d\n",
+                       pcidev->irq);
+diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c 
b/drivers/staging/comedi/drivers/cb_pcidas64.c
+index 631a703b345d1..91403cc1bbf9b 100644
+--- a/drivers/staging/comedi/drivers/cb_pcidas64.c
++++ b/drivers/staging/comedi/drivers/cb_pcidas64.c
+@@ -4021,7 +4021,7 @@ static int auto_attach(struct comedi_device *dev,
+       init_stc_registers(dev);
+ 
+       retval = request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED,
+-                           dev->board_name, dev);
++                           "cb_pcidas64", dev);
+       if (retval) {
+               dev_dbg(dev->class_dev, "unable to allocate irq %u\n",
+                       pcidev->irq);
+diff --git a/drivers/staging/rtl8192e/rtllib.h 
b/drivers/staging/rtl8192e/rtllib.h
+index c01474a6db1e8..2574275475d16 100644
+--- a/drivers/staging/rtl8192e/rtllib.h
++++ b/drivers/staging/rtl8192e/rtllib.h
+@@ -1110,7 +1110,7 @@ struct rtllib_network {
+       bool    bWithAironetIE;
+       bool    bCkipSupported;
+       bool    bCcxRmEnable;
+-      u16     CcxRmState[2];
++      u8      CcxRmState[2];
+       bool    bMBssidValid;
+       u8      MBssidMask;
+       u8      MBssid[ETH_ALEN];
+diff --git a/drivers/staging/rtl8192e/rtllib_rx.c 
b/drivers/staging/rtl8192e/rtllib_rx.c
+index fa580ce1cf43d..3bfd63fe4ac10 100644
+--- a/drivers/staging/rtl8192e/rtllib_rx.c
++++ b/drivers/staging/rtl8192e/rtllib_rx.c
+@@ -1978,7 +1978,7 @@ static void rtllib_parse_mife_generic(struct 
rtllib_device *ieee,
+           info_element->data[2] == 0x96 &&
+           info_element->data[3] == 0x01) {
+               if (info_element->len == 6) {
+-                      memcpy(network->CcxRmState, &info_element[4], 2);
++                      memcpy(network->CcxRmState, &info_element->data[4], 2);
+                       if (network->CcxRmState[0] != 0)
+                               network->bCcxRmEnable = true;
+                       else
+diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
+index aa99edb4dff7d..4dce4a8f71ed9 100644
+--- a/drivers/thermal/thermal_sysfs.c
++++ b/drivers/thermal/thermal_sysfs.c
+@@ -770,6 +770,9 @@ void thermal_cooling_device_stats_update(struct 
thermal_cooling_device *cdev,
+ {
+       struct cooling_dev_stats *stats = cdev->stats;
+ 
++      if (!stats)
++              return;
++
+       spin_lock(&stats->lock);
+ 
+       if (stats->state == new_state)
+diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
+index c523dfe408d51..a1fa16a03ab9d 100644
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -147,17 +147,29 @@ static inline int acm_set_control(struct acm *acm, int 
control)
+ #define acm_send_break(acm, ms) \
+       acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
+ 
+-static void acm_kill_urbs(struct acm *acm)
++static void acm_poison_urbs(struct acm *acm)
+ {
+       int i;
+ 
+-      usb_kill_urb(acm->ctrlurb);
++      usb_poison_urb(acm->ctrlurb);
+       for (i = 0; i < ACM_NW; i++)
+-              usb_kill_urb(acm->wb[i].urb);
++              usb_poison_urb(acm->wb[i].urb);
+       for (i = 0; i < acm->rx_buflimit; i++)
+-              usb_kill_urb(acm->read_urbs[i]);
++              usb_poison_urb(acm->read_urbs[i]);
+ }
+ 
++static void acm_unpoison_urbs(struct acm *acm)
++{
++      int i;
++
++      for (i = 0; i < acm->rx_buflimit; i++)
++              usb_unpoison_urb(acm->read_urbs[i]);
++      for (i = 0; i < ACM_NW; i++)
++              usb_unpoison_urb(acm->wb[i].urb);
++      usb_unpoison_urb(acm->ctrlurb);
++}
++
++
+ /*
+  * Write buffer management.
+  * All of these assume proper locks taken by the caller.
+@@ -225,9 +237,10 @@ static int acm_start_wb(struct acm *acm, struct acm_wb 
*wb)
+ 
+       rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
+       if (rc < 0) {
+-              dev_err(&acm->data->dev,
+-                      "%s - usb_submit_urb(write bulk) failed: %d\n",
+-                      __func__, rc);
++              if (rc != -EPERM)
++                      dev_err(&acm->data->dev,
++                              "%s - usb_submit_urb(write bulk) failed: %d\n",
++                              __func__, rc);
+               acm_write_done(acm, wb);
+       }
+       return rc;
+@@ -312,8 +325,10 @@ static void acm_process_notification(struct acm *acm, 
unsigned char *buf)
+                       acm->iocount.dsr++;
+               if (difference & ACM_CTRL_DCD)
+                       acm->iocount.dcd++;
+-              if (newctrl & ACM_CTRL_BRK)
++              if (newctrl & ACM_CTRL_BRK) {
+                       acm->iocount.brk++;
++                      tty_insert_flip_char(&acm->port, 0, TTY_BREAK);
++              }
+               if (newctrl & ACM_CTRL_RI)
+                       acm->iocount.rng++;
+               if (newctrl & ACM_CTRL_FRAMING)
+@@ -480,11 +495,6 @@ static void acm_read_bulk_callback(struct urb *urb)
+       dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
+               rb->index, urb->actual_length, status);
+ 
+-      if (!acm->dev) {
+-              dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
+-              return;
+-      }
+-
+       switch (status) {
+       case 0:
+               usb_mark_last_busy(acm->dev);
+@@ -654,7 +664,8 @@ static void acm_port_dtr_rts(struct tty_port *port, int 
raise)
+ 
+       res = acm_set_control(acm, val);
+       if (res && (acm->ctrl_caps & USB_CDC_CAP_LINE))
+-              dev_err(&acm->control->dev, "failed to set dtr/rts\n");
++              /* This is broken in too many devices to spam the logs */
++              dev_dbg(&acm->control->dev, "failed to set dtr/rts\n");
+ }
+ 
+ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
+@@ -739,6 +750,7 @@ static void acm_port_shutdown(struct tty_port *port)
+        * Need to grab write_lock to prevent race with resume, but no need to
+        * hold it due to the tty-port initialised flag.
+        */
++      acm_poison_urbs(acm);
+       spin_lock_irq(&acm->write_lock);
+       spin_unlock_irq(&acm->write_lock);
+ 
+@@ -755,7 +767,8 @@ static void acm_port_shutdown(struct tty_port *port)
+               usb_autopm_put_interface_async(acm->control);
+       }
+ 
+-      acm_kill_urbs(acm);
++      acm_unpoison_urbs(acm);
++
+ }
+ 
+ static void acm_tty_cleanup(struct tty_struct *tty)
+@@ -1548,12 +1561,16 @@ skip_countries:
+ 
+       return 0;
+ alloc_fail6:
++      if (!acm->combined_interfaces) {
++              /* Clear driver data so that disconnect() returns early. */
++              usb_set_intfdata(data_interface, NULL);
++              usb_driver_release_interface(&acm_driver, data_interface);
++      }
+       if (acm->country_codes) {
+               device_remove_file(&acm->control->dev,
+                               &dev_attr_wCountryCodes);
+               device_remove_file(&acm->control->dev,
+                               &dev_attr_iCountryCodeRelDate);
+-              kfree(acm->country_codes);
+       }
+       device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
+ alloc_fail5:
+@@ -1585,8 +1602,14 @@ static void acm_disconnect(struct usb_interface *intf)
+       if (!acm)
+               return;
+ 
+-      mutex_lock(&acm->mutex);
+       acm->disconnected = true;
++      /*
++       * there is a circular dependency. acm_softint() can resubmit
++       * the URBs in error handling so we need to block any
++       * submission right away
++       */
++      acm_poison_urbs(acm);
++      mutex_lock(&acm->mutex);
+       if (acm->country_codes) {
+               device_remove_file(&acm->control->dev,
+                               &dev_attr_wCountryCodes);
+@@ -1605,7 +1628,6 @@ static void acm_disconnect(struct usb_interface *intf)
+               tty_kref_put(tty);
+       }
+ 
+-      acm_kill_urbs(acm);
+       cancel_delayed_work_sync(&acm->dwork);
+ 
+       tty_unregister_device(acm_tty_driver, acm->minor);
+@@ -1647,7 +1669,7 @@ static int acm_suspend(struct usb_interface *intf, 
pm_message_t message)
+       if (cnt)
+               return 0;
+ 
+-      acm_kill_urbs(acm);
++      acm_poison_urbs(acm);
+       cancel_delayed_work_sync(&acm->dwork);
+       acm->urbs_in_error_delay = 0;
+ 
+@@ -1660,6 +1682,7 @@ static int acm_resume(struct usb_interface *intf)
+       struct urb *urb;
+       int rv = 0;
+ 
++      acm_unpoison_urbs(acm);
+       spin_lock_irq(&acm->write_lock);
+ 
+       if (--acm->susp_count)
+diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
+index 239443ce52001..b8a4707dfafab 100644
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -498,6 +498,10 @@ static const struct usb_device_id usb_quirk_list[] = {
+       /* DJI CineSSD */
+       { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
+ 
++      /* Fibocom L850-GL LTE Modem */
++      { USB_DEVICE(0x2cb7, 0x0007), .driver_info =
++                      USB_QUIRK_IGNORE_REMOTE_WAKEUP },
++
+       /* INTEL VALUE SSD */
+       { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
+ 
+diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
+index 56a35e0160392..91686e1b24d97 100644
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -5560,7 +5560,7 @@ int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg)
+       dwc2_writel(hsotg, hprt0, HPRT0);
+ 
+       /* Wait for the HPRT0.PrtSusp register field to be set */
+-      if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000))
++      if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 5000))
+               dev_warn(hsotg->dev, "Suspend wasn't generated\n");
+ 
+       /*
+diff --git a/drivers/usb/gadget/udc/amd5536udc_pci.c 
b/drivers/usb/gadget/udc/amd5536udc_pci.c
+index 57b6f66331cfa..362284057d307 100644
+--- a/drivers/usb/gadget/udc/amd5536udc_pci.c
++++ b/drivers/usb/gadget/udc/amd5536udc_pci.c
+@@ -154,6 +154,11 @@ static int udc_pci_probe(
+       pci_set_master(pdev);
+       pci_try_set_mwi(pdev);
+ 
++      dev->phys_addr = resource;
++      dev->irq = pdev->irq;
++      dev->pdev = pdev;
++      dev->dev = &pdev->dev;
++
+       /* init dma pools */
+       if (use_dma) {
+               retval = init_dma_pools(dev);
+@@ -161,11 +166,6 @@ static int udc_pci_probe(
+                       goto err_dma;
+       }
+ 
+-      dev->phys_addr = resource;
+-      dev->irq = pdev->irq;
+-      dev->pdev = pdev;
+-      dev->dev = &pdev->dev;
+-
+       /* general probing */
+       if (udc_probe(dev)) {
+               retval = -ENODEV;
+diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c
+index 2c3b31109e168..09d5a789fcd5d 100644
+--- a/drivers/usb/host/xhci-mtk.c
++++ b/drivers/usb/host/xhci-mtk.c
+@@ -395,6 +395,13 @@ static void xhci_mtk_quirks(struct device *dev, struct 
xhci_hcd *xhci)
+       xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
+       if (mtk->lpm_support)
+               xhci->quirks |= XHCI_LPM_SUPPORT;
++
++      /*
++       * MTK xHCI 0.96: PSA is 1 by default even if doesn't support stream,
++       * and it's 3 when support it.
++       */
++      if (xhci->hci_version < 0x100 && HCC_MAX_PSA(xhci->hcc_params) == 4)
++              xhci->quirks |= XHCI_BROKEN_STREAMS;
+ }
+ 
+ /* called during probe() after chip reset completes */
+@@ -551,7 +558,8 @@ static int xhci_mtk_probe(struct platform_device *pdev)
+       if (ret)
+               goto put_usb3_hcd;
+ 
+-      if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
++      if (HCC_MAX_PSA(xhci->hcc_params) >= 4 &&
++          !(xhci->quirks & XHCI_BROKEN_STREAMS))
+               xhci->shared_hcd->can_do_streams = 1;
+ 
+       ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
+diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
+index 9ce21b8caf35c..2a874058dff11 100644
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -1868,10 +1868,14 @@ static void musb_pm_runtime_check_session(struct musb 
*musb)
+               MUSB_DEVCTL_HR;
+       switch (devctl & ~s) {
+       case MUSB_QUIRK_B_DISCONNECT_99:
+-              musb_dbg(musb, "Poll devctl in case of suspend after 
disconnect\n");
+-              schedule_delayed_work(&musb->irq_work,
+-                                    msecs_to_jiffies(1000));
+-              break;
++              if (musb->quirk_retries && !musb->flush_irq_work) {
++                      musb_dbg(musb, "Poll devctl in case of suspend after 
disconnect\n");
++                      schedule_delayed_work(&musb->irq_work,
++                                            msecs_to_jiffies(1000));
++                      musb->quirk_retries--;
++                      break;
++              }
++              /* fall through */
+       case MUSB_QUIRK_B_INVALID_VBUS_91:
+               if (musb->quirk_retries && !musb->flush_irq_work) {
+                       musb_dbg(musb,
+diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
+index 0909cfcbf7205..32a4dfeea06af 100644
+--- a/drivers/usb/usbip/vhci_hcd.c
++++ b/drivers/usb/usbip/vhci_hcd.c
+@@ -594,6 +594,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 
typeReq, u16 wValue,
+                               pr_err("invalid port number %d\n", wIndex);
+                               goto error;
+                       }
++                      if (wValue >= 32)
++                              goto error;
+                       if (hcd->speed == HCD_USB3) {
+                               if ((vhci_hcd->port_status[rhport] &
+                                    USB_SS_PORT_STAT_POWER) != 0) {
+diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
+index 98b6eb902df9e..732327756ee11 100644
+--- a/drivers/vhost/vhost.c
++++ b/drivers/vhost/vhost.c
+@@ -322,8 +322,8 @@ static void vhost_vq_reset(struct vhost_dev *dev,
+       vq->kick = NULL;
+       vq->call_ctx = NULL;
+       vq->log_ctx = NULL;
+-      vhost_reset_is_le(vq);
+       vhost_disable_cross_endian(vq);
++      vhost_reset_is_le(vq);
+       vq->busyloop_timeout = 0;
+       vq->umem = NULL;
+       vq->iotlb = NULL;
+diff --git a/drivers/video/fbdev/core/fbcon.c 
b/drivers/video/fbdev/core/fbcon.c
+index 5742a0dc774e9..cf0e025416e5e 100644
+--- a/drivers/video/fbdev/core/fbcon.c
++++ b/drivers/video/fbdev/core/fbcon.c
+@@ -1306,6 +1306,9 @@ static void fbcon_cursor(struct vc_data *vc, int mode)
+ 
+       ops->cursor_flash = (mode == CM_ERASE) ? 0 : 1;
+ 
++      if (!ops->cursor)
++              return;
++
+       ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
+                   get_color(vc, info, c, 0));
+ }
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index 1c6fd526ea978..7959aae4857e1 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -2072,13 +2072,13 @@ static int __ext4_journalled_writepage(struct page 
*page,
+       if (!ret)
+               ret = err;
+ 
+-      if (!ext4_has_inline_data(inode))
+-              ext4_walk_page_buffers(NULL, page_bufs, 0, len,
+-                                     NULL, bput_one);
+       ext4_set_inode_state(inode, EXT4_STATE_JDATA);
+ out:
+       unlock_page(page);
+ out_no_pagelock:
++      if (!inline_data && page_bufs)
++              ext4_walk_page_buffers(NULL, page_bufs, 0, len,
++                                     NULL, bput_one);
+       brelse(inode_bh);
+       return ret;
+ }
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 5f701d8dce478..358f6378882f4 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -3624,14 +3624,14 @@ static int ext4_rename(struct inode *old_dir, struct 
dentry *old_dentry,
+        */
+       retval = -ENOENT;
+       if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino)
+-              goto end_rename;
++              goto release_bh;
+ 
+       new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
+                                &new.de, &new.inlined);
+       if (IS_ERR(new.bh)) {
+               retval = PTR_ERR(new.bh);
+               new.bh = NULL;
+-              goto end_rename;
++              goto release_bh;
+       }
+       if (new.bh) {
+               if (!new.inode) {
+@@ -3648,15 +3648,13 @@ static int ext4_rename(struct inode *old_dir, struct 
dentry *old_dentry,
+               handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits);
+               if (IS_ERR(handle)) {
+                       retval = PTR_ERR(handle);
+-                      handle = NULL;
+-                      goto end_rename;
++                      goto release_bh;
+               }
+       } else {
+               whiteout = ext4_whiteout_for_rename(&old, credits, &handle);
+               if (IS_ERR(whiteout)) {
+                       retval = PTR_ERR(whiteout);
+-                      whiteout = NULL;
+-                      goto end_rename;
++                      goto release_bh;
+               }
+       }
+ 
+@@ -3764,16 +3762,18 @@ end_rename:
+                       ext4_resetent(handle, &old,
+                                     old.inode->i_ino, old_file_type);
+                       drop_nlink(whiteout);
++                      ext4_orphan_add(handle, whiteout);
+               }
+               unlock_new_inode(whiteout);
++              ext4_journal_stop(handle);
+               iput(whiteout);
+-
++      } else {
++              ext4_journal_stop(handle);
+       }
++release_bh:
+       brelse(old.dir_bh);
+       brelse(old.bh);
+       brelse(new.bh);
+-      if (handle)
+-              ext4_journal_stop(handle);
+       return retval;
+ }
+ 
+diff --git a/fs/reiserfs/xattr.h b/fs/reiserfs/xattr.h
+index c764352447ba1..81bec2c80b25c 100644
+--- a/fs/reiserfs/xattr.h
++++ b/fs/reiserfs/xattr.h
+@@ -43,7 +43,7 @@ void reiserfs_security_free(struct reiserfs_security_handle 
*sec);
+ 
+ static inline int reiserfs_xattrs_initialized(struct super_block *sb)
+ {
+-      return REISERFS_SB(sb)->priv_root != NULL;
++      return REISERFS_SB(sb)->priv_root && REISERFS_SB(sb)->xattr_root;
+ }
+ 
+ #define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header))
+diff --git a/include/linux/extcon.h b/include/linux/extcon.h
+index 7f033b1ea5680..fdef4c784d03c 100644
+--- a/include/linux/extcon.h
++++ b/include/linux/extcon.h
+@@ -279,6 +279,29 @@ static inline  void 
devm_extcon_unregister_notifier(struct device *dev,
+                               struct extcon_dev *edev, unsigned int id,
+                               struct notifier_block *nb) { }
+ 
++static inline int extcon_register_notifier_all(struct extcon_dev *edev,
++                                             struct notifier_block *nb)
++{
++      return 0;
++}
++
++static inline int extcon_unregister_notifier_all(struct extcon_dev *edev,
++                                               struct notifier_block *nb)
++{
++      return 0;
++}
++
++static inline int devm_extcon_register_notifier_all(struct device *dev,
++                                                  struct extcon_dev *edev,
++                                                  struct notifier_block *nb)
++{
++      return 0;
++}
++
++static inline void devm_extcon_unregister_notifier_all(struct device *dev,
++                                                     struct extcon_dev *edev,
++                                                     struct notifier_block 
*nb) { }
++
+ static inline struct extcon_dev *extcon_get_extcon_dev(const char 
*extcon_name)
+ {
+       return ERR_PTR(-ENODEV);
+diff --git a/include/net/inet_connection_sock.h 
b/include/net/inet_connection_sock.h
+index fc9d6e37552d3..da8a582ab032e 100644
+--- a/include/net/inet_connection_sock.h
++++ b/include/net/inet_connection_sock.h
+@@ -288,7 +288,7 @@ static inline int inet_csk_reqsk_queue_is_full(const 
struct sock *sk)
+       return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog;
+ }
+ 
+-void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
++bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
+ void inet_csk_reqsk_queue_drop_and_put(struct sock *sk, struct request_sock 
*req);
+ 
+ void inet_csk_destroy_sock(struct sock *sk);
+diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
+index 3f8a35104285a..b3da782cdfbd7 100644
+--- a/kernel/locking/mutex.c
++++ b/kernel/locking/mutex.c
+@@ -609,7 +609,7 @@ static inline int mutex_can_spin_on_owner(struct mutex 
*lock)
+  */
+ static __always_inline bool
+ mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
+-                    const bool use_ww_ctx, struct mutex_waiter *waiter)
++                    struct mutex_waiter *waiter)
+ {
+       if (!waiter) {
+               /*
+@@ -685,7 +685,7 @@ fail:
+ #else
+ static __always_inline bool
+ mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
+-                    const bool use_ww_ctx, struct mutex_waiter *waiter)
++                    struct mutex_waiter *waiter)
+ {
+       return false;
+ }
+@@ -905,10 +905,13 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+       struct ww_mutex *ww;
+       int ret;
+ 
++      if (!use_ww_ctx)
++              ww_ctx = NULL;
++
+       might_sleep();
+ 
+       ww = container_of(lock, struct ww_mutex, base);
+-      if (use_ww_ctx && ww_ctx) {
++      if (ww_ctx) {
+               if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
+                       return -EALREADY;
+ 
+@@ -925,10 +928,10 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+       mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
+ 
+       if (__mutex_trylock(lock) ||
+-          mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, NULL)) {
++          mutex_optimistic_spin(lock, ww_ctx, NULL)) {
+               /* got the lock, yay! */
+               lock_acquired(&lock->dep_map, ip);
+-              if (use_ww_ctx && ww_ctx)
++              if (ww_ctx)
+                       ww_mutex_set_context_fastpath(ww, ww_ctx);
+               preempt_enable();
+               return 0;
+@@ -939,7 +942,7 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+        * After waiting to acquire the wait_lock, try again.
+        */
+       if (__mutex_trylock(lock)) {
+-              if (use_ww_ctx && ww_ctx)
++              if (ww_ctx)
+                       __ww_mutex_check_waiters(lock, ww_ctx);
+ 
+               goto skip_wait;
+@@ -992,7 +995,7 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+                       goto err;
+               }
+ 
+-              if (use_ww_ctx && ww_ctx) {
++              if (ww_ctx) {
+                       ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx);
+                       if (ret)
+                               goto err;
+@@ -1005,7 +1008,7 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+                * ww_mutex needs to always recheck its position since its 
waiter
+                * list is not FIFO ordered.
+                */
+-              if ((use_ww_ctx && ww_ctx) || !first) {
++              if (ww_ctx || !first) {
+                       first = __mutex_waiter_is_first(lock, &waiter);
+                       if (first)
+                               __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
+@@ -1018,7 +1021,7 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+                * or we must see its unlock and acquire.
+                */
+               if (__mutex_trylock(lock) ||
+-                  (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, 
&waiter)))
++                  (first && mutex_optimistic_spin(lock, ww_ctx, &waiter)))
+                       break;
+ 
+               spin_lock(&lock->wait_lock);
+@@ -1027,7 +1030,7 @@ __mutex_lock_common(struct mutex *lock, long state, 
unsigned int subclass,
+ acquired:
+       __set_current_state(TASK_RUNNING);
+ 
+-      if (use_ww_ctx && ww_ctx) {
++      if (ww_ctx) {
+               /*
+                * Wound-Wait; we stole the lock (!first_waiter), check the
+                * waiters as anyone might want to wound us.
+@@ -1047,7 +1050,7 @@ skip_wait:
+       /* got the lock - cleanup and rejoice! */
+       lock_acquired(&lock->dep_map, ip);
+ 
+-      if (use_ww_ctx && ww_ctx)
++      if (ww_ctx)
+               ww_mutex_lock_acquired(ww, ww_ctx);
+ 
+       spin_unlock(&lock->wait_lock);
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 88a4f9e2d06c7..bca0b6df53caf 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2645,7 +2645,8 @@ static void __ftrace_trace_stack(struct ring_buffer 
*buffer,
+       size *= sizeof(unsigned long);
+ 
+       event = __trace_buffer_lock_reserve(buffer, TRACE_STACK,
+-                                          sizeof(*entry) + size, flags, pc);
++                                  (sizeof(*entry) - sizeof(entry->caller)) + 
size,
++                                  flags, pc);
+       if (!event)
+               goto out;
+       entry = ring_buffer_event_data(event);
+diff --git a/mm/memory.c b/mm/memory.c
+index c1a05c2484b09..c2011c51f15de 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -148,7 +148,7 @@ static int __init init_zero_pfn(void)
+       zero_pfn = page_to_pfn(ZERO_PAGE(0));
+       return 0;
+ }
+-core_initcall(init_zero_pfn);
++early_initcall(init_zero_pfn);
+ 
+ 
+ #if defined(SPLIT_RSS_COUNTING)
+diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
+index 2880ac4703790..20ec8e7f94236 100644
+--- a/net/appletalk/ddp.c
++++ b/net/appletalk/ddp.c
+@@ -1573,8 +1573,8 @@ static int atalk_sendmsg(struct socket *sock, struct 
msghdr *msg, size_t len)
+       struct sk_buff *skb;
+       struct net_device *dev;
+       struct ddpehdr *ddp;
+-      int size;
+-      struct atalk_route *rt;
++      int size, hard_header_len;
++      struct atalk_route *rt, *rt_lo = NULL;
+       int err;
+ 
+       if (flags & ~(MSG_DONTWAIT|MSG_CMSG_COMPAT))
+@@ -1637,7 +1637,22 @@ static int atalk_sendmsg(struct socket *sock, struct 
msghdr *msg, size_t len)
+       SOCK_DEBUG(sk, "SK %p: Size needed %d, device %s\n",
+                       sk, size, dev->name);
+ 
+-      size += dev->hard_header_len;
++      hard_header_len = dev->hard_header_len;
++      /* Leave room for loopback hardware header if necessary */
++      if (usat->sat_addr.s_node == ATADDR_BCAST &&
++          (dev->flags & IFF_LOOPBACK || !(rt->flags & RTF_GATEWAY))) {
++              struct atalk_addr at_lo;
++
++              at_lo.s_node = 0;
++              at_lo.s_net  = 0;
++
++              rt_lo = atrtr_find(&at_lo);
++
++              if (rt_lo && rt_lo->dev->hard_header_len > hard_header_len)
++                      hard_header_len = rt_lo->dev->hard_header_len;
++      }
++
++      size += hard_header_len;
+       release_sock(sk);
+       skb = sock_alloc_send_skb(sk, size, (flags & MSG_DONTWAIT), &err);
+       lock_sock(sk);
+@@ -1645,7 +1660,7 @@ static int atalk_sendmsg(struct socket *sock, struct 
msghdr *msg, size_t len)
+               goto out;
+ 
+       skb_reserve(skb, ddp_dl->header_length);
+-      skb_reserve(skb, dev->hard_header_len);
++      skb_reserve(skb, hard_header_len);
+       skb->dev = dev;
+ 
+       SOCK_DEBUG(sk, "SK %p: Begin build.\n", sk);
+@@ -1696,18 +1711,12 @@ static int atalk_sendmsg(struct socket *sock, struct 
msghdr *msg, size_t len)
+               /* loop back */
+               skb_orphan(skb);
+               if (ddp->deh_dnode == ATADDR_BCAST) {
+-                      struct atalk_addr at_lo;
+-
+-                      at_lo.s_node = 0;
+-                      at_lo.s_net  = 0;
+-
+-                      rt = atrtr_find(&at_lo);
+-                      if (!rt) {
++                      if (!rt_lo) {
+                               kfree_skb(skb);
+                               err = -ENETUNREACH;
+                               goto out;
+                       }
+-                      dev = rt->dev;
++                      dev = rt_lo->dev;
+                       skb->dev = dev;
+               }
+               ddp_dl->request(ddp_dl, skb, dev->dev_addr);
+diff --git a/net/core/filter.c b/net/core/filter.c
+index bbf5dbb95644d..6272570fe1396 100644
+--- a/net/core/filter.c
++++ b/net/core/filter.c
+@@ -2836,18 +2836,14 @@ static int bpf_skb_net_shrink(struct sk_buff *skb, u32 
len_diff)
+       return 0;
+ }
+ 
+-static u32 __bpf_skb_max_len(const struct sk_buff *skb)
+-{
+-      return skb->dev ? skb->dev->mtu + skb->dev->hard_header_len :
+-                        SKB_MAX_ALLOC;
+-}
++#define BPF_SKB_MAX_LEN SKB_MAX_ALLOC
+ 
+ static int bpf_skb_adjust_net(struct sk_buff *skb, s32 len_diff)
+ {
+       bool trans_same = skb->transport_header == skb->network_header;
+       u32 len_cur, len_diff_abs = abs(len_diff);
+       u32 len_min = bpf_skb_net_base_len(skb);
+-      u32 len_max = __bpf_skb_max_len(skb);
++      u32 len_max = BPF_SKB_MAX_LEN;
+       __be16 proto = skb_protocol(skb, true);
+       bool shrink = len_diff < 0;
+       int ret;
+@@ -2926,7 +2922,7 @@ static int bpf_skb_trim_rcsum(struct sk_buff *skb, 
unsigned int new_len)
+ static inline int __bpf_skb_change_tail(struct sk_buff *skb, u32 new_len,
+                                       u64 flags)
+ {
+-      u32 max_len = __bpf_skb_max_len(skb);
++      u32 max_len = BPF_SKB_MAX_LEN;
+       u32 min_len = __bpf_skb_min_len(skb);
+       int ret;
+ 
+@@ -3002,7 +2998,7 @@ static const struct bpf_func_proto 
sk_skb_change_tail_proto = {
+ static inline int __bpf_skb_change_head(struct sk_buff *skb, u32 head_room,
+                                       u64 flags)
+ {
+-      u32 max_len = __bpf_skb_max_len(skb);
++      u32 max_len = BPF_SKB_MAX_LEN;
+       u32 new_len = skb->len + head_room;
+       int ret;
+ 
+diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
+index b438bed6749d4..2cd3508a37869 100644
+--- a/net/dccp/ipv6.c
++++ b/net/dccp/ipv6.c
+@@ -319,6 +319,11 @@ static int dccp_v6_conn_request(struct sock *sk, struct 
sk_buff *skb)
+       if (!ipv6_unicast_destination(skb))
+               return 0;       /* discard, don't send a reset here */
+ 
++      if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) {
++              __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
++              return 0;
++      }
++
+       if (dccp_bad_service_code(sk, service)) {
+               dcb->dccpd_reset_code = DCCP_RESET_CODE_BAD_SERVICE_CODE;
+               goto drop;
+diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
+index 534e2598981df..439a55d1aa993 100644
+--- a/net/ipv4/inet_connection_sock.c
++++ b/net/ipv4/inet_connection_sock.c
+@@ -698,12 +698,15 @@ static bool reqsk_queue_unlink(struct request_sock_queue 
*queue,
+       return found;
+ }
+ 
+-void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req)
++bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req)
+ {
+-      if (reqsk_queue_unlink(&inet_csk(sk)->icsk_accept_queue, req)) {
++      bool unlinked = reqsk_queue_unlink(&inet_csk(sk)->icsk_accept_queue, 
req);
++
++      if (unlinked) {
+               reqsk_queue_removed(&inet_csk(sk)->icsk_accept_queue, req);
+               reqsk_put(req);
+       }
++      return unlinked;
+ }
+ EXPORT_SYMBOL(inet_csk_reqsk_queue_drop);
+ 
+diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
+index 9436fb9b6a3d3..a20b393b45016 100644
+--- a/net/ipv4/tcp_minisocks.c
++++ b/net/ipv4/tcp_minisocks.c
+@@ -815,8 +815,11 @@ embryonic_reset:
+               tcp_reset(sk);
+       }
+       if (!fastopen) {
+-              inet_csk_reqsk_queue_drop(sk, req);
+-              __NET_INC_STATS(sock_net(sk), LINUX_MIB_EMBRYONICRSTS);
++              bool unlinked = inet_csk_reqsk_queue_drop(sk, req);
++
++              if (unlinked)
++                      __NET_INC_STATS(sock_net(sk), LINUX_MIB_EMBRYONICRSTS);
++              *req_stolen = !unlinked;
+       }
+       return NULL;
+ }
+diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
+index acf0749ee5bbd..57d84accbf1e3 100644
+--- a/net/ipv6/ip6_input.c
++++ b/net/ipv6/ip6_input.c
+@@ -222,16 +222,6 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, 
struct net_device *dev,
+       if (ipv6_addr_is_multicast(&hdr->saddr))
+               goto err;
+ 
+-      /* While RFC4291 is not explicit about v4mapped addresses
+-       * in IPv6 headers, it seems clear linux dual-stack
+-       * model can not deal properly with these.
+-       * Security models could be fooled by ::ffff:127.0.0.1 for example.
+-       *
+-       * https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02
+-       */
+-      if (ipv6_addr_v4mapped(&hdr->saddr))
+-              goto err;
+-
+       skb->transport_header = skb->network_header + sizeof(*hdr);
+       IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
+ 
+diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
+index 6e84f2eb08d64..8d822df83b082 100644
+--- a/net/ipv6/tcp_ipv6.c
++++ b/net/ipv6/tcp_ipv6.c
+@@ -1039,6 +1039,11 @@ static int tcp_v6_conn_request(struct sock *sk, struct 
sk_buff *skb)
+       if (!ipv6_unicast_destination(skb))
+               goto drop;
+ 
++      if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) {
++              __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
++              return 0;
++      }
++
+       return tcp_conn_request(&tcp6_request_sock_ops,
+                               &tcp_request_sock_ipv6_ops, sk, skb);
+ 
+diff --git a/net/sunrpc/auth_gss/svcauth_gss.c 
b/net/sunrpc/auth_gss/svcauth_gss.c
+index ab086081be9c7..a85d78d2bdb73 100644
+--- a/net/sunrpc/auth_gss/svcauth_gss.c
++++ b/net/sunrpc/auth_gss/svcauth_gss.c
+@@ -1766,11 +1766,14 @@ static int
+ svcauth_gss_release(struct svc_rqst *rqstp)
+ {
+       struct gss_svc_data *gsd = (struct gss_svc_data *)rqstp->rq_auth_data;
+-      struct rpc_gss_wire_cred *gc = &gsd->clcred;
++      struct rpc_gss_wire_cred *gc;
+       struct xdr_buf *resbuf = &rqstp->rq_res;
+       int stat = -EINVAL;
+       struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
+ 
++      if (!gsd)
++              goto out;
++      gc = &gsd->clcred;
+       if (gc->gc_proc != RPC_GSS_PROC_DATA)
+               goto out;
+       /* Release can be called twice, but we only wrap once. */
+@@ -1811,10 +1814,10 @@ out_err:
+       if (rqstp->rq_cred.cr_group_info)
+               put_group_info(rqstp->rq_cred.cr_group_info);
+       rqstp->rq_cred.cr_group_info = NULL;
+-      if (gsd->rsci)
++      if (gsd && gsd->rsci) {
+               cache_put(&gsd->rsci->h, sn->rsc_cache);
+-      gsd->rsci = NULL;
+-
++              gsd->rsci = NULL;
++      }
+       return stat;
+ }
+ 
+diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
+index 4b65db13e1bba..aceafec612a8f 100644
+--- a/net/vmw_vsock/af_vsock.c
++++ b/net/vmw_vsock/af_vsock.c
+@@ -628,6 +628,7 @@ struct sock *__vsock_create(struct net *net,
+               vsk->trusted = psk->trusted;
+               vsk->owner = get_cred(psk->owner);
+               vsk->connect_timeout = psk->connect_timeout;
++              security_sk_clone(parent, sk);
+       } else {
+               vsk->trusted = ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN);
+               vsk->owner = get_current_cred();
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 6a419b23adbc8..f456e5f67824c 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -4870,7 +4870,7 @@ static void alc_determine_headset_type(struct hda_codec 
*codec)
+       case 0x10ec0274:
+       case 0x10ec0294:
+               alc_process_coef_fw(codec, coef0274);
+-              msleep(80);
++              msleep(850);
+               val = alc_read_coef_idx(codec, 0x46);
+               is_ctia = (val & 0x00f0) == 0x00f0;
+               break;
+@@ -5054,6 +5054,7 @@ static void alc_update_headset_jack_cb(struct hda_codec 
*codec,
+       struct alc_spec *spec = codec->spec;
+       spec->current_headset_type = ALC_HEADSET_TYPE_UNKNOWN;
+       snd_hda_gen_hp_automute(codec, jack);
++      alc_update_headset_mode(codec);
+ }
+ 
+ static void alc_probe_headset_mode(struct hda_codec *codec)
+diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
+index 651329bf97432..fddfd227a9c0e 100644
+--- a/sound/soc/codecs/cs42l42.c
++++ b/sound/soc/codecs/cs42l42.c
+@@ -405,7 +405,7 @@ static const struct regmap_config cs42l42_regmap = {
+ };
+ 
+ static DECLARE_TLV_DB_SCALE(adc_tlv, -9600, 100, false);
+-static DECLARE_TLV_DB_SCALE(mixer_tlv, -6200, 100, false);
++static DECLARE_TLV_DB_SCALE(mixer_tlv, -6300, 100, true);
+ 
+ static const char * const cs42l42_hpf_freq_text[] = {
+       "1.86Hz", "120Hz", "235Hz", "466Hz"
+@@ -462,7 +462,7 @@ static const struct snd_kcontrol_new 
cs42l42_snd_controls[] = {
+                               CS42L42_DAC_HPF_EN_SHIFT, true, false),
+       SOC_DOUBLE_R_TLV("Mixer Volume", CS42L42_MIXER_CHA_VOL,
+                        CS42L42_MIXER_CHB_VOL, CS42L42_MIXER_CH_VOL_SHIFT,
+-                              0x3e, 1, mixer_tlv)
++                              0x3f, 1, mixer_tlv)
+ };
+ 
+ static int cs42l42_hpdrv_evt(struct snd_soc_dapm_widget *w,
+@@ -695,24 +695,6 @@ static int cs42l42_pll_config(struct snd_soc_component 
*component)
+                                       CS42L42_CLK_OASRC_SEL_MASK,
+                                       CS42L42_CLK_OASRC_SEL_12 <<
+                                       CS42L42_CLK_OASRC_SEL_SHIFT);
+-                      /* channel 1 on low LRCLK, 32 bit */
+-                      snd_soc_component_update_bits(component,
+-                                      CS42L42_ASP_RX_DAI0_CH1_AP_RES,
+-                                      CS42L42_ASP_RX_CH_AP_MASK |
+-                                      CS42L42_ASP_RX_CH_RES_MASK,
+-                                      (CS42L42_ASP_RX_CH_AP_LOW <<
+-                                      CS42L42_ASP_RX_CH_AP_SHIFT) |
+-                                      (CS42L42_ASP_RX_CH_RES_32 <<
+-                                      CS42L42_ASP_RX_CH_RES_SHIFT));
+-                      /* Channel 2 on high LRCLK, 32 bit */
+-                      snd_soc_component_update_bits(component,
+-                                      CS42L42_ASP_RX_DAI0_CH2_AP_RES,
+-                                      CS42L42_ASP_RX_CH_AP_MASK |
+-                                      CS42L42_ASP_RX_CH_RES_MASK,
+-                                      (CS42L42_ASP_RX_CH_AP_HI <<
+-                                      CS42L42_ASP_RX_CH_AP_SHIFT) |
+-                                      (CS42L42_ASP_RX_CH_RES_32 <<
+-                                      CS42L42_ASP_RX_CH_RES_SHIFT));
+                       if (pll_ratio_table[i].mclk_src_sel == 0) {
+                               /* Pass the clock straight through */
+                               snd_soc_component_update_bits(component,
+@@ -801,27 +783,23 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai 
*codec_dai, unsigned int fmt)
+       /* Bitclock/frame inversion */
+       switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+       case SND_SOC_DAIFMT_NB_NF:
++              asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_NB_IF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_LCPOL_IN_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_IB_NF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_IB_IF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_LCPOL_IN_SHIFT;
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
+               break;
+       }
+ 
+-      snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG,
+-                              CS42L42_ASP_MODE_MASK |
+-                              CS42L42_ASP_SCPOL_IN_DAC_MASK |
+-                              CS42L42_ASP_LCPOL_IN_MASK, asp_cfg_val);
++      snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG, 
CS42L42_ASP_MODE_MASK |
++                                                                    
CS42L42_ASP_SCPOL_MASK |
++                                                                    
CS42L42_ASP_LCPOL_MASK,
++                                                                    
asp_cfg_val);
+ 
+       return 0;
+ }
+@@ -832,14 +810,29 @@ static int cs42l42_pcm_hw_params(struct 
snd_pcm_substream *substream,
+ {
+       struct snd_soc_component *component = dai->component;
+       struct cs42l42_private *cs42l42 = 
snd_soc_component_get_drvdata(component);
+-      int retval;
++      unsigned int width = (params_width(params) / 8) - 1;
++      unsigned int val = 0;
+ 
+       cs42l42->srate = params_rate(params);
+-      cs42l42->swidth = params_width(params);
+ 
+-      retval = cs42l42_pll_config(component);
++      switch(substream->stream) {
++      case SNDRV_PCM_STREAM_PLAYBACK:
++              val |= width << CS42L42_ASP_RX_CH_RES_SHIFT;
++              /* channel 1 on low LRCLK */
++              snd_soc_component_update_bits(component, 
CS42L42_ASP_RX_DAI0_CH1_AP_RES,
++                                                       
CS42L42_ASP_RX_CH_AP_MASK |
++                                                       
CS42L42_ASP_RX_CH_RES_MASK, val);
++              /* Channel 2 on high LRCLK */
++              val |= CS42L42_ASP_RX_CH_AP_HI << CS42L42_ASP_RX_CH_AP_SHIFT;
++              snd_soc_component_update_bits(component, 
CS42L42_ASP_RX_DAI0_CH2_AP_RES,
++                                                       
CS42L42_ASP_RX_CH_AP_MASK |
++                                                       
CS42L42_ASP_RX_CH_RES_MASK, val);
++              break;
++      default:
++              break;
++      }
+ 
+-      return retval;
++      return cs42l42_pll_config(component);
+ }
+ 
+ static int cs42l42_set_sysclk(struct snd_soc_dai *dai,
+@@ -904,9 +897,9 @@ static int cs42l42_digital_mute(struct snd_soc_dai *dai, 
int mute)
+       return 0;
+ }
+ 
+-#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | 
\
+-                      SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE | \
+-                      SNDRV_PCM_FMTBIT_S32_LE)
++#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
++                       SNDRV_PCM_FMTBIT_S24_LE |\
++                       SNDRV_PCM_FMTBIT_S32_LE )
+ 
+ 
+ static const struct snd_soc_dai_ops cs42l42_ops = {
+@@ -1807,7 +1800,7 @@ static int cs42l42_i2c_probe(struct i2c_client 
*i2c_client,
+               dev_dbg(&i2c_client->dev, "Found reset GPIO\n");
+               gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
+       }
+-      mdelay(3);
++      usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
+ 
+       /* Request IRQ */
+       ret = devm_request_threaded_irq(&i2c_client->dev,
+@@ -1932,6 +1925,7 @@ static int cs42l42_runtime_resume(struct device *dev)
+       }
+ 
+       gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
++      usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
+ 
+       regcache_cache_only(cs42l42->regmap, false);
+       regcache_sync(cs42l42->regmap);
+diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h
+index 09b0a93203efb..bcaf4f22408d6 100644
+--- a/sound/soc/codecs/cs42l42.h
++++ b/sound/soc/codecs/cs42l42.h
+@@ -262,11 +262,12 @@
+ #define CS42L42_ASP_SLAVE_MODE                0x00
+ #define CS42L42_ASP_MODE_SHIFT                4
+ #define CS42L42_ASP_MODE_MASK         (1 << CS42L42_ASP_MODE_SHIFT)
+-#define CS42L42_ASP_SCPOL_IN_DAC_SHIFT        2
+-#define CS42L42_ASP_SCPOL_IN_DAC_MASK (1 << CS42L42_ASP_SCPOL_IN_DAC_SHIFT)
+-#define CS42L42_ASP_LCPOL_IN_SHIFT    0
+-#define CS42L42_ASP_LCPOL_IN_MASK     (1 << CS42L42_ASP_LCPOL_IN_SHIFT)
+-#define CS42L42_ASP_POL_INV           1
++#define CS42L42_ASP_SCPOL_SHIFT               2
++#define CS42L42_ASP_SCPOL_MASK                (3 << CS42L42_ASP_SCPOL_SHIFT)
++#define CS42L42_ASP_SCPOL_NOR         3
++#define CS42L42_ASP_LCPOL_SHIFT               0
++#define CS42L42_ASP_LCPOL_MASK                (3 << CS42L42_ASP_LCPOL_SHIFT)
++#define CS42L42_ASP_LCPOL_INV         3
+ 
+ #define CS42L42_ASP_FRM_CFG           (CS42L42_PAGE_12 + 0x08)
+ #define CS42L42_ASP_STP_SHIFT         4
+@@ -743,6 +744,7 @@
+ #define CS42L42_FRAC2_VAL(val)        (((val) & 0xff0000) >> 16)
+ 
+ #define CS42L42_NUM_SUPPLIES  5
++#define CS42L42_BOOT_TIME_US  3000
+ 
+ static const char *const cs42l42_supply_names[CS42L42_NUM_SUPPLIES] = {
+       "VA",
+@@ -760,7 +762,6 @@ struct  cs42l42_private {
+       struct completion pdn_done;
+       u32 sclk;
+       u32 srate;
+-      u32 swidth;
+       u8 plug_state;
+       u8 hs_type;
+       u8 ts_inv;
+diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
+index 9ebe77c3784a8..57130edaf3aba 100644
+--- a/sound/soc/codecs/es8316.c
++++ b/sound/soc/codecs/es8316.c
+@@ -56,13 +56,8 @@ static const 
SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv,
+       1, 1, TLV_DB_SCALE_ITEM(0, 0, 0),
+       2, 2, TLV_DB_SCALE_ITEM(250, 0, 0),
+       3, 3, TLV_DB_SCALE_ITEM(450, 0, 0),
+-      4, 4, TLV_DB_SCALE_ITEM(700, 0, 0),
+-      5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0),
+-      6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0),
+-      7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0),
+-      8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0),
+-      9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0),
+-      10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0),
++      4, 7, TLV_DB_SCALE_ITEM(700, 300, 0),
++      8, 10, TLV_DB_SCALE_ITEM(1800, 300, 0),
+ );
+ 
+ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpout_vol_tlv,
+diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
+index 974e1a4491723..63e19a6a9790e 100644
+--- a/sound/soc/codecs/rt5640.c
++++ b/sound/soc/codecs/rt5640.c
+@@ -342,9 +342,9 @@ static bool rt5640_readable_register(struct device *dev, 
unsigned int reg)
+ }
+ 
+ static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
+ static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
+ static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
+ 
+ /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
+diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
+index 985852fd97238..318a4c9b380fb 100644
+--- a/sound/soc/codecs/rt5651.c
++++ b/sound/soc/codecs/rt5651.c
+@@ -288,9 +288,9 @@ static bool rt5651_readable_register(struct device *dev, 
unsigned int reg)
+ }
+ 
+ static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
+ static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
+ static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
+ 
+ /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
+diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
+index 1c1a521c73cb4..b331b3ba61a9b 100644
+--- a/sound/soc/codecs/rt5659.c
++++ b/sound/soc/codecs/rt5659.c
+@@ -3466,12 +3466,17 @@ static int rt5659_set_component_sysclk(struct 
snd_soc_component *component, int
+ {
+       struct rt5659_priv *rt5659 = snd_soc_component_get_drvdata(component);
+       unsigned int reg_val = 0;
++      int ret;
+ 
+       if (freq == rt5659->sysclk && clk_id == rt5659->sysclk_src)
+               return 0;
+ 
+       switch (clk_id) {
+       case RT5659_SCLK_S_MCLK:
++              ret = clk_set_rate(rt5659->mclk, freq);
++              if (ret)
++                      return ret;
++
+               reg_val |= RT5659_SCLK_SRC_MCLK;
+               break;
+       case RT5659_SCLK_S_PLL1:
+diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
+index 7c0a06b487f74..17255e9683f59 100644
+--- a/sound/soc/codecs/sgtl5000.c
++++ b/sound/soc/codecs/sgtl5000.c
+@@ -71,7 +71,7 @@ static const struct reg_default sgtl5000_reg_defaults[] = {
+       { SGTL5000_DAP_EQ_BASS_BAND4,           0x002f },
+       { SGTL5000_DAP_MAIN_CHAN,               0x8000 },
+       { SGTL5000_DAP_MIX_CHAN,                0x0000 },
+-      { SGTL5000_DAP_AVC_CTRL,                0x0510 },
++      { SGTL5000_DAP_AVC_CTRL,                0x5100 },
+       { SGTL5000_DAP_AVC_THRESHOLD,           0x1473 },
+       { SGTL5000_DAP_AVC_ATTACK,              0x0028 },
+       { SGTL5000_DAP_AVC_DECAY,               0x0050 },
+diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
+index f08da98d0192a..717edf3b5d3e3 100644
+--- a/sound/usb/quirks.c
++++ b/sound/usb/quirks.c
+@@ -1187,6 +1187,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio 
*chip)
+       case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
+       case USB_ID(0x2912, 0x30c8): /* Audioengine D1 */
+       case USB_ID(0x413c, 0xa506): /* Dell AE515 sound bar */
++      case USB_ID(0x046d, 0x084c): /* Logitech ConferenceCam Connect */
+               return true;
+       }
+ 

Reply via email to