commit:     61390a019c69c0b58802dc179246f395ae0d4c85
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 10 13:25:32 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Apr 10 13:25:32 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=61390a01

Linux patch 5.4.111

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

 0000_README              |   4 +
 1110_linux-5.4.111.patch | 434 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 438 insertions(+)

diff --git a/0000_README b/0000_README
index d36c37a..0eabebb 100644
--- a/0000_README
+++ b/0000_README
@@ -483,6 +483,10 @@ Patch:  1109_linux-5.4.110.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.4.110
 
+Patch:  1110_linux-5.4.111.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.4.111
+
 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/1110_linux-5.4.111.patch b/1110_linux-5.4.111.patch
new file mode 100644
index 0000000..906775c
--- /dev/null
+++ b/1110_linux-5.4.111.patch
@@ -0,0 +1,434 @@
+diff --git a/Makefile b/Makefile
+index b028b5ead5f7e..25680098f51b2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 4
+-SUBLEVEL = 110
++SUBLEVEL = 111
+ EXTRAVERSION =
+ NAME = Kleptomaniac Octopus
+ 
+diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
+index fb6b8aa12cc56..77fa7c0f21046 100644
+--- a/arch/arm/boot/dts/am33xx.dtsi
++++ b/arch/arm/boot/dts/am33xx.dtsi
+@@ -40,6 +40,9 @@
+               ethernet1 = &cpsw_emac1;
+               spi0 = &spi0;
+               spi1 = &spi1;
++              mmc0 = &mmc1;
++              mmc1 = &mmc2;
++              mmc2 = &mmc3;
+       };
+ 
+       cpus {
+diff --git a/arch/ia64/kernel/err_inject.c b/arch/ia64/kernel/err_inject.c
+index 8b5b8e6bc9d9a..dd5bfed52031d 100644
+--- a/arch/ia64/kernel/err_inject.c
++++ b/arch/ia64/kernel/err_inject.c
+@@ -59,7 +59,7 @@ show_##name(struct device *dev, struct device_attribute 
*attr,       \
+               char *buf)                                              \
+ {                                                                     \
+       u32 cpu=dev->id;                                                \
+-      return sprintf(buf, "%lx\n", name[cpu]);                        \
++      return sprintf(buf, "%llx\n", name[cpu]);                       \
+ }
+ 
+ #define store(name)                                                   \
+@@ -86,9 +86,9 @@ store_call_start(struct device *dev, struct device_attribute 
*attr,
+ 
+ #ifdef ERR_INJ_DEBUG
+       printk(KERN_DEBUG "pal_mc_err_inject for cpu%d:\n", cpu);
+-      printk(KERN_DEBUG "err_type_info=%lx,\n", err_type_info[cpu]);
+-      printk(KERN_DEBUG "err_struct_info=%lx,\n", err_struct_info[cpu]);
+-      printk(KERN_DEBUG "err_data_buffer=%lx, %lx, %lx.\n",
++      printk(KERN_DEBUG "err_type_info=%llx,\n", err_type_info[cpu]);
++      printk(KERN_DEBUG "err_struct_info=%llx,\n", err_struct_info[cpu]);
++      printk(KERN_DEBUG "err_data_buffer=%llx, %llx, %llx.\n",
+                         err_data_buffer[cpu].data1,
+                         err_data_buffer[cpu].data2,
+                         err_data_buffer[cpu].data3);
+@@ -117,8 +117,8 @@ store_call_start(struct device *dev, struct 
device_attribute *attr,
+ 
+ #ifdef ERR_INJ_DEBUG
+       printk(KERN_DEBUG "Returns: status=%d,\n", (int)status[cpu]);
+-      printk(KERN_DEBUG "capabilities=%lx,\n", capabilities[cpu]);
+-      printk(KERN_DEBUG "resources=%lx\n", resources[cpu]);
++      printk(KERN_DEBUG "capabilities=%llx,\n", capabilities[cpu]);
++      printk(KERN_DEBUG "resources=%llx\n", resources[cpu]);
+ #endif
+       return size;
+ }
+@@ -131,7 +131,7 @@ show_virtual_to_phys(struct device *dev, struct 
device_attribute *attr,
+                       char *buf)
+ {
+       unsigned int cpu=dev->id;
+-      return sprintf(buf, "%lx\n", phys_addr[cpu]);
++      return sprintf(buf, "%llx\n", phys_addr[cpu]);
+ }
+ 
+ static ssize_t
+@@ -145,7 +145,7 @@ store_virtual_to_phys(struct device *dev, struct 
device_attribute *attr,
+       ret = get_user_pages_fast(virt_addr, 1, FOLL_WRITE, NULL);
+       if (ret<=0) {
+ #ifdef ERR_INJ_DEBUG
+-              printk("Virtual address %lx is not existing.\n",virt_addr);
++              printk("Virtual address %llx is not existing.\n", virt_addr);
+ #endif
+               return -EINVAL;
+       }
+@@ -163,7 +163,7 @@ show_err_data_buffer(struct device *dev,
+ {
+       unsigned int cpu=dev->id;
+ 
+-      return sprintf(buf, "%lx, %lx, %lx\n",
++      return sprintf(buf, "%llx, %llx, %llx\n",
+                       err_data_buffer[cpu].data1,
+                       err_data_buffer[cpu].data2,
+                       err_data_buffer[cpu].data3);
+@@ -178,13 +178,13 @@ store_err_data_buffer(struct device *dev,
+       int ret;
+ 
+ #ifdef ERR_INJ_DEBUG
+-      printk("write err_data_buffer=[%lx,%lx,%lx] on cpu%d\n",
++      printk("write err_data_buffer=[%llx,%llx,%llx] on cpu%d\n",
+                err_data_buffer[cpu].data1,
+                err_data_buffer[cpu].data2,
+                err_data_buffer[cpu].data3,
+                cpu);
+ #endif
+-      ret=sscanf(buf, "%lx, %lx, %lx",
++      ret = sscanf(buf, "%llx, %llx, %llx",
+                       &err_data_buffer[cpu].data1,
+                       &err_data_buffer[cpu].data2,
+                       &err_data_buffer[cpu].data3);
+diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
+index bf2cb9294795c..d96c68122eae0 100644
+--- a/arch/ia64/kernel/mca.c
++++ b/arch/ia64/kernel/mca.c
+@@ -1851,7 +1851,7 @@ ia64_mca_cpu_init(void *cpu_data)
+                       data = mca_bootmem();
+                       first_time = 0;
+               } else
+-                      data = (void *)__get_free_pages(GFP_KERNEL,
++                      data = (void *)__get_free_pages(GFP_ATOMIC,
+                                                       get_order(sz));
+               if (!data)
+                       panic("Could not allocate MCA memory for cpu %d\n",
+diff --git a/arch/x86/Makefile b/arch/x86/Makefile
+index 8ca3cf7c5ec97..59942e349e5f0 100644
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -34,7 +34,7 @@ M16_CFLAGS    := $(call cc-option, -m16, $(CODE16GCC_CFLAGS))
+ REALMODE_CFLAGS       := $(M16_CFLAGS) -g -Os -DDISABLE_BRANCH_PROFILING \
+                  -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
+                  -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
+-                 -mno-mmx -mno-sse
++                 -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
+ 
+ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), 
-ffreestanding)
+ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), 
-fno-stack-protector)
+diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
+index 18936533666e3..6e884f17634fe 100644
+--- a/arch/x86/net/bpf_jit_comp.c
++++ b/arch/x86/net/bpf_jit_comp.c
+@@ -1050,7 +1050,16 @@ emit_jmp:
+               }
+ 
+               if (image) {
+-                      if (unlikely(proglen + ilen > oldproglen)) {
++                      /*
++                       * When populating the image, assert that:
++                       *
++                       *  i) We do not write beyond the allocated space, and
++                       * ii) addrs[i] did not change from the prior run, in 
order
++                       *     to validate assumptions made for computing branch
++                       *     displacements.
++                       */
++                      if (unlikely(proglen + ilen > oldproglen ||
++                                   proglen + ilen != addrs[i])) {
+                               pr_err("bpf_jit: fatal error\n");
+                               return -EFAULT;
+                       }
+@@ -1118,7 +1127,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog 
*prog)
+               extra_pass = true;
+               goto skip_init_addrs;
+       }
+-      addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
++      addrs = kvmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
+       if (!addrs) {
+               prog = orig_prog;
+               goto out_addrs;
+@@ -1195,7 +1204,7 @@ out_image:
+               if (image)
+                       bpf_prog_fill_jited_linfo(prog, addrs + 1);
+ out_addrs:
+-              kfree(addrs);
++              kvfree(addrs);
+               kfree(jit_data);
+               prog->aux->jit_data = NULL;
+       }
+diff --git a/arch/x86/net/bpf_jit_comp32.c b/arch/x86/net/bpf_jit_comp32.c
+index 66cd150b7e541..0fcba32077c87 100644
+--- a/arch/x86/net/bpf_jit_comp32.c
++++ b/arch/x86/net/bpf_jit_comp32.c
+@@ -2278,7 +2278,16 @@ notyet:
+               }
+ 
+               if (image) {
+-                      if (unlikely(proglen + ilen > oldproglen)) {
++                      /*
++                       * When populating the image, assert that:
++                       *
++                       *  i) We do not write beyond the allocated space, and
++                       * ii) addrs[i] did not change from the prior run, in 
order
++                       *     to validate assumptions made for computing branch
++                       *     displacements.
++                       */
++                      if (unlikely(proglen + ilen > oldproglen ||
++                                   proglen + ilen != addrs[i])) {
+                               pr_err("bpf_jit: fatal error\n");
+                               return -EFAULT;
+                       }
+diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
+index 3934ce3385ac3..f9ff6d433dfe1 100644
+--- a/drivers/bus/ti-sysc.c
++++ b/drivers/bus/ti-sysc.c
+@@ -2685,7 +2685,9 @@ static int sysc_remove(struct platform_device *pdev)
+ 
+       pm_runtime_put_sync(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
+-      reset_control_assert(ddata->rsts);
++
++      if (!reset_control_status(ddata->rsts))
++              reset_control_assert(ddata->rsts);
+ 
+ unprepare:
+       sysc_unprepare(ddata);
+diff --git a/drivers/gpu/drm/msm/adreno/a5xx_power.c 
b/drivers/gpu/drm/msm/adreno/a5xx_power.c
+index a3a06db675ba3..ee3ff32da0048 100644
+--- a/drivers/gpu/drm/msm/adreno/a5xx_power.c
++++ b/drivers/gpu/drm/msm/adreno/a5xx_power.c
+@@ -300,7 +300,7 @@ int a5xx_power_init(struct msm_gpu *gpu)
+       /* Set up the limits management */
+       if (adreno_is_a530(adreno_gpu))
+               a530_lm_setup(gpu);
+-      else
++      else if (adreno_is_a540(adreno_gpu))
+               a540_lm_setup(gpu);
+ 
+       /* Set up SP/TP power collpase */
+diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c
+index ad2703698b052..cd59a59180385 100644
+--- a/drivers/gpu/drm/msm/msm_fence.c
++++ b/drivers/gpu/drm/msm/msm_fence.c
+@@ -45,7 +45,7 @@ int msm_wait_fence(struct msm_fence_context *fctx, uint32_t 
fence,
+       int ret;
+ 
+       if (fence > fctx->last_fence) {
+-              DRM_ERROR("%s: waiting on invalid fence: %u (of %u)\n",
++              DRM_ERROR_RATELIMITED("%s: waiting on invalid fence: %u (of 
%u)\n",
+                               fctx->name, fence, fctx->last_fence);
+               return -EINVAL;
+       }
+diff --git a/drivers/isdn/hardware/mISDN/mISDNipac.c 
b/drivers/isdn/hardware/mISDN/mISDNipac.c
+index bca880213e919..51e3d45daaa78 100644
+--- a/drivers/isdn/hardware/mISDN/mISDNipac.c
++++ b/drivers/isdn/hardware/mISDN/mISDNipac.c
+@@ -694,7 +694,7 @@ isac_release(struct isac_hw *isac)
+ {
+       if (isac->type & IPAC_TYPE_ISACX)
+               WriteISAC(isac, ISACX_MASK, 0xff);
+-      else
++      else if (isac->type != 0)
+               WriteISAC(isac, ISAC_MASK, 0xff);
+       if (isac->dch.timer.function != NULL) {
+               del_timer(&isac->dch.timer);
+diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c 
b/drivers/net/ethernet/marvell/pxa168_eth.c
+index 51b77c2de400a..235bbb2940a88 100644
+--- a/drivers/net/ethernet/marvell/pxa168_eth.c
++++ b/drivers/net/ethernet/marvell/pxa168_eth.c
+@@ -1554,8 +1554,8 @@ static int pxa168_eth_remove(struct platform_device 
*pdev)
+ 
+       mdiobus_unregister(pep->smi_bus);
+       mdiobus_free(pep->smi_bus);
+-      unregister_netdev(dev);
+       cancel_work_sync(&pep->tx_timeout_task);
++      unregister_netdev(dev);
+       free_netdev(dev);
+       return 0;
+ }
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+index 8b8581f71e793..36b9a364ef26b 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+@@ -2365,8 +2365,9 @@ static u8 mlx5e_build_icosq_log_wq_sz(struct 
mlx5e_params *params,
+ {
+       switch (params->rq_wq_type) {
+       case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
+-              return order_base_2(MLX5E_UMR_WQEBBS) +
+-                      mlx5e_get_rq_log_wq_sz(rqp->rqc);
++              return max_t(u8, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE,
++                           order_base_2(MLX5E_UMR_WQEBBS) +
++                           mlx5e_get_rq_log_wq_sz(rqp->rqc));
+       default: /* MLX5_WQ_TYPE_CYCLIC */
+               return MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE;
+       }
+diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
+index 0ac0bd4c65c4c..207a88ea10f38 100644
+--- a/drivers/nvme/host/multipath.c
++++ b/drivers/nvme/host/multipath.c
+@@ -330,7 +330,7 @@ static blk_qc_t nvme_ns_head_make_request(struct 
request_queue *q,
+               trace_block_bio_remap(bio->bi_disk->queue, bio,
+                                     disk_devt(ns->head->disk),
+                                     bio->bi_iter.bi_sector);
+-              ret = direct_make_request(bio);
++              ret = generic_make_request(bio);
+       } else if (nvme_available_path(head)) {
+               dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n");
+ 
+diff --git a/drivers/platform/x86/intel-hid.c 
b/drivers/platform/x86/intel-hid.c
+index ad1399dcb21f5..164bebbfea214 100644
+--- a/drivers/platform/x86/intel-hid.c
++++ b/drivers/platform/x86/intel-hid.c
+@@ -84,6 +84,13 @@ static const struct dmi_system_id button_array_table[] = {
+                       DMI_MATCH(DMI_PRODUCT_NAME, "HP Spectre x2 Detachable"),
+               },
+       },
++      {
++              .ident = "Lenovo ThinkPad X1 Tablet Gen 2",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Tablet Gen 
2"),
++              },
++      },
+       { }
+ };
+ 
+diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
+index 8c54d3707fba3..e8257de495fd3 100644
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -4089,13 +4089,19 @@ static bool hotkey_notify_6xxx(const u32 hkey,
+ 
+       case TP_HKEY_EV_KEY_NUMLOCK:
+       case TP_HKEY_EV_KEY_FN:
+-      case TP_HKEY_EV_KEY_FN_ESC:
+               /* key press events, we just ignore them as long as the EC
+                * is still reporting them in the normal keyboard stream */
+               *send_acpi_ev = false;
+               *ignore_acpi_ev = true;
+               return true;
+ 
++      case TP_HKEY_EV_KEY_FN_ESC:
++              /* Get the media key status to foce the status LED to update */
++              acpi_evalf(hkey_handle, NULL, "GMKS", "v");
++              *send_acpi_ev = false;
++              *ignore_acpi_ev = true;
++              return true;
++
+       case TP_HKEY_EV_TABLET_CHANGED:
+               tpacpi_input_send_tabletsw();
+               hotkey_tablet_mode_notify_change();
+diff --git a/drivers/target/target_core_pscsi.c 
b/drivers/target/target_core_pscsi.c
+index c9d92b3e777d9..5a047ce77bc0b 100644
+--- a/drivers/target/target_core_pscsi.c
++++ b/drivers/target/target_core_pscsi.c
+@@ -939,6 +939,14 @@ new_bio:
+ 
+       return 0;
+ fail:
++      if (bio)
++              bio_put(bio);
++      while (req->bio) {
++              bio = req->bio;
++              req->bio = bio->bi_next;
++              bio_put(bio);
++      }
++      req->biotail = NULL;
+       return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
+ }
+ 
+diff --git a/fs/cifs/file.c b/fs/cifs/file.c
+index 31d578739341b..1aac8d38f887d 100644
+--- a/fs/cifs/file.c
++++ b/fs/cifs/file.c
+@@ -164,6 +164,7 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
+                       goto posix_open_ret;
+               }
+       } else {
++              cifs_revalidate_mapping(*pinode);
+               cifs_fattr_to_inode(*pinode, &fattr);
+       }
+ 
+diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
+index 7d875a47d0226..7177720e822e1 100644
+--- a/fs/cifs/smb2misc.c
++++ b/fs/cifs/smb2misc.c
+@@ -738,8 +738,8 @@ smb2_is_valid_oplock_break(char *buffer, struct 
TCP_Server_Info *server)
+               }
+       }
+       spin_unlock(&cifs_tcp_ses_lock);
+-      cifs_dbg(FYI, "Can not process oplock break for non-existent 
connection\n");
+-      return false;
++      cifs_dbg(FYI, "No file id matched, oplock break ignored\n");
++      return true;
+ }
+ 
+ void
+diff --git a/init/Kconfig b/init/Kconfig
+index 96fc45d1b686b..4f9fd78e2200b 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -76,8 +76,7 @@ config INIT_ENV_ARG_LIMIT
+ 
+ config COMPILE_TEST
+       bool "Compile also drivers which will not load"
+-      depends on !UML
+-      default n
++      depends on HAS_IOMEM
+       help
+         Some drivers can be compiled on a different platform than they are
+         intended to be run on. Despite they cannot be loaded there (or even
+diff --git a/net/mac80211/main.c b/net/mac80211/main.c
+index 3e8561c3b0e7b..5b3189a376802 100644
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -954,8 +954,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
+                       continue;
+ 
+               if (!dflt_chandef.chan) {
++                      /*
++                       * Assign the first enabled channel to dflt_chandef
++                       * from the list of channels
++                       */
++                      for (i = 0; i < sband->n_channels; i++)
++                              if (!(sband->channels[i].flags &
++                                              IEEE80211_CHAN_DISABLED))
++                                      break;
++                      /* if none found then use the first anyway */
++                      if (i == sband->n_channels)
++                              i = 0;
+                       cfg80211_chandef_create(&dflt_chandef,
+-                                              &sband->channels[0],
++                                              &sband->channels[i],
+                                               NL80211_CHAN_NO_HT);
+                       /* init channel we're on */
+                       if (!local->use_chanctx && !local->_oper_chandef.chan) {
+diff --git a/net/netfilter/nf_conntrack_proto_gre.c 
b/net/netfilter/nf_conntrack_proto_gre.c
+index 5b05487a60d21..db11e403d8187 100644
+--- a/net/netfilter/nf_conntrack_proto_gre.c
++++ b/net/netfilter/nf_conntrack_proto_gre.c
+@@ -218,9 +218,6 @@ int nf_conntrack_gre_packet(struct nf_conn *ct,
+                           enum ip_conntrack_info ctinfo,
+                           const struct nf_hook_state *state)
+ {
+-      if (state->pf != NFPROTO_IPV4)
+-              return -NF_ACCEPT;
+-
+       if (!nf_ct_is_confirmed(ct)) {
+               unsigned int *timeouts = nf_ct_timeout_lookup(ct);
+ 

Reply via email to