From patchwork Fri May 4 13:37:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 908723 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YsSWKu7V"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40ctNT4FLYz9s3Z for ; Fri, 4 May 2018 23:37:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751278AbeEDNhN (ORCPT ); Fri, 4 May 2018 09:37:13 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:40252 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751114AbeEDNhM (ORCPT ); Fri, 4 May 2018 09:37:12 -0400 Received: by mail-wr0-f195.google.com with SMTP id v60-v6so21130014wrc.7 for ; Fri, 04 May 2018 06:37:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AaztEHFoua1YK5uEuI2uMS3uuUXQ2mvEFJX9k2N5OSI=; b=YsSWKu7VjuSz7/CWmdt8pRjs952IM05piVPgt8kVBF6wThrK/kSuwHFZJPDI1dsubd CIHKk37d0njrwnKJWHjVIpqglhKOthbfiMiqVzKxgrhNvm5ZuxVqXD0YDdI4mQU33G33 olnyrP1MwkD/qtP6W8oX5EeaNRvXykJAUrukQPIvTHYuZ08jemqihzSfh9+tJOOYkoLU yFfzC4gtHPNKMcP388tMxJ2KvSngmzww79GmQTtbjLjTiNEDt3GiwcN/jXmMOUY7aIMk jk58RmqbseoP/M3ZqYewpEbdjH0Eo1x+K0+z3osYWADx+dqcxCqO9nmyQbPaBEX7PBgO RIqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AaztEHFoua1YK5uEuI2uMS3uuUXQ2mvEFJX9k2N5OSI=; b=VsJyYsyf7EKsPmcg6Tsa6OvU2CklUZDSnhJExgLAsgRqhWM1valR9kpxugJwknem+6 f6VSSnI7X09YvjVytrgwrsRFqWev5cI1fQgyPjHI/netmPLDEspVXV7YTJ3OnrA9llh1 Oy3K3eTuUwQS7E0jmuafpPlE/9zRtnSiraAg8hXfRbgl4Yq5oAEqxkUCGmetPS3qUsQp DD9l2xa+SgDp+/OPeBWjxlhgmmavYuf5pVf/0HqUXZf/AkQWVogcNPSj1O6pGUtmTokB wQqXg4vnFU8Fuid070SzkCEGwGZAA3XC8TMRnN/bcQZBEMBnmfRZ8JFIARRSWs2pjmg7 lkZg== X-Gm-Message-State: ALQs6tDnjWFOtEEXPHepTL6vwJKJeJ3jJHskfGlZmJMYkEzb+Yp9r27f vny0kP09P3oNjwRA+tkK6+8= X-Google-Smtp-Source: AB8JxZpiNSTfprMP/6A7bJOL0GE4n5ORsVf4GI0izOX3YfuGQzyVkpO4iRsk/qcFzUI+JbY7HMei2A== X-Received: by 2002:adf:d0cb:: with SMTP id z11-v6mr19768234wrh.281.1525441031410; Fri, 04 May 2018 06:37:11 -0700 (PDT) Received: from localhost (p200300E41F041C0032947E635CB49D15.dip0.t-ipconnect.de. [2003:e4:1f04:1c00:3294:7e63:5cb4:9d15]) by smtp.gmail.com with ESMTPSA id 109-v6sm16708152wra.32.2018.05.04.06.37.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 04 May 2018 06:37:10 -0700 (PDT) From: Thierry Reding To: Thierry Reding Cc: Dmitry Osipenko , linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 2/4] drm/tegra: gr2d: Properly clean up resources Date: Fri, 4 May 2018 15:37:05 +0200 Message-Id: <20180504133707.22451-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180504133707.22451-1-thierry.reding@gmail.com> References: <20180504133707.22451-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Failure to register the Tegra DRM client would leak the resources. Move cleanup code to error unwinding gotos to fix that and share the cleanup code with the other error paths. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko --- drivers/gpu/drm/tegra/gr2d.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/tegra/gr2d.c b/drivers/gpu/drm/tegra/gr2d.c index 8eb530a85dd0..0b42e99da8ad 100644 --- a/drivers/gpu/drm/tegra/gr2d.c +++ b/drivers/gpu/drm/tegra/gr2d.c @@ -42,8 +42,9 @@ static int gr2d_init(struct host1x_client *client) client->syncpts[0] = host1x_syncpt_request(client, flags); if (!client->syncpts[0]) { - host1x_channel_put(gr2d->channel); - return -ENOMEM; + err = -ENOMEM; + dev_err(client->dev, "failed to request syncpoint: %d\n", err); + goto put; } if (tegra->domain) { @@ -55,15 +56,30 @@ static int gr2d_init(struct host1x_client *client) dev_err(client->dev, "failed to attach to domain: %d\n", err); - host1x_syncpt_free(client->syncpts[0]); - host1x_channel_put(gr2d->channel); iommu_group_put(gr2d->group); - return err; + goto free; } } } - return tegra_drm_register_client(tegra, drm); + err = tegra_drm_register_client(tegra, drm); + if (err < 0) { + dev_err(client->dev, "failed to register client: %d\n", err); + goto detach; + } + + return 0; + +detach: + if (gr2d->group) { + iommu_detach_group(tegra->domain, gr2d->group); + iommu_group_put(gr2d->group); + } +free: + host1x_syncpt_free(client->syncpts[0]); +put: + host1x_channel_put(gr2d->channel); + return err; } static int gr2d_exit(struct host1x_client *client)