]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2018 15:50:15 +0000 (16:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2018 15:50:15 +0000 (16:50 +0100)
added patches:
alsa-hda-fix-headset-mic-detection-problem-for-two-dell-machines.patch
alsa-hda-realtek-pci-quirk-for-fujitsu-u7x7.patch
alsa-seq-fix-racy-pool-initializations.patch
alsa-usb-audio-add-implicit-fb-quirk-for-behringer-ufx1204.patch
alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch
btrfs-fix-crash-due-to-not-cleaning-up-tree-log-block-s-dirty-bits.patch
btrfs-fix-deadlock-in-run_delalloc_nocow.patch
btrfs-fix-unexpected-eexist-when-creating-new-inode.patch
mvpp2-fix-multicast-address-filter.patch
rtlwifi-rtl8821ae-fix-connection-lost-problem-correctly.patch

queue-4.4/alsa-hda-fix-headset-mic-detection-problem-for-two-dell-machines.patch [new file with mode: 0644]
queue-4.4/alsa-hda-realtek-pci-quirk-for-fujitsu-u7x7.patch [new file with mode: 0644]
queue-4.4/alsa-seq-fix-racy-pool-initializations.patch [new file with mode: 0644]
queue-4.4/alsa-usb-audio-add-implicit-fb-quirk-for-behringer-ufx1204.patch [new file with mode: 0644]
queue-4.4/alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch [new file with mode: 0644]
queue-4.4/btrfs-fix-crash-due-to-not-cleaning-up-tree-log-block-s-dirty-bits.patch [new file with mode: 0644]
queue-4.4/btrfs-fix-deadlock-in-run_delalloc_nocow.patch [new file with mode: 0644]
queue-4.4/btrfs-fix-unexpected-eexist-when-creating-new-inode.patch [new file with mode: 0644]
queue-4.4/mvpp2-fix-multicast-address-filter.patch [new file with mode: 0644]
queue-4.4/rtlwifi-rtl8821ae-fix-connection-lost-problem-correctly.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/alsa-hda-fix-headset-mic-detection-problem-for-two-dell-machines.patch b/queue-4.4/alsa-hda-fix-headset-mic-detection-problem-for-two-dell-machines.patch
new file mode 100644 (file)
index 0000000..ba0db59
--- /dev/null
@@ -0,0 +1,46 @@
+From 3f2f7c553d077be6a30cb96b2976a2c940bf5335 Mon Sep 17 00:00:00 2001
+From: Hui Wang <hui.wang@canonical.com>
+Date: Mon, 29 Jan 2018 14:23:15 +0800
+Subject: ALSA: hda - Fix headset mic detection problem for two Dell machines
+
+From: Hui Wang <hui.wang@canonical.com>
+
+commit 3f2f7c553d077be6a30cb96b2976a2c940bf5335 upstream.
+
+One of them has the codec of alc256 and the other one has the codec
+of alc289.
+
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Hui Wang <hui.wang@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5976,6 +5976,11 @@ static const struct snd_hda_pin_quirk al
+               {0x14, 0x90170110},
+               {0x21, 0x02211020}),
+       SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
++              {0x12, 0x90a60130},
++              {0x14, 0x90170110},
++              {0x14, 0x01011020},
++              {0x21, 0x0221101f}),
++      SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
+               ALC256_STANDARD_PINS),
+       SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
+               {0x12, 0x90a60130},
+@@ -6031,6 +6036,10 @@ static const struct snd_hda_pin_quirk al
+               {0x12, 0x90a60120},
+               {0x14, 0x90170110},
+               {0x21, 0x0321101f}),
++      SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
++              {0x12, 0xb7a60130},
++              {0x14, 0x90170110},
++              {0x21, 0x04211020}),
+       SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
+               ALC290_STANDARD_PINS,
+               {0x15, 0x04211040},
diff --git a/queue-4.4/alsa-hda-realtek-pci-quirk-for-fujitsu-u7x7.patch b/queue-4.4/alsa-hda-realtek-pci-quirk-for-fujitsu-u7x7.patch
new file mode 100644 (file)
index 0000000..8a717d8
--- /dev/null
@@ -0,0 +1,83 @@
+From fdcc968a3b290407bcba9d4c90e2fba6d8d928f1 Mon Sep 17 00:00:00 2001
+From: Jan-Marek Glogowski <glogow@fbihome.de>
+Date: Wed, 14 Feb 2018 11:29:15 +0100
+Subject: ALSA: hda/realtek: PCI quirk for Fujitsu U7x7
+
+From: Jan-Marek Glogowski <glogow@fbihome.de>
+
+commit fdcc968a3b290407bcba9d4c90e2fba6d8d928f1 upstream.
+
+These laptops have a combined jack to attach headsets, the U727 on
+the left, the U757 on the right, but a headsets microphone doesn't
+work. Using hdajacksensetest I found that pin 0x19 changed the
+present state when plugging the headset, in addition to 0x21, but
+didn't have the correct configuration (shown as "Not connected").
+
+So this sets the configuration to the same values as the headphone
+pin 0x21 except for the device type microphone, which makes it
+work correctly. With the patch the configured pins for U727 are
+
+Pin 0x12 (Internal Mic, Mobile-In): present = No
+Pin 0x14 (Internal Speaker): present = No
+Pin 0x19 (Black Mic, Left side): present = No
+Pin 0x1d (Internal Aux): present = No
+Pin 0x21 (Black Headphone, Left side): present = No
+
+Signed-off-by: Jan-Marek Glogowski <glogow@fbihome.de>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c |   19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -3130,6 +3130,19 @@ static void alc269_fixup_pincfg_no_hp_to
+               spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
+ }
++static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
++                                               const struct hda_fixup *fix,
++                                               int action)
++{
++      unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
++      unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
++
++      if (cfg_headphone && cfg_headset_mic == 0x411111f0)
++              snd_hda_codec_set_pincfg(codec, 0x19,
++                      (cfg_headphone & ~AC_DEFCFG_DEVICE) |
++                      (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
++}
++
+ static void alc269_fixup_hweq(struct hda_codec *codec,
+                              const struct hda_fixup *fix, int action)
+ {
+@@ -4782,6 +4795,7 @@ enum {
+       ALC269_FIXUP_LIFEBOOK_EXTMIC,
+       ALC269_FIXUP_LIFEBOOK_HP_PIN,
+       ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
++      ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
+       ALC269_FIXUP_AMIC,
+       ALC269_FIXUP_DMIC,
+       ALC269VB_FIXUP_AMIC,
+@@ -4972,6 +4986,10 @@ static const struct hda_fixup alc269_fix
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
+       },
++      [ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
++              .type = HDA_FIXUP_FUNC,
++              .v.func = alc269_fixup_pincfg_U7x7_headset_mic,
++      },
+       [ALC269_FIXUP_AMIC] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+@@ -5687,6 +5705,7 @@ static const struct snd_pci_quirk alc269
+       SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
+       SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
+       SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
++      SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
+       SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
+       SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
+       SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
diff --git a/queue-4.4/alsa-seq-fix-racy-pool-initializations.patch b/queue-4.4/alsa-seq-fix-racy-pool-initializations.patch
new file mode 100644 (file)
index 0000000..4cf4dec
--- /dev/null
@@ -0,0 +1,60 @@
+From d15d662e89fc667b90cd294b0eb45694e33144da Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 12 Feb 2018 15:20:51 +0100
+Subject: ALSA: seq: Fix racy pool initializations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit d15d662e89fc667b90cd294b0eb45694e33144da upstream.
+
+ALSA sequencer core initializes the event pool on demand by invoking
+snd_seq_pool_init() when the first write happens and the pool is
+empty.  Meanwhile user can reset the pool size manually via ioctl
+concurrently, and this may lead to UAF or out-of-bound accesses since
+the function tries to vmalloc / vfree the buffer.
+
+A simple fix is to just wrap the snd_seq_pool_init() call with the
+recently introduced client->ioctl_mutex; as the calls for
+snd_seq_pool_init() from other side are always protected with this
+mutex, we can avoid the race.
+
+Reported-by: 范龙飞 <long7573@126.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/core/seq/seq_clientmgr.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/sound/core/seq/seq_clientmgr.c
++++ b/sound/core/seq/seq_clientmgr.c
+@@ -1012,7 +1012,7 @@ static ssize_t snd_seq_write(struct file
+ {
+       struct snd_seq_client *client = file->private_data;
+       int written = 0, len;
+-      int err = -EINVAL;
++      int err;
+       struct snd_seq_event event;
+       if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
+@@ -1027,11 +1027,15 @@ static ssize_t snd_seq_write(struct file
+       /* allocate the pool now if the pool is not allocated yet */ 
+       if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
+-              if (snd_seq_pool_init(client->pool) < 0)
++              mutex_lock(&client->ioctl_mutex);
++              err = snd_seq_pool_init(client->pool);
++              mutex_unlock(&client->ioctl_mutex);
++              if (err < 0)
+                       return -ENOMEM;
+       }
+       /* only process whole events */
++      err = -EINVAL;
+       while (count >= sizeof(struct snd_seq_event)) {
+               /* Read in the event header from the user */
+               len = sizeof(event);
diff --git a/queue-4.4/alsa-usb-audio-add-implicit-fb-quirk-for-behringer-ufx1204.patch b/queue-4.4/alsa-usb-audio-add-implicit-fb-quirk-for-behringer-ufx1204.patch
new file mode 100644 (file)
index 0000000..b2359f0
--- /dev/null
@@ -0,0 +1,40 @@
+From 5e35dc0338d85ccebacf3f77eca1e5dea73155e8 Mon Sep 17 00:00:00 2001
+From: Lassi Ylikojola <lassi.ylikojola@gmail.com>
+Date: Fri, 9 Feb 2018 16:51:36 +0200
+Subject: ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204
+
+From: Lassi Ylikojola <lassi.ylikojola@gmail.com>
+
+commit 5e35dc0338d85ccebacf3f77eca1e5dea73155e8 upstream.
+
+Add quirk to ensure a sync endpoint is properly configured.
+This patch is a fix for same symptoms on Behringer UFX1204 as patch
+from Albertto Aquirre on Dec 8 2016 for Axe-Fx II.
+
+Signed-off-by: Lassi Ylikojola <lassi.ylikojola@gmail.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/pcm.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/sound/usb/pcm.c
++++ b/sound/usb/pcm.c
+@@ -348,6 +348,15 @@ static int set_sync_ep_implicit_fb_quirk
+               alts = &iface->altsetting[1];
+               goto add_sync_ep;
++      case USB_ID(0x1397, 0x0002):
++              ep = 0x81;
++              iface = usb_ifnum_to_if(dev, 1);
++
++              if (!iface || iface->num_altsetting == 0)
++                      return -EINVAL;
++
++              alts = &iface->altsetting[1];
++              goto add_sync_ep;
+       }
+       if (attr == USB_ENDPOINT_SYNC_ASYNC &&
+           altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
diff --git a/queue-4.4/alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch b/queue-4.4/alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch
new file mode 100644 (file)
index 0000000..53b7e8a
--- /dev/null
@@ -0,0 +1,78 @@
+From 447cae58cecd69392b74a4a42cd0ab9cabd816af Mon Sep 17 00:00:00 2001
+From: Kirill Marinushkin <k.marinushkin@gmail.com>
+Date: Mon, 29 Jan 2018 06:37:55 +0100
+Subject: ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute
+
+From: Kirill Marinushkin <k.marinushkin@gmail.com>
+
+commit 447cae58cecd69392b74a4a42cd0ab9cabd816af upstream.
+
+The layout of the UAC2 Control request and response varies depending on
+the request type. With the current implementation, only the Layout 2
+Parameter Block (with the 2-byte sized RANGE attribute) is handled
+properly. For the Control requests with the 1-byte sized RANGE attribute
+(Bass Control, Mid Control, Tremble Control), the response is parsed
+incorrectly.
+
+This commit:
+* fixes the wLength field value in the request
+* fixes parsing the range values from the response
+
+Fixes: 23caaf19b11e ("ALSA: usb-mixer: Add support for Audio Class v2.0")
+Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/mixer.c |   18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+--- a/sound/usb/mixer.c
++++ b/sound/usb/mixer.c
+@@ -343,17 +343,20 @@ static int get_ctl_value_v2(struct usb_m
+                           int validx, int *value_ret)
+ {
+       struct snd_usb_audio *chip = cval->head.mixer->chip;
+-      unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
++      /* enough space for one range */
++      unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
+       unsigned char *val;
+-      int idx = 0, ret, size;
++      int idx = 0, ret, val_size, size;
+       __u8 bRequest;
++      val_size = uac2_ctl_value_size(cval->val_type);
++
+       if (request == UAC_GET_CUR) {
+               bRequest = UAC2_CS_CUR;
+-              size = uac2_ctl_value_size(cval->val_type);
++              size = val_size;
+       } else {
+               bRequest = UAC2_CS_RANGE;
+-              size = sizeof(buf);
++              size = sizeof(__u16) + 3 * val_size;
+       }
+       memset(buf, 0, sizeof(buf));
+@@ -386,16 +389,17 @@ error:
+               val = buf + sizeof(__u16);
+               break;
+       case UAC_GET_MAX:
+-              val = buf + sizeof(__u16) * 2;
++              val = buf + sizeof(__u16) + val_size;
+               break;
+       case UAC_GET_RES:
+-              val = buf + sizeof(__u16) * 3;
++              val = buf + sizeof(__u16) + val_size * 2;
+               break;
+       default:
+               return -EINVAL;
+       }
+-      *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
++      *value_ret = convert_signed_value(cval,
++                                        snd_usb_combine_bytes(val, val_size));
+       return 0;
+ }
diff --git a/queue-4.4/btrfs-fix-crash-due-to-not-cleaning-up-tree-log-block-s-dirty-bits.patch b/queue-4.4/btrfs-fix-crash-due-to-not-cleaning-up-tree-log-block-s-dirty-bits.patch
new file mode 100644 (file)
index 0000000..cd04512
--- /dev/null
@@ -0,0 +1,65 @@
+From 1846430c24d66e85cc58286b3319c82cd54debb2 Mon Sep 17 00:00:00 2001
+From: Liu Bo <bo.li.liu@oracle.com>
+Date: Thu, 25 Jan 2018 11:02:51 -0700
+Subject: Btrfs: fix crash due to not cleaning up tree log block's dirty bits
+
+From: Liu Bo <bo.li.liu@oracle.com>
+
+commit 1846430c24d66e85cc58286b3319c82cd54debb2 upstream.
+
+In cases that the whole fs flips into readonly status due to failures in
+critical sections, then log tree's blocks are still dirty, and this leads
+to a crash during umount time, the crash is about use-after-free,
+
+umount
+ -> close_ctree
+    -> stop workers
+    -> iput(btree_inode)
+       -> iput_final
+          -> write_inode_now
+            -> ...
+              -> queue job on stop'd workers
+
+cc: <stable@vger.kernel.org> v3.12+
+Fixes: 681ae50917df ("Btrfs: cleanup reserved space when freeing tree log on error")
+Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
+Reviewed-by: Josef Bacik <jbacik@fb.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/btrfs/tree-log.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/fs/btrfs/tree-log.c
++++ b/fs/btrfs/tree-log.c
+@@ -2445,6 +2445,9 @@ static noinline int walk_down_log_tree(s
+                                                       next);
+                                       btrfs_wait_tree_block_writeback(next);
+                                       btrfs_tree_unlock(next);
++                              } else {
++                                      if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
++                                              clear_extent_buffer_dirty(next);
+                               }
+                               WARN_ON(root_owner !=
+@@ -2524,6 +2527,9 @@ static noinline int walk_up_log_tree(str
+                                                       next);
+                                       btrfs_wait_tree_block_writeback(next);
+                                       btrfs_tree_unlock(next);
++                              } else {
++                                      if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
++                                              clear_extent_buffer_dirty(next);
+                               }
+                               WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
+@@ -2600,6 +2606,9 @@ static int walk_log_tree(struct btrfs_tr
+                               clean_tree_block(trans, log->fs_info, next);
+                               btrfs_wait_tree_block_writeback(next);
+                               btrfs_tree_unlock(next);
++                      } else {
++                              if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
++                                      clear_extent_buffer_dirty(next);
+                       }
+                       WARN_ON(log->root_key.objectid !=
diff --git a/queue-4.4/btrfs-fix-deadlock-in-run_delalloc_nocow.patch b/queue-4.4/btrfs-fix-deadlock-in-run_delalloc_nocow.patch
new file mode 100644 (file)
index 0000000..d609153
--- /dev/null
@@ -0,0 +1,38 @@
+From e89166990f11c3f21e1649d760dd35f9e410321c Mon Sep 17 00:00:00 2001
+From: Liu Bo <bo.li.liu@oracle.com>
+Date: Thu, 25 Jan 2018 11:02:50 -0700
+Subject: Btrfs: fix deadlock in run_delalloc_nocow
+
+From: Liu Bo <bo.li.liu@oracle.com>
+
+commit e89166990f11c3f21e1649d760dd35f9e410321c upstream.
+
+@cur_offset is not set back to what it should be (@cow_start) if
+btrfs_next_leaf() returns something wrong, and the range [cow_start,
+cur_offset) remains locked forever.
+
+cc: <stable@vger.kernel.org>
+Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
+Reviewed-by: Josef Bacik <jbacik@fb.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/btrfs/inode.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -1292,8 +1292,11 @@ next_slot:
+               leaf = path->nodes[0];
+               if (path->slots[0] >= btrfs_header_nritems(leaf)) {
+                       ret = btrfs_next_leaf(root, path);
+-                      if (ret < 0)
++                      if (ret < 0) {
++                              if (cow_start != (u64)-1)
++                                      cur_offset = cow_start;
+                               goto error;
++                      }
+                       if (ret > 0)
+                               break;
+                       leaf = path->nodes[0];
diff --git a/queue-4.4/btrfs-fix-unexpected-eexist-when-creating-new-inode.patch b/queue-4.4/btrfs-fix-unexpected-eexist-when-creating-new-inode.patch
new file mode 100644 (file)
index 0000000..615db83
--- /dev/null
@@ -0,0 +1,60 @@
+From 900c9981680067573671ecc5cbfa7c5770be3a40 Mon Sep 17 00:00:00 2001
+From: Liu Bo <bo.li.liu@oracle.com>
+Date: Thu, 25 Jan 2018 11:02:56 -0700
+Subject: Btrfs: fix unexpected -EEXIST when creating new inode
+
+From: Liu Bo <bo.li.liu@oracle.com>
+
+commit 900c9981680067573671ecc5cbfa7c5770be3a40 upstream.
+
+The highest objectid, which is assigned to new inode, is decided at
+the time of initializing fs roots.  However, in cases where log replay
+gets processed, the btree which fs root owns might be changed, so we
+have to search it again for the highest objectid, otherwise creating
+new inode would end up with -EEXIST.
+
+cc: <stable@vger.kernel.org> v4.4-rc6+
+Fixes: f32e48e92596 ("Btrfs: Initialize btrfs_root->highest_objectid when loading tree root and subvolume roots")
+Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
+Reviewed-by: Josef Bacik <jbacik@fb.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/btrfs/tree-log.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+--- a/fs/btrfs/tree-log.c
++++ b/fs/btrfs/tree-log.c
+@@ -26,6 +26,7 @@
+ #include "print-tree.h"
+ #include "backref.h"
+ #include "hash.h"
++#include "inode-map.h"
+ /* magic values for the inode_only field in btrfs_log_inode:
+  *
+@@ -5523,6 +5524,23 @@ again:
+                                                     path);
+               }
++              if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
++                      struct btrfs_root *root = wc.replay_dest;
++
++                      btrfs_release_path(path);
++
++                      /*
++                       * We have just replayed everything, and the highest
++                       * objectid of fs roots probably has changed in case
++                       * some inode_item's got replayed.
++                       *
++                       * root->objectid_mutex is not acquired as log replay
++                       * could only happen during mount.
++                       */
++                      ret = btrfs_find_highest_objectid(root,
++                                                &root->highest_objectid);
++              }
++
+               key.offset = found_key.offset - 1;
+               wc.replay_dest->log_root = NULL;
+               free_extent_buffer(log->node);
diff --git a/queue-4.4/mvpp2-fix-multicast-address-filter.patch b/queue-4.4/mvpp2-fix-multicast-address-filter.patch
new file mode 100644 (file)
index 0000000..7f4ee47
--- /dev/null
@@ -0,0 +1,57 @@
+From 7ac8ff95f48cbfa609a060fd6a1e361dd62feeb3 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Sun, 11 Feb 2018 18:10:28 -0500
+Subject: mvpp2: fix multicast address filter
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 7ac8ff95f48cbfa609a060fd6a1e361dd62feeb3 upstream.
+
+IPv6 doesn't work on the MacchiatoBIN board. It is caused by broken
+multicast address filter in the mvpp2 driver.
+
+The driver loads doesn't load any multicast entries if "allmulti" is not
+set. This condition should be reversed.
+
+The condition !netdev_mc_empty(dev) is useless (because
+netdev_for_each_mc_addr is nop if the list is empty).
+
+This patch also fixes a possible overflow of the multicast list - if
+mvpp2_prs_mac_da_accept fails, we set the allmulti flag and retry.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/marvell/mvpp2.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mvpp2.c
++++ b/drivers/net/ethernet/marvell/mvpp2.c
+@@ -5666,6 +5666,7 @@ static void mvpp2_set_rx_mode(struct net
+       int id = port->id;
+       bool allmulti = dev->flags & IFF_ALLMULTI;
++retry:
+       mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
+       mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
+       mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
+@@ -5673,9 +5674,13 @@ static void mvpp2_set_rx_mode(struct net
+       /* Remove all port->id's mcast enries */
+       mvpp2_prs_mcast_del_all(priv, id);
+-      if (allmulti && !netdev_mc_empty(dev)) {
+-              netdev_for_each_mc_addr(ha, dev)
+-                      mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
++      if (!allmulti) {
++              netdev_for_each_mc_addr(ha, dev) {
++                      if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
++                              allmulti = true;
++                              goto retry;
++                      }
++              }
+       }
+ }
diff --git a/queue-4.4/rtlwifi-rtl8821ae-fix-connection-lost-problem-correctly.patch b/queue-4.4/rtlwifi-rtl8821ae-fix-connection-lost-problem-correctly.patch
new file mode 100644 (file)
index 0000000..9f52053
--- /dev/null
@@ -0,0 +1,70 @@
+From c713fb071edc0efc01a955f65a006b0e1795d2eb Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Mon, 5 Feb 2018 12:38:11 -0600
+Subject: rtlwifi: rtl8821ae: Fix connection lost problem correctly
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit c713fb071edc0efc01a955f65a006b0e1795d2eb upstream.
+
+There has been a coding error in rtl8821ae since it was first introduced,
+namely that an 8-bit register was read using a 16-bit read in
+_rtl8821ae_dbi_read(). This error was fixed with commit 40b368af4b75
+("rtlwifi: Fix alignment issues"); however, this change led to
+instability in the connection. To restore stability, this change
+was reverted in commit b8b8b16352cd ("rtlwifi: rtl8821ae: Fix connection
+lost problem").
+
+Unfortunately, the unaligned access causes machine checks in ARM
+architecture, and we were finally forced to find the actual cause of the
+problem on x86 platforms. Following a suggestion from Pkshih
+<pkshih@realtek.com>, it was found that increasing the ASPM L1
+latency from 0 to 7 fixed the instability. This parameter was varied to
+see if a smaller value would work; however, it appears that 7 is the
+safest value. A new symbol is defined for this quantity, thus it can be
+easily changed if necessary.
+
+Fixes: b8b8b16352cd ("rtlwifi: rtl8821ae: Fix connection lost problem")
+Cc: Stable <stable@vger.kernel.org> # 4.14+
+Fix-suggested-by: Pkshih <pkshih@realtek.com>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Tested-by: James Cameron <quozl@laptop.org>  # x86_64 OLPC NL3
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c |    5 +++--
+ drivers/net/wireless/realtek/rtlwifi/wifi.h         |    1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
+@@ -1127,7 +1127,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl
+       }
+       if (0 == tmp) {
+               read_addr = REG_DBI_RDATA + addr % 4;
+-              ret = rtl_read_word(rtlpriv, read_addr);
++              ret = rtl_read_byte(rtlpriv, read_addr);
+       }
+       return ret;
+ }
+@@ -1169,7 +1169,8 @@ static void _rtl8821ae_enable_aspm_back_
+       }
+       tmp = _rtl8821ae_dbi_read(rtlpriv, 0x70f);
+-      _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7));
++      _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7) |
++                           ASPM_L1_LATENCY << 3);
+       tmp = _rtl8821ae_dbi_read(rtlpriv, 0x719);
+       _rtl8821ae_dbi_write(rtlpriv, 0x719, tmp | BIT(3) | BIT(4));
+--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
+@@ -99,6 +99,7 @@
+ #define RTL_USB_MAX_RX_COUNT                  100
+ #define QBSS_LOAD_SIZE                                5
+ #define MAX_WMMELE_LENGTH                     64
++#define ASPM_L1_LATENCY                               7
+ #define TOTAL_CAM_ENTRY                               32
index d1abfa7a51fb5a9b2b8e761f9716468fb08b47fb..7ae85faa58bcfcc02b235f699459c5a4572bffb9 100644 (file)
@@ -15,3 +15,13 @@ ext4-correct-documentation-for-grpid-mount-option.patch
 mm-hide-a-warning-for-compile_test.patch
 video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch
 console-dummy-leave-.con_font_get-set-to-null.patch
+rtlwifi-rtl8821ae-fix-connection-lost-problem-correctly.patch
+btrfs-fix-deadlock-in-run_delalloc_nocow.patch
+btrfs-fix-crash-due-to-not-cleaning-up-tree-log-block-s-dirty-bits.patch
+btrfs-fix-unexpected-eexist-when-creating-new-inode.patch
+alsa-hda-fix-headset-mic-detection-problem-for-two-dell-machines.patch
+alsa-usb-audio-fix-uac2-get_ctl-request-with-a-range-attribute.patch
+alsa-hda-realtek-pci-quirk-for-fujitsu-u7x7.patch
+alsa-usb-audio-add-implicit-fb-quirk-for-behringer-ufx1204.patch
+alsa-seq-fix-racy-pool-initializations.patch
+mvpp2-fix-multicast-address-filter.patch