From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5DF0C2D0A3 for ; Mon, 9 Nov 2020 13:34:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 71BCD206ED for ; Mon, 9 Nov 2020 13:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604928866; bh=Ts63tB5n7kth3lCFnmE1kyoWHTcxAecsLCOb2o5UB8c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=H2Q9ar6U6Q58Cgc0e4aJY/38XnnJGiIKLCTe4WGkW2xIUBg3+R85FbUDVvn2xN7/4 5PQbpHqS/SYOMSNkYArtEW+ZINxrmhyE/xoDd1QSX8HN6HrgX0BHk7oq2UyIINictK tT2C3Kx//HTbB/4V8KdTfPjS9hO4Z+xo6jWf4YYY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730914AbgKINFs (ORCPT ); Mon, 9 Nov 2020 08:05:48 -0500 Received: from mail.kernel.org ([198.145.29.99]:58600 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730802AbgKINFr (ORCPT ); Mon, 9 Nov 2020 08:05:47 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 99F66216C4; Mon, 9 Nov 2020 13:05:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604927146; bh=Ts63tB5n7kth3lCFnmE1kyoWHTcxAecsLCOb2o5UB8c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2fT03DC+7e7cw7H3dZrBRALM7x9ceJQ/9Xl/DZXGcFLFHvl2fCmOUryqYRf8o7Qvi ia4lQ7LfvapizXulnnIOlAkHeoJOWToibxq/XTr3vuptRrwFxU4izjCo7/dXNumI5z NnWFvoFnaN4ET5tBVT3bl/2cKa7O29vI/oCOTBWE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chris Wilson , Mika Kuoppala , Rodrigo Vivi Subject: [PATCH 4.14 01/48] drm/i915: Break up error capture compression loops with cond_resched() Date: Mon, 9 Nov 2020 13:55:10 +0100 Message-Id: <20201109125016.813639344@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201109125016.734107741@linuxfoundation.org> References: <20201109125016.734107741@linuxfoundation.org> User-Agent: quilt/0.66 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Chris Wilson 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 Cc: Mika Kuoppala Cc: stable@vger.kernel.org Reviewed-by: Mika Kuoppala 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 Signed-off-by: Greg Kroah-Hartman --- 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 @@ -231,6 +231,8 @@ static int compress_page(struct compress if (zlib_deflate(zstream, Z_SYNC_FLUSH) != Z_OK) return -EIO; + + cond_resched(); } while (zstream->avail_in); /* Fallback to uncompressed if we increase size? */ @@ -287,6 +289,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; }