--- /dev/null
+From e9097e47e349b747dee50f935216de0ffb662962 Mon Sep 17 00:00:00 2001
+From: Geoffrey Allott <geoffrey@allott.email>
+Date: Thu, 19 Mar 2020 14:00:48 +0000
+Subject: ALSA: hda/ca0132 - Add Recon3Di quirk to handle integrated sound on EVGA X99 Classified motherboard
+
+From: Geoffrey Allott <geoffrey@allott.email>
+
+commit e9097e47e349b747dee50f935216de0ffb662962 upstream.
+
+I have a system which has an EVGA X99 Classified motherboard. The pin
+assignments for the HD Audio controller are not correct under Linux.
+Windows 10 works fine and informs me that it's using the Recon3Di
+driver, and on Linux, `cat
+/sys/class/sound/card0/device/subsystem_{vendor,device}` yields
+
+0x3842
+0x1038
+
+This patch adds a corresponding entry to the quirk list.
+
+Signed-off-by: Geoffrey Allott <geoffrey@allott.email>
+Cc: <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/a6cd56b678c00ce2db3685e4278919f2584f8244.camel@allott.email
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_ca0132.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_ca0132.c
++++ b/sound/pci/hda/patch_ca0132.c
+@@ -1180,6 +1180,7 @@ static const struct snd_pci_quirk ca0132
+ SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI),
+ SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI),
+ SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI),
++ SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI),
+ SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D),
+ SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5),
+ {}
--- /dev/null
+From 120c9257f5f19e5d1e87efcbb5531b7cd81b7d74 Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Thu, 2 Apr 2020 19:36:26 -0400
+Subject: Revert "dm: always call blk_queue_split() in dm_process_bio()"
+
+From: Mike Snitzer <snitzer@redhat.com>
+
+commit 120c9257f5f19e5d1e87efcbb5531b7cd81b7d74 upstream.
+
+This reverts commit effd58c95f277744f75d6e08819ac859dbcbd351.
+
+blk_queue_split() is causing excessive IO splitting -- because
+blk_max_size_offset() depends on 'chunk_sectors' limit being set and
+if it isn't (as is the case for DM targets!) it falls back to
+splitting on a 'max_sectors' boundary regardless of offset.
+
+"Fix" this by reverting back to _not_ using blk_queue_split() in
+dm_process_bio() for normal IO (reads and writes). Long-term fix is
+still TBD but it should focus on training blk_max_size_offset() to
+call into a DM provided hook (to call DM's max_io_len()).
+
+Test results from simple misaligned IO test on 4-way dm-striped device
+with chunksize of 128K and stripesize of 512K:
+
+xfs_io -d -c 'pread -b 2m 224s 4072s' /dev/mapper/stripe_dev
+
+before this revert:
+
+253,0 21 1 0.000000000 2206 Q R 224 + 4072 [xfs_io]
+253,0 21 2 0.000008267 2206 X R 224 / 480 [xfs_io]
+253,0 21 3 0.000010530 2206 X R 224 / 256 [xfs_io]
+253,0 21 4 0.000027022 2206 X R 480 / 736 [xfs_io]
+253,0 21 5 0.000028751 2206 X R 480 / 512 [xfs_io]
+253,0 21 6 0.000033323 2206 X R 736 / 992 [xfs_io]
+253,0 21 7 0.000035130 2206 X R 736 / 768 [xfs_io]
+253,0 21 8 0.000039146 2206 X R 992 / 1248 [xfs_io]
+253,0 21 9 0.000040734 2206 X R 992 / 1024 [xfs_io]
+253,0 21 10 0.000044694 2206 X R 1248 / 1504 [xfs_io]
+253,0 21 11 0.000046422 2206 X R 1248 / 1280 [xfs_io]
+253,0 21 12 0.000050376 2206 X R 1504 / 1760 [xfs_io]
+253,0 21 13 0.000051974 2206 X R 1504 / 1536 [xfs_io]
+253,0 21 14 0.000055881 2206 X R 1760 / 2016 [xfs_io]
+253,0 21 15 0.000057462 2206 X R 1760 / 1792 [xfs_io]
+253,0 21 16 0.000060999 2206 X R 2016 / 2272 [xfs_io]
+253,0 21 17 0.000062489 2206 X R 2016 / 2048 [xfs_io]
+253,0 21 18 0.000066133 2206 X R 2272 / 2528 [xfs_io]
+253,0 21 19 0.000067507 2206 X R 2272 / 2304 [xfs_io]
+253,0 21 20 0.000071136 2206 X R 2528 / 2784 [xfs_io]
+253,0 21 21 0.000072764 2206 X R 2528 / 2560 [xfs_io]
+253,0 21 22 0.000076185 2206 X R 2784 / 3040 [xfs_io]
+253,0 21 23 0.000077486 2206 X R 2784 / 2816 [xfs_io]
+253,0 21 24 0.000080885 2206 X R 3040 / 3296 [xfs_io]
+253,0 21 25 0.000082316 2206 X R 3040 / 3072 [xfs_io]
+253,0 21 26 0.000085788 2206 X R 3296 / 3552 [xfs_io]
+253,0 21 27 0.000087096 2206 X R 3296 / 3328 [xfs_io]
+253,0 21 28 0.000093469 2206 X R 3552 / 3808 [xfs_io]
+253,0 21 29 0.000095186 2206 X R 3552 / 3584 [xfs_io]
+253,0 21 30 0.000099228 2206 X R 3808 / 4064 [xfs_io]
+253,0 21 31 0.000101062 2206 X R 3808 / 3840 [xfs_io]
+253,0 21 32 0.000104956 2206 X R 4064 / 4096 [xfs_io]
+253,0 21 33 0.001138823 0 C R 4096 + 200 [0]
+
+after this revert:
+
+253,0 18 1 0.000000000 4430 Q R 224 + 3896 [xfs_io]
+253,0 18 2 0.000018359 4430 X R 224 / 256 [xfs_io]
+253,0 18 3 0.000028898 4430 X R 256 / 512 [xfs_io]
+253,0 18 4 0.000033535 4430 X R 512 / 768 [xfs_io]
+253,0 18 5 0.000065684 4430 X R 768 / 1024 [xfs_io]
+253,0 18 6 0.000091695 4430 X R 1024 / 1280 [xfs_io]
+253,0 18 7 0.000098494 4430 X R 1280 / 1536 [xfs_io]
+253,0 18 8 0.000114069 4430 X R 1536 / 1792 [xfs_io]
+253,0 18 9 0.000129483 4430 X R 1792 / 2048 [xfs_io]
+253,0 18 10 0.000136759 4430 X R 2048 / 2304 [xfs_io]
+253,0 18 11 0.000152412 4430 X R 2304 / 2560 [xfs_io]
+253,0 18 12 0.000160758 4430 X R 2560 / 2816 [xfs_io]
+253,0 18 13 0.000183385 4430 X R 2816 / 3072 [xfs_io]
+253,0 18 14 0.000190797 4430 X R 3072 / 3328 [xfs_io]
+253,0 18 15 0.000197667 4430 X R 3328 / 3584 [xfs_io]
+253,0 18 16 0.000218751 4430 X R 3584 / 3840 [xfs_io]
+253,0 18 17 0.000226005 4430 X R 3840 / 4096 [xfs_io]
+253,0 18 18 0.000250404 4430 Q R 4120 + 176 [xfs_io]
+253,0 18 19 0.000847708 0 C R 4096 + 24 [0]
+253,0 18 20 0.000855783 0 C R 4120 + 176 [0]
+
+Fixes: effd58c95f27774 ("dm: always call blk_queue_split() in dm_process_bio()")
+Cc: stable@vger.kernel.org
+Reported-by: Andreas Gruenbacher <agruenba@redhat.com>
+Tested-by: Barry Marson <bmarson@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/dm.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/md/dm.c
++++ b/drivers/md/dm.c
+@@ -1739,8 +1739,9 @@ static blk_qc_t dm_process_bio(struct ma
+ * won't be imposed.
+ */
+ if (current->bio_list) {
+- blk_queue_split(md->queue, &bio);
+- if (!is_abnormal_io(bio))
++ if (is_abnormal_io(bio))
++ blk_queue_split(md->queue, &bio);
++ else
+ dm_queue_split(md, ti, &bio);
+ }
+