Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2745668imj; Mon, 11 Feb 2019 07:52:47 -0800 (PST) X-Google-Smtp-Source: AHgI3IYfL1zPni9oQufVIJPUvFXs30epa/5T5hoEeckXmuBh31GbSXuhYgExgR73fqCWayNSZbA8 X-Received: by 2002:a62:36c1:: with SMTP id d184mr37485847pfa.242.1549900367832; Mon, 11 Feb 2019 07:52:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549900367; cv=none; d=google.com; s=arc-20160816; b=XMcP3HvbVlwzTwd+3JbE/SIPImtFnvQrGQ1yrA6m5oOIm+s9vRdvHBdyQWz8Do6ZV5 wnZIcmv1EE2fLIpogpJj5KsvhNHwD2dSQ5C/iy4qPJtEWIQG61tKwRcloIMVUfJVV9g2 JUHk3j+MRPvtz4lyfmwYZIBLbDIdCBySJXG4CuvUXFUhcd8z7NghCe40J4h2HbvkS6PL 3tLyR2qYYCYPePctVVRKpabYSW2/LsTlatL9xDJ3cMSYCb+uAeaxqGsAYddaS+Mm5I0a OHj8d9/nCoL1lYD3yaaDB+6EezkmWSxaxMON805Jwtw6Z6zWVsskLsmvV+WpG48vAuoh XdmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=q3INkvl7F/rvBMUgFUPRHaEYBstpbyVNe4crGYUVJlU=; b=zZqLGoRukEIjhaLHsslalix9COy1yv5UWTzOs6s53Bu5SezAfE6keOj+k22PZCYwy4 uv0/9IGla4RQ6Elw4qCxDP4hoWHhMUb6z1I94izuNcwdJJTJKxRACIi2tesdTr84UvQW YUbk3b13XUQnY1mkVNBlLeZ0PNBRAqGY19i4zhnLvV4824D2jD51kB4XYJVaHhxM7DWZ /8gVclX1kD76ewoMXy0pKJ9la3xhjf+EiLvrrLfvz6Qe6L6D3H2pMadnRLzH+agRbfKh np9HuwyZELNcqTcr1mZYpLmXK3nwK1EfkB1qZfFprNXvwEeL636HPoduAijoQtFI+yme S0kA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BwzW0Bxb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n10si10142005pgd.57.2019.02.11.07.52.32; Mon, 11 Feb 2019 07:52:47 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BwzW0Bxb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731680AbfBKOi3 (ORCPT + 99 others); Mon, 11 Feb 2019 09:38:29 -0500 Received: from mail.kernel.org ([198.145.29.99]:48266 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726883AbfBKOi2 (ORCPT ); Mon, 11 Feb 2019 09:38:28 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (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 EF1562081B; Mon, 11 Feb 2019 14:38:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1549895907; bh=YRo/Ln1KhBF3NyBLWhWt7iJFbV0fC7dZ+C7PK7bC9Wg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BwzW0BxbTQvncNhCdQYp5yD9hOElSCtDPOOViKirH4AuKcTZk7bkJ1pn8JcUeTAhR apF0sxPkH09IwYuNRhTGuwTNFeowVhGk8lFvIieCNkjUjxKOdfh02ZhM0PmztqT9se Y8XkovCPW7NTaOLjqO+0LW3+yeUc4zF0Sw9KI+cs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Steve Longerbeam , Philipp Zabel , Sasha Levin Subject: [PATCH 4.19 010/313] gpu: ipu-v3: image-convert: Prevent race between run and unprepare Date: Mon, 11 Feb 2019 15:14:50 +0100 Message-Id: <20190211141853.706152121@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190211141852.749630980@linuxfoundation.org> References: <20190211141852.749630980@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 819bec35c8c9706185498c9222bd244e0781ad35 ] Prevent possible race by parallel threads between ipu_image_convert_run() and ipu_image_convert_unprepare(). This involves setting ctx->aborting to true unconditionally so that no new job runs can be queued during unprepare, and holding the ctx->aborting flag until the context is freed. Note that the "normal" ipu_image_convert_abort() case (e.g. not during context unprepare) should clear the ctx->aborting flag after aborting any active run and clearing the context's pending queue. This is because it should be possible to continue to use the conversion context and queue more runs after an abort. Signed-off-by: Steve Longerbeam Tested-by: Philipp Zabel Signed-off-by: Philipp Zabel Signed-off-by: Sasha Levin --- drivers/gpu/ipu-v3/ipu-image-convert.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index f4081962784c..91653adc41cc 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c @@ -1524,7 +1524,7 @@ unlock: EXPORT_SYMBOL_GPL(ipu_image_convert_queue); /* Abort any active or pending conversions for this context */ -void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) +static void __ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) { struct ipu_image_convert_chan *chan = ctx->chan; struct ipu_image_convert_priv *priv = chan->priv; @@ -1551,7 +1551,7 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) need_abort = (run_count || active_run); - ctx->aborting = need_abort; + ctx->aborting = true; spin_unlock_irqrestore(&chan->irqlock, flags); @@ -1572,7 +1572,11 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) dev_warn(priv->ipu->dev, "%s: timeout\n", __func__); force_abort(ctx); } +} +void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) +{ + __ipu_image_convert_abort(ctx); ctx->aborting = false; } EXPORT_SYMBOL_GPL(ipu_image_convert_abort); @@ -1586,7 +1590,7 @@ void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx) bool put_res; /* make sure no runs are hanging around */ - ipu_image_convert_abort(ctx); + __ipu_image_convert_abort(ctx); dev_dbg(priv->ipu->dev, "%s: task %u: removing ctx %p\n", __func__, chan->ic_task, ctx); -- 2.19.1