From patchwork Thu Apr 2 15:30:19 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 6150041 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 46E9EBF4A7 for ; Thu, 2 Apr 2015 15:32:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7EA94203B5 for ; Thu, 2 Apr 2015 15:32:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 8FDB3203B0 for ; Thu, 2 Apr 2015 15:32:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 17CD96EA51; Thu, 2 Apr 2015 08:31:12 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [92.198.50.35]) by gabe.freedesktop.org (Postfix) with ESMTP id 836AB6EA69 for ; Thu, 2 Apr 2015 08:31:00 -0700 (PDT) Received: from dude.hi.4.pengutronix.de ([10.1.0.7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1Ydh59-0005OD-RW; Thu, 02 Apr 2015 17:30:59 +0200 From: Lucas Stach To: dri-devel@lists.freedesktop.org Subject: [PATCH RFC 077/111] staging: etnaviv: fix event allocation failure path Date: Thu, 2 Apr 2015 17:30:19 +0200 Message-Id: <1427988653-754-78-git-send-email-l.stach@pengutronix.de> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1427988653-754-1-git-send-email-l.stach@pengutronix.de> References: <1427988653-754-1-git-send-email-l.stach@pengutronix.de> X-SA-Exim-Connect-IP: 10.1.0.7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: dri-devel@lists.freedesktop.org Cc: Russell King , kernel@pengutronix.de X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Russell King If we fail to allocate an event, we leave the submitted fence number incremented. This can cause an already running hangcheck timer to believe that we should be waiting for further events when no event has actually been queued. Resolve this by moving the fence allocation (which can never fail) after the event allocation. Signed-off-by: Russell King --- drivers/staging/etnaviv/etnaviv_gpu.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/staging/etnaviv/etnaviv_gpu.c b/drivers/staging/etnaviv/etnaviv_gpu.c index 2ed8de8c522a..ffecce5236f9 100644 --- a/drivers/staging/etnaviv/etnaviv_gpu.c +++ b/drivers/staging/etnaviv/etnaviv_gpu.c @@ -890,13 +890,8 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu, { struct drm_device *dev = gpu->drm; struct etnaviv_drm_private *priv = dev->dev_private; - int ret = 0; unsigned int event, i; - submit->fence = ++priv->next_fence; - - gpu->submitted_fence = submit->fence; - /* * TODO * @@ -909,10 +904,13 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu, event = event_alloc(gpu); if (unlikely(event == ~0U)) { DRM_ERROR("no free event\n"); - ret = -EBUSY; - goto fail; + return -EBUSY; } + submit->fence = ++priv->next_fence; + + gpu->submitted_fence = submit->fence; + etnaviv_buffer_queue(gpu, event, submit); priv->lastctx = ctx; @@ -942,8 +940,7 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu, } hangcheck_timer_reset(gpu); -fail: - return ret; + return 0; } /*