From patchwork Wed Apr 24 06:15:40 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Widawsky X-Patchwork-Id: 2482471 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id 487493FCA5 for ; Wed, 24 Apr 2013 06:18:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 596B3E6303 for ; Tue, 23 Apr 2013 23:18:53 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from shiva.localdomain (unknown [209.20.75.48]) by gabe.freedesktop.org (Postfix) with ESMTP id 65EDDE5C8E for ; Tue, 23 Apr 2013 23:13:23 -0700 (PDT) Received: by shiva.localdomain (Postfix, from userid 1005) id EF40988660; Wed, 24 Apr 2013 06:13:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on shiva.chad-versace.us X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, URIBL_BLOCKED autolearn=ham version=3.3.2 Received: from lundgren.kumite (c-24-21-100-90.hsd1.or.comcast.net [24.21.100.90]) by shiva.localdomain (Postfix) with ESMTPSA id 38C9C8865A; Wed, 24 Apr 2013 06:13:22 +0000 (UTC) From: Ben Widawsky To: Intel GFX Date: Tue, 23 Apr 2013 23:15:40 -0700 Message-Id: <1366784140-2670-13-git-send-email-ben@bwidawsk.net> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1366784140-2670-1-git-send-email-ben@bwidawsk.net> References: <1366784140-2670-1-git-send-email-ben@bwidawsk.net> Cc: Ben Widawsky Subject: [Intel-gfx] [PATCH 12/12] drm/i915: No contexts without ppgtt X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Going forward, every context will have its own address space. So rip off the band aid now. If contexts fail, don't do ppgtt, and vice versa. Similarly to the last patch, this is somewhat wasteful of PPGTT address space with contexts, since we're not actually utilizing the new PPGTT. Signed-off-by: Ben Widawsky --- drivers/gpu/drm/i915/i915_gem.c | 16 ++++------------ drivers/gpu/drm/i915/i915_gem_context.c | 6 ++++++ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index cb9fcfb..53192e7 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4057,7 +4057,7 @@ i915_gem_init_hw(struct drm_device *dev) int i915_gem_init(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - int ret = -ENOMEM; + int ret = -ENODEV; mutex_lock(&dev->struct_mutex); @@ -4069,8 +4069,6 @@ int i915_gem_init(struct drm_device *dev) } if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) { - struct i915_hw_ppgtt *ppgtt; - i915_gem_setup_global_gtt(dev, 0, dev_priv->gtt.mappable_end, dev_priv->gtt.total, false); i915_gem_context_init(dev); @@ -4079,15 +4077,9 @@ int i915_gem_init(struct drm_device *dev) goto ggtt_only; } - ppgtt = &dev_priv->ring[RCS].default_context->ppgtt; - - ret = i915_gem_ppgtt_init(dev, ppgtt); - if (ret) { - drm_mm_takedown(&dev_priv->mm.gtt_space); - goto ggtt_only; - } - - dev_priv->mm.aliasing_ppgtt = ppgtt; + dev_priv->mm.aliasing_ppgtt = + &dev_priv->ring[RCS].default_context->ppgtt; + ret = 0; } ggtt_only: diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index b2deddd..64f8009 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c @@ -129,6 +129,8 @@ static void do_destroy(struct i915_hw_context *ctx) if (ctx->file_priv) idr_remove(&ctx->file_priv->context_idr, ctx->id); + ctx->ppgtt.cleanup(&ctx->ppgtt); + drm_gem_object_unreference(&ctx->obj->base); kfree(ctx); } @@ -159,6 +161,10 @@ create_hw_context(struct drm_device *dev, goto err_out; } + ret = i915_gem_ppgtt_init(dev, &ctx->ppgtt); + if (ret) + goto err_out; + /* The ring associated with the context object is handled by the normal * object tracking code. We give an initial ring value simple to pass an * assertion in the context switch code.