--- /dev/null
+From 7d5553147613b50149238ac1385c60e5c7cacb34 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Wed, 16 Sep 2020 10:00:58 +0100
+Subject: drm/i915: Break up error capture compression loops with cond_resched()
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit 7d5553147613b50149238ac1385c60e5c7cacb34 upstream.
+
+As the error capture will compress user buffers as directed to by the
+user, it can take an arbitrary amount of time and space. Break up the
+compression loops with a call to cond_resched(), that will allow other
+processes to schedule (avoiding the soft lockups) and also serve as a
+warning should we try to make this loop atomic in the future.
+
+Testcase: igt/gem_exec_capture/many-*
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200916090059.3189-2-chris@chris-wilson.co.uk
+(cherry picked from commit 293f43c80c0027ff9299036c24218ac705ce584e)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/i915_gpu_error.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_gpu_error.c
++++ b/drivers/gpu/drm/i915/i915_gpu_error.c
+@@ -268,6 +268,8 @@ static int compress_page(struct compress
+
+ if (zlib_deflate(zstream, Z_NO_FLUSH) != Z_OK)
+ return -EIO;
++
++ cond_resched();
+ } while (zstream->avail_in);
+
+ /* Fallback to uncompressed if we increase size? */
+@@ -347,6 +349,7 @@ static int compress_page(struct compress
+ if (!i915_memcpy_from_wc(ptr, src, PAGE_SIZE))
+ memcpy(ptr, src, PAGE_SIZE);
+ dst->pages[dst->page_count++] = ptr;
++ cond_resched();
+
+ return 0;
+ }