From patchwork Mon Apr 23 06:57:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 902792 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="rnQj1O/N"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Ty2l4gnPz9s16 for ; Mon, 23 Apr 2018 16:57:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753005AbeDWG5v (ORCPT ); Mon, 23 Apr 2018 02:57:51 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:45262 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751693AbeDWG5u (ORCPT ); Mon, 23 Apr 2018 02:57:50 -0400 Received: by mail-wr0-f195.google.com with SMTP id p5-v6so10189353wre.12 for ; Sun, 22 Apr 2018 23:57:49 -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=ME/6bow10ZG6XxX0f5KS+P5hfA0BEAE4RMXTRtf9iBE=; b=rnQj1O/NTsnAhsA22N2DhYDKoPwbxNWPj3jfjFMpFN5EgX4x0Yjo29yGMWezL7YZdc Hj0/EIDBNZr4IaLrlY8hOdJqzRGVfI1nNSXr3ulA/Mq+KAdkFmwrdCUbEoLnZdAXChlC 3Y/brS+heVhkX4AHWGxtp0EO5EscFVpmw9Mj+AE6ijC8HN/ZTkzXqcnb80H56gpWRMLN Q9WiIefEq2e1teBYgdODM9WLacJTT5Z74GEzO3GOJlU58FDlVejYveTRYHxXrUu66dWk QrWbUDDgQ7CQsYMSInbdpCg5D1RCPzwmRHlN6sBKbxryi7nBGjw+0e5dFykV/Bqa1IZ7 rbZw== 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=ME/6bow10ZG6XxX0f5KS+P5hfA0BEAE4RMXTRtf9iBE=; b=Ji6BxV/iavLR+DzmCbr1Ho3oaX68sYADpHqsJPjyIfsIEEHiKF3hKD37HU4Dt7HFMW hx0H8wudRpvditciOiBFu5EkoggKbFx1I0VxblApQny5Dakxfa4rRb3beVsvQ7yImERy KvQsXmf5Dd/fleBgP9j95xh24vy2QXp4HnyF3WTsNTCg26LtF1miV2HsMA14aRPX6JAn /9OABh25W/F8F4u+mAmc13ouuDQRB+dxmn0rk84odbmmbZOxuqMJR3Uy53/RBA1BuB4K 62QIP2optkYufaUYBls0QjxG/gQr5eveAA1qxWobC0JV7N+yJX4mUHz1kL+hssMqVVAV IFSQ== X-Gm-Message-State: ALQs6tDKwGkhLbQiV0jMVb8y3HD5xPPkguuOXsgAzPX1dAlX1z8Uw2Il 0k0o2OsUWwCusdMAly36tAQ= X-Google-Smtp-Source: AIpwx4/1QjEXHTjmvXZxodNESxnDPl/TpM1mamZAsPawj5YmTktGqAFsQxBPyN87kE9kqvDW3/z2ow== X-Received: by 10.28.8.212 with SMTP id 203mr9160554wmi.9.1524466669092; Sun, 22 Apr 2018 23:57:49 -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 r8sm16934206wmg.44.2018.04.22.23.57.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Apr 2018 23:57:48 -0700 (PDT) From: Thierry Reding To: Thierry Reding Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, Mikko Perttunen , Dmitry Osipenko Subject: [PATCH 2/2] drm/tegra: Acquire a reference to the IOVA cache Date: Mon, 23 Apr 2018 08:57:45 +0200 Message-Id: <20180423065745.26102-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180423065745.26102-1-thierry.reding@gmail.com> References: <20180423065745.26102-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 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 Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- 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(); 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); }