commit:     1dac0ca866c5193af35e4cf727e90ec96120d2a1
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Nov 10 13:55:22 2020 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Nov 10 13:55:22 2020 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=1dac0ca8

Linux patch 4.14.205

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

 0000_README               |    4 +
 1204_linux-4.14.205.patch | 1241 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1245 insertions(+)

diff --git a/0000_README b/0000_README
index 598d67e..c1add37 100644
--- a/0000_README
+++ b/0000_README
@@ -859,6 +859,10 @@ Patch:  1203_linux-4.14.204.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.204
 
+Patch:  1204_linux-4.14.205.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.205
+
 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/1204_linux-4.14.205.patch b/1204_linux-4.14.205.patch
new file mode 100644
index 0000000..f777454
--- /dev/null
+++ b/1204_linux-4.14.205.patch
@@ -0,0 +1,1241 @@
+diff --git a/Makefile b/Makefile
+index 9b0fd7096ab88..fff3ca75d35a2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 204
++SUBLEVEL = 205
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S
+index 705a682084232..85d9ea4a0accc 100644
+--- a/arch/arc/kernel/entry.S
++++ b/arch/arc/kernel/entry.S
+@@ -156,6 +156,7 @@ END(EV_Extension)
+ tracesys:
+       ; save EFA in case tracer wants the PC of traced task
+       ; using ERET won't work since next-PC has already committed
++      lr  r12, [efa]
+       GET_CURR_TASK_FIELD_PTR   TASK_THREAD, r11
+       st  r12, [r11, THREAD_FAULT_ADDR]       ; thread.fault_address
+ 
+@@ -198,9 +199,15 @@ tracesys_exit:
+ ; Breakpoint TRAP
+ ; ---------------------------------------------
+ trap_with_param:
+-      mov r0, r12     ; EFA in case ptracer/gdb wants stop_pc
++
++      ; stop_pc info by gdb needs this info
++      lr  r0, [efa]
+       mov r1, sp
+ 
++      ; Now that we have read EFA, it is safe to do "fake" rtie
++      ;   and get out of CPU exception mode
++      FAKE_RET_FROM_EXCPN
++
+       ; Save callee regs in case gdb wants to have a look
+       ; SP will grow up by size of CALLEE Reg-File
+       ; NOTE: clobbers r12
+@@ -227,10 +234,6 @@ ENTRY(EV_Trap)
+ 
+       EXCEPTION_PROLOGUE
+ 
+-      lr  r12, [efa]
+-
+-      FAKE_RET_FROM_EXCPN
+-
+       ;============ TRAP 1   :breakpoints
+       ; Check ECR for trap with arg (PROLOGUE ensures r9 has ECR)
+       bmsk.f 0, r9, 7
+@@ -238,6 +241,9 @@ ENTRY(EV_Trap)
+ 
+       ;============ TRAP  (no param): syscall top level
+ 
++      ; First return from Exception to pure K mode (Exception/IRQs renabled)
++      FAKE_RET_FROM_EXCPN
++
+       ; If syscall tracing ongoing, invoke pre-post-hooks
+       GET_CURR_THR_INFO_FLAGS   r10
+       btst r10, TIF_SYSCALL_TRACE
+diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
+index 74315f302971b..b007c06efbea9 100644
+--- a/arch/arc/kernel/stacktrace.c
++++ b/arch/arc/kernel/stacktrace.c
+@@ -115,7 +115,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs 
*regs,
+               int (*consumer_fn) (unsigned int, void *), void *arg)
+ {
+ #ifdef CONFIG_ARC_DW2_UNWIND
+-      int ret = 0;
++      int ret = 0, cnt = 0;
+       unsigned int address;
+       struct unwind_frame_info frame_info;
+ 
+@@ -135,6 +135,11 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs 
*regs,
+                       break;
+ 
+               frame_info.regs.r63 = frame_info.regs.r31;
++
++              if (cnt++ > 128) {
++                      printk("unwinder looping too long, aborting !\n");
++                      return 0;
++              }
+       }
+ 
+       return address;         /* return the last address it saw */
+diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi 
b/arch/arm/boot/dts/sun4i-a10.dtsi
+index 41c2579143fd6..b3a3488fdfd68 100644
+--- a/arch/arm/boot/dts/sun4i-a10.dtsi
++++ b/arch/arm/boot/dts/sun4i-a10.dtsi
+@@ -143,7 +143,7 @@
+                       trips {
+                               cpu_alert0: cpu_alert0 {
+                                       /* milliCelsius */
+-                                      temperature = <850000>;
++                                      temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts 
b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
+index 2ce52ba74f73b..13c0ec053ada9 100644
+--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
++++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
+@@ -52,6 +52,10 @@
+       model = "Globalscale Marvell ESPRESSOBin Board";
+       compatible = "globalscale,espressobin", "marvell,armada3720", 
"marvell,armada3710";
+ 
++      aliases {
++              ethernet0 = &eth0;
++      };
++
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+diff --git a/arch/x86/kernel/kexec-bzimage64.c 
b/arch/x86/kernel/kexec-bzimage64.c
+index 4d948d87f01cc..a65636d60296c 100644
+--- a/arch/x86/kernel/kexec-bzimage64.c
++++ b/arch/x86/kernel/kexec-bzimage64.c
+@@ -211,8 +211,7 @@ setup_boot_parameters(struct kimage *image, struct 
boot_params *params,
+       params->hdr.hardware_subarch = boot_params.hdr.hardware_subarch;
+ 
+       /* Copying screen_info will do? */
+-      memcpy(&params->screen_info, &boot_params.screen_info,
+-                              sizeof(struct screen_info));
++      memcpy(&params->screen_info, &screen_info, sizeof(struct screen_info));
+ 
+       /* Fill in memsize later */
+       params->screen_info.ext_mem_k = 0;
+diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
+index 3dc7c0b4adcbb..34f8e69078cc1 100644
+--- a/block/blk-cgroup.c
++++ b/block/blk-cgroup.c
+@@ -872,13 +872,20 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct 
blkcg_policy *pol,
+                       goto fail;
+               }
+ 
++              if (radix_tree_preload(GFP_KERNEL)) {
++                      blkg_free(new_blkg);
++                      ret = -ENOMEM;
++                      goto fail;
++              }
++
+               rcu_read_lock();
+               spin_lock_irq(q->queue_lock);
+ 
+               blkg = blkg_lookup_check(pos, pol, q);
+               if (IS_ERR(blkg)) {
+                       ret = PTR_ERR(blkg);
+-                      goto fail_unlock;
++                      blkg_free(new_blkg);
++                      goto fail_preloaded;
+               }
+ 
+               if (blkg) {
+@@ -887,10 +894,12 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct 
blkcg_policy *pol,
+                       blkg = blkg_create(pos, q, new_blkg);
+                       if (unlikely(IS_ERR(blkg))) {
+                               ret = PTR_ERR(blkg);
+-                              goto fail_unlock;
++                              goto fail_preloaded;
+                       }
+               }
+ 
++              radix_tree_preload_end();
++
+               if (pos == blkcg)
+                       goto success;
+       }
+@@ -900,6 +909,8 @@ success:
+       ctx->body = body;
+       return 0;
+ 
++fail_preloaded:
++      radix_tree_preload_end();
+ fail_unlock:
+       spin_unlock_irq(q->queue_lock);
+       rcu_read_unlock();
+diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
+index 68205002f561e..20fd197ef74cc 100644
+--- a/drivers/acpi/nfit/core.c
++++ b/drivers/acpi/nfit/core.c
+@@ -1273,7 +1273,7 @@ static ssize_t format1_show(struct device *dev,
+                                       le16_to_cpu(nfit_dcr->dcr->code));
+                       break;
+               }
+-              if (rc != ENXIO)
++              if (rc != -ENXIO)
+                       break;
+       }
+       mutex_unlock(&acpi_desc->init_mutex);
+diff --git a/drivers/base/dd.c b/drivers/base/dd.c
+index 392e2b462560e..fc27fab62f503 100644
+--- a/drivers/base/dd.c
++++ b/drivers/base/dd.c
+@@ -816,6 +816,8 @@ static void __device_release_driver(struct device *dev, 
struct device *parent)
+ 
+       drv = dev->driver;
+       if (drv) {
++              pm_runtime_get_sync(dev);
++
+               while (device_links_busy(dev)) {
+                       device_unlock(dev);
+                       if (parent)
+@@ -831,11 +833,12 @@ static void __device_release_driver(struct device *dev, 
struct device *parent)
+                        * have released the driver successfully while this one
+                        * was waiting, so check for that.
+                        */
+-                      if (dev->driver != drv)
++                      if (dev->driver != drv) {
++                              pm_runtime_put(dev);
+                               return;
++                      }
+               }
+ 
+-              pm_runtime_get_sync(dev);
+               pm_runtime_clean_up_links(dev);
+ 
+               driver_sysfs_remove(dev);
+diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
+index 0c779671fe2df..f99866d6d687e 100644
+--- a/drivers/gpu/drm/i915/i915_gpu_error.c
++++ b/drivers/gpu/drm/i915/i915_gpu_error.c
+@@ -231,6 +231,8 @@ static int compress_page(struct compress *c,
+ 
+               if (zlib_deflate(zstream, Z_SYNC_FLUSH) != Z_OK)
+                       return -EIO;
++
++              cond_resched();
+       } while (zstream->avail_in);
+ 
+       /* Fallback to uncompressed if we increase size? */
+@@ -287,6 +289,7 @@ static int compress_page(struct compress *c,
+       if (!i915_memcpy_from_wc(ptr, src, PAGE_SIZE))
+               memcpy(ptr, src, PAGE_SIZE);
+       dst->pages[dst->page_count++] = ptr;
++      cond_resched();
+ 
+       return 0;
+ }
+diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
+index 1c96edcb302be..028dc2819a368 100644
+--- a/drivers/gpu/drm/vc4/vc4_drv.c
++++ b/drivers/gpu/drm/vc4/vc4_drv.c
+@@ -283,6 +283,7 @@ unbind_all:
+       component_unbind_all(dev, drm);
+ gem_destroy:
+       vc4_gem_destroy(drm);
++      drm_mode_config_cleanup(drm);
+       vc4_bo_cache_destroy(drm);
+ dev_unref:
+       drm_dev_unref(drm);
+diff --git a/drivers/net/ethernet/freescale/gianfar.c 
b/drivers/net/ethernet/freescale/gianfar.c
+index 6b95334e172d1..b3b7b98eb32c1 100644
+--- a/drivers/net/ethernet/freescale/gianfar.c
++++ b/drivers/net/ethernet/freescale/gianfar.c
+@@ -1388,7 +1388,7 @@ static int gfar_probe(struct platform_device *ofdev)
+ 
+       if (dev->features & NETIF_F_IP_CSUM ||
+           priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
+-              dev->needed_headroom = GMAC_FCB_LEN;
++              dev->needed_headroom = GMAC_FCB_LEN + GMAC_TXPAL_LEN;
+ 
+       /* Initializing some of the rx/tx queue level parameters */
+       for (i = 0; i < priv->num_tx_queues; i++) {
+@@ -2370,20 +2370,12 @@ static netdev_tx_t gfar_start_xmit(struct sk_buff 
*skb, struct net_device *dev)
+               fcb_len = GMAC_FCB_LEN + GMAC_TXPAL_LEN;
+ 
+       /* make space for additional header when fcb is needed */
+-      if (fcb_len && unlikely(skb_headroom(skb) < fcb_len)) {
+-              struct sk_buff *skb_new;
+-
+-              skb_new = skb_realloc_headroom(skb, fcb_len);
+-              if (!skb_new) {
++      if (fcb_len) {
++              if (unlikely(skb_cow_head(skb, fcb_len))) {
+                       dev->stats.tx_errors++;
+                       dev_kfree_skb_any(skb);
+                       return NETDEV_TX_OK;
+               }
+-
+-              if (skb->sk)
+-                      skb_set_owner_w(skb_new, skb->sk);
+-              dev_consume_skb_any(skb);
+-              skb = skb_new;
+       }
+ 
+       /* total number of fragments in the SKB */
+diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c 
b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+index fae3625ec0b67..e769aec859c61 100644
+--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+@@ -189,7 +189,7 @@ static inline bool i40e_vc_isvalid_vsi_id(struct i40e_vf 
*vf, u16 vsi_id)
+  * check for the valid queue id
+  **/
+ static inline bool i40e_vc_isvalid_queue_id(struct i40e_vf *vf, u16 vsi_id,
+-                                          u8 qid)
++                                          u16 qid)
+ {
+       struct i40e_pf *pf = vf->pf;
+       struct i40e_vsi *vsi = i40e_find_vsi_from_id(pf, vsi_id);
+@@ -204,7 +204,7 @@ static inline bool i40e_vc_isvalid_queue_id(struct i40e_vf 
*vf, u16 vsi_id,
+  *
+  * check for the valid vector id
+  **/
+-static inline bool i40e_vc_isvalid_vector_id(struct i40e_vf *vf, u8 vector_id)
++static inline bool i40e_vc_isvalid_vector_id(struct i40e_vf *vf, u32 
vector_id)
+ {
+       struct i40e_pf *pf = vf->pf;
+ 
+@@ -418,11 +418,28 @@ static int i40e_config_iwarp_qvlist(struct i40e_vf *vf,
+       u32 v_idx, i, reg_idx, reg;
+       u32 next_q_idx, next_q_type;
+       u32 msix_vf, size;
++      int ret = 0;
++
++      msix_vf = pf->hw.func_caps.num_msix_vectors_vf;
++
++      if (qvlist_info->num_vectors > msix_vf) {
++              dev_warn(&pf->pdev->dev,
++                       "Incorrect number of iwarp vectors %u. Maximum %u 
allowed.\n",
++                       qvlist_info->num_vectors,
++                       msix_vf);
++              ret = -EINVAL;
++              goto err_out;
++      }
+ 
+       size = sizeof(struct virtchnl_iwarp_qvlist_info) +
+              (sizeof(struct virtchnl_iwarp_qv_info) *
+                                               (qvlist_info->num_vectors - 1));
++      kfree(vf->qvlist_info);
+       vf->qvlist_info = kzalloc(size, GFP_KERNEL);
++      if (!vf->qvlist_info) {
++              ret = -ENOMEM;
++              goto err_out;
++      }
+       vf->qvlist_info->num_vectors = qvlist_info->num_vectors;
+ 
+       msix_vf = pf->hw.func_caps.num_msix_vectors_vf;
+@@ -433,8 +450,10 @@ static int i40e_config_iwarp_qvlist(struct i40e_vf *vf,
+               v_idx = qv_info->v_idx;
+ 
+               /* Validate vector id belongs to this vf */
+-              if (!i40e_vc_isvalid_vector_id(vf, v_idx))
+-                      goto err;
++              if (!i40e_vc_isvalid_vector_id(vf, v_idx)) {
++                      ret = -EINVAL;
++                      goto err_free;
++              }
+ 
+               vf->qvlist_info->qv_info[i] = *qv_info;
+ 
+@@ -476,10 +495,11 @@ static int i40e_config_iwarp_qvlist(struct i40e_vf *vf,
+       }
+ 
+       return 0;
+-err:
++err_free:
+       kfree(vf->qvlist_info);
+       vf->qvlist_info = NULL;
+-      return -EINVAL;
++err_out:
++      return ret;
+ }
+ 
+ /**
+diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
+index 9cef89fe410d3..9f6e737d9fc9f 100644
+--- a/drivers/net/phy/sfp.c
++++ b/drivers/net/phy/sfp.c
+@@ -881,7 +881,8 @@ static int sfp_probe(struct platform_device *pdev)
+                       continue;
+ 
+               irq = gpiod_to_irq(sfp->gpio[i]);
+-              if (!irq) {
++              if (irq < 0) {
++                      irq = 0;
+                       poll = true;
+                       continue;
+               }
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 2f79a5f1552d4..0e8177f0cc883 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -1257,6 +1257,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)},    /* Telit ME910 dual modem */
+       {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)},    /* Telit LE920 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x1230, 2)}, /* Telit LE910Cx */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1260, 2)}, /* Telit LE910Cx */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1261, 2)}, /* Telit LE910Cx */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1900, 1)}, /* Telit LN940 series */
+diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
+index 32771c2ced7bb..55cbafdb93aef 100644
+--- a/drivers/of/of_reserved_mem.c
++++ b/drivers/of/of_reserved_mem.c
+@@ -222,6 +222,16 @@ static int __init __rmem_cmp(const void *a, const void *b)
+       if (ra->base > rb->base)
+               return 1;
+ 
++      /*
++       * Put the dynamic allocations (address == 0, size == 0) before static
++       * allocations at address 0x0 so that overlap detection works
++       * correctly.
++       */
++      if (ra->size < rb->size)
++              return -1;
++      if (ra->size > rb->size)
++              return 1;
++
+       return 0;
+ }
+ 
+@@ -239,8 +249,7 @@ static void __init __rmem_check_for_overlap(void)
+ 
+               this = &reserved_mem[i];
+               next = &reserved_mem[i + 1];
+-              if (!(this->base && next->base))
+-                      continue;
++
+               if (this->base + this->size > next->base) {
+                       phys_addr_t this_end, next_end;
+ 
+diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
+index 0b11405bfd7ea..40acc060b6558 100644
+--- a/drivers/scsi/scsi_scan.c
++++ b/drivers/scsi/scsi_scan.c
+@@ -1720,15 +1720,16 @@ static void scsi_sysfs_add_devices(struct Scsi_Host 
*shost)
+  */
+ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
+ {
+-      struct async_scan_data *data;
++      struct async_scan_data *data = NULL;
+       unsigned long flags;
+ 
+       if (strncmp(scsi_scan_type, "sync", 4) == 0)
+               return NULL;
+ 
++      mutex_lock(&shost->scan_mutex);
+       if (shost->async_scan) {
+               shost_printk(KERN_DEBUG, shost, "%s called twice\n", __func__);
+-              return NULL;
++              goto err;
+       }
+ 
+       data = kmalloc(sizeof(*data), GFP_KERNEL);
+@@ -1739,7 +1740,6 @@ static struct async_scan_data 
*scsi_prep_async_scan(struct Scsi_Host *shost)
+               goto err;
+       init_completion(&data->prev_finished);
+ 
+-      mutex_lock(&shost->scan_mutex);
+       spin_lock_irqsave(shost->host_lock, flags);
+       shost->async_scan = 1;
+       spin_unlock_irqrestore(shost->host_lock, flags);
+@@ -1754,6 +1754,7 @@ static struct async_scan_data 
*scsi_prep_async_scan(struct Scsi_Host *shost)
+       return data;
+ 
+  err:
++      mutex_unlock(&shost->scan_mutex);
+       kfree(data);
+       return NULL;
+ }
+diff --git a/drivers/tty/serial/8250/8250_mtk.c 
b/drivers/tty/serial/8250/8250_mtk.c
+index b1363114d538c..496a06d9e8def 100644
+--- a/drivers/tty/serial/8250/8250_mtk.c
++++ b/drivers/tty/serial/8250/8250_mtk.c
+@@ -56,7 +56,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios 
*termios,
+        */
+       baud = tty_termios_baud_rate(termios);
+ 
+-      serial8250_do_set_termios(port, termios, old);
++      serial8250_do_set_termios(port, termios, NULL);
+ 
+       tty_termios_encode_baud_rate(termios, baud, baud);
+ 
+diff --git a/drivers/tty/serial/serial_txx9.c 
b/drivers/tty/serial/serial_txx9.c
+index f80fead6c5fc1..ba77e72057a96 100644
+--- a/drivers/tty/serial/serial_txx9.c
++++ b/drivers/tty/serial/serial_txx9.c
+@@ -1287,6 +1287,9 @@ static int __init serial_txx9_init(void)
+ 
+ #ifdef ENABLE_SERIAL_TXX9_PCI
+       ret = pci_register_driver(&serial_txx9_pci_driver);
++      if (ret) {
++              platform_driver_unregister(&serial_txx9_plat_driver);
++      }
+ #endif
+       if (ret == 0)
+               goto out;
+diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
+index 781d95113742f..2fb8180cc844b 100644
+--- a/drivers/tty/vt/vt.c
++++ b/drivers/tty/vt/vt.c
+@@ -4227,27 +4227,6 @@ static int con_font_default(struct vc_data *vc, struct 
console_font_op *op)
+       return rc;
+ }
+ 
+-static int con_font_copy(struct vc_data *vc, struct console_font_op *op)
+-{
+-      int con = op->height;
+-      int rc;
+-
+-
+-      console_lock();
+-      if (vc->vc_mode != KD_TEXT)
+-              rc = -EINVAL;
+-      else if (!vc->vc_sw->con_font_copy)
+-              rc = -ENOSYS;
+-      else if (con < 0 || !vc_cons_allocated(con))
+-              rc = -ENOTTY;
+-      else if (con == vc->vc_num)     /* nothing to do */
+-              rc = 0;
+-      else
+-              rc = vc->vc_sw->con_font_copy(vc, con);
+-      console_unlock();
+-      return rc;
+-}
+-
+ int con_font_op(struct vc_data *vc, struct console_font_op *op)
+ {
+       switch (op->op) {
+@@ -4258,7 +4237,8 @@ int con_font_op(struct vc_data *vc, struct 
console_font_op *op)
+       case KD_FONT_OP_SET_DEFAULT:
+               return con_font_default(vc, op);
+       case KD_FONT_OP_COPY:
+-              return con_font_copy(vc, op);
++              /* was buggy and never really used */
++              return -EINVAL;
+       }
+       return -ENOSYS;
+ }
+diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
+index dd72e85f2e176..ca74b67c4450d 100644
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -217,6 +217,9 @@ static const struct usb_device_id usb_quirk_list[] = {
+       { USB_DEVICE(0x0926, 0x3333), .driver_info =
+                       USB_QUIRK_CONFIG_INTF_STRINGS },
+ 
++      /* Kingston DataTraveler 3.0 */
++      { USB_DEVICE(0x0951, 0x1666), .driver_info = USB_QUIRK_NO_LPM },
++
+       /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
+       { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
+ 
+diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
+index 434fca58143c6..c3e45c24e0f47 100644
+--- a/drivers/usb/mtu3/mtu3_gadget.c
++++ b/drivers/usb/mtu3/mtu3_gadget.c
+@@ -581,6 +581,7 @@ static int mtu3_gadget_stop(struct usb_gadget *g)
+ 
+       spin_unlock_irqrestore(&mtu->lock, flags);
+ 
++      synchronize_irq(mtu->irq);
+       return 0;
+ }
+ 
+diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
+index 47fbd9f0c0c7a..62821f7a8a23e 100644
+--- a/drivers/usb/serial/cyberjack.c
++++ b/drivers/usb/serial/cyberjack.c
+@@ -358,11 +358,12 @@ static void cyberjack_write_bulk_callback(struct urb 
*urb)
+       struct cyberjack_private *priv = usb_get_serial_port_data(port);
+       struct device *dev = &port->dev;
+       int status = urb->status;
++      bool resubmitted = false;
+ 
+-      set_bit(0, &port->write_urbs_free);
+       if (status) {
+               dev_dbg(dev, "%s - nonzero write bulk status received: %d\n",
+                       __func__, status);
++              set_bit(0, &port->write_urbs_free);
+               return;
+       }
+ 
+@@ -395,6 +396,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
+                       goto exit;
+               }
+ 
++              resubmitted = true;
++
+               dev_dbg(dev, "%s - priv->wrsent=%d\n", __func__, priv->wrsent);
+               dev_dbg(dev, "%s - priv->wrfilled=%d\n", __func__, 
priv->wrfilled);
+ 
+@@ -411,6 +414,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
+ 
+ exit:
+       spin_unlock(&priv->lock);
++      if (!resubmitted)
++              set_bit(0, &port->write_urbs_free);
+       usb_serial_port_softint(port);
+ }
+ 
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 3fc14b3774643..49e6aa9aec547 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -253,6 +253,7 @@ static void option_instat_callback(struct urb *urb);
+ #define QUECTEL_PRODUCT_EP06                  0x0306
+ #define QUECTEL_PRODUCT_EM12                  0x0512
+ #define QUECTEL_PRODUCT_RM500Q                        0x0800
++#define QUECTEL_PRODUCT_EC200T                        0x6026
+ 
+ #define CMOTECH_VENDOR_ID                     0x16d8
+ #define CMOTECH_PRODUCT_6001                  0x6001
+@@ -1120,6 +1121,7 @@ static const struct usb_device_id option_ids[] = {
+       { 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_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 
QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
+ 
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
+       { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
+@@ -1192,6 +1194,8 @@ static const struct usb_device_id option_ids[] = {
+         .driver_info = NCTRL(0) | RSVD(1) },
+       { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff),    /* 
Telit FT980-KS */
+         .driver_info = NCTRL(2) | RSVD(3) },
++      { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff),    /* 
Telit FN980 (PCIe) */
++        .driver_info = NCTRL(0) | RSVD(1) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
+@@ -1204,6 +1208,8 @@ static const struct usb_device_id option_ids[] = {
+         .driver_info = NCTRL(0) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
++      { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff),    /* 
Telit LE910Cx (RNDIS) */
++        .driver_info = NCTRL(2) | RSVD(3) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
+@@ -1218,6 +1224,10 @@ static const struct usb_device_id option_ids[] = {
+       { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 
TELIT_PRODUCT_LE920A4_1213, 0xff) },
+       { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
++      { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff),    /* 
Telit LE910Cx (rmnet) */
++        .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
++      { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff),    /* 
Telit LE910Cx (RNDIS) */
++        .driver_info = NCTRL(2) | RSVD(3) },
+       { USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
+         .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
+       { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
+diff --git a/drivers/xen/events/events_base.c 
b/drivers/xen/events/events_base.c
+index 95e5a9300ff04..fdeeef2b9947b 100644
+--- a/drivers/xen/events/events_base.c
++++ b/drivers/xen/events/events_base.c
+@@ -90,6 +90,8 @@ static bool (*pirq_needs_eoi)(unsigned irq);
+ /* Xen will never allocate port zero for any purpose. */
+ #define VALID_EVTCHN(chn)     ((chn) != 0)
+ 
++static struct irq_info *legacy_info_ptrs[NR_IRQS_LEGACY];
++
+ static struct irq_chip xen_dynamic_chip;
+ static struct irq_chip xen_percpu_chip;
+ static struct irq_chip xen_pirq_chip;
+@@ -154,7 +156,18 @@ int get_evtchn_to_irq(unsigned evtchn)
+ /* Get info for IRQ */
+ struct irq_info *info_for_irq(unsigned irq)
+ {
+-      return irq_get_chip_data(irq);
++      if (irq < nr_legacy_irqs())
++              return legacy_info_ptrs[irq];
++      else
++              return irq_get_chip_data(irq);
++}
++
++static void set_info_for_irq(unsigned int irq, struct irq_info *info)
++{
++      if (irq < nr_legacy_irqs())
++              legacy_info_ptrs[irq] = info;
++      else
++              irq_set_chip_data(irq, info);
+ }
+ 
+ /* Constructors for packed IRQ information. */
+@@ -375,7 +388,7 @@ static void xen_irq_init(unsigned irq)
+       info->type = IRQT_UNBOUND;
+       info->refcnt = -1;
+ 
+-      irq_set_chip_data(irq, info);
++      set_info_for_irq(irq, info);
+ 
+       list_add_tail(&info->list, &xen_irq_list_head);
+ }
+@@ -424,14 +437,14 @@ static int __must_check xen_allocate_irq_gsi(unsigned 
gsi)
+ 
+ static void xen_free_irq(unsigned irq)
+ {
+-      struct irq_info *info = irq_get_chip_data(irq);
++      struct irq_info *info = info_for_irq(irq);
+ 
+       if (WARN_ON(!info))
+               return;
+ 
+       list_del(&info->list);
+ 
+-      irq_set_chip_data(irq, NULL);
++      set_info_for_irq(irq, NULL);
+ 
+       WARN_ON(info->refcnt > 0);
+ 
+@@ -601,7 +614,7 @@ EXPORT_SYMBOL_GPL(xen_irq_from_gsi);
+ static void __unbind_from_irq(unsigned int irq)
+ {
+       int evtchn = evtchn_from_irq(irq);
+-      struct irq_info *info = irq_get_chip_data(irq);
++      struct irq_info *info = info_for_irq(irq);
+ 
+       if (info->refcnt > 0) {
+               info->refcnt--;
+@@ -1105,7 +1118,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,
+ 
+ void unbind_from_irqhandler(unsigned int irq, void *dev_id)
+ {
+-      struct irq_info *info = irq_get_chip_data(irq);
++      struct irq_info *info = info_for_irq(irq);
+ 
+       if (WARN_ON(!info))
+               return;
+@@ -1139,7 +1152,7 @@ int evtchn_make_refcounted(unsigned int evtchn)
+       if (irq == -1)
+               return -ENOENT;
+ 
+-      info = irq_get_chip_data(irq);
++      info = info_for_irq(irq);
+ 
+       if (!info)
+               return -ENOENT;
+@@ -1167,7 +1180,7 @@ int evtchn_get(unsigned int evtchn)
+       if (irq == -1)
+               goto done;
+ 
+-      info = irq_get_chip_data(irq);
++      info = info_for_irq(irq);
+ 
+       if (!info)
+               goto done;
+diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
+index aea1ed0aebd0f..0a0dd3178483e 100644
+--- a/fs/gfs2/glock.c
++++ b/fs/gfs2/glock.c
+@@ -870,7 +870,8 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
+ out_free:
+       kfree(gl->gl_lksb.sb_lvbptr);
+       kmem_cache_free(cachep, gl);
+-      atomic_dec(&sdp->sd_glock_disposal);
++      if (atomic_dec_and_test(&sdp->sd_glock_disposal))
++              wake_up(&sdp->sd_glock_wait);
+ 
+ out:
+       return ret;
+diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
+index 0c21014a38f23..cdee193140619 100644
+--- a/include/asm-generic/pgtable.h
++++ b/include/asm-generic/pgtable.h
+@@ -1069,10 +1069,6 @@ static inline bool arch_has_pfn_modify_check(void)
+ 
+ #endif /* !__ASSEMBLY__ */
+ 
+-#ifndef io_remap_pfn_range
+-#define io_remap_pfn_range remap_pfn_range
+-#endif
+-
+ #ifndef has_transparent_hugepage
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+ #define has_transparent_hugepage() 1
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index 156940758fc5c..94b138e4c8409 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -2422,6 +2422,15 @@ static inline int vm_fault_to_errno(int vm_fault, int 
foll_flags)
+       return 0;
+ }
+ 
++#ifndef io_remap_pfn_range
++static inline int io_remap_pfn_range(struct vm_area_struct *vma,
++                                   unsigned long addr, unsigned long pfn,
++                                   unsigned long size, pgprot_t prot)
++{
++      return remap_pfn_range(vma, addr, pfn, size, pgprot_decrypted(prot));
++}
++#endif
++
+ typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
+                       void *data);
+ extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
+diff --git a/kernel/fork.c b/kernel/fork.c
+index 535aeb7ca145c..783eae426a866 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -1833,14 +1833,9 @@ static __latent_entropy struct task_struct 
*copy_process(
+       /* ok, now we should be set up.. */
+       p->pid = pid_nr(pid);
+       if (clone_flags & CLONE_THREAD) {
+-              p->exit_signal = -1;
+               p->group_leader = current->group_leader;
+               p->tgid = current->tgid;
+       } else {
+-              if (clone_flags & CLONE_PARENT)
+-                      p->exit_signal = current->group_leader->exit_signal;
+-              else
+-                      p->exit_signal = (clone_flags & CSIGNAL);
+               p->group_leader = p;
+               p->tgid = p->pid;
+       }
+@@ -1885,9 +1880,14 @@ static __latent_entropy struct task_struct 
*copy_process(
+       if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) {
+               p->real_parent = current->real_parent;
+               p->parent_exec_id = current->parent_exec_id;
++              if (clone_flags & CLONE_THREAD)
++                      p->exit_signal = -1;
++              else
++                      p->exit_signal = current->group_leader->exit_signal;
+       } else {
+               p->real_parent = current;
+               p->parent_exec_id = current->self_exec_id;
++              p->exit_signal = (clone_flags & CSIGNAL);
+       }
+ 
+       klp_copy_process(p);
+diff --git a/kernel/futex.c b/kernel/futex.c
+index 8f0e62c59a55b..774de77bc5025 100644
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2512,10 +2512,22 @@ retry:
+               }
+ 
+               /*
+-               * Since we just failed the trylock; there must be an owner.
++               * The trylock just failed, so either there is an owner or
++               * there is a higher priority waiter than this one.
+                */
+               newowner = rt_mutex_owner(&pi_state->pi_mutex);
+-              BUG_ON(!newowner);
++              /*
++               * If the higher priority waiter has not yet taken over the
++               * rtmutex then newowner is NULL. We can't return here with
++               * that state because it's inconsistent vs. the user space
++               * state. So drop the locks and try again. It's a valid
++               * situation and not any different from the other retry
++               * conditions.
++               */
++              if (unlikely(!newowner)) {
++                      err = -EAGAIN;
++                      goto handle_err;
++              }
+       } else {
+               WARN_ON_ONCE(argowner != current);
+               if (oldowner == current) {
+diff --git a/kernel/kthread.c b/kernel/kthread.c
+index 4e6d85b632013..bd58765d75e76 100644
+--- a/kernel/kthread.c
++++ b/kernel/kthread.c
+@@ -831,7 +831,8 @@ void kthread_delayed_work_timer_fn(unsigned long __data)
+       /* Move the work from worker->delayed_work_list. */
+       WARN_ON_ONCE(list_empty(&work->node));
+       list_del_init(&work->node);
+-      kthread_insert_work(worker, work, &worker->work_list);
++      if (!work->canceling)
++              kthread_insert_work(worker, work, &worker->work_list);
+ 
+       spin_unlock(&worker->lock);
+ }
+diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
+index 987daf9cc6e54..b06011b221855 100644
+--- a/kernel/trace/blktrace.c
++++ b/kernel/trace/blktrace.c
+@@ -498,6 +498,9 @@ static int do_blk_trace_setup(struct request_queue *q, 
char *name, dev_t dev,
+       if (!buts->buf_size || !buts->buf_nr)
+               return -EINVAL;
+ 
++      if (!blk_debugfs_root)
++              return -ENOENT;
++
+       strncpy(buts->name, name, BLKTRACE_BDEV_SIZE);
+       buts->name[BLKTRACE_BDEV_SIZE - 1] = '\0';
+ 
+@@ -530,13 +533,18 @@ static int do_blk_trace_setup(struct request_queue *q, 
char *name, dev_t dev,
+       if (!bt->msg_data)
+               goto err;
+ 
+-      ret = -ENOENT;
+-
+-      if (!blk_debugfs_root)
+-              goto err;
+-
+-      dir = debugfs_lookup(buts->name, blk_debugfs_root);
+-      if (!dir)
++#ifdef CONFIG_BLK_DEBUG_FS
++      /*
++       * When tracing whole make_request drivers (multiqueue) block devices,
++       * reuse the existing debugfs directory created by the block layer on
++       * init. For request-based block devices, all partitions block devices,
++       * and scsi-generic block devices we create a temporary new debugfs
++       * directory that will be removed once the trace ends.
++       */
++      if (q->mq_ops && bdev && bdev == bdev->bd_contains)
++              dir = q->debugfs_dir;
++      else
++#endif
+               bt->dir = dir = debugfs_create_dir(buts->name, 
blk_debugfs_root);
+       if (!dir)
+               goto err;
+@@ -595,8 +603,6 @@ static int do_blk_trace_setup(struct request_queue *q, 
char *name, dev_t dev,
+ 
+       ret = 0;
+ err:
+-      if (dir && !bt->dir)
+-              dput(dir);
+       if (ret)
+               blk_trace_free(bt);
+       return ret;
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 19526297a5b1c..1339ee5567430 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2817,7 +2817,7 @@ static char *get_trace_buf(void)
+ 
+       /* Interrupts must see nesting incremented before we use the buffer */
+       barrier();
+-      return &buffer->buffer[buffer->nesting][0];
++      return &buffer->buffer[buffer->nesting - 1][0];
+ }
+ 
+ static void put_trace_buf(void)
+diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
+index c4c61ebb8d054..01506162522f3 100644
+--- a/kernel/trace/trace.h
++++ b/kernel/trace/trace.h
+@@ -526,6 +526,12 @@ enum {
+ 
+       TRACE_GRAPH_DEPTH_START_BIT,
+       TRACE_GRAPH_DEPTH_END_BIT,
++
++      /*
++       * When transitioning between context, the preempt_count() may
++       * not be correct. Allow for a single recursion to cover this case.
++       */
++      TRACE_TRANSITION_BIT,
+ };
+ 
+ #define trace_recursion_set(bit)      do { (current)->trace_recursion |= 
(1<<(bit)); } while (0)
+@@ -580,14 +586,27 @@ static __always_inline int 
trace_test_and_set_recursion(int start, int max)
+               return 0;
+ 
+       bit = trace_get_context_bit() + start;
+-      if (unlikely(val & (1 << bit)))
+-              return -1;
++      if (unlikely(val & (1 << bit))) {
++              /*
++               * It could be that preempt_count has not been updated during
++               * a switch between contexts. Allow for a single recursion.
++               */
++              bit = TRACE_TRANSITION_BIT;
++              if (trace_recursion_test(bit))
++                      return -1;
++              trace_recursion_set(bit);
++              barrier();
++              return bit + 1;
++      }
++
++      /* Normal check passed, clear the transition to allow it again */
++      trace_recursion_clear(TRACE_TRANSITION_BIT);
+ 
+       val |= 1 << bit;
+       current->trace_recursion = val;
+       barrier();
+ 
+-      return bit;
++      return bit + 1;
+ }
+ 
+ static __always_inline void trace_clear_recursion(int bit)
+@@ -597,6 +616,7 @@ static __always_inline void trace_clear_recursion(int bit)
+       if (!bit)
+               return;
+ 
++      bit--;
+       bit = 1 << bit;
+       val &= ~bit;
+ 
+diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c
+index cd70eb5df38ec..8ae065783017f 100644
+--- a/kernel/trace/trace_selftest.c
++++ b/kernel/trace/trace_selftest.c
+@@ -492,8 +492,13 @@ trace_selftest_function_recursion(void)
+       unregister_ftrace_function(&test_rec_probe);
+ 
+       ret = -1;
+-      if (trace_selftest_recursion_cnt != 1) {
+-              pr_cont("*callback not called once (%d)* ",
++      /*
++       * Recursion allows for transitions between context,
++       * and may call the callback twice.
++       */
++      if (trace_selftest_recursion_cnt != 1 &&
++          trace_selftest_recursion_cnt != 2) {
++              pr_cont("*callback not called once (or twice) (%d)* ",
+                       trace_selftest_recursion_cnt);
+               goto out;
+       }
+diff --git a/lib/crc32test.c b/lib/crc32test.c
+index 97d6a57cefcc5..61ddce2cff777 100644
+--- a/lib/crc32test.c
++++ b/lib/crc32test.c
+@@ -683,7 +683,6 @@ static int __init crc32c_test(void)
+ 
+       /* reduce OS noise */
+       local_irq_save(flags);
+-      local_irq_disable();
+ 
+       nsec = ktime_get_ns();
+       for (i = 0; i < 100; i++) {
+@@ -694,7 +693,6 @@ static int __init crc32c_test(void)
+       nsec = ktime_get_ns() - nsec;
+ 
+       local_irq_restore(flags);
+-      local_irq_enable();
+ 
+       pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
+ 
+@@ -768,7 +766,6 @@ static int __init crc32_test(void)
+ 
+       /* reduce OS noise */
+       local_irq_save(flags);
+-      local_irq_disable();
+ 
+       nsec = ktime_get_ns();
+       for (i = 0; i < 100; i++) {
+@@ -783,7 +780,6 @@ static int __init crc32_test(void)
+       nsec = ktime_get_ns() - nsec;
+ 
+       local_irq_restore(flags);
+-      local_irq_enable();
+ 
+       pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
+                CRC_LE_BITS, CRC_BE_BITS);
+diff --git a/lib/fonts/font_10x18.c b/lib/fonts/font_10x18.c
+index 0e2deac97da0d..e02f9df24d1ee 100644
+--- a/lib/fonts/font_10x18.c
++++ b/lib/fonts/font_10x18.c
+@@ -8,7 +8,7 @@
+ 
+ #define FONTDATAMAX 9216
+ 
+-static struct font_data fontdata_10x18 = {
++static const struct font_data fontdata_10x18 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, 0x00, /* 0000000000 */
+diff --git a/lib/fonts/font_6x10.c b/lib/fonts/font_6x10.c
+index 87da8acd07db0..6e3c4b7691c85 100644
+--- a/lib/fonts/font_6x10.c
++++ b/lib/fonts/font_6x10.c
+@@ -3,7 +3,7 @@
+ 
+ #define FONTDATAMAX 2560
+ 
+-static struct font_data fontdata_6x10 = {
++static const struct font_data fontdata_6x10 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+diff --git a/lib/fonts/font_6x11.c b/lib/fonts/font_6x11.c
+index 5e975dfa10a53..2d22a24e816f0 100644
+--- a/lib/fonts/font_6x11.c
++++ b/lib/fonts/font_6x11.c
+@@ -9,7 +9,7 @@
+ 
+ #define FONTDATAMAX (11*256)
+ 
+-static struct font_data fontdata_6x11 = {
++static const struct font_data fontdata_6x11 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+diff --git a/lib/fonts/font_7x14.c b/lib/fonts/font_7x14.c
+index 6d74aa6026105..8299467f48251 100644
+--- a/lib/fonts/font_7x14.c
++++ b/lib/fonts/font_7x14.c
+@@ -8,7 +8,7 @@
+ 
+ #define FONTDATAMAX 3584
+ 
+-static struct font_data fontdata_7x14 = {
++static const struct font_data fontdata_7x14 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, /* 0000000 */
+diff --git a/lib/fonts/font_8x16.c b/lib/fonts/font_8x16.c
+index b7ae913e5b79d..ef91f044f22d6 100644
+--- a/lib/fonts/font_8x16.c
++++ b/lib/fonts/font_8x16.c
+@@ -10,7 +10,7 @@
+ 
+ #define FONTDATAMAX 4096
+ 
+-static struct font_data fontdata_8x16 = {
++static const struct font_data fontdata_8x16 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+diff --git a/lib/fonts/font_8x8.c b/lib/fonts/font_8x8.c
+index 51a736e167b54..d42110e6c8e78 100644
+--- a/lib/fonts/font_8x8.c
++++ b/lib/fonts/font_8x8.c
+@@ -9,7 +9,7 @@
+ 
+ #define FONTDATAMAX 2048
+ 
+-static struct font_data fontdata_8x8 = {
++static const struct font_data fontdata_8x8 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+diff --git a/lib/fonts/font_acorn_8x8.c b/lib/fonts/font_acorn_8x8.c
+index 069b3e80c4344..fb395f0d40317 100644
+--- a/lib/fonts/font_acorn_8x8.c
++++ b/lib/fonts/font_acorn_8x8.c
+@@ -5,7 +5,7 @@
+ 
+ #define FONTDATAMAX 2048
+ 
+-static struct font_data acorndata_8x8 = {
++static const struct font_data acorndata_8x8 = {
+ { 0, 0, FONTDATAMAX, 0 }, {
+ /* 00 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^@ */
+ /* 01 */  0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, /* ^A */
+diff --git a/lib/fonts/font_mini_4x6.c b/lib/fonts/font_mini_4x6.c
+index 1449876c6a270..592774a90917b 100644
+--- a/lib/fonts/font_mini_4x6.c
++++ b/lib/fonts/font_mini_4x6.c
+@@ -43,7 +43,7 @@ __END__;
+ 
+ #define FONTDATAMAX 1536
+ 
+-static struct font_data fontdata_mini_4x6 = {
++static const struct font_data fontdata_mini_4x6 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /*{*/
+               /*   Char 0: ' '  */
+diff --git a/lib/fonts/font_pearl_8x8.c b/lib/fonts/font_pearl_8x8.c
+index dc2cdfe218af6..bef8c07201b8e 100644
+--- a/lib/fonts/font_pearl_8x8.c
++++ b/lib/fonts/font_pearl_8x8.c
+@@ -14,7 +14,7 @@
+ 
+ #define FONTDATAMAX 2048
+ 
+-static struct font_data fontdata_pearl8x8 = {
++static const struct font_data fontdata_pearl8x8 = {
+    { 0, 0, FONTDATAMAX, 0 }, {
+    /* 0 0x00 '^@' */
+    0x00, /* 00000000 */
+diff --git a/lib/fonts/font_sun12x22.c b/lib/fonts/font_sun12x22.c
+index 641a6b4dca424..a5b65bd496045 100644
+--- a/lib/fonts/font_sun12x22.c
++++ b/lib/fonts/font_sun12x22.c
+@@ -3,7 +3,7 @@
+ 
+ #define FONTDATAMAX 11264
+ 
+-static struct font_data fontdata_sun12x22 = {
++static const struct font_data fontdata_sun12x22 = {
+       { 0, 0, FONTDATAMAX, 0 }, {
+       /* 0 0x00 '^@' */
+       0x00, 0x00, /* 000000000000 */
+diff --git a/lib/fonts/font_sun8x16.c b/lib/fonts/font_sun8x16.c
+index 193fe6d988e08..e577e76a6a7c0 100644
+--- a/lib/fonts/font_sun8x16.c
++++ b/lib/fonts/font_sun8x16.c
+@@ -3,7 +3,7 @@
+ 
+ #define FONTDATAMAX 4096
+ 
+-static struct font_data fontdata_sun8x16 = {
++static const struct font_data fontdata_sun8x16 = {
+ { 0, 0, FONTDATAMAX, 0 }, {
+ /* */ 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ /* */ 
0x00,0x00,0x7e,0x81,0xa5,0x81,0x81,0xbd,0x99,0x81,0x81,0x7e,0x00,0x00,0x00,0x00,
+diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
+index 482bb0a5d4d30..91f921afae343 100644
+--- a/net/sctp/sm_sideeffect.c
++++ b/net/sctp/sm_sideeffect.c
+@@ -1591,12 +1591,12 @@ static int sctp_cmd_interpreter(enum sctp_event 
event_type,
+                       break;
+ 
+               case SCTP_CMD_INIT_FAILED:
+-                      sctp_cmd_init_failed(commands, asoc, cmd->obj.u32);
++                      sctp_cmd_init_failed(commands, asoc, cmd->obj.u16);
+                       break;
+ 
+               case SCTP_CMD_ASSOC_FAILED:
+                       sctp_cmd_assoc_failed(commands, asoc, event_type,
+-                                            subtype, chunk, cmd->obj.u32);
++                                            subtype, chunk, cmd->obj.u16);
+                       break;
+ 
+               case SCTP_CMD_INIT_COUNTER_INC:
+diff --git a/net/tipc/core.c b/net/tipc/core.c
+index 35f162ece2b79..0c28847b421fa 100644
+--- a/net/tipc/core.c
++++ b/net/tipc/core.c
+@@ -89,6 +89,11 @@ out_sk_rht:
+ static void __net_exit tipc_exit_net(struct net *net)
+ {
+       tipc_net_stop(net);
++
++      /* Make sure the tipc_net_finalize_work stopped
++       * before releasing the resources.
++       */
++      flush_scheduled_work();
+       tipc_bcast_stop(net);
+       tipc_nametbl_stop(net);
+       tipc_sk_rht_destroy(net);
+diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
+index f297a427b421b..29f7491acb354 100644
+--- a/net/vmw_vsock/af_vsock.c
++++ b/net/vmw_vsock/af_vsock.c
+@@ -636,7 +636,7 @@ struct sock *__vsock_create(struct net *net,
+               vsk->owner = get_cred(psk->owner);
+               vsk->connect_timeout = psk->connect_timeout;
+       } else {
+-              vsk->trusted = capable(CAP_NET_ADMIN);
++              vsk->trusted = ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN);
+               vsk->owner = get_current_cred();
+               vsk->connect_timeout = VSOCK_DEFAULT_CONNECT_TIMEOUT;
+       }
+diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
+index f27213b846e6b..6caf94581a0e8 100644
+--- a/sound/usb/pcm.c
++++ b/sound/usb/pcm.c
+@@ -332,6 +332,7 @@ static int set_sync_ep_implicit_fb_quirk(struct 
snd_usb_substream *subs,
+       switch (subs->stream->chip->usb_id) {
+       case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
+       case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
++      case USB_ID(0x22f0, 0x0006): /* Allen&Heath Qu-16 */
+               ep = 0x81;
+               iface = usb_ifnum_to_if(dev, 3);
+ 

Reply via email to