--- /dev/null
+From 9e7f06c8beee304ee21b791653fefcd713f48b9a Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Tue, 10 Apr 2018 19:05:13 +0200
+Subject: swiotlb: fix unexpected swiotlb_alloc_coherent failures
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 9e7f06c8beee304ee21b791653fefcd713f48b9a upstream.
+
+The code refactoring by commit 0176adb00406 ("swiotlb: refactor coherent
+buffer allocation") made swiotlb_alloc_buffer almost always failing due
+to a thinko: namely, the function evaluates the dma_coherent_ok call
+incorrectly and dealing as if it's invalid. This ends up with weird
+errors like iwlwifi probe failure or amdgpu screen flickering.
+
+This patch corrects the logic error.
+
+Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1088658
+Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1088902
+Fixes: 0176adb00406 ("swiotlb: refactor coherent buffer allocation")
+Cc: <stable@vger.kernel.org> # v4.16+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Cc: Jean Delvare <jdelvare@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ lib/swiotlb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/swiotlb.c
++++ b/lib/swiotlb.c
+@@ -732,7 +732,7 @@ swiotlb_alloc_buffer(struct device *dev,
+ goto out_warn;
+
+ *dma_handle = swiotlb_phys_to_dma(dev, phys_addr);
+- if (dma_coherent_ok(dev, *dma_handle, size))
++ if (!dma_coherent_ok(dev, *dma_handle, size))
+ goto out_unmap;
+
+ memset(phys_to_virt(phys_addr), 0, size);