From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 12/17] drm/i915: Always use the scatterlists if available for GTT insertion Date: Sat, 21 Apr 2012 17:35:56 +0100 Message-ID: <1335026161-15054-13-git-send-email-chris@chris-wilson.co.uk> References: <1335026161-15054-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from fireflyinternet.com (smtp.fireflyinternet.com [109.228.6.236]) by gabe.freedesktop.org (Postfix) with ESMTP id 7E3079E8B8 for ; Sat, 21 Apr 2012 09:36:47 -0700 (PDT) In-Reply-To: <1335026161-15054-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org If we have created a scatterlist for the physical mapping of the object, simply use it. This facilitates the later insertion of stolen objects into the GATT which are not backed by struct page. Signed-off-by: Chris Wilson --- drivers/gpu/drm/i915/i915_gem_gtt.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index b0c20a5..7afd631 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c @@ -249,8 +249,6 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt, struct drm_i915_gem_object *obj, enum i915_cache_level cache_level) { - struct drm_device *dev = obj->base.dev; - struct drm_i915_private *dev_priv = dev->dev_private; uint32_t pte_flags = GEN6_PTE_VALID; switch (cache_level) { @@ -267,20 +265,20 @@ void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt, BUG(); } - if (dev_priv->mm.gtt->needs_dmar) { - BUG_ON(!obj->sg_list); - + if (obj->sg_list) { i915_ppgtt_insert_sg_entries(ppgtt, obj->sg_list, obj->num_sg, obj->gtt_space->start >> PAGE_SHIFT, pte_flags); - } else + } else { + BUG_ON(!obj->pages); i915_ppgtt_insert_pages(ppgtt, obj->gtt_space->start >> PAGE_SHIFT, obj->base.size >> PAGE_SHIFT, obj->pages, pte_flags); + } } void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt, @@ -368,21 +366,20 @@ void i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj, enum i915_cache_level cache_level) { struct drm_device *dev = obj->base.dev; - struct drm_i915_private *dev_priv = dev->dev_private; unsigned int agp_type = cache_level_to_agp_type(dev, cache_level); - if (dev_priv->mm.gtt->needs_dmar) { - BUG_ON(!obj->sg_list); - + if (obj->sg_list) { intel_gtt_insert_sg_entries(obj->sg_list, obj->num_sg, obj->gtt_space->start >> PAGE_SHIFT, agp_type); - } else + } else { + BUG_ON(!obj->pages); intel_gtt_insert_pages(obj->gtt_space->start >> PAGE_SHIFT, obj->base.size >> PAGE_SHIFT, obj->pages, agp_type); + } obj->has_global_gtt_mapping = 1; } -- 1.7.10