From patchwork Thu May 17 10:53:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10408299 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7DC2E602C2 for ; Fri, 18 May 2018 07:17:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 698A42888D for ; Fri, 18 May 2018 07:17:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5D63528891; Fri, 18 May 2018 07:17:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CE44F2888D for ; Fri, 18 May 2018 07:17:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2D2B56EC2F; Fri, 18 May 2018 07:17:27 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x242.google.com (mail-lf0-x242.google.com [IPv6:2a00:1450:4010:c07::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0623D6E7B2 for ; Thu, 17 May 2018 10:53:26 +0000 (UTC) Received: by mail-lf0-x242.google.com with SMTP id j193-v6so8057105lfg.6 for ; Thu, 17 May 2018 03:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=GV6H/Ju2hUP/xCOQPzB9xA7ykayqVMLVcGigx+9cYKk=; b=duRmZsGnbCDNUr5cE8dsjAD2we2qJdvfhtKz4rHDo6hkIf/sxFoA60d8zq5vI4z/6E a8DgCKO7yrXr6RU1MCLM9C08L8iRbtw3EpU6VNAhTDeGAG1P+O1H9ZtZyjfcZc6dsQvB mwI/Rd3Q1bpxGpb9B/EQKEIfz49aq58RhxVkCdzG8Of5JYoPkZ3QiTV9AUZveSfIuJhi uu+LKXJuDlYgTQbw0POrX5o9j8er8gejs43mReI7/YlePJTyuoKwbLtez0JJ+MRhp+yc PONSbbE71vqNXc8W4fpMjqMfkPJofjEsdw8xuA1Z//fey/5EoYOXglRl5WZhPZmkrbhd AbyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=GV6H/Ju2hUP/xCOQPzB9xA7ykayqVMLVcGigx+9cYKk=; b=lbOWQsxzzYrBVS35HWnyTf1uzXExHeqt5kTEYBWKRClaKGpVtCfSmVEAvSXdtsQVbS ZFDcGWJPensYoJSksJ/s1etU3qIOqeENSzZQyGlmdfMwOvgm9+h/0BWUUGmCUSNgEnQo Ad8UljSo43z3axaJ/OMjDERh2XF64GQPwExN9p7ysSXn8xjynK7XkaXq1QAPW2BdIq7g gkxC7i2OlQrNC+GUUSPc1MOvBMG5l7edJTZravzx/Niq0DdYZ4UIdGRJ8kM/XIPlrz7e WJ9oldAtSf8q1cw1/YHtFSKG6mb4gdpGSK462X7Dn7qvyGAhq7J/MINQRcRbDA45mcxB QFtw== X-Gm-Message-State: ALKqPwcpQCNX3nYdMFF5EoxChkATNnCkzO87KaIuqse2FesY4VwkrHtL 8K5OO6WKSWle4bkZOMtBS1Ckvaic X-Google-Smtp-Source: AB8JxZqawe6Uc3SDruvOuUsSJJ32dpPwZYzyIQTZ4lPkykmeXz+aP5EWwjUs+bD/G2FQEanSpo8Rmg== X-Received: by 2002:a2e:9616:: with SMTP id v22-v6mr2786254ljh.130.1526554405218; Thu, 17 May 2018 03:53:25 -0700 (PDT) Received: from [192.168.2.111] (109-252-91-232.nat.spd-mgts.ru. [109.252.91.232]) by smtp.googlemail.com with ESMTPSA id h23-v6sm1137341lfj.94.2018.05.17.03.53.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 May 2018 03:53:24 -0700 (PDT) Subject: Re: [PATCH 2/2] drm/tegra: Acquire a reference to the IOVA cache To: Thierry Reding References: <20180423065745.26102-1-thierry.reding@gmail.com> <20180423065745.26102-2-thierry.reding@gmail.com> From: Dmitry Osipenko Message-ID: <49971929-ddc7-0cad-bd23-125251bf0af4@gmail.com> Date: Thu, 17 May 2018 13:53:23 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180423065745.26102-2-thierry.reding@gmail.com> Content-Language: en-US X-Mailman-Approved-At: Fri, 18 May 2018 07:17:26 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, Mikko Perttunen Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP On 23.04.2018 09:57, Thierry Reding wrote: > From: Thierry Reding > > The IOVA API uses a memory cache to allocate IOVA nodes from. To make > sure that this cache is available, obtain a reference to it and release > the reference when the cache is no longer needed. > > On 64-bit ARM this is hidden by the fact that the DMA mapping API gets > that reference and never releases it. On 32-bit ARM, however, the DMA > mapping API doesn't do that, so allocation of IOVA nodes fails. > > Signed-off-by: Thierry Reding > --- > drivers/gpu/drm/tegra/drm.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c > index 4a696fa274a3..0540b0741df6 100644 > --- a/drivers/gpu/drm/tegra/drm.c > +++ b/drivers/gpu/drm/tegra/drm.c > @@ -115,6 +115,10 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) > goto free; > } > > + err = iova_cache_get(); > + if (err < 0) > + goto domain; > + > geometry = &tegra->domain->geometry; > gem_start = geometry->aperture_start; > gem_end = geometry->aperture_end - CARVEOUT_SZ; > @@ -205,11 +209,12 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) > tegra_drm_fb_free(drm); > config: > drm_mode_config_cleanup(drm); > - > +domain: > if (tegra->domain) { > mutex_destroy(&tegra->mm_lock); > drm_mm_takedown(&tegra->mm); > put_iova_domain(&tegra->carveout.domain); > + iova_cache_put(); I've spotted that this ^ is incorrect. This will put the iova_cache without getting it if iova_cache_get() failed. > iommu_domain_free(tegra->domain); > } > free: > @@ -236,6 +241,7 @@ static void tegra_drm_unload(struct drm_device *drm) > mutex_destroy(&tegra->mm_lock); > drm_mm_takedown(&tegra->mm); > put_iova_domain(&tegra->carveout.domain); > + iova_cache_put(); > iommu_domain_free(tegra->domain); > } > > Thierry, please update the patch: gem_end = geometry->aperture_end - CARVEOUT_SZ; @@ -194,8 +198,11 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) mutex_destroy(&tegra->mm_lock); drm_mm_takedown(&tegra->mm); put_iova_domain(&tegra->carveout.domain); - iommu_domain_free(tegra->domain); + iova_cache_put(); } +domain: + if (tegra->domain) + iommu_domain_free(tegra->domain); free: kfree(tegra); return err; @@ -220,6 +227,7 @@ static void tegra_drm_unload(struct drm_device *drm) mutex_destroy(&tegra->mm_lock); drm_mm_takedown(&tegra->mm); put_iova_domain(&tegra->carveout.domain); + iova_cache_put(); iommu_domain_free(tegra->domain); } diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 4a59ac4d7793..26ce98479fb6 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -98,6 +98,10 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) goto free; } + err = iova_cache_get(); + if (err < 0) + goto domain; + geometry = &tegra->domain->geometry; gem_start = geometry->aperture_start;