commit:     b3779b13b4829d0d544b03a8e090ebd75574bf87
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Sep 20 12:04:03 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Sep 20 12:04:03 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=b3779b13

Linux patch 4.14.294

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

 0000_README               |   4 +
 1293_linux-4.14.294.patch | 215 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 219 insertions(+)

diff --git a/0000_README b/0000_README
index dbe48b95..d63522c9 100644
--- a/0000_README
+++ b/0000_README
@@ -1219,6 +1219,10 @@ Patch:  1292_linux-4.14.293.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.293
 
+Patch:  1293_linux-4.14.294.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.294
+
 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/1293_linux-4.14.294.patch b/1293_linux-4.14.294.patch
new file mode 100644
index 00000000..3a307eaa
--- /dev/null
+++ b/1293_linux-4.14.294.patch
@@ -0,0 +1,215 @@
+diff --git a/Makefile b/Makefile
+index e1f7e128afb02..2224682414142 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 293
++SUBLEVEL = 294
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
+index bdce1c9434c6c..54891cbf4f50f 100644
+--- a/drivers/gpu/drm/msm/msm_rd.c
++++ b/drivers/gpu/drm/msm/msm_rd.c
+@@ -193,6 +193,9 @@ static int rd_open(struct inode *inode, struct file *file)
+       file->private_data = rd;
+       rd->open = true;
+ 
++      /* Reset fifo to clear any previously unread data: */
++      rd->fifo.head = rd->fifo.tail = 0;
++
+       /* the parsing tools need to know gpu-id to know which
+        * register database to load.
+        */
+diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.h 
b/drivers/hid/intel-ish-hid/ishtp-hid.h
+index f5c7eb79b7b53..fa16983007f60 100644
+--- a/drivers/hid/intel-ish-hid/ishtp-hid.h
++++ b/drivers/hid/intel-ish-hid/ishtp-hid.h
+@@ -118,7 +118,7 @@ struct report_list {
+  * @multi_packet_cnt: Count of fragmented packet count
+  *
+  * This structure is used to store completion flags and per client data like
+- * like report description, number of HID devices etc.
++ * report description, number of HID devices etc.
+  */
+ struct ishtp_cl_data {
+       /* completion flags */
+diff --git a/drivers/net/ethernet/broadcom/tg3.c 
b/drivers/net/ethernet/broadcom/tg3.c
+index 480179ddc45b6..3279a6e48f3b4 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -18157,16 +18157,20 @@ static void tg3_shutdown(struct pci_dev *pdev)
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct tg3 *tp = netdev_priv(dev);
+ 
++      tg3_reset_task_cancel(tp);
++
+       rtnl_lock();
++
+       netif_device_detach(dev);
+ 
+       if (netif_running(dev))
+               dev_close(dev);
+ 
+-      if (system_state == SYSTEM_POWER_OFF)
+-              tg3_power_down(tp);
++      tg3_power_down(tp);
+ 
+       rtnl_unlock();
++
++      pci_disable_device(pdev);
+ }
+ 
+ /**
+diff --git a/drivers/net/ieee802154/cc2520.c b/drivers/net/ieee802154/cc2520.c
+index d50add705a79a..436cf2007138a 100644
+--- a/drivers/net/ieee802154/cc2520.c
++++ b/drivers/net/ieee802154/cc2520.c
+@@ -512,6 +512,7 @@ cc2520_tx(struct ieee802154_hw *hw, struct sk_buff *skb)
+               goto err_tx;
+ 
+       if (status & CC2520_STATUS_TX_UNDERFLOW) {
++              rc = -EINVAL;
+               dev_err(&priv->spi->dev, "cc2520 tx underflow exception\n");
+               goto err_tx;
+       }
+diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
+index 5ddc359135a85..8b4af118ff94b 100644
+--- a/drivers/platform/x86/acer-wmi.c
++++ b/drivers/platform/x86/acer-wmi.c
+@@ -106,6 +106,7 @@ static const struct key_entry acer_wmi_keymap[] 
__initconst = {
+       {KE_KEY, 0x22, {KEY_PROG2} },    /* Arcade */
+       {KE_KEY, 0x23, {KEY_PROG3} },    /* P_Key */
+       {KE_KEY, 0x24, {KEY_PROG4} },    /* Social networking_Key */
++      {KE_KEY, 0x27, {KEY_HELP} },
+       {KE_KEY, 0x29, {KEY_PROG3} },    /* P_Key for TM8372 */
+       {KE_IGNORE, 0x41, {KEY_MUTE} },
+       {KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
+@@ -119,7 +120,13 @@ static const struct key_entry acer_wmi_keymap[] 
__initconst = {
+       {KE_IGNORE, 0x48, {KEY_VOLUMEUP} },
+       {KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} },
+       {KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} },
+-      {KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} },
++      /*
++       * 0x61 is KEY_SWITCHVIDEOMODE. Usually this is a duplicate input event
++       * with the "Video Bus" input device events. But sometimes it is not
++       * a dup. Map it to KEY_UNKNOWN instead of using KE_IGNORE so that
++       * udev/hwdb can override it on systems where it is not a dup.
++       */
++      {KE_KEY, 0x61, {KEY_UNKNOWN} },
+       {KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} },
+       {KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
+       {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
+diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
+index 6ac0a079c5b7b..304e85354c87b 100644
+--- a/fs/tracefs/inode.c
++++ b/fs/tracefs/inode.c
+@@ -142,6 +142,8 @@ struct tracefs_mount_opts {
+       kuid_t uid;
+       kgid_t gid;
+       umode_t mode;
++      /* Opt_* bitfield. */
++      unsigned int opts;
+ };
+ 
+ enum {
+@@ -242,6 +244,7 @@ static int tracefs_parse_options(char *data, struct 
tracefs_mount_opts *opts)
+       kgid_t gid;
+       char *p;
+ 
++      opts->opts = 0;
+       opts->mode = TRACEFS_DEFAULT_MODE;
+ 
+       while ((p = strsep(&data, ",")) != NULL) {
+@@ -276,24 +279,36 @@ static int tracefs_parse_options(char *data, struct 
tracefs_mount_opts *opts)
+                * but traditionally tracefs has ignored all mount options
+                */
+               }
++
++              opts->opts |= BIT(token);
+       }
+ 
+       return 0;
+ }
+ 
+-static int tracefs_apply_options(struct super_block *sb)
++static int tracefs_apply_options(struct super_block *sb, bool remount)
+ {
+       struct tracefs_fs_info *fsi = sb->s_fs_info;
+       struct inode *inode = sb->s_root->d_inode;
+       struct tracefs_mount_opts *opts = &fsi->mount_opts;
+ 
+-      inode->i_mode &= ~S_IALLUGO;
+-      inode->i_mode |= opts->mode;
++      /*
++       * On remount, only reset mode/uid/gid if they were provided as mount
++       * options.
++       */
++
++      if (!remount || opts->opts & BIT(Opt_mode)) {
++              inode->i_mode &= ~S_IALLUGO;
++              inode->i_mode |= opts->mode;
++      }
+ 
+-      inode->i_uid = opts->uid;
++      if (!remount || opts->opts & BIT(Opt_uid))
++              inode->i_uid = opts->uid;
+ 
+-      /* Set all the group ids to the mount option */
+-      set_gid(sb->s_root, opts->gid);
++      if (!remount || opts->opts & BIT(Opt_gid)) {
++              /* Set all the group ids to the mount option */
++              set_gid(sb->s_root, opts->gid);
++      }
+ 
+       return 0;
+ }
+@@ -308,7 +323,7 @@ static int tracefs_remount(struct super_block *sb, int 
*flags, char *data)
+       if (err)
+               goto fail;
+ 
+-      tracefs_apply_options(sb);
++      tracefs_apply_options(sb, true);
+ 
+ fail:
+       return err;
+@@ -360,7 +375,7 @@ static int trace_fill_super(struct super_block *sb, void 
*data, int silent)
+ 
+       sb->s_op = &tracefs_super_operations;
+ 
+-      tracefs_apply_options(sb);
++      tracefs_apply_options(sb, false);
+ 
+       return 0;
+ 
+diff --git a/mm/mmap.c b/mm/mmap.c
+index 17caf44807dee..e230e08d47b8b 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -2524,6 +2524,7 @@ static void unmap_region(struct mm_struct *mm,
+ {
+       struct vm_area_struct *next = prev ? prev->vm_next : mm->mmap;
+       struct mmu_gather tlb;
++      struct vm_area_struct *cur_vma;
+ 
+       lru_add_drain();
+       tlb_gather_mmu(&tlb, mm, start, end);
+@@ -2538,8 +2539,12 @@ static void unmap_region(struct mm_struct *mm,
+        * concurrent flush in this region has to be coming through the rmap,
+        * and we synchronize against that using the rmap lock.
+        */
+-      if ((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0)
+-              tlb_flush_mmu(&tlb);
++      for (cur_vma = vma; cur_vma; cur_vma = cur_vma->vm_next) {
++              if ((cur_vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) {
++                      tlb_flush_mmu(&tlb);
++                      break;
++              }
++      }
+ 
+       free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
+                                next ? next->vm_start : USER_PGTABLES_CEILING);

Reply via email to